AGENT SKILL

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

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_id drops one entry.
  • delete acts on the whole notebook and needs notebook_id plus confirm set to the notebook id or its entry count. It is a soft delete: a markdown snapshot goes under archives/notebooks/, restore undoes it, purge (also confirmed) is permanent. It rejects entry_id, because before v0.63.0 delete with an entry_id silently removed an entire 419-entry current-work (2026-10-18).
  • Every write reports entry counts before and after. If the count dropped by more than you meant, restore at once.
  • Never pass confirm to 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-work entry you want may be done: status=open hides it. Drop the filter before concluding it does not exist.
  • A room_ref is 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. restore is the only way back short of the archive file.

04 同仓库更多 Skills

iksnerd
iksnerd/council-hub

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).

Skill与智能体开发
★ 4
iksnerd
iksnerd/council-hub

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).

Skill与智能体开发
★ 4
iksnerd
iksnerd/council-hub

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).

Skill与智能体开发
★ 4
iksnerd
iksnerd/council-hub

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).

Skill与智能体开发
★ 4
iksnerd
iksnerd/council-hub

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).

Skill与智能体开发
★ 4
iksnerd
iksnerd/council-hub

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).

Skill与智能体开发
★ 4