jc
Claude Code orchestrator in one window
jc
Orchestrate multiple Claude Code sessions across projects.
Review diffs, annotate code, send instructions — all from one window.
Why · Getting Started · Keybindings · Design · Architecture

Why
Claude takes minutes per task. If you wait, you get four cycles an hour. If you switch to another session while Claude works, you get twelve — but only if you can come back without losing your place.
jc solves this by externalizing your state. Every annotation you make while reviewing flows into a TODO.md file. When you're ready, you press Cmd-Enter and it's sent as your next instruction. A problem system tracks what needs attention across all sessions — permission prompts, unreviewed diffs, unsent notes — so you navigate by priority, not by memory.
See DESIGN.md for the full rationale.
Getting Started
# Build and run as macOS .app bundle
./make.sh
# Or run directly via cargo
cargo run -p jc-app
# Register a project directory
cargo run -p jc-app -- .
Config and state live in ~/.config/jc/ (config.toml, state.toml, theme.toml).
Core Concepts
Projects and Sessions
A project is a code repository registered with jc. Each project has one or more sessions — ongoing Claude Code conversations. Sessions are defined in the project's TODO.md:
# Claude
## Refactor auth module
> uuid=abc123-def456-...
### Message 0
first instruction sent to claude
### Message 1
second instruction
### WAIT
Notes for next message go here.
The ### WAIT marker separates what you've sent from what you're drafting. Annotations from any view (diff, terminal, code) accumulate below WAIT. When you send (Cmd-Enter), the notes become a numbered message and WAIT moves below it — so you always have a full history of what you asked.
Sessions are resumed automatically on startup via claude --resume <uuid>. New sessions get their UUID from Claude Code's hook system. /clear is handled transparently.
Problem Navigation
The app tracks problems — things that need your attention:
| Priority | Examples | Meaning |
|---|---|---|
| L0 (urgent) | Permission prompt, API error | Claude is blocked |
| L1 (review) | Unreviewed diffs, terminal bell, script errors | Work to review |
| L2 (send) | Unsent notes below WAIT | Ready to send next instruction |
| L3 (idle) | Session finished, nothing queued | Start new work |
Cmd-; cycles through problems in priority order across all sessions. You don't pick a session — you pick the next problem. Permission prompts in other projects surface immediately.
See ARCH.md for the full problem system internals.
Views
The window has 1, 2, or 3 panes (Cmd-1/2/3). Any view can go in any pane via Cmd-O.
| View | Description |
|---|---|
| Claude Terminal | Claude Code CLI in an embedded terminal. Notifications on stop/permission. |
| General Terminal | Separate shell per session for running tests, inspecting output. |
| TODO Editor | Markdown editor for session notes. Drafting area below WAIT, message history above. |
| Git Diff | Working tree diff with file-by-file review (Cmd-R to mark reviewed). |
| Code Viewer | Syntax-highlighted source with tree-sitter outline navigation. |
| Global TODO | Read-only view of ~/.claude/TODO.md. |
Per-session pane layouts are saved and restored on session switch.
Keybindings
Press Cmd-? for the in-app overlay.
Global
| Key | Action |
|---|---|
| Cmd-1 / 2 / 3 | Set pane layout |
| Cmd-[ / ] | Focus previous / next pane |
| Cmd-O | Open picker (pane views + files) |
| Cmd-Shift-O | Drill-down picker (symbols / modified files / headings) |
| Cmd-P | Session picker (all projects) |
| Cmd-Shift-P | Project actions |
| Cmd-F | Search lines in current editor |
| Cmd-K | Comment — annotate selection, appended below WAIT |
| Cmd-Shift-K | Snippet picker (~/.claude/jc.md) |
| Cmd-S | Save file |
| Cmd-Enter | Send notes to Claude terminal |
| Cmd-Shift-C | Copy Claude's reply (/copy → clipboard → .jc/replies/) |
| Cmd-; | Next problem |
| Cmd-. | Jump to WAIT |
| Cmd-` | Rotate to next project |
| Cmd-D | Toggle Code ↔ Diff for current file |
| Cmd-Shift-E | Open in external editor (Zed) |
| Cmd-Alt-↑/↓ | Scroll other pane |
| Cmd-? | Keybinding help |
View-Specific
| Key | Action | View |
|---|---|---|
| Cmd-R | Reload from disk | Code |
| Cmd-R | Mark file reviewed | Diff |
| Cmd-C / Cmd-V | Copy / Paste | Terminal |
| Cmd-= / - / 0 | Font size +/-/reset | Terminal |
Picker
| Key | Action |
|---|---|
| Enter | Confirm |
| Escape | Cancel |
| ↓ / Ctrl-N | Next |
| ↑ / Ctrl-P | Previous |
| Cmd-Shift-Backspace | Disable session |
Workflow
Review → Annotate → Send
- Claude finishes. Desktop notification fires.
- Cmd-; jumps to the most urgent problem.
- Review the diff (Cmd-D). Highlight a region, Cmd-K, type a note → it appears below WAIT.
- Check the terminal output. Cmd-K on selected text → appended below WAIT.
- Cmd-R to mark files reviewed.
- Open the TODO editor. Review accumulated notes. Cmd-Enter to send.
- Switch to another session (Cmd-P) or wait.
Navigate Code
- Cmd-O → fuzzy file search.
- Cmd-Shift-O → tree-sitter symbol outline.
- Cmd-K to annotate. Cmd-Shift-E to open in Zed.
Manage Sessions
jc .from a repo to register a project.- Cmd-P to switch sessions across all projects. Problem counts shown inline.
- New sessions get UUIDs automatically via hooks.
/clearupdates the UUID transparently.
Contributing
PRs welcome. Preferably have your Claude open one against mine — I don't accept human-authored code.
Further Reading
Don't Wait for Claude — Article explaining the workflow philosophy behind jc
PLAN.md — Task checklist
DESIGN.md — Design principles, why not an editor plugin, remote workflow philosophy
ARCH.md — Implementation details: session lifecycle, terminal pipeline, problem system, hooks, TODO.md format
Star History
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found