plugins/claude-code-expert/skills/orchestration-blackboard/SKILL.md
Shared filesystem-backed blackboard for multi-agent runs. Parallel subagents append findings for a given run-id; subsequent-round subagents read them via MCP tools without the orchestrator having to paste everything into their prompts. Use for any fan-out pattern with more than one round of deliberation.
npx skillsauth add markus41/claude orchestration-blackboardInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A filesystem-backed blackboard that makes real multi-round orchestration possible without Claude Code CLI changes.
Parallel subagents can't see each other. In one observed 7-agent council run, Rounds 2 and 3 ("cross-critique" and "consensus synthesis") had to be faked by the orchestrator reading all 7 Round-1 outputs and synthesizing in-context. Real multi-round deliberation — where Round-2 agents read Round-1 outputs and critique — was impossible without a shared store.
Two MCP tools exposed by the claude-code-expert MCP server:
cc_blackboard_append({ run_id, round, role, findings }) — append-only per triplecc_blackboard_read({ run_id, round?, role? }) — read with optional filtersAnd one resource:
cc://blackboard/<run_id> — full read as a YAML blobStorage lives at .claude/orchestration/blackboard/<run_id>/<round>-<role>.yaml, one file
per (round, role). Files are write-once; a second append for the same triple fails — rounds
are auditable and non-overwritable.
Spawn N specialists in one message with prompts that end with:
When you have your findings, call cc_blackboard_append with:
run_id: "<RUN_ID>"
round: 1
role: "<YOUR_ROLE>"
findings: <structured summary>
Each agent appends its own finding. They do not block on each other.
After all Round-1 agents complete, spawn the same specialists (or a subset) with prompts that start:
Read round-1 findings via:
cc_blackboard_read({ run_id: "<RUN_ID>", round: 1 })
Produce your round-2 critique. Focus on:
- Where you agree / disagree with other roles
- What other roles missed that your lens would catch
- What you change your mind on given their evidence
Append your round-2 result via cc_blackboard_append with round=2.
Now the orchestrator reads round 2 to drive synthesis.
Either the orchestrator does this in-context (reads the full run via the resource URI), or spawns one Opus "synthesizer" agent with access to the full blackboard.
Pick something stable and descriptive:
<yyyymmdd>-<kind>-<short-slug>
Examples:
20260417-council-scrapin-upgrades
20260417-refactor-security-pass
20260417-debug-stdio-contamination
Only [A-Za-z0-9_.-] is allowed (the tool enforces this as a path-traversal guard).
You are running a 7-agent council over target X. Run ID: 20260417-council-X.
Round 1 (parallel, all 7 agents):
<list specialist types + their scoped prompts, each ending with the append instruction>
Wait for all 7 to complete. Verify all 7 blackboard entries exist:
cc_blackboard_read({ run_id: "20260417-council-X", round: 1 })
Round 2 (parallel, same 7 roles, new prompts that START with the read):
<each prompt begins with `cc_blackboard_read(...)` and ends with `cc_blackboard_append(... round: 2 ...)`>
Round 3 (single synthesis, orchestrator in-context):
Read the full run via cc://blackboard/20260417-council-X and produce the final catalog.
| Symptom | Likely cause | Fix |
|---|---|---|
| Append raises "entry already exists" | Agent was re-invoked with the same (round, role) | Pick a distinct role (e.g., performance-2), or bump the round counter. Entries are append-only by design. |
| Read returns empty | Agents haven't written yet, or run_id mismatch | Verify the run_id string is identical across all participants. Don't derive it separately in each agent. |
| Path-traversal rejection | Non-[A-Za-z0-9_.-] char in run_id or role | Rename. The guard is there to prevent ../../../../tmp/... escape attempts. |
<run_id>/ directory after the run.commands/cc-orchestrate.md Template 11 (Blackboard Council) — the canonical multi-agent
pattern that uses this primitive.commands/cc-orchestrate.md Template 13 (Specialist Fan-Out) — the simpler pattern that
gets real multi-round capability via this skill.skills/agentic-patterns/SKILL.md — the agentic-pattern taxonomy. Blackboard is
"Supporting Pattern: Shared Working Memory".development
Enhanced plan-authoring skill with Pre-Writing context gathering, task metadata, non-TDD templates, Red Flags, telemetry, and an automated plan linter. Use when you have a spec or requirements for a multi-step task, before touching code.
tools
Documentation intelligence engine with graph-based API docs, algorithm library, and drift detection
tools
Ultraplan cloud planning — kick off a plan in the cloud from your terminal, review and revise in the browser, then execute remotely or send back to CLI
tools
--- name: mcp description: Configure MCP servers for Claude Code — stdio vs HTTP, authentication, Tools/Resources/Prompts distinction, channels (CI webhook, mobile relay, Discord bridge, fakechat), and cost of always-loaded tools. Use this skill whenever adding an MCP server, debugging connection issues, choosing between MCP Tools vs Prompts vs Resources, installing channel servers, or managing .mcp.json. Triggers on: "MCP server", "mcp config", "add Obsidian MCP", "install context7", "channels"