The story
A self-hosted server that runs Claude Code headless against cloned repositories. Output streams live to an Android app I wrote, Son of Anton, which also browses files, shows diffs, commits, deploys and rolls back.
When the server lost its source in September 2026, I rebuilt the API from the shipped Android app, and made the box impossible to wipe the same way again.
Hard parts cleared
- Restricted client tokens: another system, the Club ERP assistant, uses the platform with read-only tools, no settings, an environment allowlist and its own rate limit, and tokens are stored only as hashes.
- Recovered a lost server API by reverse engineering the Android app that called it, then reimplemented it and committed it.
- Tests that fail the image build if anything describing the outside world becomes a hardcoded list again, or if the image writes into its own data volume.
- Concurrency limits instead of a per-repo lock: 4 runs at once and 2 per repo by default, adjustable from the phone, and queued runs say why they wait.
- Plan-first mode, dictation in Arabic or English, commit messages written from the diff, and Arabic Markdown to PDF on the phone.



