You might never open your editor again.
Status: Working — builds cleanly, 1,581 tests passing (0 failures), clippy-clean.
RightClick puts your entire development workflow in one shell: plan tasks, chat with AI agents, review diffs, stage commits, review past conversations, and manage workspaces—all without leaving RightClick.
RightClick is a Rust port of Sidecar, a TUI dashboard for AI coding agents. It provides:
- Git Status: View staged, modified, and untracked files with syntax-highlighted diffs
- Conversations: Browse AI session history from multiple agents (Claude, Cursor, Codex, etc.)
- Workers: Manage intent-based AI worker workflows and inspect their output
- File Browser: Navigate project files with tree view and preview
- Workspaces: Manage git worktrees for parallel development
- Global Search: Search files, commands, sessions, worktrees, and intents from one overlay
# Build from source
bash scripts/dev.sh build-release
# Run from any project directory
./target/release/rightclick
# Or install locally
bash scripts/dev.sh install-local
rightclickRightClick keeps the common local checks in scripts/dev.sh, with optional
justfile shortcuts if you use just. Run doctor first on a new machine: it
checks Rust, Cargo, the required rust-version, rustfmt, clippy, Git, and
rg, plus optional tools like tmux and just. The script can be launched
from any directory inside the checkout. Missing optional tools include a short
hint explaining what workflow they unlock and, for common tools, the install
command to use.
bash scripts/dev.sh ci # same checks used by GitHub Actions
bash scripts/dev.sh pre-commit # quick checks before committing, without tests
bash scripts/dev.sh pre-push # full local verification before pushing
bash scripts/dev.sh doctor # check required and optional local tools
bash scripts/dev.sh rust-version # print the required Rust version
bash scripts/dev.sh check # diff check, fmt check, clippy with warnings denied, and tests
bash scripts/dev.sh quick # diff check, fmt check, and clippy with warnings denied, without tests
bash scripts/dev.sh script-check # validate shell helper and justfile syntax when available
bash scripts/dev.sh diff-check # git whitespace checks for staged and unstaged changes
bash scripts/dev.sh fmt-check
bash scripts/dev.sh fmt
bash scripts/dev.sh clippy
bash scripts/dev.sh lint
bash scripts/dev.sh build
bash scripts/dev.sh build-release
bash scripts/dev.sh test
bash scripts/dev.sh doc-test
bash scripts/dev.sh test-list gitstatus search::overlay
bash scripts/dev.sh test-one plugins::gitstatus
bash scripts/dev.sh test-one test_plugin_commands -- --nocapture
bash scripts/dev.sh test-many test_plugin_commands test_key_hints
bash scripts/dev.sh test-many test_plugin_commands test_key_hints -- --nocapture
bash scripts/dev.sh run
bash scripts/dev.sh run -- --project ~/Developer/OSS/rightclick --debug
bash scripts/dev.sh install-local
bash scripts/dev.sh install-local --lockedIf you prefer just, run just help for the same command overview. The default
just recipe also opens that help instead of a terse recipe list.
test-one, test-many, and test-list pass filters through to Cargo as
substring filters. If a filter does not match any test, the script prints the
matching test-list command plus broader token searches to help refine the
filter. test-list only accepts filters; pass Cargo test args to test-one or
test-many after --. test-one accepts exactly one filter; use test-many
for multiple filters. Use test-many when you want to check several filters in one command;
Cargo itself accepts only one substring filter per cargo test invocation.
test-list reports Listed N tests. for the full list and
Listed N tests for filter: ... for filtered lists. Filtered test-list,
test-one, and test-many reuse one unfiltered Cargo test list for validation
so broad filters avoid Cargo's slower filtered --list path.
The script prints when it is collecting the buffered Cargo test list so long
test discovery phases do not look stalled.
test-one and test-many print a validate test filter step before running
Cargo, then report Matched N tests for filter: ... so long filter checks are
visible and confirm the filter scope before the test run starts. test-many
validates all filters from one test list before running each filter separately.
When another Cargo job is using the default target directory, set
CARGO_TARGET_DIR=/tmp/rightclick-target-verify before a command to run checks
with an isolated build cache. Cargo steps echo that target directory in their
progress lines so the logged commands stay reproducible.
run forwards arguments after -- to the RightClick binary. install-local
forwards extra arguments to cargo install, so flags like --locked or
--force work through the helper script.
| Key | Action |
|---|---|
q, Ctrl+C |
Quit |
Tab / Shift+Tab |
Navigate plugins or panes |
1-9 |
Focus plugin by number |
/ |
Global search |
: |
Command search |
j/k, ↓/↑ |
Navigate items |
Enter |
Select |
Esc |
Back/close |
r, Ctrl+R |
Refresh current view |
Ctrl+, |
Open settings |
? |
Toggle help |
In pane-based views such as Git Status, Workspace, and Workers, Tab and
Shift+Tab move between panes. Use Ctrl+Tab or Ctrl+Shift+Tab there when
you want to move between plugins instead.
Press / to open global search, or : to open command search directly. Use
Tab or Shift+Tab inside the overlay to switch scope:
- All: search files, commands, sessions, worktrees, and intents together
- Files: search file contents with
rg - Project: search sessions, worktrees, and intents exposed by plugins
- Commands: search commands by plugin, category, name, description, shortcut, or command ID
Selecting an item opens the owning plugin and focuses the matching session, worktree, intent, or file result when the plugin supports it.
RightClick follows the Functional Core & Imperative Shell pattern:
- Core: Pure business logic, no I/O, fully testable
- Shell: I/O orchestration, side effects, external integrations
See AGENTS.md for development guidelines.
MIT