fix: prevent agents from duplicating delegated subagent work
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -118,6 +118,8 @@ export function buildExploreSection(agents: AvailableAgent[]): string {
|
||||
|
||||
Use it as a **peer tool**, not a fallback. Fire liberally for discovery, not for files you already know.
|
||||
|
||||
**Delegation Trust Rule:** Once you fire an explore agent for a search, do **not** manually perform that same search yourself. Use direct tools only for non-overlapping work or when you intentionally skipped delegation.
|
||||
|
||||
**Use Direct Tools when:**
|
||||
${avoidWhen.map((w) => `- ${w}`).join("\n")}
|
||||
|
||||
@@ -335,6 +337,7 @@ export function buildAntiPatternsSection(): string {
|
||||
"- **Search**: Firing agents for single-line typos or obvious syntax errors",
|
||||
"- **Debugging**: Shotgun debugging, random changes",
|
||||
"- **Background Tasks**: Polling `background_output` on running tasks — end response and wait for notification",
|
||||
"- **Delegation Duplication**: Delegating exploration to explore/librarian and then manually doing the same search yourself",
|
||||
"- **Oracle**: Delivering answer without collecting Oracle results",
|
||||
]
|
||||
|
||||
@@ -470,3 +473,52 @@ export function buildUltraworkSection(
|
||||
|
||||
return lines.join("\n")
|
||||
}
|
||||
|
||||
// Anti-duplication section for agent prompts
|
||||
export function buildAntiDuplicationSection(): string {
|
||||
return `<Anti_Duplication>
|
||||
## Anti-Duplication Rule (CRITICAL)
|
||||
|
||||
Once you delegate exploration to explore/librarian agents, **DO NOT perform the same search yourself**.
|
||||
|
||||
### What this means:
|
||||
|
||||
**FORBIDDEN:**
|
||||
- After firing explore/librarian, manually grep/search for the same information
|
||||
- Re-doing the research the agents were just tasked with
|
||||
- "Just quickly checking" the same files the background agents are checking
|
||||
|
||||
**ALLOWED:**
|
||||
- Continue with **non-overlapping work** — work that doesn't depend on the delegated research
|
||||
- Work on unrelated parts of the codebase
|
||||
- Preparation work (e.g., setting up files, configs) that can proceed independently
|
||||
|
||||
### Wait for Results Properly:
|
||||
|
||||
When you need the delegated results but they're not ready:
|
||||
|
||||
1. **End your response** — do NOT continue with work that depends on those results
|
||||
2. **Wait for the completion notification** — the system will trigger your next turn
|
||||
3. **Then** collect results via \`background_output(task_id="...")\`
|
||||
4. **Do NOT** impatiently re-search the same topics while waiting
|
||||
|
||||
### Why This Matters:
|
||||
|
||||
- **Wasted tokens**: Duplicate exploration wastes your context budget
|
||||
- **Confusion**: You might contradict the agent's findings
|
||||
- **Efficiency**: The whole point of delegation is parallel throughput
|
||||
|
||||
### Example:
|
||||
|
||||
\`\`\`typescript
|
||||
// WRONG: After delegating, re-doing the search
|
||||
task(subagent_type="explore", run_in_background=true, ...)
|
||||
// Then immediately grep for the same thing yourself — FORBIDDEN
|
||||
|
||||
// CORRECT: Continue non-overlapping work
|
||||
task(subagent_type="explore", run_in_background=true, ...)
|
||||
// Work on a different, unrelated file while they search
|
||||
// End your response and wait for the notification
|
||||
\`\`\`
|
||||
</Anti_Duplication>`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user