Back to blog

Keyboard-Driven Issue Triage

Keyboard-Driven Issue Triage

You spend your day in a terminal. You navigate files with vim motions, switch tmux panes with prefix keys, and search your shell history with Ctrl-R. Then you need to triage your backlog, and every project management tool on the planet wants you to reach for the mouse.

Jira needs a click to open an issue. Another click to close the panel. Another to switch projects. Linear is faster, but still fundamentally mouse-first: you point, you click, you scroll. GitHub Issues requires a full page load for every issue you open. These tools were designed for product managers working in browsers, not for developers working in terminals.

The friction is small per interaction and enormous across a day. If you triage 30 issues in a morning, that's 30 reach-for-mouse, click, read, click-close cycles. Your hands leave the keyboard 60 times for what should be a sequential scan through a list.

We built Beadbox for developers who think this is absurd.

The full keyboard triage workflow

Beadbox is a native desktop app (built on Tauri, not Electron) that renders a real-time visual dashboard for the beads issue tracker. It shows you epic trees, dependency badges, status filters, and progress bars. And you can navigate all of it without touching the mouse.

Here's what a triage session looks like:

  1. Open Beadbox. Your most recent workspace loads automatically. Issues appear in a table with status badges, priority indicators, and assignee columns.

  2. Press j to move down the list. Press k to move up. These are vim-style motions, the same muscle memory you already have. The selection highlight tracks your position.

  3. Press Enter to open the detail panel. The selected issue expands into a side panel showing the full description, comments, dependencies, and metadata. You read it without losing your place in the list.

  4. Press Escape to close the panel. You're back in the list, cursor exactly where you left it. Press j to move to the next issue.

  5. Press / to search. A search bar appears. Type a keyword or issue ID, and the list filters instantly. Press Escape to clear the search and return to the full list.

  6. Use arrow keys on epic trees. When you're viewing an epic with nested children, left and right arrows collapse and expand tree nodes. h and l also work (vim-style horizontal navigation). You scan through a 15-issue epic without clicking a single disclosure triangle.

That's it. j/k to move, Enter to open, Escape to close, / to search, arrow keys to expand trees. Five keys cover 90% of triage navigation.

If you spot an issue that needs a status change or priority bump during triage, you drop to the terminal:

bd update bb-f8o --status in_progress --priority 1

Beadbox picks up the change within milliseconds (via filesystem watch and WebSocket) and re-renders. You see the updated status badge without refreshing or clicking anything. Then you press j and keep moving.

Why reads and writes are split on purpose

This is the part where most GUI tools get it wrong. They try to handle everything: reading issues, editing fields, changing statuses, managing dependencies. The result is forms. Lots of forms. Dropdown menus for status. Text inputs for descriptions. Modal dialogs for dependency management. Every one of those interactions requires clicking.

Beadbox took a different approach. It's a read-heavy interface. The CLI handles writes.

The beads CLI (bd) is already the source of truth for your issue data. Agents use it. Scripts use it. Your automation uses it. Building a second write path through a GUI creates a synchronization problem and doubles the surface area for bugs.

Instead, Beadbox optimizes ruthlessly for comprehension and navigation. It answers the questions that terminals are worst at: What does the full epic tree look like? Which issues are blocked, and on what? How far along is this feature? What changed in the last hour? These are visual questions. Flat text output from bd list can technically answer them, but a collapsible tree with progress bars answers them in a glance.

The keyboard shortcuts exist to make that glance fast. You scan, you read, you understand. When you need to act, you type a bd command. Two tools, each doing what it's best at.

Switching workspaces without losing context

If you work on multiple projects, each with its own beads database, workspace switching becomes a daily friction point. In most project management tools, switching projects means navigating to a different URL, logging into a different workspace, or opening a new browser tab. Your filters reset. Your scroll position resets. You lose the mental context you had in the previous project.

Beadbox handles this differently. A dropdown in the header lists every detected workspace. Click it (or navigate to it with keyboard), select a different project, and the entire view reloads from that project's database. The critical detail: filters and scroll position persist per workspace. When you switch back, everything is exactly where you left it.

The detection is automatic. Beadbox scans ~/.beads/registry.json for registered workspaces and discovers directories containing .beads/ databases. Add a new project, run bd init in it, and the next time you open Beadbox it appears in the dropdown. No import, no configuration screen, no "add workspace" wizard.

For developers who maintain multiple services or manage agents across several repositories, this turns Beadbox into a single pane across all active work. The alternative is multiple terminal windows, each running bd list against a different --db path, and keeping track of which window points at which project in your head.

How the alternatives compare

Every major project management tool requires mouse interaction for basic navigation:

Jira has keyboard shortcuts (j/k exist), but they navigate between issues in a list view that still requires clicking to open details, clicking to switch projects, and clicking through deeply nested menus to manage epics. The shortcuts feel bolted on rather than foundational.

Linear is the closest to keyboard-friendly among SaaS tools. It has Cmd+K for command palette and some navigation shortcuts. But workspace switching still means clicking through a sidebar menu, and the command palette is a search-first interaction model, not a scan-first one. You need to know what you're looking for. Triage is about scanning what you don't know yet.

GitHub Issues has no meaningful keyboard navigation for triage. You click an issue to open it (full page load), click the back button to return, and repeat. Switching between repositories is a URL change. There's no keyboard-driven scan of a backlog.

Beadbox was designed around keyboard triage from the start. The shortcuts aren't an afterthought layered on top of a mouse-first UI. The entire navigation model assumes your hands stay on the keyboard. The mouse works too (everything is clickable), but it's the fallback, not the primary interaction.

What you're actually comparing

The real difference isn't "which tool has more keyboard shortcuts." It's the interaction model.

Mouse-first tools optimize for discoverability. Every action has a visible button. That's great for onboarding and for non-technical users who need to find features. It's terrible for speed once you know what you're doing.

Keyboard-first tools optimize for throughput. Once you learn j/k/Enter/Escape, you triage at the speed of reading, not at the speed of pointing. The tradeoff is a steeper initial learning curve (you need to know the shortcuts exist). For developers who already use vim motions in their editor and terminal, that curve is essentially flat.

Beadbox also makes a tradeoff that SaaS tools can't: it only works with beads. You don't get Jira's integrations, Linear's cycles, or GitHub's pull request links. You get a visual dashboard for a Git-native issue tracker that stores everything locally, runs offline, and lets AI agents read and write issues through Unix pipes. If that's your stack, the keyboard workflow is unmatched. If you need Slack notifications when issues close, this isn't the right tool today.

Get started

Install Beadbox with Homebrew:

brew tap beadbox/cask && brew install --cask beadbox

If you already use beads, Beadbox detects your .beads/ workspaces automatically. Open the app and start pressing j.

Runs on macOS, Linux, and Windows. Free while in beta.