Skip to content

[DSP-1.3] swarm: synthesizer runs its own tool calls instead of trusting worker outputs #62

@justrach

Description

@justrach

Sub-issue of #55 (DSP-1). Found in smoke test of PR #61.

Observation

Smoke test had this synthesizer tail:

[07:59:08] synthesizer ⏵ conv=ee9b169f
[07:59:23] synthesizer ▸ Search for '.' in '*.rs' files at sdk/typescript/src
[07:59:29] synthesizer ▸ ⇉ 2 parallel tool calls (2× read)
[07:59:29] synthesizer ▸ Read
[07:59:29] synthesizer ▸ Read
[07:59:41] synthesizer ✓

The synthesizer prompt explicitly says "Do not invent facts not present in worker outputs" — but the model interpreted that as "go re-verify the worker outputs by reading the files myself", running a Search and 2× Read.

Why this matters

The whole point of swarm parallelism is to amortize work across N agents. If the synthesizer re-reads the same files the workers just read, we pay 2× the cost for the same information and undermine the swarm pattern. It also masks worker quality issues — if a worker hallucinates a file, the synthesizer silently corrects it instead of surfacing the hallucination.

Fix direction

Two paths, pick one:

A. Trust mode (recommended for thin slice): Prompt the synthesizer to ONLY use the worker outputs. Forbid tool use explicitly: "You have read-only access to the worker outputs below. Do not call any tools. If worker outputs are insufficient, return the literal string INSUFFICIENT_DATA and explain what's missing."

B. Verification mode (future): Allow synthesizer to verify but track verification tool calls separately so we can measure swarm leverage.

For this issue, ship A. B can be a flag later.

Acceptance criteria

  • Synthesizer prompt explicitly forbids tool use.
  • Smoke run shows the synthesizer making 0 tool calls (or only emits a literal INSUFFICIENT_DATA when the workers genuinely didn't gather enough).
  • Synthesizer's tool-call count is logged separately for observability.

Related

  • Future PR will scope the synthesizer's tool catalog (devswarm #374) — that's the proper enforcement. This issue is the prompt-only stand-in.

Metadata

Metadata

Assignees

No one assigned

    Labels

    severity: highSignificant impact; core functionality is impaired.type: bugSomething isn't working.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions