Run an evidence-seeking calibration roundtable to realign the plan with the North Star...
Hard stop. Evidence-based calibration. Realign to North Star.
Pattern: This skill uses the orchestrator-subagent pattern. Each phase runs in a fresh context for optimal performance. See
docs/guides/ORCHESTRATOR_SUBAGENT_PATTERN.md.
| Signal | Action |
|---|---|
| Phase completion | Run scheduled calibration |
| User says "calibrate" or "realign" | Run full protocol |
| Agents disagree on approach | Run challenge/synthesis |
| Drift detected | Ad-hoc calibration |
| User says "/calibrate" | Run full protocol |
| Tool | Purpose |
|---|---|
Read(north_star_path) |
Read North Star Card |
Read(requirements_path) |
Read REQ-/AC- specs |
Write(file_path, content) |
Write phase reports |
| Command | Purpose |
|---|---|
bd list --json |
Get all beads with status |
bd view <id> |
View specific bead |
bv --robot-summary |
Dependency overview |
bv --robot-alerts |
Check for issues |
| Command | Purpose |
|---|---|
pytest |
Run test suite |
pytest --cov |
Coverage check |
ubs --staged |
Security scan |
| Command | Purpose |
|---|---|
cass search "calibration" --robot --limit 5 |
Find past calibration decisions |
cass search "drift" --robot --days 30 |
Find recent drift incidents |
cm context "calibration for <phase>" --json |
Get learned patterns |
| Type | Example |
|---|---|
| Code | src/auth/validator.ts:42 |
| Test | npm test auth β PASS |
| Doc | URL + excerpt |
| Measurement | "Response: 150ms" |
| Discriminating test | Fails A, passes B |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CALIBRATE ORCHESTRATOR β
β - Creates session: sessions/calibrate-{timestamp}/ β
β - Manages TodoWrite state β
β - Spawns subagents with minimal context β
β - Passes report_path + summary between phases β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Coverage Agent β β Drift Agent β β Challenge Agent β
β agents/coverageβ β agents/drift β β agents/challengeβ
β Fresh context β β Fresh context β β Fresh context β
ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ
β β β
βΌ βΌ βΌ
01_coverage.md 02_drift.md 03_challenge.md
β β β
ββββββββββββββββββββββΌβββββββββββββββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β Synthesize Agentβ β Report Agent β β Final output to user
βagents/synthesizeβ β agents/report β
β Fresh context β β Fresh context β
ββββββββββ¬βββββββββ ββββββββββ¬βββββββββ
β β
04_synthesis.md 05_user_report.md
| Phase | Agent | Input | Output |
|---|---|---|---|
| 1 | agents/coverage.md |
requirements, beads | coverage gaps |
| 2 | agents/drift.md |
North Star, coverage report | drift items |
| 3 | agents/challenge.md |
coverage + drift reports | test results |
| 4 | agents/synthesize.md |
all reports | decisions + dissent |
| 5 | agents/report.md |
synthesis | user-facing report |
Tests adjudicate, not rhetoric. Pursue verifiable truth, not persuasive agreement.
Key insight (DebateCoder, 2025): "Tests are the medium of disagreement, not rhetoric." Rhetorical debate degrades outcomesβvoting alone beats extended debate (
research/003-debate-or-vote.md).
| Principle | Meaning |
|---|---|
| Tests over rhetoric | Disagreements resolved by test results, not persuasion |
| Write discriminating tests | Tests that PASS for one approach, FAIL for another |
| No compromise | Evidence decides winner; don't average opinions |
| Preserve dissent | If tests don't discriminate, present both positions to user |
| User decides when value-dependent | If the "right" answer depends on user preferences, stop and ask |
1. Create session directory:
mkdir -p sessions/calibrate-{timestamp}
2. Initialize TodoWrite with phases:
- [ ] Phase 1: Coverage Analysis
- [ ] Phase 2: Drift Detection
- [ ] Phase 3: Test-Based Challenge
- [ ] Phase 4: Synthesis
- [ ] Phase 5: User Report
3. Gather inputs:
- phase_name: The phase being calibrated
- north_star_path: Path to North Star Card
- requirements_path: Path to REQ-*/AC-* file
- beads_status: bd list --json
Spawn: agents/coverage.md
Input:
{
"phase_name": "<phase>",
"session_dir": "sessions/calibrate-{timestamp}",
"requirements_path": "PLAN/01_requirements.md",
"beads_status": "<bd list --json output>"
}
Expected output:
{
"report_path": "sessions/.../01_coverage_report.md",
"p0_coverage": "4/5 (80%)",
"gaps_summary": "1 P0 missing bead, 1 P0 missing tests"
}
Spawn: agents/drift.md
Input:
{
"phase_name": "<phase>",
"session_dir": "sessions/calibrate-{timestamp}",
"north_star_path": "PLAN/00_north_star.md",
"coverage_report_path": "<from Phase 1>"
}
Expected output:
{
"report_path": "sessions/.../02_drift_report.md",
"alignment_summary": "5/7 ALIGNED, 1 DRIFTING, 1 OFF-TRACK",
"drift_items": ["NS-1: Auth method", "NS-3: Mobile support"]
}
Spawn: agents/challenge.md
Input:
{
"session_dir": "sessions/calibrate-{timestamp}",
"coverage_report_path": "<from Phase 1>",
"drift_report_path": "<from Phase 2>"
}
Expected output:
{
"report_path": "sessions/.../03_challenge_report.md",
"verified_claims": ["NS-1 drift", "NS-3 mobile gap"],
"unresolved": ["API rate limit assumption"]
}
Spawn: agents/synthesize.md
Input:
{
"session_dir": "sessions/calibrate-{timestamp}",
"coverage_report_path": "<from Phase 1>",
"drift_report_path": "<from Phase 2>",
"challenge_report_path": "<from Phase 3>"
}
Expected output:
{
"report_path": "sessions/.../04_synthesis_report.md",
"decisions": [{"action": "Implement SSO", "priority": "P0"}],
"user_questions": ["Load test timing?"],
"preserved_dissent": ["API rate limit adequacy"]
}
Spawn: agents/report.md
Input:
{
"session_dir": "sessions/calibrate-{timestamp}",
"synthesis_report_path": "<from Phase 4>",
"north_star_path": "PLAN/00_north_star.md"
}
Expected output:
{
"report_path": "sessions/.../05_user_report.md",
"summary": {"alignment": "5/7", "blocking": 2},
"user_questions": ["Load test timing?", "bd-130 scope creep?"]
}
05_user_report.md.beads/change-log.md if decisions madeWhy subagents beat monolithic calibration:
| Monolithic | Subagent Pattern |
|---|---|
| All context in one window | Each phase gets fresh 200k |
| "Lost in middle" risk | No degradation |
| One failure corrupts all | Phases are isolated |
| ~3000 token prompt | ~500 tokens per phase |
Research backing:
research/056-multi-agent-orchestrator.md: +90.2% over single-agentresearch/004-context-length-hurts.md: Context degradation is realFor any non-trivial claim, include at least one:
| Evidence Type | Example |
|---|---|
| Code evidence | src/auth/validator.ts:42 |
| Test evidence | npm test auth β PASS |
| Doc evidence | URL + relevant excerpt |
| Measurement | "Response time: 150ms" |
| Discriminating test | Test that fails one option, passes another |
| Category | Values |
|---|---|
| Beads | SOUND / FLAWED / UNCERTAIN |
| Alignment | ALIGNED / DRIFTING / OFF-TRACK |
| Assumptions | VERIFIED / UNVERIFIED / RISKY |
| Challenges | ACCEPTED / REJECTED |
| Don't | Why |
|---|---|
| Compromise for harmony | Truth > harmony |
| Soften criticism | Clarity > comfort |
| Skip pre-work | Unprepared = unproductive |
| Force agreement | Preserve dissent |
| Argue by rhetoric | Evidence only |
| Pass full content between phases | Pass paths + summaries |
Located in .claude/templates/calibration/:
user-report.md β Final output to userbroadcast.md β Agent analysis broadcastresponse.md β Challenge responsesdecision.md β Falsifiable decisionssummary.md β Agent-to-agent summarychange-log-entry.md β Plan change recordsagents/ β Subagent definitionsdocs/guides/ORCHESTRATOR_SUBAGENT_PATTERN.md β Pattern documentationdocs/workflow/IDEATION_TO_PRODUCTION.md β Complete pipelinedocs/workflow/PROTOCOLS.md β Protocol cards