A harness for Android development.
Run everyday Android dev workflows with coding agents, each in its own git worktree, and track them all from one control pane.
Apple Pie uses your current Claude Code subscription to run the workflows Android developers repeat every day like turning a ticket into a pull request, answering review comments and reworking a change.
$ curl -fsSL …/install.sh | bash
DEMO · 0:24
Everything in one control pane.
Every workflow runs in its own git worktree, so several can run side by side without touching your checkout. A single control pane shows what each agent is doing and pulls you in only at the moments that need a developer.
THE DASHBOARD
From the Apple Pie dashboard you can:
-
From ticket to PR
Give Apple Pie a ticket, review and iterate on the plan, then approve it to implement, verify, and open a PR following your branch and workflow conventions.
-
Handle review comments
Review and resolve GitHub comments without leaving Apple Pie. See each comment alongside its diff, choose which ones to address, and approve the fixes and replies before they're posted.
-
Review the diff
Review every changed file before anything is committed. Ask for changes directly in chat, right next to the code you're reviewing.
-
Take over when you want to
Open any worktree in Android Studio or jump directly into the agent's Claude Code session whenever you want to take control.
-
Choose the right model for each stage
Configure different models for planning, implementation, verification, self-review, and review-comment fixes, without manually switching between them.
- NEEDS YOU
- A plan to approve, questions to answer, changes to review, comment fixes to preview, or a run that got stuck.
- RUNNING
- Agents planning, implementing, or verifying.
- PR READY FOR REVIEW
- Open pull requests. Moved to NEEDS YOU when the pull request has open comments.
- CLOSED
- When a pull request is merged or closed, it appears here. The worktree is cleaned up.
- STOPPED
- When you decide to stop an agent from the TUI or CLI. The worktree is cleaned up.
Agents keep moving until they hit a decision that actually needs a developer; then the row moves to NEEDS YOU. Everything is ↑↓ to move, enter to act, esc to back out; enter on a row opens its menu.
SAFETY
You stay in control.
-
Isolated worktrees.
Every agent works in
~/.pie/worktrees/<ticket>. Your main checkout isn't modified. -
Plans can require approval.
Turn on the plan gate and nothing is written until you approve the plan.
-
Changes require approval.
By default, before anything is committed or pushed, you see every changed file and its diff.
-
Commands can require approval.
Anything outside your allowlist pauses the agent and asks you on the dashboard. Your Claude Code
ask/denyrules still apply. -
Builds must actually pass.
No fresh, successful verification, no PR. The one way around it is
--ship, a human override for a fix you've checked yourself. -
Review-comment fixes are previewed.
You see each fix's diff and the reply before anything is pushed or posted.
-
Nothing merges itself.
There is no auto-merge, no merge flag, and no code path that merges a pull request.
-
Apple Pie's own files never reach your PRs.
Plans, reports, and logs live under
~/.pie; the agent's scratch directory is git-excluded and scrubbed before every commit.
How each workflow runs, every gate, and the full state machine are in docs/workflows.md.
BUILT FOR ANDROID
Built for Android.
General coding agents don't know what verifying an Android change means. Apple Pie's stages do.
-
01
Your build, not a guess.
The agent discovers how your project builds and tests — Gradle tasks, multi-module and KMP projects, company build scripts — runs them for real, and self-certifies the result in a report Apple Pie checks for freshness, so a crashed run can't leave a stale "it passed" behind.
-
02
Unit vs. instrumented tests.
Decided at plan time, enforced at verify time.
-
03
Emulator coordination.
The SDK and AVD are auto-detected, and parallel agents take turns on the emulator through a shared lock, so no two agents fight over a device. The background daemon shuts it down when it's been idle.
-
04
Android Studio handoff.
Open any agent's worktree in the IDE, and your hand-edits there count: the change is re-verified before it ships.
TRUSTED BY MOBILE DEVELOPERS AT
INSTALL
Install
macOS and Linux. Windows is not supported. Then pie init to configure your repo.
$ curl -fsSL …/install.sh | bash
PREREQUISITES
-
Claude Code, authenticated
Every stage runs through
claude -pclaude --version -
git
Worktrees, branches, commits
git --version -
gh, authenticated
Opens and tracks pull requests
gh auth status -
Android Studio
Only for tickets that need an emulator
pie doctor -
Jira
Optional — local
.mdtickets work without itpie doctor
FIRST STEPS
Never run this before? Do these eight steps in order. Nothing here touches your repo or opens a PR until step 8.
-
1
Check your prerequisites.
$ claude --version && gh auth status && git --versionClaude Code has to have been launched and signed in at least once.
ghshould say Logged in. Android Studio only matters for tickets that need an emulator, so skip it for now. -
2
Install, then confirm the binary is on your PATH.
$ curl -fsSL https://raw.githubusercontent.com/Apple-Pie-AI/pie-tui/main/install.sh | bash $ pie --helpCheck:
pie --helpprints the command list. If you getcommand not found,~/.local/binisn't on your PATH — the installer prints the exact line to add for your shell. -
3
Configure it against your Android repo.
$ cd ~/path/to/your/android-repo $ pie initThe wizard asks, in order: repo path (pre-filled with your current directory — accept it), branch pattern (accept
{ticket}-{slug}), plan review gate (say yes for your first few runs — it's the single best beginner default), three optional models (leave all blank to use Claude Code's defaults), Anthropic API key (optional — leave blank to use your logged-inclaudesession; if you do enter one it goes to the OS keychain, never the config file), and telemetry consent.Check:
ls -l ~/.pie/config.tomlshows a0600file. -
4
Run the connectivity check.
$ pie doctorCheck: the three required checks — git origin,
claude,gh— pass. The optional ones (adb,emulator, AVD name) can fail for now; they only matter once a ticket needs instrumented tests. -
5
Write your first ticket as a markdown file.
$ cat > ~/first-ticket.md <<'EOF' # Add a TODO comment to the main Activity Add a single `// TODO: hello from Apple Pie` comment at the top of the app's main Activity class. Nothing else. EOFThe ticket id comes from the filename: uppercased, with every run of non-alphanumeric characters collapsed to a dash. So
first-ticket.mdbecomesFIRST-TICKET, and that id names the worktree, the log file, and the branch. -
6
Run it — safely.
$ pie run ~/first-ticket.md --dry-run --review-planFive things make this safe to try: no Jira account is involved;
--dry-runskips push and PR entirely, so nothing reaches GitHub;--review-planstops the run before a single line of code is written; all work happens in~/.pie/worktrees/FIRST-TICKET, not in your checkout; and the change itself is one comment line.Check: run
git statusin your own repo. It's untouched. -
7
Watch it from the dashboard.
$ pieBare
pieopens the TUI. Tickets are grouped under NEEDS YOU, RUNNING, READY FOR REVIEW, and STOPPED; the footer lists the keys. Press enter on your ticket to read the full plan, approve it, and watch it work through to READY FOR REVIEW.Check:
$ cat ~/.pie/plans/FIRST-TICKET.md # the plan it wrote $ git -C ~/.pie/worktrees/FIRST-TICKET diff # the change it made $ pie logs FIRST-TICKET # the whole session -
8
Do it for real.
Drop
--dry-runon a second local ticket to get an actual pull request, or connect Jira and runpie run PROJ-123.Whichever you pick, the guarantee is the same: it stops at
review. Apple Pie never merges anything. When you're done experimenting, choose Stop & clean up from a ticket's menu in the TUI to stop it and remove its worktree. -
Manual install
Download the binary for your platform:
# macOS (Apple Silicon) $ curl -fsSL -o pie https://github.com/Apple-Pie-AI/pie-tui/releases/latest/download/pie_darwin_arm64 # macOS (Intel) $ curl -fsSL -o pie https://github.com/Apple-Pie-AI/pie-tui/releases/latest/download/pie_darwin_amd64 # Linux (x86-64) $ curl -fsSL -o pie https://github.com/Apple-Pie-AI/pie-tui/releases/latest/download/pie_linux_amd64 # Linux (arm64) $ curl -fsSL -o pie https://github.com/Apple-Pie-AI/pie-tui/releases/latest/download/pie_linux_arm64Then install it to your user bin (creates the folder, no
sudo):$ mkdir -p ~/.local/bin && mv pie ~/.local/bin/If
~/.local/binisn't on yourPATHyet:$ echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc && source ~/.zshrcOn macOS, if the first run is blocked with
zsh: killedor a Gatekeeper warning, clear the download quarantine flag:$ xattr -d com.apple.quarantine ~/.local/bin/pie 2>/dev/nullVersioned archives (
.zipfor macOS,.tar.gzfor Linux) and a SHA-256checksums.txtare attached to every release. -
Build from source
Apple Pie is a single Go binary with no cgo. It shells out to the real tools rather than wrapping their SDKs: your
git, yourgh, yourclaude, your Android SDK — same binaries, same auth, same config you already use.$ git clone https://github.com/Apple-Pie-AI/pie-tui && cd pie-tui $ make build # → ./pie $ make install # → ~/.local/bin/pie $ make test # go test ./...Go 1.26.2 or newer. On an older toolchain, prefix with
GOTOOLCHAIN=autoand Go will fetch the right one.
COST & PRIVACY
Cost, telemetry, and privacy.
Your existing subscription
Apple Pie runs on your existing Claude Code subscription or API key. There's no separate account and no markup. Each ticket costs a full working session's worth of tokens, so five parallel tickets is roughly five concurrent sessions. Start with one.
Telemetry is opt-in
Asked once during pie init. When enabled it sends three events — run_started,
run_completed, tui_opened — carrying a randomly generated device id, your OS and
architecture, the Apple Pie version, and for a completed run its outcome state, duration in seconds, and
whether it errored. No ticket content, no file paths, no repo or branch names, no code. Turn it off
any time with telemetry_enabled = false in ~/.pie/config.toml.
New here? Start with first steps.
$ curl -fsSL …/install.sh | bash