notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 0d211ed0e885c5d5cdeea797ebf7ca5153fb7a49
parent c4a97163b79d39f39cdf1a0dd6245b1898eda52b
Author: William Casarin <jb55@jb55.com>
Date:   Fri, 30 Jan 2026 13:08:10 -0800

Merge branches 'rts2' and 'rts3' into laptop-rts

Diffstat:
A.beads/PRIME.md | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.beads/issues.jsonl | 7+++++++
Mcrates/notedeck_dave/src/ui/keybindings.rs | 4++--
3 files changed, 112 insertions(+), 2 deletions(-)

diff --git a/.beads/PRIME.md b/.beads/PRIME.md @@ -0,0 +1,103 @@ +# Beads Workflow Context + +> **Context Recovery**: Run `bd prime` after compaction, clear, or new session +> Hooks auto-call this in Claude Code when .beads/ detected + +## Project-Specific Rules + +This beads database is shared across multiple notedeck subprojects: +- `columns` - notedeck-columns +- `dave` - notedeck-dave +- `dev` - notedeck-dev +- `messages` - notedeck-messages +- `core` - main notedeck repo + +**ALWAYS** add a subproject label when creating issues: +```bash +bd create --title="Fix bug" --type=bug +bd label add <new-issue-id> columns # Add subproject label +``` + +Query issues for a specific subproject: +```bash +bd list -l columns +bd list -l dave +``` + +# SESSION CLOSE PROTOCOL + +**CRITICAL**: Before saying "done" or "complete", you MUST run this checklist: + +``` +[ ] 1. git status (check what changed) +[ ] 2. git add <files> (stage code changes) +[ ] 3. bd sync (commit beads changes) +[ ] 4. git commit -m "..." (commit code) +[ ] 5. bd sync (commit any new beads changes) +[ ] 6. git push (push to remote) +``` + +**NEVER skip this.** Work is not done until pushed. + +## Core Rules +- Track strategic work in beads (multi-session, dependencies, discovered work) +- Use `bd create` for issues, TodoWrite for simple single-session execution +- When in doubt, prefer bd—persistence you don't need beats lost context +- Git workflow: hooks auto-sync, run `bd sync` at session end +- Session management: check `bd ready` for available work + +## Essential Commands + +### Finding Work +- `bd ready` - Show issues ready to work (no blockers) +- `bd list --status=open` - All open issues +- `bd list --status=in_progress` - Your active work +- `bd show <id>` - Detailed issue view with dependencies + +### Creating & Updating +- `bd create --title="..." --type=task|bug|feature --priority=2` - New issue + - Priority: 0-4 or P0-P4 (0=critical, 2=medium, 4=backlog). NOT "high"/"medium"/"low" +- `bd update <id> --status=in_progress` - Claim work +- `bd update <id> --assignee=username` - Assign to someone +- `bd update <id> --title/--description/--notes/--design` - Update fields inline +- `bd close <id>` - Mark complete +- `bd close <id1> <id2> ...` - Close multiple issues at once (more efficient) +- `bd close <id> --reason="explanation"` - Close with reason +- **Tip**: When creating multiple issues/tasks/epics, use parallel subagents for efficiency +- **WARNING**: Do NOT use `bd edit` - it opens $EDITOR (vim/nano) which blocks agents + +### Dependencies & Blocking +- `bd dep add <issue> <depends-on>` - Add dependency (issue depends on depends-on) +- `bd blocked` - Show all blocked issues +- `bd show <id>` - See what's blocking/blocked by this issue + +### Sync & Collaboration +- `bd sync` - Sync with git remote (run at session end) +- `bd sync --status` - Check sync status without syncing + +### Project Health +- `bd stats` - Project statistics (open/closed/blocked counts) +- `bd doctor` - Check for issues (sync problems, missing hooks) + +## Common Workflows + +**Starting work:** +```bash +bd ready # Find available work +bd show <id> # Review issue details +bd update <id> --status=in_progress # Claim it +``` + +**Completing work:** +```bash +bd close <id1> <id2> ... # Close all completed issues at once +bd sync # Push to remote +``` + +**Creating dependent work:** +```bash +# Run bd create commands in parallel (use subagents for many items) +bd create --title="Implement feature X" --type=feature +bd create --title="Write tests for X" --type=task +bd dep add beads-yyy beads-xxx # Tests depend on Feature (Feature blocks tests) +``` diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl @@ -0,0 +1,7 @@ +{"id":"notedeck-27x","title":"Auto-steal focus should return to original session","description":"In crates/notedeck_dave, when an agent steals focus from another agent to ask a question, I want it to focus back to where it was after the interaction completes.","status":"open","priority":2,"issue_type":"task","owner":"jb55@jb55.com","created_at":"2026-01-30T11:38:44.526107651-08:00","created_by":"William Casarin","updated_at":"2026-01-30T11:38:44.526107651-08:00"} +{"id":"notedeck-bce","title":"Handle ExitPlanMode tool call","description":"Handle ExitPlanMode which simply exits plan mode. Claude-code sends this when it's done its planning phase.","status":"open","priority":2,"issue_type":"task","owner":"jb55@jb55.com","created_at":"2026-01-30T11:40:17.311242243-08:00","created_by":"William Casarin","updated_at":"2026-01-30T11:40:17.311242243-08:00"} +{"id":"notedeck-cf0","title":"Preserve edit view after approval/denial","description":"When approving or denying an edit, keep the diff visible instead of making it disappear. Allows reviewing what was changed even after responding.","status":"open","priority":2,"issue_type":"task","owner":"jb55@jb55.com","created_at":"2026-01-30T11:41:04.789975491-08:00","created_by":"William Casarin","updated_at":"2026-01-30T11:41:04.789975491-08:00"} +{"id":"notedeck-fs8","title":"Ctrl+P not dropping from NeedsInput to Done","description":"Commit c6a96d8dbfef is supposed to enable dropping from NeedsInput to Done with Ctrl+P, but it's not working. The commit message says Ctrl+P should navigate backward within a priority group and drop to the next lower priority level when at the first item (NeedsInput → Error → Done).","status":"closed","priority":2,"issue_type":"task","owner":"jb55@jb55.com","created_at":"2026-01-30T11:42:27.63658035-08:00","created_by":"William Casarin","updated_at":"2026-01-30T11:57:51.25992885-08:00","closed_at":"2026-01-30T11:57:51.25992885-08:00","close_reason":"Fixed swapped keybindings in keybindings.rs:82-90 - Ctrl+N now returns FocusQueueNext (higher priority) and Ctrl+P returns FocusQueuePrev (lower priority)"} +{"id":"notedeck-hav","title":"Add auto-accept mode for agent tool calls","description":"Add a toggle that automatically approves agent tool calls without requiring manual confirmation. Useful for trusted tasks or batch mode. Could be global or per-agent.","status":"open","priority":2,"issue_type":"task","owner":"jb55@jb55.com","created_at":"2026-01-30T11:40:00.952701242-08:00","created_by":"William Casarin","updated_at":"2026-01-30T11:40:00.952701242-08:00"} +{"id":"notedeck-j8c","title":"Chat sidebar should show last message from user or AI","description":"Chat sidebar text should show the user's or AI's last message, not our last message.","status":"open","priority":2,"issue_type":"task","owner":"jb55@jb55.com","created_at":"2026-01-30T11:39:11.482262998-08:00","created_by":"William Casarin","updated_at":"2026-01-30T11:39:11.482262998-08:00"} +{"id":"notedeck-xer","title":"Persist conversation across app restarts","description":"Save and restore conversation state so it survives app restarts.","status":"open","priority":2,"issue_type":"task","owner":"jb55@jb55.com","created_at":"2026-01-30T11:40:11.196068397-08:00","created_by":"William Casarin","updated_at":"2026-01-30T11:40:11.196068397-08:00"} diff --git a/crates/notedeck_dave/src/ui/keybindings.rs b/crates/notedeck_dave/src/ui/keybindings.rs @@ -83,12 +83,12 @@ pub fn check_keybindings( // Ctrl+N for higher priority (toward NeedsInput) if ctx.input(|i| i.modifiers.matches_exact(ctrl) && i.key_pressed(Key::N)) { - return Some(KeyAction::FocusQueuePrev); + return Some(KeyAction::FocusQueueNext); } // Ctrl+P for lower priority (toward Done) if ctx.input(|i| i.modifiers.matches_exact(ctrl) && i.key_pressed(Key::P)) { - return Some(KeyAction::FocusQueueNext); + return Some(KeyAction::FocusQueuePrev); } // Ctrl+Shift+T to clone the active agent (check before Ctrl+T)