Skip to content

Shortcuts

Every click, drag, and keypress the editor (kumihimo edit) responds to, one table per surface. Every one of them still goes through the same operations layer as the CLI — see The editor for the fuller explanation of what each gesture means and shows.

Canvas

Gesture Does
Click a node Select it; the sidebar shows its form
Double-click a node Enter focus mode: ancestors tint fuchsia, descendants tint lime, both fading over three steps with distance, everything else dims to ~15%
Alt-click a second node (one already selected) Enter trace mode: every node on a dependency path between the two keeps full strength, everything else dims
Click empty canvas Exit focus or trace
Drag a node Move it; the position lands in view.yaml, never in the node file
Drag handle to handle Draw an edge — needs, in, or an annotation link, chosen by the selector above the canvas; a needs edge that would close a cycle is refused with the cycle's path. Mentions (agents/skills/trains) can't be drawn this way — use the sidebar's chip editors instead
Click an edge Open the edge panel in the sidebar: relation sentence, a jump button per endpoint, Remove edge — works on mention edges too
Hover an edge Thicken and brighten its stroke; show a tooltip naming it in words ("A needs B")
Click a clickable finding row Select and center the node it names (a row naming a file, like kumihimo.yaml, isn't clickable)

Jumping to a node hidden inside a collapsed container — any of the rows above, or an edge panel's endpoint button, or a palette result — selects and centers the container instead, with a notice naming what happened; nothing auto-expands.

Lens bar

A five-way segmented control at the top of the sidebar, right below the plan name. See The editor for what each one actually shows.

Gesture Does
Click a tab, or press 1-5 (canvas focused, no form field active) Switch to Structure / Status / Flow / Risk / Crew

Ctrl+K palette

Ctrl+K (Cmd+K on macOS) opens a centered search overlay from anywhere — form fields included, since that's standard command-palette behavior, not just a canvas shortcut.

Key Does
Type Search two groups: NODES (substring match over id, title, and body — title/id hits rank above body-only hits, which carry a snippet around where the hit landed) and COMMANDS (filtered by label)
↑ / ↓ Move the highlight
Enter Run the highlighted result — a node result selects and centers it, same as clicking it on the canvas; a command runs its action
Click a result Same as highlighting it and pressing Enter
Esc Close the palette without running anything

Commands: Add node (closes the palette and focuses the sidebar's id field), Braid, Toggle theme, Toggle auto-layout, Lanes layout, Re-layout branch (see The editor for what the last two do). Results are capped around 12 with a trailing "n more" line rather than listing an entire large plan.

Graph keyboard

Active on the canvas whenever the palette and braid modal are both closed and focus isn't in a text field; the arrow/F/Delete rows below additionally need a node selected.

Key Does
1 / 2 / 3 / 4 / 5 Switch to the Structure / Status / Flow / Risk / Crew lens — works with or without a selection
← Select the node's first dependency (needs[0])
→ Select its first dependent (the first other node whose needs names it)
↑ / ↓ Cycle among siblings: other nodes sharing this one's first in group, or, if it belongs to no group, other likewise-ungrouped nodes — both rings in id order
F Enter focus mode on the selection (same as double-click; a container focuses the union of its members' cones)
Delete / Backspace Confirm, then remove the node; a referenced node's removal is refused, naming the referrers — same rule as the sidebar's Delete button, and there's no auto-force from the keyboard
Ctrl+Z (Cmd+Z on macOS) Undo: post the inverse of the sidebar's topmost enabled trail entry — works with or without a selection. A no-op when every entry is grayed (or the trail is empty); see The editor for what grays an entry and why removal has no entry to undo at all
Esc Priority chain (K41.4): exit focus or trace if either is active (works even in a text field, unlike every other row here — a separate, form-field-agnostic listener); otherwise, with the palette and braid modal also closed, clear the current selection

A direction note. PLAN2.md's design prose says up = dependency, down = dependent. This editor maps left = dependency, right = dependent instead: the ports work (needs edges drawn left-to-right, dependency's right handle to dependent's left handle) already committed the canvas to that axis, and arrows that point the way the edges actually run beat arrows matching prose written before the ports existed. Up/Down were free as a result, so they cycle siblings rather than sitting unused.

Chip editors

The selected node's form (Needs / Agents / Skills rows). See The editor for the suggestion-filtering rules and why there's no Trains row.

Gesture Does
Type an id, press Enter or click Add Post a link op immediately for that field — no Save needed
Click a chip's × Post an unlink op immediately for that chip

All three rows share one in-flight guard (K40): once any of them posts, every row's add input and every × disable until that op's response lands — success or failure alike — since a chip op carries the whole node file's digest, not one per field.

Elsewhere in the sidebar

Control Does
🌙 / ☀ toggle, top of sidebar Switch light/dark theme; your choice is remembered across reloads, otherwise the OS preference wins
Auto-layout / Use view.yaml button Toggle between the elk auto-layout and your saved positions, without touching what's saved
Lanes button Arrange every node into one column per dependency depth (Layout)
Re-layout branch button With a node selected, re-arrange just its container or dependency cone in place, leaving everything else untouched (Layout)
Braid button Compile the current plan and open the braid preview: styled Rendered/Raw views, a Diagram fold, Copy, and Download
Undo trail entry click Post that entry's inverse op through the same write door every other gesture uses; a grayed entry's title attribute says why it can't fire (The editor)