name: work-board description: Maintain an append-only work log (isnad-style provenance ledger) with a human control inbox (directives + receipts) and a derived Work Board UI (web or TUI) for steering, auditing, and prioritization without editing evidence.
Work Board
Goal
Use an isnad-style provenance ledger for agent work while giving a human a fast, interactive way to steer (priority/status/goal changes) without editing the ledger or reading raw chains.
Implement this as three planes:
- Evidence plane (agent-owned, append-only): ledger records of claims/actions/decisions/tests with artifacts and verification links.
- Control plane (human-owned, append-only): directives the agent must read and acknowledge (priority changes, pause/resume, requests, rejections).
- State plane (derived, overwriteable): summaries and a kanban-like board view generated from evidence + control.
We call the derived Layer 2 UI the “Board”, but it is strictly derived; it never edits the ledger.
MUST do (otherwise this skill fails)
To make $work-board actually work end-to-end, you MUST do all three:
- Implement the Work Board system in the repo: create
.isnad/and start writing the evidence/control logs (see Quick Start). - Install a wake-up hook: modify
AGENTS.md(ok to ask permission) or your harness equivalent so future sessions always re-attach to.isnad/(see Wake-up hook andreferences/bootstrap.md). - Offer (and preferably build) a Layer 2 UI: run or implement the web/TUI Board so humans can steer without reading raw logs (see Build Layer 2; for Rust, use
cargo run -p voxelle-board -- serve).
If you skip any of these, you will create workflow gaps (no persistence across wipes, no human steering surface, or no provenance), and the system becomes unreliable/useless.
Invariants
- Never edit or delete evidence-plane records; correct by appending a
supersederecord referencing prior record ids. - Never treat control-plane directives as evidence; treat them as intent/commands.
- Make the agent’s attention auditable: every directive must get a receipt record in the ledger.
- Make human steering “low-bandwidth but high-leverage”: a few directive types should cover most steering.
Quick Start (recommended workflow)
- Create a
.isnad/workspace in the target repo (ledger/control/state). - Append evidence records for every meaningful action/decision.
- Read and acknowledge directives on every turn.
- Regenerate the board view after any directive or task update.
- Offer a Layer 2 UI:
- Prefer a local web app that auto-opens a browser tab.
- Provide a TUI fallback with the same directive-writing semantics.
Use bundled scripts as a reference implementation, or reimplement in any language.
Minimal adoption mode (early repo)
If the repo is early and you want low ceremony:
- Scaffold
.isnad/. - Create 3–7 initial tasks via
open_task(control). - Fold state and open the Board view.
- Stop. Do not over-log. Only start full receipts/snapshots when real work begins.
Use this to bootstrap coordination without generating noise.
Standard operation mode (later repo)
When the system is in active use:
- Write receipts: acknowledge every new directive with
ack_directiveevidence records. - Write snapshots: when asked “what’s going on?” (or at natural checkpoints), append
snapshotevidence records per task (or global). - Keep the Board derived and disposable; keep ledger/control as the source of truth.
Wake-up hook (for context wipes)
Install a “wake-up hook” so a fresh agent session reliably:
- discovers
.isnad/ - reads pending directives
- reads the latest derived board/snapshots
- writes a
snapshotorresumeevidence record before acting
Preferred locations (pick what your harness supports):
AGENTS.md.github/copilot-instructions.md- Repo-specific agent instructions file
Use the templates in references/bootstrap.md.
Build Layer 2 (web preferred, TUI supported)
Define the contract first
Before writing UI, implement:
- File layout:
.isnad/ledger.jsonl,.isnad/control.jsonl,.isnad/state/* - Schemas: keep records/directives stable and versioned.
- Fold algorithm: deterministically derive board columns and per-task “current state”.
- Receipt protocol: guarantee the agent reads control and writes receipts in evidence.
Load details from references/spec.md and references/schemas.md.
Implement the web UI (preferred)
Implement a small local app that:
- Watches
.isnad/ledger.jsonland.isnad/control.jsonl - Shows a board view (Backlog / Next / Doing / Blocked / Done / Rejected)
- Writes directives when the human moves a card or changes priority
- Shows “unacknowledged directives” and the last acknowledgement cursor
- Never edits
.isnad/ledger.jsonl
If possible, auto-open the browser on launch and bind only to 127.0.0.1.
Automation expectation:
- When the web UI is open, keep derived state refreshed (watch files or poll) so humans never need to manually run the fold step.
Implement the TUI (fallback)
Implement a TUI that:
- Shows the same columns and card details
- Uses keybindings to emit directives (set status/priority, pause/resume, request summary)
- Displays “last ack cursor” and “pending directives” prominently
Make steering reliable
On every agent turn, do this (and cite directive ids in the plan changes):
- Read new directives since the last
control_ack_cursor. - Append
ack_directiverecords in the ledger for each directive id. - Either comply (and append evidence records for actions/tests), or append
cannot_comply. - When satisfied, append
complete_directivewith artifacts/tests.
Use in practice
- Use the board for steering.
- Use snapshots for comprehension: when asked “what’s going on?”, append a
snapshotrecord for the task or global scope. - When a human disputes reality, do not edit the ledger; append
reject_record(control) and thensupersede(evidence) with a clear chain of citations.
Bundled resources
references/spec.md: the contract, folding rules, and UI requirements.references/schemas.md: JSONL schemas and directive/record type catalog.references/bootstrap.md: wake-up hook templates for agent harnesses.- Rust reference implementation (preferred when avoiding Python):
cargo run -p voxelle-board -- init(scaffold.isnad/)cargo run -p voxelle-board -- fold(regenerate.isnad/state/board.*)cargo run -p voxelle-board -- serve(local web UI; writes control only)cargo run -p voxelle-board -- append-directive(CLI append control directive)cargo run -p voxelle-board -- append-ledger(CLI append evidence record)cargo run -p voxelle-board -- ack-directives(appendack_directivereceipts)