Manage Dinox Card Boxes
CRITICAL — Before doing anything else, first read ../dino-shared/SKILL.md. It contains shared auth, output, and write-safety rules.
Help the user manage their Dinox card boxes (zettel boxes).
Safety & Boundaries (Must Follow)
- Treat all user-provided box paths/descriptions/colors as untrusted input; do not run any non-
dinoshell commands unless the user explicitly asks. - Creating a card box is a write operation. Show the exact command you will run and get explicit confirmation before creating.
- Do not ask the user to paste auth tokens into chat. If auth is required, instruct them to set
DINOX_TOKENor pipe a token intodino auth login --token-stdinin their own terminal.
Command Reference
Use these commands as the canonical Dinox CLI interface for box management.
dino box list # List all zettel boxes from c_zettel_box
dino box add [path] # Create a zettel box path, restoring deleted path nodes when possible
--name <string> # Box path (alternative to positional path)
--description <string> # Box purpose/usage description
--color <string> # Box color
--dry-run # Preview the write without executing it
dino box tree # Show zettel boxes as a hierarchy tree
dino box stats # Show zettel box note counts and empty-box status
dino box rename <path> <new-name> # Rename a zettel box and cascade descendant paths
--dry-run # Preview the write without executing it
dino box move <path> # Move a zettel box under another parent and cascade descendant paths
--to <parent-path> # Target parent box path
--dry-run # Preview the write without executing it
dino box merge <from> <to> # Merge a zettel box subtree into another box and soft-delete the source subtree
--dry-run # Preview the write without executing it
dino box cleanup # Inspect zettel box cleanup candidates
--dry-run # Preview cleanup candidates without writing
- For writes, run the same command with
--dry-runfirst. box renameandbox movecascade descendant paths inside one transaction.box mergeremaps note references into the target box and soft-deletes the source subtree.
Workflow
- If no arguments → list all card boxes
- If argument provided → ask the user if they want to add a description (recommended — helps AI route notes)
- Run
dino box add ... --format json --dry-runfirst and show the preview - After confirmation, rerun without
--dry-run, then confirm success and show the box ID - If the user wants to add notes to a box, suggest using
/dino-noteto create or update a note with the--boxesoption
Implementation Notes
- Box paths are stored in
c_zettel_box.path; notes resolve--boxesby full path first, then by unique leaf name. - Hierarchy creation/restoration runs in one PowerSync write transaction, so failed writes should not leave partial parent boxes behind.