# Cross-Agent Patterns: Web Research Synthesis

> **Date:** 2026-01-09
> **Method:** orch web research (gemini --websearch)
> **Related:** [skills-hf1](../../.beads/) (Cross-agent epic)

## Executive Summary

Multi-agent AI coding has shifted from single "do it all" agents to **specialized agent teams** with distinct roles. Key patterns emerging in 2025-2026:

1. **Manager-Worker orchestration** - Central agent delegates to specialists
2. **Adversarial review gates** - Separate reviewer blocks completion until approved
3. **Git-as-state** - Repository is source of truth for agent coordination
4. **Machine-first issue tracking** - File-based, no API needed (tissue)
5. **Circuit breakers** - Prevent infinite loops via semantic drift detection

---

## 1. Multi-Agent Orchestration Patterns

### The "Maestro" Pattern (Centralized Orchestration)

A central Manager agent breaks down features into atomic tasks and delegates to Workers.

**Workflow:**
1. **Manager (e.g., Claude Sonnet):** Reads SPEC.md, creates plan.md
2. **Worker A (e.g., Gemini CLI):** "Scaffold database schema" - writes code, tests, reports back
3. **Worker B (e.g., OpenCode):** "Write API endpoints" - waits for A, then executes

**Tooling:** Maestro CLI orchestrates Claude Code, Codex, local LLMs via `orchestrator.md`.

### The "Inspector-Fixer" Loop (Dual-Agent)

Strict separation: one agent writes, one agent finds faults. Never switch roles.

- **Fixer (Claude Code):** Monitors `todo.md`, implements tasks, moves to `done.md`
- **Inspector (Gemini Pro):** Scans codebase, appends issues to `todo.md` (never fixes)

**Key insight:** Inspector creates work for Fixer, not the other way around.

---

## 2. Adversarial Quality Gates

### The alice/idle Pattern (emes)

From `evil-mind-evil-sword/idle` - review gate for autonomous agents.

**Mechanism:**
1. **Stop Hook:** Intercepts agent's exit/finish signal
2. **Idle State:** Forces mandatory pause before completion
3. **Alice (Reviewer):** Read-only Opus agent inspects work
4. **Blocking:** If Alice finds issues → creates tissue issues → main agent loops back
5. **Exit:** Only when Alice returns `COMPLETE`

**Critical design:** Enforcement is *external* to worker's prompt - system-level intervention.

### Red Team Pre-Commit Hook

Before commit, code passes through hostile reviewer from different model family:

```bash
git diff | llm --model o1-preview --system "You are a hostile security auditor. Block this commit if you find any logic gaps."
```

If rejected, original agent receives critique and retries.

### Test-Driven Agent Development (TDAD)

Agents forbidden from writing implementation until failing test exists:

1. Agent generates `test_feature.py`
2. System executes → asserts **FAILURE**
3. Agent generates `feature.py`
4. System executes → asserts **SUCCESS**

Prevents "placebo tests" that always pass regardless of logic.

---

## 3. Circuit Breaker Patterns

### Semantic Drift Detection

Use embedding model to check similarity of agent's thought trace:
- If last 3 thoughts are >95% similar → circuit breaks
- Forces strategy shift, not just retry

### Three-Strike Tool Rule

Same error message 3 times → inject system prompt:
> "You are stuck. You must try a different tool or approach. Do not retry the previous action."

### Budget-Based Interrupts

Replace step limits with token budgets per sub-task:
- If 50% budget burned on first step of 5-step plan → pause
- Request plan refinement or human intervention

---

## 4. State Management (Non-MCP Alternatives)

### Git-as-State

Repository is source of truth:
- **Coordination:** Agent A writes file, Agent B reads diff
- **State:** Current HEAD of branch
- **History:** Git log = immutable, replayable decision history

### jwz (Agent Messaging)

From emes - lightweight email-thread-style messaging:
- Async communication between agents
- Preserves threading for topic separation
- Doesn't confuse main context window

### The "Postbox" File Pattern

Agents share state via filesystem:
- Standard: `.ai/context.md` or `claudecode.md`
- Agents dump thought process, obstacles, decisions before signing off
- Next agent reads to "load" state

**Tooling:** Vibe Kanban - markdown board multiple agents read/write to.

### Git Worktrees for Isolation

Prevent agents overwriting each other in real-time:
- Agent A: `worktree/feature-login`
- Agent B: `worktree/refactor-db`
- Merge via PRs with standard conflict resolution

---

## 5. Machine-First Issue Tracking

### tissue (emes)

From `evil-mind-evil-sword/tissue` - headless issue tracker for agents.

**Design:**
- **File-based:** Issues stored as JSON/Markdown in `.tissue/`
- **No API:** Agents use standard file tools (read, write)
- **Git-native:** Issues version-controlled with code
- **Branch-aware:** Issue state branches with code branches

**Workflow:**
1. Alice: `tissue new --title "Memory Leak"` → `.tissue/issues/1.json`
2. Worker reads issue, fixes code
3. Worker updates JSON status to `resolved`
4. Alice verifies, merges branch (code fix + closed issue)

**Why this matters:** No desync between issue tracker and code state.

---

## 6. Sandboxing & Security

### Wasm Sandboxing (Browser-style)

Tools like Pyodide run agent-generated code in WebAssembly sandbox:
- No host OS filesystem access unless explicit
- NVIDIA uses for data visualization code

### Docker Playgrounds

Agent runs in disposable container, not user's shell:
- Commands trapped and executed in isolation
- Permission scoping: read/write only in project directory
- Read-only access to rest of system

---

## Recommended Stack (2025-2026)

Based on research, the "Golden Path" for multi-agent teams:

| Role | Tool | Notes |
|------|------|-------|
| **Orchestrator** | Maestro or custom | Manages high-level plan |
| **Primary Coder** | Claude Code | Via MCP for tool access |
| **Reviewer/QA** | Gemini Pro or Opus | "Watchful Inspector" role |
| **State** | Git + shared docs | `docs/arch.md`, worktrees |
| **Issues** | tissue or beads | File-based, git-native |
| **Messaging** | jwz | Async agent communication |

---

## Key Insights for Our Cross-Agent Work

### What Aligns With Our Direction

| Pattern | Our Equivalent | Status |
|---------|---------------|--------|
| Git-as-state | beads (.beads/ in repo) | ✅ Have |
| Machine-first issues | beads, tissue | ✅ Have |
| File-based coordination | SKILL.md, AGENTS.md | ✅ Have |
| Multi-model consensus | orch | ✅ Have |
| Adversarial review | alice pattern | 🔄 Researching |

### Gaps to Address

| Gap | Pattern to Adopt |
|-----|------------------|
| Stop hook (Claude/Gemini only) | Orchestrator-enforced gate |
| Agent messaging | Consider jwz or build on beads |
| Sandbox for research agents | Docker/Wasm or OS-level |
| Circuit breakers | Semantic drift + three-strike |

### Recommended Next Steps

1. **Prototype orchestrator pattern** - Central agent enforces review gate
2. **Evaluate jwz** - Could complement beads for transient state
3. **Implement circuit breakers** - Semantic drift detection
4. **Sandbox research** - Docker-based for research subagents

---

## Sources

- orch web research via gemini --websearch
- GitHub: evil-mind-evil-sword/idle (alice pattern)
- GitHub: evil-mind-evil-sword/tissue (machine-first issues)
- Maestro CLI documentation
- Google ADK event streams
- Anthropic MCP specification
