Skip to content
cccskills
FreePublished on GitHub

notebook

Read and edit a notebook canvas from the command line via the `notebook` CLI (crates/notebook_cli). Use when the user wants to view the canvas, add/move/edit/recolor/delete nodes, connect or disconnect edges, restack, seed, or rename the canvas — e.g. "show the notebook", "add a node", "move that node", "connect these two nodes".

The English summary is being prepared. Showing the original description.

damus-io/notedeck317 stars(GitHub 317 + cccskills 0)

Run score Not tested

See how to install

Files included (1)

  • SKILL.md7.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Notebook canvas CLI

notebook is a CLI over a running notedeck's embedded relay. It keeps its own nostrdb cache, reconciles with the relay each run (NIP-77 negentropy, falling back to NIP-01, or fully offline against the cache), folds the canvas locally with the same reducer the egui app uses, and forwards edits back so the running app sees them. Source: crates/notebook_cli; the cache/sync/relay/key plumbing is shared with headway via crates/relay_sync.

Running it

Prefer a built binary; fall back to cargo:

# build once, then call the binary directly (fast, no rebuild per command)
cargo build -p notebook_cli           # produces target/debug/notebook
target/debug/notebook <command>

# or, one-off:
cargo run -q -p notebook_cli -- <command>

In examples below, notebook means whichever form you're using.

Logging in

The CLI reads and writes your own canvas once you're logged in. The author whose canvas is loaded comes from --author <pk>, else the signing key's own pubkey — so to read or edit without --author you need a key configured. Relay defaults to ws://127.0.0.1:6677 (notedeck's embedded relay); override with --relay <url> or $NOTEBOOK_RELAY. If no relay answers, the CLI works offline against its cache and edits reach the app on the next connected run.

If a command fails because no key is configured (need --nsec to sign, or --author to read a canvas), ask the user to run notebook login. Don't handle the key yourself.

The golden rule: show before you edit

Each node has a friendly reference — the notebook: scheme then three BIP-39 words encoding the leading bits of its event id, e.g. notebook:maple-river-canyon. It's a sayable rendering of the node's real identity (its 64-char nostr event id), the notebook sibling of headway's headway:<board>/… cards — single-segment (no canvas), because a node's identity is its event id, not the canvas it happens to sit on. show prints it muted at the end of each node line; quote it in chat or commits, and pass it back to any command that takes a <node>.

A <node> argument resolves, in order, as:

  • the full 64-char hex id, or any unique hex prefix — canonical, best for scripted edits where you've pulled the id from show --json
  • a notebook:<word-id> reference, e.g. notebook:maple-river-canyon. The notebook: scheme is required — a bare maple-river-canyon is not a reference and won't resolve.

Edges are addressed by their edge id (<from-hex>-<to-hex>, shown muted by show) or a unique prefix. Always run show first to read the current ids, then act on what you actually see — never assume an id or that a node is where you expect.

notebook show              # human-readable: title, nodes, edges, pending
notebook show --json       # machine-readable, for parsing (each node has `id` + `ref`)
notebook show <node>...    # print only the given nodes (hex id, notebook:<word-id>, or prefix)
notebook show <node> --json

show prints the canvas title (with [open] if open), then each node as <first line of text> (x,y w×h) notebook:<word-id> with the geometry and reference muted, then edges as <from-ref> → <to-ref> <edge-id>, then any pending nodes (proposals on a closed canvas). If there's no canvas yet it tells you to run notebook seed; with --json it prints null.

If a selector doesn't resolve, errors are explicit: an ambiguous prefix says ambiguous node prefix / ambiguous edge prefix, an unknown one no node matching / no edge matching — re-read show and retry with a longer prefix, the notebook:<word-id> reference, or the full id.

Which form to use: refer to a node by its notebook:<word-id> reference when talking to a human (it's sayable, they'll recognise it, and it renders as a live inline chip in notes/chat). When you script an edit, the hex id from show --json is canonical and can never be ambiguous; the reference resolves too and is fine for one-offs.

Commands

CommandWhat it does
show [nodes...] [--json]Print the canvas, or only the given nodes
seed [title...]Create the canvas if none exists (default title Notebook)
add <text...> [-x -y -w --height]Add a text node, optionally placed/sized
move <node> [-x -y -w --height]Move/resize a node (unset fields keep current geometry)
edit <node> <text...>Replace a node's text
color <node> [color]Recolor a node (none/-/empty clears; --color also works)
restack <node> <index>Restack a node to a display index (0 = bottom)
delete <node>Remove a node (reversible tombstone)
connect <from> <to> [--from-side <s>] [--to-side <s>]Draw an edge between two nodes
disconnect <edge>Remove an edge (id from show)
rename <title...>Rename the canvas
login <nsec>Store a signing key so later runs just work
logoutForget the stored signing key

show, seed, login, and logout aside, every command edits the canvas and needs a signing key. Re-drawing the same connect <from> <to> updates that edge rather than stacking a duplicate (edge ids are stable per ordered pair, latest-wins).

Geometry flags

add and move take geometry in canvas pixels: -x/--x, -y/--y for position and -w/--w, --height for size (height has no -h short — that's --help). add fills any unset field from defaults (a new text node is 250×120 at the origin); move fills unset fields from the node's current geometry, so move <node> -x 400 slides it horizontally without touching its size or y.

notebook add "ship the thing" -x 100 -y 200    # new node at (100,200)
notebook move 1a2b3c4d -x 400 -y 50            # reposition, keep size

Other flags: --author <pk> (read someone else's canvas), --canvas <id> (non-default canvas, default notebook), --db <path> (cache dir), --nsec <nsec> (key for this run; $NOTEBOOK_NSEC takes precedence over the stored key), -h/--help.

Typical workflow

Add a node, then connect it to an existing one:

notebook show                                          # read the canvas + word-ids
notebook add "new idea" -x 300 -y 100                  # create the node
notebook show                                          # read back both word-ids
notebook connect maple-river-canyon glide-amber-mesa   # draw an edge between them
notebook show                                          # verify the edge landed

For scripted edits where ambiguity must be impossible, pull the hex id from notebook show --json and pass that instead of the word-id.

Notes

  • Edits print ok (N events); offline edits append — offline, not forwarded to the app, meaning they're cached but haven't reached the running notedeck yet. seed prints seeded canvas '<id>' (N events).
  • seed errors if a canvas already exists; that's expected — just show instead. An edit that resolves to no change prints action produced no events (unknown node or edge?).
  • The cache lives at <data-dir>/notebook-cli unless --db overrides it. The CLI and the running app converge through the relay, so either side's edits show up on the other after a reconcile. </content>
</invoke>

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Query and control Dave agentic sessions from the command line via the `agentium` CLI (crates/agentium_cli), and find your OWN session's agentium: reference. Use when an agent running inside a Dave session needs its own ref (e.g. for a headway done-comment), to list sibling sessions, or to pull another session's detail or full conversation transcript — e.g. "what's my agentium ref", "list the running agent sessions", "show sessions in this cwd", "read session X's transcript".

The English summary is being prepared. Showing the original description.

damus-io/notedeck317Updated Oct 19, 2026

Categorize jb55's personal finance ledger from the command line via the `cashflow` CLI (crates/cashflow_cli) — burn down the uncategorized ("unknown") transactions with rules, overrides, splits and transfer links, previewing every write first. Use when asked to categorize transactions, clear the triage queue, add or fix a categorization rule, link transfers between own accounts, or review what an agent session categorized — e.g. "categorize my amex rows", "burn down the unknowns", "why is this charge in expenses:unknown", "undo what that session did".

The English summary is being prepared. Showing the original description.

damus-io/notedeck317Updated Oct 19, 2026

Fast-forward master and every git worktree branch up to a target ref (default github/master), skipping any worktree with unmerged commits. Use when the user wants to sync/update their worktree branches to latest master — e.g. "/ff-worktrees", "ff all worktrees to github/master", "fast-forward the worktrees".

The English summary is being prepared. Showing the original description.

damus-io/notedeck317Updated Oct 19, 2026

Hand off to a fresh Dave session — ask the user what to work on next, spawn a new session in the current worktree, and send it the task as its first message. Use when the user wants to delegate the next unit of work to a brand-new agentic session rather than continue in this one — e.g. "/handoff", "hand this off", "spawn a session to do X next", "start a fresh session on the next task". `/handoff autowork <task>` also branches the new session off the `autowork` branch and has it land its commit there.

The English summary is being prepared. Showing the original description.

damus-io/notedeck317Updated Oct 19, 2026

Read and edit a Headway kanban board from the command line via the `headway` CLI (crates/headway_cli). Use when the user wants to view the board, add/move/edit/archive cards, or shuffle work between columns like Backlog, Todo, In Progress, In Review, and Done — e.g. "move X to done", "show the board", "add a card to todo".

The English summary is being prepared. Showing the original description.

damus-io/notedeck317Updated Oct 19, 2026

nd

Free

Drive the running notedeck from the command line via the `nd` CLI (crates/nd_cli) — list its tools and call any of them over its local socket, or spawn a Dave session, e.g. open a headway card or agentium session in the window, open the review queue, or read board data. Use when the user wants to open something in notedeck from a shell, script the app, or see which tools the running notedeck offers — e.g. "open this card in notedeck", "what tools does notedeck have", "call open".

The English summary is being prepared. Showing the original description.

damus-io/notedeck317Updated Oct 19, 2026

See all skills by damus-io

Report a problem with this skill