Android development harness · Claude Code

A harness for Android development, run by agents.

applepi runs Claude Code against your tickets — each one in its own git worktree, several running at once — and shows you all of it from a single terminal pane. You step in only when a ticket needs you.

pie — control pane
applepi · 3 running · 2 needs you22:22:48 · ○ daemon stopped
+ Start new ticket(s)press
Edit config
▼ NEEDS YOU (2)
LOCAL-3Create first screen for app tutorial
LOCAL-1Ask me in the plan mode and I will tell
▼ RUNNING (3)
LOCAL-5Create third screen for app tutorial
LOCAL-6Create the fourth screen of the app tutorial
LOCAL-4Create second tutorial screen for app usage
▼ READY FOR REVIEW (1)
LOCAL-2Ask me what to do in the planning stage

↑ the actual pie control pane — six tickets, six worktrees, running in parallel.

Get started

Install, point it at a repo, run a ticket.

macOS and Linux. Windows isn't supported.

$curl -fsSL https://raw.githubusercontent.com/andresuarezz26/pie/main/install.sh | bash
then, inside your repo
$ cd ~/path/to/your/android-repo
$ pie init # wizard: repo path, branch pattern, plan review
$ pie doctor # checks git, claude, and gh

Four things it expects to find:

PrerequisiteInstallCheck
Claude Code, signed inclaude.ai/download, then run claude once to log inclaude --version
gitPreinstalled on macOS; apt install git / git-scm.com on Linuxgit --version
gh (GitHub CLI)brew install gh, or see cli.github.com — then gh auth logingh auth status
Android Studiobrew install --cask android-studio, or developer.android.com/studiopie doctor

Android Studio only matters once a ticket needs an emulator — skip it to start.

  1. 1
    Write a ticket.

    applepi takes tickets as markdown files — the filename becomes the ticket id (first-ticket.md FIRST-TICKET).

  2. 2
    Run it safely.

    pie run first-ticket.md --dry-run --review-plan--dry-run skips push and PR; --review-plan stops before any code is written; the work happens in ~/.pie/worktrees, never your own checkout.

  3. 3
    Open the control pane.

    pie — approve the plan and watch the ticket move to READY FOR REVIEW.

  4. 4
    Do it for real.

    Drop --dry-run to open an actual pull request. It always stops at review — applepi never merges anything.

How it works

Each ticket runs in its own worktree.

Point applepi at a ticket and it plans the change, writes it, and verifies it against your project's own build and tests — booting the emulator if the ticket needs one — before opening a Pull Request. Several tickets run at once, each isolated in its own git worktree, and nothing merges without you.

01

Plans the change

Reads the ticket and drafts a plan you can pause on and approve.

02

Writes it

Implements the change inside an isolated git worktree, never your checkout.

03

Verifies it

Runs your project's own build and tests — booting the emulator if needed.

04

Opens a PR

Pushes a branch and opens a pull request. Nothing merges without you.

Day to day

Bare pie is the control pane.

It's where most of the work happens: write or paste a ticket, confirm its id and branch name, press enter. Queue several and they run in parallel.

KeyAction
Move
enterChoose — on a paused ticket, read its plan
nStart new ticket(s)
aAnswer a blocked ticket
oOpen the worktree in Android Studio
cOpen the session in Claude Code
RResume from the last stage
xStop and clean up
:Command palette — everything above, plus doctor, config, and the daemon

Everything above is also available straight from the shell:

pie --help (abridged)
$ pie run ticket.md # one ticket → PR
$ pie run a.md b.md c.md # several markdown tickets, in parallel
$ pie doctor # check git, claude, and gh connectivity
$ pie logs FIRST-TICKET # print the session log for a ticket
$ pie status # table of all sessions (--watch to follow)
$ pie start # background cleanup daemon (--once for a single pass)
$ pie stop # stop the daemon
$ pie --splash # replay the title screen

pie startis a janitor, not a scheduler — it reclaims worktrees once their PRs are merged or closed, and shuts the emulator down when it's been idle. Tickets are always started by you, from pie run or the TUI.

Every pie run flag

FlagWhat it does
--dry-runEverything except git push and the PR. Try this first
--review-planPause after planning so you can approve or redirect before any code is written
--branch <name>Exact branch name for the PR, overriding the config pattern. One ticket at a time
--base <ref>Base branch — or another ticket's id — to stack on. The PR targets it
--repo <path>Which configured repo to use. Defaults to the first one
--resumeKeep your manual fixes in the existing worktree, re-run verification, then PR
--shipSkip verification entirely: commit, push, and PR from your manual fix
--from-planSkip planning and implement from the plan.json already in the worktree
--localTake the ticket inline from --title/--desc instead of a markdown file
--title / --descThe ticket summary and body, with --local
--splashReplay the title screen first. Works on any command

--base accepts a ticket id as well as a branch name, so pie run second.md --base FIRST-TICKET builds on the branch FIRST-TICKET created and opens its PR against it. A plain re-run of a stacked ticket keeps its base rather than silently resetting to the default branch.

Cost, telemetry, and privacy

Runs on the subscription you already pay for.

applepi runs on your existing Claude Code subscription or API key — no separate account, 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 applepi version, and for a completed run its outcome state, duration, 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.

Troubleshooting

Most things are one command away.

SymptomFix
pie: command not found~/.local/bin isn't on your PATH. The installer prints the line to add
A run fails immediatelypie doctor — it's almost always gh or claude auth
A ticket is stuck or vanishedpie logs <TICKET> has the full session. pie status shows every state
A ticket landed in NEEDS YOURead the reason in the TUI, fix it in ~/.pie/worktrees/<TICKET>, then pie run <TICKET> --resume
Verification skips instrumented testspie doctoravd_name is probably unset, so it fell back to unit tests
A worktree is wedgedPress x in the TUI to stop and clean up, then re-run
go.mod requires go >= 1.26.2Building from source with an older Go: prefix with GOTOOLCHAIN=auto
Built with v0