All steps
Two rounds, then solved
The critic objects
Parts of this pattern
- Problem Input / output
- An open problem with no known path, such as 'Why do the nightly ETL jobs fail about one night in five?'.
- Blackboard Memory
- The shared workspace of current findings, hypotheses and objections. Entries can be added, revised or removed, and every agent reads all of it.
- Control unit Router
- Reads the board each round and picks which specialists act next. It never adds findings itself.
- Log analyst Agent
- Searches the job and scheduler logs for patterns, such as when and where the failures happen.
- DB expert Agent
- Checks the database side: locks, slow queries and connection limits around the failure times.
- Network expert Agent
- Checks the network side: link saturation, DNS and other jobs competing for bandwidth.
- Critic Evaluator
- Judges whether the board holds a complete, supported answer (bMAS calls this agent the decider). If not, it posts what is missing.
- Diagnosis Input / output
- The root cause and fix, assembled by the critic from the entries on the board.
- Problem → Blackboard
- The problem is posted as the board's first entry.
Problem: nightly ETL fails about 1 night in 5 with 'connection reset'. No code changes in a month.
- Blackboard → Control unitboard
- The control unit reads the whole board before every round.
[problem] ETL fails 1 in 5... [logs] all failures at 02:00-02:10... [db] no locks or slow queries then.
- Control unit → Log analyst
- The control unit activates the log analyst, which is called with the whole board.
{"activate": ["logs", "db"], "why": "Nothing is known yet; start with when it fails and the database."}
- Control unit → DB expert
- The control unit activates the database expert.
{"activate": ["logs", "db"], "why": "Nothing is known yet; start with when it fails and the database."}
- Control unit → Network expert
- The control unit activates the network expert.
{"activate": ["net"], "why": "Failures cluster at 02:00 and the DB is clean; check the network at that time."}
- Control unit → Critic
- When the board may hold an answer, the control unit calls the critic.
{"activate": ["critic"], "why": "A cause with evidence is on the board."}
- Log analyst → Blackboardpost
- The log analyst posts its finding to the board, where everyone can build on it.
[logs] Every failure is between 02:00 and 02:10; all are 'connection reset' on the extract step.
- DB expert → Blackboard
- The database expert posts its finding to the board.
[db] No locks, slow queries or connection-limit hits between 01:50 and 02:20 on failure nights.
- Network expert → Blackboard
- The network expert posts its finding to the board.
[net] The backup job saturates the 1 Gbps link from 02:00 to 02:15 on the nights it runs a full backup.
- Critic → Blackboardnot yet
- If the board does not yet hold a supported answer, the critic posts what is missing.
{"solved": false, "objection": "The 02:00 timing is known, but nothing explains why only some nights fail."}
- Critic → Diagnosissolved
- When the board holds a supported answer, the critic assembles it and the run ends.
{"solved": true, "solution": "Full backups saturate the link at 02:00; move the ETL to 03:00 or rate-limit the backup."}
← → neighboursesc atlas
Blackboard
Also known as Blackboard architecture · Shared workspace · bMAS
Specialists read and write one shared board; each round a control unit picks who acts next, until a critic finds a solution on the board.
No single inventor · see source
Hearsay-II (CMU, c. 1971-76) was the first blackboard system, and Newell (1962) supplied the metaphor; this 1980 survey is its standard reference. Han & Zhang (CAS, 2025) adapted it to LLM agents.
Measured over one run
- Nodes
- 8. Boxes in the diagram: models, tools, stores, people and plain code.
- LLM calls
- 9. Model invocations in the first scenario: each time a model or agent node starts thinking, plus each branch it decides.
- Tool calls
- 0. Messages sent to a tool node in the first scenario.
- Steps
- 4. Steps in the first scenario, with repeated steps counted every time they run.
- Scenarios
- 2. Distinct example runs you can switch between on the diagram.
- Loop
- no. Whether the flow cycles back on itself until a condition is met.
- Parallel
- yes. Whether two or more messages are in flight at the same time.
- Branch
- yes. Whether the flow takes one path out of several, chosen at run time.
- Human in the loop
- no. Whether a person appears as a node, to approve, correct or answer.
- Autonomy
- high. How much the model decides the control flow itself, from fixed code paths (low) to open-ended (high).
- Cost
- high. Relative token spend per request.
- Latency
- high. Relative wall-clock time per request.
Counted from the first scenario's timeline when the site is built.
Problem
Some problems have no known path to a solution. “Why do the nightly ETL jobs fail about one night in five?” could be the logs, the database, the network or something nobody has thought of yet. A supervisor would need to know in advance which specialist to ask and in what order, and a fixed pipeline would check things in an order that is wrong half the time. What you want is for the right expert to step in as soon as the evidence makes their expertise relevant.
How it works
Everyone works on one shared blackboard. The problem is posted as its first entry. Each round, a control unit reads the whole board and decides which specialists should act next: often several at once, and only those whose skills fit what is on the board. Each selected specialist reads the whole board and either posts one entry (a finding or a hypothesis with evidence) or revises or retracts an existing entry that the evidence has overtaken. Specialists never message each other. The board is the only channel. Unlike a chat transcript, which only ever grows, the board is a workspace: a cleaning step removes superseded and redundant entries after each round, so it shows the current state of the problem, not its history.
In the example, the first round activates the log analyst and the DB expert. The logs show that every failure happens between 02:00 and 02:10; the database is clean at those times. With the timing known and the database ruled out, the control unit activates the network expert, who finds that a full backup saturates the link at 02:00 on some nights. The control unit then calls the critic, which judges that the board now holds a supported cause and returns the diagnosis. If the critic is called too early, it posts what is missing instead, and that objection steers the next round. (bMAS calls this agent the decider; its own critic role flags errors in individual entries.)
The idea comes from 1970s AI. In the Hearsay-II speech recognizer, independent knowledge sources watched a shared blackboard and volunteered when they could contribute, while a scheduler picked which of them ran. LLM versions usually let the control model choose directly from the board’s contents, as in the diagram.
When to use
- The solution path is unknown, and the order in which experts are needed depends on what is found.
- Many specialists can each contribute partial results that others build on.
- You want to add or remove specialists without rewriting a manager that must know each one’s skills in detail.
When to avoid
- The roles and the order are clear. A supervisor or an SOP-driven team is simpler and cheaper.
- The task is small enough for one agent with a few tools.
- You cannot afford many rounds. Each one costs a control call plus one call per selected specialist, all over a growing board.
Trade-offs
The blackboard trades efficiency for flexibility. Because the control unit chooses from the current state rather than a plan, the team adapts to surprises, and because every contribution goes through the board, and every change to it is logged, the reasoning behind the final answer is easy to audit. The costs are more rounds than a planned approach would need, a board that must be actively cleaned to stay small, and a control unit whose choices are only as good as the specialists’ one-line descriptions.
Failure modes
- Board bloat: entries pile up until they swamp the context. Run a cleaner that removes superseded and redundant entries each round, but never the problem itself.
- Wheel-spinning: the control unit keeps activating the same specialists, who repeat themselves. Tell specialists not to repeat the board, and cap the rounds.
- Premature success: the critic accepts a plausible story without evidence. Require the solution to cite specific board entries.
- Conflicting entries: two specialists post contradicting findings and nobody resolves them. Have the critic name the conflict and the control unit route it to someone who can settle it.
Build it with your AI
Paste this into Claude Code, Cursor, ChatGPT or any AI coding assistant.
Implement the Blackboard pattern in this codebase, using the LLM client and language we already use.
## Goal
Solve an open-ended problem by letting a control model pick, each round, which specialist agents read a shared blackboard and add to it, until a critic judges that the board holds a solution.
## How it works
1. Define each specialist with a name and a one-line capability, and include the critic in that list. Create the blackboard as a set of entries with ids (id, author, round, content), and post the problem as entry 1.
2. Each round, call the control model with the Control unit prompt, passing the specialist list and the board. Parse its JSON reply into a list of one to three names to activate.
3. Call each selected specialist with the Specialist prompt and the whole board. Parse its JSON reply: add a new entry, or revise or retract an existing one by id, with a reason. Specialists selected in the same round can run in parallel.
4. When the control model selects the critic, call it with the Critic prompt. If it judges the problem solved, return its solution; otherwise add its objection to the board for the next round.
5. After each round, run a cleaning step (or a cleaner specialist) that removes superseded, retracted or redundant entries, so the board stays a current picture rather than a log. Never remove the problem entry.
## Prompts
### Control unit prompt
```markdown
You are the control unit of a team of specialists who work on a shared blackboard.
<specialists>
{{specialists}}
</specialists>
<blackboard>
{{board}}
</blackboard>
Decide which specialists should act next, based on what is on the board and
what is still missing. Choose the critic when the board may already hold a solution.
Respond in JSON: {"activate": ["<name>", ...], "why": "one sentence"}
Activate between one and three specialists.
```
### Specialist prompt
```markdown
You are the {{name}}: {{capability}}.
You work with other specialists through a shared blackboard. You cannot talk
to them directly; anything you write goes on the board for all to read.
<blackboard>
{{board}}
</blackboard>
Move the problem forward from your expertise. Either add one entry (a finding,
or a hypothesis with its evidence), or revise or retract an existing entry by id
when the evidence shows it is wrong or superseded.
Do not repeat what is already on the board. Keep it under 120 words.
Respond in JSON, one of:
{"add": "..."}
{"revise": <entry id>, "content": "...", "reason": "..."}
{"retract": <entry id>, "reason": "..."}
```
### Critic prompt
```markdown
You are the critic. Decide whether the blackboard holds a complete,
well-supported solution to the problem.
<blackboard>
{{board}}
</blackboard>
Respond in JSON:
{"solved": true|false,
"best_candidate": "the best answer the board supports so far, citing entry ids",
"solution": "the solution, assembled from the board, if solved",
"objection": "what is missing or unsupported, if not solved"}
```
## Stop rule
Stop when the critic judges the problem solved, or after 8 rounds (bMAS used 4; allow more for problems that need several lines of evidence). On the cap, return the board and the critic's latest best_candidate with a status of unsolved. If the control model selects no one twice in a row, run the critic.
## Requirements
- Specialists never message each other; every contribution goes through the board, tagged with its author and round.
- Validate the control model's selection against the specialist list, and drop unknown names rather than failing the round.
- Cap the rounds with a parameter (default 8).
- Log each round: who was selected, why, and every add, revise or retract with its reason and token count.
- Add a stub-LLM test: control selects [logs, db], then [net], then [critic]; each specialist adds one entry, the cleaner removes nothing, the critic replies solved. Assert 3 rounds ran, the board holds 4 entries before the critic, and the critic's solution is returned.
Prompt templates
You are the control unit of a team of specialists who work on a shared blackboard.
<specialists>{{specialists}}</specialists>
<blackboard>{{board}}</blackboard>
Decide which specialists should act next, based on what is on the board andwhat is still missing. Choose the critic when the board may already hold a solution.Respond in JSON: {"activate": ["<name>", ...], "why": "one sentence"}Activate between one and three specialists.You are the {{name}}: {{capability}}.You work with other specialists through a shared blackboard. You cannot talkto them directly; anything you write goes on the board for all to read.
<blackboard>{{board}}</blackboard>
Move the problem forward from your expertise. Either add one entry (a finding,or a hypothesis with its evidence), or revise or retract an existing entry by idwhen the evidence shows it is wrong or superseded.Do not repeat what is already on the board. Keep it under 120 words.Respond in JSON, one of:{"add": "..."}{"revise": <entry id>, "content": "...", "reason": "..."}{"retract": <entry id>, "reason": "..."}You are the critic. Decide whether the blackboard holds a complete,well-supported solution to the problem.
<blackboard>{{board}}</blackboard>
Respond in JSON:{"solved": true|false, "best_candidate": "the best answer the board supports so far, citing entry ids", "solution": "the solution, assembled from the board, if solved", "objection": "what is missing or unsupported, if not solved"}Related patterns
Composes well with:
Sources
From the Agentic Atlas by Joran Kikke · Edit on GitHub · Suggest a correction