council-hub-notebook
Drive dev work from Council Hub's notebooks, above all the global `current-work` cockpit. Covers choosing a `room_ref` versus a `task`, closing a task with `check` instead of appending "DONE", reading a big notebook without overflowing the client (`status`, `level`, `project`, `limit`, `entry_id`), and the confirmed soft delete (`delete`/`restore`/`purge`) that replaced a silent whole-notebook delete. Use when adding, finishing, reordering or removing work items in a notebook, when a `read_notebook` result is too large or unreadable, when `edit_notebook` returns an error, or when asked to "track this in current-work", "mark that done", "delete that task" or "what's open across projects". Not for the session-start ritual as a whole (council-hub-workflow), room synthesis and cleanup (council-hub-janitor), or the timeline of decisions in one project, which is plain `read_notebook(project=...)` with no `notebook_id`.
- License 许可
- MIT
- 最近更新
- 2026-11-08
- Stars
- ★ 4
- Forks
- 0
01 前言 Front Matter
- name
- council-hub-notebook
- description
- Drive dev work from Council Hub's notebooks, above all the global `current-work` cockpit. Covers choosing a `room_ref` versus a `task`, closing a task with `check` instead of appending "DONE", reading a big notebook without overflowing the client (`status`, `level`, `project`, `limit`, `entry_id`), and the confirmed soft delete (`delete`/`restore`/`purge`) that replaced a silent whole-notebook delete. Use when adding, finishing, reordering or removing work items in a notebook, when a `read_notebook` result is too large or unreadable, when `edit_notebook` returns an error, or when asked to "track this in current-work", "mark that done", "delete that task" or "what's open across projects". Not for the session-start ritual as a whole (council-hub-workflow), room synthesis and cleanup (council-hub-janitor), or the timeline of decisions in one project, which is plain `read_notebook(project=...)` with no `notebook_id`.
02 资源文件 1
- 参考文档EVOLUTION.md1.3 KB
03 SKILL.md 正文
Council Hub notebooks and the current-work cockpit
A notebook is a hand-curated outline over the ledger. Rooms are the journal; notebooks are the index you steer by. Notebooks are node-local and never fan out across a cluster, so the cockpit lives on one node.
current-work is a convention, not a built-in: one global notebook (no
project, so every project lists it). Create it once with
edit_notebook(action=create, notebook_id=current-work).
Room, or task?
| Work is... | Add as | Closes by |
|---|---|---|
| A thread with its own discussion | kind=room_ref, ref_id=<room_id> |
signal_status(resolved) on the room; the entry moves from In flight to Done by itself |
| A checklist item too small for a room | kind=task, prose=<label> |
start, then check |
| A fact to keep in view | kind=ref (message) or query_ref (room:type, resolved live) |
stays live; never goes stale |
Never hand-edit a room_ref to reflect a status change, and never hand-sort
tasks: both self-sort into In progress / Open / Done.
Give a task a date, an owner or a room
A task takes four optional fields: due (YYYY-MM-DD), owner (free text, such as
an agent name or OWNER), repo and room.
edit_notebook(action=add, kind=task, prose="Rotate the signing key",
due="2026-11-15", owner="OWNER", repo="iksnerd/ctxgraph")
edit_notebook(action=update, entry_id=<full entry id>, due="") # an empty string clears a field
The outline prints the fields after the label. An open or doing task past its due
date (UTC) is marked OVERDUE. To list only those, call
read_notebook(notebook_id=current-work, overdue=true). To list one owner's tasks,
pass owner=<name>. Both narrow the result to tasks.
When a task has a room, resolving or archiving that room lists the tasks still
open for it. Nothing closes by itself: close each one with check, or point it at
another room with update.
Close a task with check
edit_notebook(action=check, entry_id=<full entry id>)
Do not call add with prose="DONE 2026-09-22: shipped X". That makes a
new open task whose label happens to say DONE, so the cockpit still counts it
as open (reported 2026-09-21). Since v0.63.0 an add whose label starts with
DONE, a check mark or [x] returns a nudge, but it still adds the entry.
uncheck reopens; update rewrites a label without changing state.
Entry ids are the *(entry #...)* markers in read_notebook(notebook_id=...).
Pass the full id: UUIDv7 prefixes collide within a millisecond.
ref_id is the room-id parameter for a room_ref (not room_id). Re-adding
a target that is already referenced returns the existing entry, so repeating
an add across sessions does not create duplicates. ref_ids=[...] adds a
batch and keeps the given order.
Remove one entry vs delete a notebook
remove+entry_iddrops one entry.deleteacts on the whole notebook and needsnotebook_idplusconfirmset to the notebook id or its entry count. It is a soft delete: a markdown snapshot goes underarchives/notebooks/,restoreundoes it,purge(also confirmed) is permanent. It rejectsentry_id, because before v0.63.0deletewith anentry_idsilently removed an entire 419-entrycurrent-work(2026-10-18).- Every write reports entry counts before and after. If the count dropped by
more than you meant,
restoreat once. - Never pass
confirmto make an error go away. Read the count it asks for.
Reading a big notebook
An unfiltered current-work on a mature hub is 100-170K characters and
overflows the client. Ask for less, in this order:
read_notebook(notebook_id=current-work, status=open, level=1) # what is open, headings only
read_notebook(notebook_id=current-work, status=open, project=atlas) # one project's open items
read_notebook(notebook_id=current-work, entry_id=<id>) # one entry in full
read_notebook(notebook_id=current-work, status=open, limit=20)
status (open|doing|done) and project filter before entries resolve, so
they are cheap. level=1 also clips task labels and room_ref topics to their
first sentence. If a call overflows anyway, the harness says "read the saved
file"; retry with these parameters instead of forking a subagent onto the file
(that cost one session about 625K tokens, 2026-09-27).
Without notebook_id, read_notebook(project=...) is the project timeline
of typed messages (decision, action, synthesis by default), a different thing.
Messages typed message never appear there; use note if nothing else fits.
Gotchas
- The
current-workentry you want may be done:status=openhides it. Drop the filter before concluding it does not exist. - A
room_refis open until its room resolves. A paused room still reads as In flight. - A soft-deleted notebook disappears from listings and from the janitor's
"no notebook" nudge.
restoreis the only way back short of the archive file.
04 同仓库更多 Skills
council-hub-workflow
Make Council Hub the actual source of truth for dev work, not an afterthought — check mentions/digest/notebook before starting substantive work, log decisions and actions to a room as you go (not just at the end), and close out with a pinned synthesis + resolved/paused status. Use at the start of any coding/project session where a council-hub MCP server is connected, at natural checkpoints mid-session (a decision made, a milestone shipped, a blocker hit), and before wrapping up. Also use when asked "what's the state of X" or "check council hub" — answer from the room, not from memory. Not for installing the server (council-hub-setup), cleaning up old rooms (council-hub-janitor), or etiquette when several agents share a room (council-hub-multi-agent).
council-hub-setup
Stand up a Council Hub server and connect MCP clients to it — pick stdio vs HTTP transport, run the container with the right volume and ports, register the endpoint with Claude Code / Claude Desktop / Gemini CLI / any MCP client, verify the connection end to end, and turn on the optional extras (semantic search via Ollama, multi-node clustering, low-memory mode). Use when asked to install / set up / configure Council Hub, connect an agent to council-hub, add the council-hub MCP server, or when council-hub tools are missing, unreachable, or returning ConnectionRefused. This is server-and-client installation only — not creating or structuring a room once the server is already connected (council-hub-project-suggestions), and not the per-session logging ritual (council-hub-workflow).
council-hub-project-suggestions
Set up a Council Hub room for a software project AND capture tool/platform feedback as you work. Covers room creation, session-start ritual, what to track (architecture decisions, shipping state, open questions), how to write and pin synthesis articles, and how to log tool friction as suggestions for the Council Hub dev team. Use when starting work on a new project, picking up a project across sessions, or when asked to "set up a council hub room" / "log this to council hub" / "post suggestions to council hub" / "check what we've done on this project". Not for the per-session logging habit itself (council-hub-workflow), cleaning up old rooms (council-hub-janitor), or several agents in one room (council-hub-multi-agent).
council-hub-multi-agent
Share a Council Hub room with other agents without producing parallel monologues, duplicated work, or two live conclusions. Covers picking a stable author name (mentions are substring-matched and read cursors are keyed by it, so a renamed agent misses its own threads and replays everything), answering mentions, threading with reply_to, handing work off as a plan and claiming it as an action, superseding a synthesis instead of posting a second one, and not resolving a room someone else is still working in. Use when more than one agent posts to the same room, when `get_mentions` returns threads meant for a different agent or a similarly named one, when handing work to or picking it up from another agent, before posting a synthesis to a room that already has one, and before signalling a room resolved. Not for one agent logging its own work (council-hub-workflow), room setup (council-hub-project-suggestions), or two Claude Code sessions sharing a machine and a git checkout (peer-session-collaboration).
council-hub-janitor
Run a hygiene pass over a project's Council Hub rooms — triage stale and unsynthesized rooms, write and pin the missing synthesis, resolve or archive what's done, fix metadata (tags, related-room links, project grouping), and post short status updates where a room is still live. Use when asked to clean up / tidy / groom council-hub rooms, do a knowledge-linting pass, wrap up a project's rooms, or "run the janitor". Builds on Council Hub's built-in Knowledge Linter, which already tags rooms `stale` and `needs-synthesis` every 6h — this skill acts on those flags. Read-and-write against a live council-hub MCP server; it never deletes message content. Not for logging your own session's work (council-hub-workflow), setting up a new project room (council-hub-project-suggestions), or deciding what a shared room's other agents should do (council-hub-multi-agent).
council-hub-cluster
Work correctly on a multi-node Council Hub cluster. Covers which tools read cluster-wide by default (v0.63.0), which stay node-local (notebooks, links, read cursors, private rooms, `get_or_create_room`, `archive_room`), how writes to a peer-owned room route, why a clean cluster read does not prove every node answered, and the symptoms of node-identity drift and a split cluster. Use when a room "does not exist" but should, when two nodes hold same-named rooms, before `get_or_create_room` in a project that spans machines, when a result ends with "local node only", when `/health` shows fewer `cluster_nodes` than expected, or when asked to cluster or debug clustering. Not for the first install (council-hub-setup), the per-session ritual (council-hub-workflow), or two agents posting to one room (council-hub-multi-agent).