A full agentic loop delivered to your phone as a drop-in single apk
4 different tasks, handled by on-device agents: 1. places research; 2. harness modification and self update; 3. real browser usage; 4. ohmypi!
The apk bootstraps it's own termux environment for the agent to use, downloads musl claude, and installs several shims for the musl claude to work. No Anthropic's intellectual property in this repo
Linux static musl build is a great target to run on android
Built-in mcp server that utilizes Claude's IDE API and beyond
Markdown writeups can contain map widgets for the model to build routes
Several built-in capabilities like notification sending and intent triggering, aand with self adb, possibilities are endless: run as different programs, build and deploy programs written on android from said android to said android
OhMyPi worked (but the left panel broke, which is expected). You can (and should!) try to put your favorite Codex or Pi in agent.sh and see for yourself. Merge requests are welcome.
%%{init: {'flowchart': {'wrappingWidth': 540}}}%%
flowchart TB
l["launcher.sh<br/>assembles the platform; no abspath used here and below"]
a["agent.sh<br/>names the command, its flags; uses bun preload hack to get dns working"]
s["syscall-shim<br/>unpacked into the native library directory"]
ld["ld-musl-<arch>.so.1<br/>run as a program, not named as PT_INTERP"]
c["claude --ide<br/>launching a pristine claude binary from the upstream"]
l --> a --> s --> ld --> c
sdk["targetSdk 28 — API 29 and later grant an app<br/>no right to execute its own data directory"]
abi["x86_64 — the legacy calls rewritten to their *at forms,<br/>at a ptrace stop the kernel runs ahead of seccomp.<br/>aarch64 — the ABI is already the allowlist, so the shim only execs"]
dns["names — the staged prefix is compiled into the loader, so libc<br/>finds a resolver file; the dns module goes through c-ares,<br/>named by a preload that BUN_OPTIONS points at"]
abi -.-> s
sdk -.-> ld
dns -.-> c
classDef note fill:#fbfbfb,stroke:#999,stroke-dasharray:4 3,color:#444
class sdk,abi,dns note
echo true will be killed by the system immediatelyMIT, in LICENSE. Vendored components keep their own: the terminal
under vendor/ghostty-android is MIT as well, and the Termux bootstrap the app
downloads at runtime carries the licences of the packages in it.
198 commits
Kotlin
94.5%
Shell
3.1%
C
1.3%
A full agentic loop delivered to your phone as a drop-in single apk
4 different tasks, handled by on-device agents: 1. places research; 2. harness modification and self update; 3. real browser usage; 4. ohmypi!
The apk bootstraps it's own termux environment for the agent to use, downloads musl claude, and installs several shims for the musl claude to work. No Anthropic's intellectual property in this repo
Linux static musl build is a great target to run on android
Built-in mcp server that utilizes Claude's IDE API and beyond
Markdown writeups can contain map widgets for the model to build routes
Several built-in capabilities like notification sending and intent triggering, aand with self adb, possibilities are endless: run as different programs, build and deploy programs written on android from said android to said android
OhMyPi worked (but the left panel broke, which is expected). You can (and should!) try to put your favorite Codex or Pi in agent.sh and see for yourself. Merge requests are welcome.
%%{init: {'flowchart': {'wrappingWidth': 540}}}%%
flowchart TB
l["launcher.sh<br/>assembles the platform; no abspath used here and below"]
a["agent.sh<br/>names the command, its flags; uses bun preload hack to get dns working"]
s["syscall-shim<br/>unpacked into the native library directory"]
ld["ld-musl-<arch>.so.1<br/>run as a program, not named as PT_INTERP"]
c["claude --ide<br/>launching a pristine claude binary from the upstream"]
l --> a --> s --> ld --> c
sdk["targetSdk 28 — API 29 and later grant an app<br/>no right to execute its own data directory"]
abi["x86_64 — the legacy calls rewritten to their *at forms,<br/>at a ptrace stop the kernel runs ahead of seccomp.<br/>aarch64 — the ABI is already the allowlist, so the shim only execs"]
dns["names — the staged prefix is compiled into the loader, so libc<br/>finds a resolver file; the dns module goes through c-ares,<br/>named by a preload that BUN_OPTIONS points at"]
abi -.-> s
sdk -.-> ld
dns -.-> c
classDef note fill:#fbfbfb,stroke:#999,stroke-dasharray:4 3,color:#444
class sdk,abi,dns note
echo true will be killed by the system immediatelyMIT, in LICENSE. Vendored components keep their own: the terminal
under vendor/ghostty-android is MIT as well, and the Termux bootstrap the app
downloads at runtime carries the licences of the packages in it.
198 commits
Kotlin
94.5%
Shell
3.1%
C
1.3%