conductor-oss/conductor · error · NonRetryableException

AGENT requires 'prompt'

Error message

AGENT requires 'prompt'

What it means

Thrown by ConductorAgentDelegate.startOrResume when starting a brand-new agent execution: executionId is null/blank AND the 'prompt' field is also blank. A new run has nothing to do without an initial prompt, so the call is rejected before it reaches conductorAgentClient.startAgent. It is a NonRetryableException, so the task fails terminally (FAILED_WITH_TERMINAL_ERROR) with no retry.

Source

Thrown at ai/src/main/java/org/conductoross/conductor/ai/agent/ConductorAgentDelegate.java:123

    }

    private ConductorAgentExecution startOrResume(Task task, ConductorAgentRequest request) {
        String executionId = StringUtils.trimToNull(request.getExecutionId());
        if (executionId != null) {
            if (StringUtils.isBlank(request.getPrompt())) {
                throw new NonRetryableException(
                        "AGENT (conductor) requires 'prompt' when resuming an execution");
            }
            conductorAgentClient.respond(
                    ConductorAgentRespondRequest.builder()
                            .executionId(executionId)
                            .body(Map.of("result", request.getPrompt()))
                            .build());
            return fromStatus(conductorAgentClient.getAgentStatus(executionId), null);
        }

        if (StringUtils.isBlank(request.getPrompt())) {
            throw new NonRetryableException("AGENT requires 'prompt'");
        }
        request.setIdempotencyKey(
                StringUtils.firstNonBlank(request.getIdempotencyKey(), idempotencyKey(task)));
        ConductorAgentStartResponse response = conductorAgentClient.startAgent(request);
        return ConductorAgentExecution.builder()
                .executionId(response.getExecutionId())
                .agentName(response.getAgentName())
                .state(ConductorAgentState.RUNNING)
                .build();
    }

    private TaskResult handlePollFailure(
            TaskResult result, ConductorAgentRequest request, String executionId, Exception error) {
        int failures =
                (int) asLong(result.getOutputData().get(ConductorAgentResults.KEY_POLL_FAILURES), 0)
                        + 1;
        result.getOutputData().put(ConductorAgentResults.KEY_POLL_FAILURES, failures);
        int maxFailures = maxPollFailures(request);

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Always supply a non-empty 'prompt' in the AGENT task input — it is mandatory for starting a run.
  2. Verify the JSONPath/variable binding for prompt resolves to real text and not null or "".
  3. If the prompt is genuinely optional in your flow, gate the AGENT task behind a decision/switch so it is only reached when text exists.

Example fix

// before
{ "name": "my-agent", "model": "gpt-4o" }
// after
{ "name": "my-agent", "model": "gpt-4o", "prompt": "${summarize.output.text}" }
Defensive patterns

Strategy: validation

Validate before calling

// Validate the AGENT start input before execution
String prompt = (String) taskInput.get("prompt");
if (prompt == null || prompt.isBlank()) {
    throw new IllegalStateException("AGENT task requires a non-blank 'prompt' input");
}

Try / catch

try {
    delegate.execute(task);
} catch (NonRetryableException e) {
    // terminal — do not retry; surface to workflow as a failed task
    log.error("AGENT start rejected: {}", e.getMessage());
    throw e;
}

Prevention

When it happens

Trigger: An AGENT task (agentType=conductor) is invoked with task input that has no 'prompt' key at all, or whose prompt is an empty string / whitespace. This is the first-invoce 'start' path — executionId is absent.

Common situations: Workflow definition references a variable for the prompt that resolves to null; the prompt was intended to come from a previous task whose output key name is misspelled; a template that conditionally omits the prompt when it should always be present.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/df34ddc31b7b921c. Report an issue: GitHub.