Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
944687f
feat(terminal): paste & drop images into terminal (#90)
ASRagab Apr 29, 2026
8965994
docs: new screens
johannesjo Apr 28, 2026
e462c0b
fix(focus): drop panel border when sidebar takes focus
johannesjo Apr 28, 2026
9fd91e0
docs(readme): surface features shipped since last update
johannesjo Apr 28, 2026
0fe906b
docs(readme): adopt landing-page hook as header tagline
johannesjo Apr 29, 2026
a096896
fix(focus): move panel border when shell-toolbar buttons are clicked
johannesjo Apr 29, 2026
04c9395
feat(terminal): strip padding and reflow wrapped lines on copy
johannesjo Apr 29, 2026
1d7ac3a
feat(new-task-dialog): pin footer while fields scroll
johannesjo May 1, 2026
7492848
feat(taskbar): open project root in editor with mod+shift+click
johannesjo May 1, 2026
262a507
feat(viewers): add open-in-editor button to plan and md viewers
johannesjo May 2, 2026
5e9d396
fix(git): keep changed file diffs one-way
johannesjo May 2, 2026
7887e2c
fix(git): drop rebased patch-equivalents from diff base
johannesjo May 2, 2026
96d61b5
fix(git): collapse diff for fully-merged branches; combine cherry-pic…
johannesjo May 2, 2026
82a4826
feat(changed-files): add uncommitted-only navigation step
johannesjo May 2, 2026
8e7cf02
fix(merge-dialog): filter patch-equivalents from main-ahead count
johannesjo May 2, 2026
128dadf
fix(merge-dialog): drop --no-merges from main-ahead count
johannesjo May 2, 2026
ba23c24
fix(changed-files): fetch on mount even when task isn't active
johannesjo May 2, 2026
4f27d9d
feat: make file changes dialog full size
johannesjo May 2, 2026
8b03a24
fix(log): swallow EPIPE on stdio so shutdown doesn't crash main
johannesjo May 2, 2026
588dff7
feat(diff-viewer): add changed files sidebar with active-file highlight
johannesjo May 2, 2026
45137b1
Fix mac diff dialog header drag-region overlap
johannesjo May 3, 2026
8fd7f17
Adjust diff dialog top inset on Linux
johannesjo May 4, 2026
fb0c17b
[codex] Fix Codex arguments (#94)
brooksc May 4, 2026
f79a791
share docker agent auth
brooksc May 2, 2026
4d12dd3
fix(docker-auth): address PR review feedback
brooksc May 5, 2026
6c0d49c
fix(docker-auth): persist claude.json and update Docker info message
brooksc May 5, 2026
26ca80d
fix(docker-auth): seed .claude.json with {} if missing or empty
brooksc May 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 26 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,18 @@
</p>

<p align="center">
Turn wait time into parallel progress.
<strong>Ten agents.<br>
Ten branches.<br>
One afternoon.</strong>
</p>

<p align="center">
Dispatch AI coding agents in parallel, each in its own worktree.<br>
Review the diffs, merge the wins, toss the rest.
</p>

<p align="center">
Works with Claude Code, Codex, and Gemini · Every change isolated in its own git worktree · Free, open source, no extra platform fee
</p>

<p align="center">
Expand All @@ -24,8 +35,6 @@
<img src="screens/longer-video.gif" alt="Parallel Code demo" width="800">
</p>

**Parallel Code** is a desktop app that gives every AI coding agent its own git branch and worktree — automatically.

## Screenshots

| Multiple agents in parallel | Focused view on a single task |
Expand All @@ -36,7 +45,7 @@

## Why Parallel Code?

- **Use the AI coding tools you already trust** — [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), [Gemini CLI](https://github.com/google-gemini/gemini-cli) — all from one interface.
- **Use the AI coding tools you already trust** — [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), [Gemini CLI](https://github.com/google-gemini/gemini-cli), and [Copilot CLI](https://docs.github.com/en/copilot/concepts/agents/about-copilot-cli) — all from one interface.
- **Free and open source** — no extra subscription required. MIT licensed.
- **Keep every change isolated and reviewable** — each task gets its own git branch and worktree automatically.
- **Run agents in parallel, not in sequence** — five agents on five features at the same time, zero conflicts.
Expand Down Expand Up @@ -71,10 +80,18 @@ When you're happy with the result, merge the branch back to main from the sideba
<summary><strong>More features</strong></summary>

- Tiled panel layout with drag-to-reorder
- Built-in diff viewer and changed files list per task
- **Focus mode** — single-task layout with a clean two-column view on wide screens (`Ctrl+Shift+F`)
- Built-in diff viewer with inline review comments and per-commit navigation
- **Steps tracking panel** — engineering-manager-style timeline of agent progress (writes to `.claude/steps.json`)
- **Notes panel per task** — jot ideas, then send the notes straight to the agent as a prompt
- **PR CI status watcher** — desktop notification when GitHub checks settle
- Shell terminals per task, scoped to the worktree
- Direct mode for working on the main branch without isolation
- Six themes — Minimal, Graphite, Classic, Indigo, Ember, Glacier
- **Direct mode** for working on the main branch without isolation, plus support for **folders without a git repo**
- **Existing worktree import** — bring already-created worktrees into Parallel Code
- **Sandboxing with project-specific Dockerfiles** — drop a `.parallel-code/Dockerfile` into the project and tasks run inside it
- **Coverage radar** — per-file test-coverage badges in the Changed Files panel
- **Configurable keyboard shortcuts** with per-agent presets
- 10 themes — Islands Dark, Minimal, Graphite, Midnight, Classic, Indigo, Ember, Glacier, Zenburnesque, Workbench
- State persists across restarts
- macOS and Linux

Expand All @@ -98,7 +115,7 @@ When you're happy with the result, merge the branch back to main from the sideba
- **macOS** — `.dmg` (universal)
- **Linux** — `.AppImage` or `.deb`

2. **Install at least one AI coding CLI:** [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), or [Gemini CLI](https://github.com/google-gemini/gemini-cli)
2. **Install at least one AI coding CLI:** [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex CLI](https://github.com/openai/codex), [Gemini CLI](https://github.com/google-gemini/gemini-cli), or [Copilot CLI](https://docs.github.com/en/copilot/concepts/agents/about-copilot-cli)

3. **Open Parallel Code**, point it at a git repo, and start dispatching tasks.

Expand Down Expand Up @@ -135,6 +152,7 @@ Requires [Node.js](https://nodejs.org/) v18+.
| `Alt+Arrows` | Navigate between panels |
| `Ctrl+Alt+Left/Right` | Reorder active task |
| `Ctrl+B` | Toggle sidebar |
| `Ctrl+Shift+F` | Toggle focus mode |
| **Terminals** | |
| `Ctrl+Shift+T` | New shell terminal |
| `Ctrl+Shift+D` | New standalone terminal |
Expand Down
2 changes: 1 addition & 1 deletion electron/ipc/agents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const DEFAULT_AGENTS: AgentDef[] = [
command: 'codex',
args: [],
resume_args: ['resume', '--last'],
skip_permissions_args: ['--full-auto'],
skip_permissions_args: ['--dangerously-bypass-approvals-and-sandbox'],
description: "OpenAI's Codex CLI agent",
},
{
Expand Down
4 changes: 3 additions & 1 deletion electron/ipc/channels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export enum IPC {
GetBranchCommits = 'get_branch_commits',
GetCommitChangedFiles = 'get_commit_changed_files',
GetCommitDiffs = 'get_commit_diffs',
GetUncommittedFileDiffs = 'get_uncommitted_file_diffs',
GetCoverageSummary = 'get_coverage_summary',

// Persistence
Expand Down Expand Up @@ -119,7 +120,8 @@ export enum IPC {
ReadFileText = 'read_file_text',

// Clipboard
SaveClipboardImage = 'save_clipboard_image',
ResolveClipboardPaste = 'resolve_clipboard_paste',
SaveDroppedImage = 'save_dropped_image',

// Notifications
ShowNotification = 'show_notification',
Expand Down
Loading