Problem Statement
The hub can't see what spokes are doing. The flow is one-way:
- Hub → Spoke: governance, issues, review comments (works — GitHub primitives)
- Spoke → Hub: nothing automated. Contributors push PRs manually, write journal entries manually, update status manually.
There's no contract for what a spoke exposes, and no tooling to read it.
v1 Scope: Spoke Contract + CLI
Two deliverables:
1. Spoke Contract Schemas
What a spoke project exposes so the hub can read it. Two files in .collab/ at the spoke repo root:
| File |
Maintained by |
Purpose |
.collab/manifest.yaml |
Human (contributor) |
Spoke identity — who am I, what hub do I report to, how to query me |
.collab/status.yaml |
Auto-generated (CLI) |
Execution snapshot — phase, test results, git state |
Full schema proposal: see comment below.
2. CLI Tooling ("blackboard")
The tool is called blackboard — it operates on blackboards at any level (spoke, hub). Generic, not tied to pai-collab.
Spoke-side commands:
| Command |
What it does |
blackboard init |
Create .collab/ directory with manifest.yaml template |
blackboard status |
Generate/update status.yaml from current repo state |
Hub-side commands:
| Command |
What it does |
blackboard pull |
Aggregate status from registered spokes |
blackboard registry |
Show all spokes and their health |
Design Principles
- Lightweight protocol between layers — only define what crosses each boundary
- Free-flowing internals — how you organize work within each layer is your choice
- The hub doesn't prescribe project structure — no mandated TASKLIST format, TELOS schema, or SOP conventions
- The tool is generic — "blackboard" operates on any blackboard, not just pai-collab
- Convention over invention — reuse Git, GitHub, YAML, existing PAI tooling
Design informed by PAI Founding Principles
This scope was arrived at by analyzing the original local blackboard proposal (#78) against PAI's 16 Founding Principles. Key principles that shaped the v1:
- Principle 6 (Code Before Prompts) — If you can solve it with a CLI, don't build a coordination protocol
- Principle 8 (UNIX Philosophy) — Do one thing well. Composable tools, not interdependent systems
- Principle 15 (Science as Meta-Loop) — Prove the spoke contract works before building agent coordination on top
Future Vision (explicitly parked)
These are valuable architectural ideas from #78 and earlier discussions. They are parked — not rejected — until v1 proves the need:
| Concept |
Source |
Why parked |
| Local agent coordination (agents.yaml, tasks.yaml) |
#78 |
Solves a future problem (multi-agent contention). Build when contention is empirically observed. |
| Token quota tracking |
#78 |
Belongs in PAI runtime, not the coordination layer (Council unanimous). |
| Task claiming protocol |
#78 |
Overengineered for 2-3 concurrent agents (Council unanimous, PAI Principle 15). |
| Progress broadcasting between agents |
#78 |
YAGNI until local blackboard exists. |
| Change awareness / diffable status |
#77 (closed) |
Additive feature after v1 — --since flag on status queries. |
| Federation (multi-hub) |
hub-spoke-protocol.md |
Design for it (manifest.yaml uses singular hub:), build later. |
What This Consolidates
| Issue |
Status |
Disposition |
| #76 (formal schema) |
Closed |
Absorbed — schema work was overscoped |
| #77 (change awareness) |
Closed |
Absorbed — additive feature after v1 |
| #78 (local blackboard) |
Open |
Valuable future architecture. Parked with PAI Principles analysis and Council debate. |
| #54 (CLI tooling) |
Open |
Implementation vehicle — feature list revised for "blackboard" tool |
Incorporating Review Feedback
From @jcfischer's review on #54:
Open Questions
exports field — Jens suggested convention-based discovery instead of explicit exports. Do we need exports in manifest.yaml, or is convention sufficient? (e.g., always look for .specflow/features.db, always look for README.md)
.collab/ vs .blackboard/ — Directory name should match the tool name. If the CLI is blackboard, should the directory be .blackboard/?
- CI integration — Should
blackboard status be runnable in GitHub Actions without PAI? (Current design: yes — the protocol is execution-context agnostic.)
Reference
Problem Statement
The hub can't see what spokes are doing. The flow is one-way:
There's no contract for what a spoke exposes, and no tooling to read it.
v1 Scope: Spoke Contract + CLI
Two deliverables:
1. Spoke Contract Schemas
What a spoke project exposes so the hub can read it. Two files in
.collab/at the spoke repo root:.collab/manifest.yaml.collab/status.yamlFull schema proposal: see comment below.
2. CLI Tooling ("blackboard")
The tool is called blackboard — it operates on blackboards at any level (spoke, hub). Generic, not tied to pai-collab.
Spoke-side commands:
blackboard init.collab/directory with manifest.yaml templateblackboard statusHub-side commands:
blackboard pullblackboard registryDesign Principles
Design informed by PAI Founding Principles
This scope was arrived at by analyzing the original local blackboard proposal (#78) against PAI's 16 Founding Principles. Key principles that shaped the v1:
Future Vision (explicitly parked)
These are valuable architectural ideas from #78 and earlier discussions. They are parked — not rejected — until v1 proves the need:
--sinceflag on status queries.hub:), build later.What This Consolidates
Incorporating Review Feedback
From @jcfischer's review on #54:
schemaVersionto manifest.yaml — included in schema proposallicensefield (SPDX identifier, per CONTRIBUTING.md) — includedexportsin favor of convention-based discoveryhowcommands to CLI feature list (post-v1)Open Questions
exportsfield — Jens suggested convention-based discovery instead of explicit exports. Do we needexportsin manifest.yaml, or is convention sufficient? (e.g., always look for.specflow/features.db, always look forREADME.md).collab/vs.blackboard/— Directory name should match the tool name. If the CLI isblackboard, should the directory be.blackboard/?blackboard statusbe runnable in GitHub Actions without PAI? (Current design: yes — the protocol is execution-context agnostic.)Reference