Repository navigation
Description
Before submitting
- I searched open and closed issues and did not find a report of this problem.
- I reviewed this report and removed credentials, tokens, private paths, hostnames, and other sensitive data.
Problem
In ODD work with delegation, the orchestrator loses the user's requirements on the way to its subagents, and nothing downstream recovers them. The result is a worse outcome than a single agent with the same model and the same prompt.
ODD is meant to replace SDD by removing bureaucracy while improving result quality: an organic flow where the feature document is a living log, and corrections are appended to it instead of re-running a whole process. That only works if the log and the handoffs carry the real requirements. Today they carry a paraphrase.
Observed in a controlled benchmark run (same model openai-codex/gpt-6-luna at medium, same 73-line feature prompt with 11 numbered rules, exact error strings and console examples, same hidden acceptance suite of 26 checks):
- A single vanilla agent kept the full prompt in context and passed 26/26 on the first attempt.
- gentle-pi (orchestrator + explore/worker/verify, all on the same model) never passed: 13 failing after the first attempt, 3 still failing after two rounds of user feedback.
Root cause, from the session and task records:
- Handoffs paraphrase the spec. Every worker and verify handoff was a summary of under 1.6k characters (the prompt is about 4.5k). Exact output strings, error messages, examples and one whole rule were dropped. Each re-prompt after a harness rejection got shorter (1786 -> 1542 -> 963 characters).
- The ODD feature document replaces the spec with a lossy summary. The task file held six summarized bullets, no exact strings and no examples, and it introduced a requirement that was never asked for. Workers were told to treat that file as the spec, so it overrode the user's prompt.
- Verify is not grounded in the requirements. Every verify pass only re-ran the worker's own tests and read code. It never executed the prompt's console examples, never saw the prompt, and reported "No findings" while three acceptance requirements were still unmet. It also flagged a phantom gap that came from the distorted ODD document.
- Feedback is dismissed without reproduction. When the user reported failing behaviors, the orchestrator concluded from reading code that some of them "already work" and did not run the reported example. Those were real failures (a case-insensitive filter that was case-sensitive, and two wrong error texts).
- Handoff format friction shrinks prompts. Two worker launches were rejected for a malformed
## Allowed edit surfacessection and onesubagent_continueused an invalid task id; every retry produced a shorter handoff.
Every one of the final failures traces to an exact string, example or rule that was present in the user prompt and absent from every handoff. The same model solved it when it could read the prompt.
Related: #1494 (disproportionate ODD overhead on small fixes) — that issue is about cost; this one is about losing quality.
Steps to reproduce
- Start gentle-pi with every agent routed to one small model (for example
gpt-6-lunaatmedium) on a small multi-module TypeScript CLI repository. - Give a single feature request of roughly 70 lines that contains numbered rules, exact error messages to print, and console examples of expected output.
- Let ODD create the feature document and delegate explore, worker and verify.
- Inspect the subagent task records (
gentle-agents/tasks/*.json, fieldtask.prompt) and the ODD task file. - Run the request's console examples against the result.
Synthetic fixture available on request: a ledger CLI with a "split transactions across categories" request and a hidden acceptance suite.
Expected and actual behavior
Expected
- The user's request travels verbatim (or by an explicit reference to an immutable copy) to every worker and verify handoff. Summaries may be added for orientation, never as a replacement.
- The ODD feature document copies the user's requirements verbatim, including exact strings and examples, as the source of truth; tasks and corrections are appended to that log, keeping the flow organic rather than restarting a process.
- Verify checks the change against the user's requirements: it executes the stated examples and compares exact outputs, not only the worker's own tests.
- When the user reports a failing behavior, the orchestrator reproduces it before deciding it already works.
- A rejected handoff is fixed and resent with the same content, never re-summarized shorter.
Actual
- Worker and verify receive paraphrases of under 1.6k characters; exact strings, examples and a whole rule are lost.
- The ODD document holds a lossy summary that replaces the prompt and adds an unrequested requirement.
- Verify reports "No findings" with unmet requirements.
- Reported failures are dismissed from code reading.
- With the same model and prompt, a single vanilla agent passes 26/26 at the first attempt; gentle-pi never passes.
Suggested direction, keeping ODD lightweight (no new mandatory phases or ceremony):
- Persist the original request verbatim in the feature document (or alongside it) and reference it from every handoff.
- Require handoffs to include the verbatim requirements section, with an optional short summary on top.
- Ground verify in the requirements: run the request's examples and check exact strings; report requirement-by-requirement coverage.
- On user-reported failures, reproduce first; never dismiss from inspection alone.
- On handoff rejection, repair the format without shortening the content.
gentle-pi version
4.0.0
Pi version
1.0.0
Operating system
Linux
Relevant logs or error output (optional)
worker handoff length (chars): 1786 (rejected: malformed "## Allowed edit surfaces") -> 1542 -> 963
user prompt length (chars): ~4500 (73 lines, rules 1-11, exact error strings, console examples)
verify result (final round): "No findings" (worker tests 32/32 passing)
hidden acceptance (final): 23/26 passing after 2 feedback rounds
single vanilla agent, same model and prompt: 26/26 on first attempt
Activity
Alan-TheGentleman commentedon Oct 3, 2026
Proposed design for point 1: the feature document is the spec, handoffs pass a reference
Instead of re-writing the request into each handoff, put the user's request verbatim in the ODD feature document and have every subagent read it from there. This keeps ODD organic (one file that already exists, used as the source of truth instead of as a summary) and removes the paraphrase step where requirements get lost.
Layout of
odd/tasks/<feature>.mdHandoff contract
A worker or verify handoff becomes a few lines, for example:
Rules that make it work
Cost effect
feat(odd): make the feature document the verbatim spec subagents read…
feat(agents): have OpenCode generic agents read the feature spec by r…