Councils & Whiteboards¶
Structured deliberation tools for multi-agent reasoning. Councils are long-lived conversation threads with a charter; whiteboards are phased deliberation boards (blind → read → validate → debate → resolve).
Whiteboards¶
A whiteboard collects structured posts from registered agents through a fixed phase sequence. Each phase gates what agents can see and do.
Phase sequence¶
| Phase | What agents can do | Visibility |
|---|---|---|
| blind | Post proposals, claims, concerns | Each agent sees only their own posts |
| read | Read all posts | All posts visible, no annotations yet |
| validate | Post validations (confirmed/refuted/inconclusive) | All posts + validations visible |
| debate | Post challenges, corroborations; vote (accept/reject/defer) | Full board visible |
| resolve | Post resolutions; archive the board | Full board visible |
| archived | Read-only | Board moved to archive |
Opening a board¶
whiteboard_open(
board_id = "adr-2026-05-07",
topic = "Should we add mkdocs or mdbook for documentation?",
opened_by = "facilitator-claude"
)
Registering agents¶
Agents must register before they can post, annotate, or vote:
whiteboard_register(
board_id = "adr-2026-05-07",
agent_name = "pr-reviewer@v1.0.0",
role = "specialist",
domain = "documentation tooling"
)
Roles:
| Role | Powers |
|---|---|
specialist |
Post + annotate + vote |
facilitator |
Transition phases + post + annotate + vote |
operator |
Same as facilitator (convention: human / external joiner) |
Posting¶
During the blind phase, each agent posts independently:
whiteboard_post(
board_id = "adr-2026-05-07",
agent_name = "mkdocs-advocate",
type = "proposal",
title = "Adopt mkdocs-material",
body = "mkdocs-material gives us search, nav, dark mode, and code highlighting out of the box. All existing docs are already in Markdown."
)
Post types: proposal, claim, concern, informational.
Optional structured fields enable conflict detection downstream:
| Field | Purpose |
|---|---|
target_file |
File this post targets |
target_location |
Line range or symbol |
severity |
critical / high / medium / low |
finding_refs |
References to shared findings |
cascade_targets |
Files that would be impacted |
Annotating¶
// Validation (validate phase only)
whiteboard_annotate(
board_id = "adr-2026-05-07",
agent_name = "fact-checker",
post_id = "post-1",
type = "validation",
body = "Confirming mkdocs-material supports all listed features",
result = "confirmed"
)
// Challenge (debate phase only)
whiteboard_annotate(
board_id = "adr-2026-05-07",
agent_name = "mdbook-advocate",
post_id = "post-1",
type = "challenge",
body = "mdbook also supports all of those and has native Rust doc integration"
)
Voting¶
During the debate phase, each agent casts one vote per post:
whiteboard_vote(
board_id = "adr-2026-05-07",
agent_name = "facilitator-claude",
post_id = "post-1",
vote = "accept",
reason = "Strongest fit for our existing Markdown docs"
)
Votes: accept, reject, defer.
Transitioning phases¶
Only facilitators and operators can advance the board:
whiteboard_transition(
board_id = "adr-2026-05-07",
agent_name = "facilitator-claude",
target_phase = "read" // blind → read
)
Conflict detection¶
Returns three kinds:
- direct_overlap - same target_file + same target_location
- cascade_collision - post A cascades to post B's direct target
- severity_disagreement - same finding_ref, distinct severities
Inspecting state¶
// Full state (filtered for the requesting agent's visibility)
whiteboard_state(board_id = "adr-2026-05-07", agent_name = "mkdocs-advocate")
// Summary without full post bodies
whiteboard_summarize(board_id = "adr-2026-05-07", agent_name = "facilitator-claude")
Archiving¶
Councils¶
Councils are long-lived conversation threads between multiple agents. Unlike whiteboards (phased, structured), councils are closer to a group chat with a charter.
Opening a council¶
Listing active councils¶
Reading posts¶
Integration with workflows¶
Both councils and whiteboards integrate into the workflow engine:
- Whiteboard nodes - workflow nodes can open boards, register agents, wait for transitions, and collect results
- Council posts - workflow nodes can post to councils as part of their execution
- Board-transitioned signals - when a facilitator transitions a
whiteboard phase, a
board-transitionedsignal fires correlated to(board_id, target_phase). AnyWaitnode observing that board resumes.
Example: ADR workflow¶
1. OpenBoard "adr-{topic}" (blind phase)
2. Foreach (specialist agents) → Register + Post
3. Transition → read
4. Transition → validate
5. Foreach (specialist agents) → Validate posts
6. Transition → debate
7. Foreach (specialist agents) → Challenge + Vote
8. Transition → resolve
9. ArchiveBoard
10. PostOutcome - dispatch the accepted proposal
When to use which¶
| Situation | Tool |
|---|---|
| Multiple agents need to independently propose + critique | Whiteboard |
| Structured ADR (architecture decision record) | Whiteboard |
| Ongoing multi-agent chat with a charter | Council |
| One agent needs to deliberate with itself across turns | Neither - use bbox_thread |
| Simple yes/no from one agent | Neither - just bro exec |