Skip to content

droid exec --mission performs no work and reports success (num_turns 0, zero tokens, exit 0) #2

Description

@Roderick-Clemente

droid exec --mission performs no work and reports success (num_turns 0, zero tokens, exit 0)

Summary

On droid 0.186.0, droid exec --mission short-circuits before any model call: it returns subtype: "success", is_error: false, exit code 0, with num_turns: 0, zero tokens, and zero credits. No file is touched. The same task without --mission runs normally and edits the file.

A single-variable control isolates --mission as the sole cause.

Environment

droid --version 0.186.0
OS macOS 15.7.7 (24G720)
Working dir fresh git init repo with a committed README.md
Autonomy --auto high

Reproduction

cd /tmp/mission-probe          # fresh git repo, README.md committed

# 1. plain control — works
droid exec -o json "reply ok"

# 2. single-variable control — --auto high, real edit, NO --mission — works, edits file
droid exec -o json --auto high "Add a one-line comment to README.md"

# 3. same edit WITH --mission — no-op, file untouched, still reports success
droid exec -o json --mission --auto high --model claude-opus-5 "Add a one-line comment to README.md"

Observed vs expected

Run Command (abbrev) num_turns input_tokens factory_credits file edited? exit
Control droid exec "reply ok" 1 2 9,338 n/a 0
Single-var control --auto high "Add a one-line comment…" 3 6 52,966 yes 0
Mission --mission --auto high --model claude-opus-5 "…same…" 0 0 0 no 0

Runs 2 and 3 differ only by the --mission flag — same prompt, same --auto high, same cwd, same committed repo. Run 2 edits README.md; run 3 leaves it byte-identical.

Full JSON from the mission run:

{
  "type": "result",
  "subtype": "success",
  "is_error": false,
  "duration_ms": 328,
  "num_turns": 0,
  "result": "",
  "session_id": "2befb512-7544-4b80-b11a-e47f8232f41a",
  "usage": {
    "input_tokens": 0,
    "output_tokens": 0,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0,
    "factory_credits": 0
  }
}

input_tokens: 0 is the load-bearing signal: the mission path exits before any model is called, rather than calling a model that then declines to act. That rules out prompt quality, model refusal, and permission denial — none of those can produce a zero-token run.

Ruled out

  • Empty invocation — a positional prompt was supplied and quoted above.
  • Model availability--model claude-opus-5 is the 0.186.0 default, so this is not an unresolvable/unavailable model ID.
  • Auth / model path broken — the control runs on the same machine consumed tokens and (run 2) edited the file.
  • Permission tier--auto high is the same level under which run 2 successfully edited the file.

Why the exit code matters

A run that performs no work and reports subtype: "success" / exit 0 is a silent-success failure mode. Any automation that trusts mission exit status will mark a step complete having executed nothing, and the zero-credit reading means a cost-based sanity check would not catch it either. Consumers currently have to assert on num_turns / token usage, not exit status, to detect this.

Notes

  • The per-role flags (--worker-model, --validator-model, --*-reasoning-effort) are present and documented as valid only with --mission, so the mission surface is expressible — it just does not execute on this version.
  • Raw stdout for all three runs is attached/available on request (run1-control.json, run2-autohigh-nomission.json, run3-mission.json).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions