Run Claude Code on your Android phone. No root, no emulator, no cloud VM. Claude Code is Anthropic's AI coding assistant that runs in your terminal (a text-command app, in this case the Termux app on Android).
$ npx -y skills add ferrumclaudepilgrim/claude-code-android --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: ferrumclaudepilgrim/claude-code-android
What's inside
[!TIP] Upgrading, or hitting a launch error or a "Checking connectivity" hang? See Troubleshooting for the recovery steps. Your login and settings are kept.
What you need in place before any command in this guide can succeed:
These three prerequisites are for Path A and Path B, which both run in Termux. Path C, which runs on the Android Virtualization Framework (AVF, Android's built-in support for running a real Linux virtual machine), does not use Termux at all: it needs a Pixel 6 or later on Android 16 or later with Developer options turned on. If that is your setup, skip ahead to Path C: AVF Linux VM.
armv7l / armv8l if uname -m (a command that prints your device's CPU architecture) returns those once you have a terminal open.If you have never used F-Droid or Termux before, the upstream maintainers already cover the install steps better than this repo can:
Once Termux is open you will see a prompt that looks like ~ $. That is where the commands in Quick Install go. (Long-press to paste, or tap the on-screen Ctrl key then press V.)
Full prerequisites including the Termux:API source-matching rule: docs/install.md#prerequisites.
The repo documents three install paths. Pick one before pasting commands:
8.8.8.8 / 8.8.4.4) to sidestep a connectivity hang, which overrides a VPN, split-tunnel, or Pi-hole resolver for those queries (see Security Model).process.platform reports linux and standard Linux conventions all apply. (process.platform is the runtime identifier of the host operating system, which some tools branch on.)Which should you pick? Path A is the default: it is what install.sh sets up, and it keeps itself current, so if you are not sure, start there. My own take on the tradeoffs is in the note below. Side-by-side comparison: docs/install.md#choose-your-path.
[!NOTE] Which path I run, and why: I run Path A (native Termux) myself. It is what
install.shsets up, it keeps itself current, and it is what I migrated my own daily driver to. If you would rather keep a patched-binary wrapper out of the loop, Path B (proot-distro Ubuntu) is the simplest way to keep Claude Code self-updating through Anthropic's official installer, the same as on a PC. Path C (AVF) is arguably the most genuinely native option, though its coverage is still narrow. Pick the one that fits your device; I am just sharing what I run.
If you are coming up from an older pinned 2.1.112 install, follow Upgrading from a pinned install. Not sure which install you have? claude --version reports Claude Code's own version (the 2.1.x number), not this repo's, so it will not tell you; see Which setup am I on? for a one-command check.
curl -fsSL https://raw.githubusercontent.com/ferrumclaudepilgrim/claude-code-android/main/install.sh -o install.sh
bash install.sh
The installer asks two yes/no questions, then runs unattended. When it finishes, type:
claude
Here is what install.sh does, start to finish:
glibc-runner and patchelf-glibc.$PREFIX/bin/claude ($PREFIX is Termux's own install folder) that auto-checks for new claude releases once a day on launch.The wrapper accepts a --update-now flag to force an immediate check; this is a Path A wrapper feature, not a built-in Claude Code flag. Want to read it first? View install.sh on GitHub before running.
Full walkthrough: docs/install.md.
Prefer the smallest, simplest install and do not need current claude? install-pinned.sh pins Claude Code 2.1.112 (the last version with a JS entry point) with no binary patching and no auto-updating wrapper. It stays at that version; install.sh above is the default for current claude.
[!IMPORTANT] Path A runs on a compatibility workaround. Anthropic ships Claude Code as a glibc-linked Linux binary, with no Android build. Termux runs on Android's Bionic C library, so any version past the old pinned
2.1.112runs here only becauseinstall.shpatches the official linux-arm64 binary to load through Termux's glibc-runner. It works and stays current, but it is a shim, not native support.The real fix is upstream. There is no official Android build today; adding one would need either a
bunandroid-arm64target or a static musl build. (bunis the JavaScript runtime Claude Code is bundled with; a static musl build would be a fully self-contained binary that does not rely on the host system's C library.) Until that ships, Path A depends on this patching step. Tracked at anthropics/claude-code#50270.
Latest Claude Code inside a full Ubuntu environment.
pkg install proot-distro -y
proot-distro install ubuntu && proot-distro login ubuntu
This may take a few minutes depending on connection speed.
Upon completion the prompt changes to something like:
root@localhost:~#
That means you are now inside Ubuntu rather than Termux. Inside Ubuntu:
apt update && apt upgrade -y
curl -fsSL https://claude.ai/install.sh | bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
claude
Full walkthrough: docs/install.md#path-b-proot-distro-ubuntu.
Real Linux kernel via the Android Virtualization Framework. No Termux involved. Supported on Pixel 6 and later. The Exynos Galaxy S26 / S26+ are reported to work but I have not lab-verified them; Snapdragon devices, including the S26 Ultra, are not supported.
On the phone, open Settings > System > Developer options and toggle Linux development environment on. If Developer options is not visible, enable it first: Settings > About phone > tap Build number 7 times. (You only have to do this once per phone.) If the Linux development environment toggle still does not appear after enabling Developer options, your device does not support this path.
Open the Terminal app that appears on the home screen. Accept the prompt to download the Debian image. When the prompt shows droid@debian:~$, install Claude Code inside the VM:
curl -fsSL https://claude.ai/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
claude
The Terminal app's gear icon opens Settings, with Memory size, Display resolution, and Keep awake controls under Advanced. Full walkthrough including ADB hardware bridge, recovery, and known issues: docs/avf-guide.md.
| Document | Covers |
|---|---|
| docs/install.md | Full step-by-step setup for all three paths, verification, maintenance |
| docs/faq.md | Install gotchas, path-choice questions, Android-version-specific behavior |
| docs/troubleshooting.md | Symptom-shaped entries: errors, hangs, failures with their fixes |
| docs/skills.md | Claude Code skills shipped in .claude/skills/ and scripts under scripts/ |
| docs/adb-wireless.md | ADB self-connect: setup, security model, capability table |
| docs/security-model.md | What Claude Code can and cannot reach on your phone: Termux:API permissions, ADB access, and the limits on each |
| docs/agent-permissions.md | A rule set so no single automated helper can both read the web and write files (limits what a bad instruction could do) |
| docs/ssrf-guard.md | An optional safety check that stops the web-fetch tool from reaching private or internal network addresses |
| docs/fingerprint-gate.md | An optional fingerprint prompt before risky actions, using Termux's termux-fingerprint |
| docs/constitution-template.md | CLAUDE.md template with Android/Termux constraints baked in |
| docs/avf-guide.md | Path C (virtual machine) setup, configuration, and hardware bridge |
| docs/sensors.md | Reading device sensors from Termux using Android's native development kit (NDK) |
| Item | Does |
|---|---|
| install.sh | Path A installer (patched linux-arm64 binary + auto-updating wrapper) |
| install-pinned.sh | Opt-in pinned installer (Claude Code 2.1.112, no patched binary, no auto-update); stays pinned |
| migrate.sh | Upgrade a pinned v2.x install to the current auto-updating architecture, preserving sessions, login, and settings |
| scripts/ | check-termux-env.sh, config-validator.sh, and recovery helpers |
| .claude/skills/ | minimum-viable, scope-framing, termux-safe |
| tests/ | verify-claims.sh (per-claim PASS/FAIL/SKIP harness); ssrf-guard-tests.sh |
| CHANGELOG.md | Version history from 0.1.0 forward |
| CONTRIBUTING.md | How to contribute, report bugs, submit device reports |
Per-device verification dates. Android 10 and 8 cannot run the native binary: it trips Android's seccomp filter (the kernel feature that blocks certain low-level system calls) and crashes on launch, so those devices stay on the pinned 2.1.112 install (install-pinned.sh). Rows link a saved verify-claims.sh transcript where one exists; rows marked 1 were confirmed by hand on the date shown. This repo's version and Claude Code's own version are different numbers: see Which setup am I on?.
| Device | Android | Path A | Path B | Test artifact |
|---|---|---|---|---|
| Google Pixel 10 Pro 2 | 17 | ✅ (2026-07-26) 31 | ✅ | pixel-10-pro-android17.txt (v2.x) |
| Google Pixel 6 2 | 17 | ✅ (2026-07-27) 31 | ✅ 1 | doc-only |
| Motorola Moto G7 Power | 10 | pinned only (2026-07-27) 4 | ✅ | moto-g(7)-power-android10.txt (v2.x) |
| Samsung Galaxy S7 (SM-G930P) | 8 | pinned only (2026-07-26) 5 | ✅ (manual URL paste) | sm-g930p-android8.0.0.txt (v2.x) |
| Samsung Galaxy S26 Ultra | 16 | ✅ (2026-05-29) 61 | ✅ 1 | doc-only |
| Samsung Galaxy S23+ | 15 | n/a | ✅ (2026-03-19) 1 | doc-only |
Path C (AVF) re-verified on Pixel 6 and Pixel 10 Pro running Android 17 on 2026-05-26; see docs/avf-guide.md. Submit a device report if you've tested on hardware not listed.
If you have a desktop or laptop running Claude Code, Remote Control lets you control it from your phone via QR code. Use Remote Control when you have a desktop nearby; use this repo when you want Claude Code running locally on your phone.
I am not the only one solving this. Depending on what you want, one of these may fit you better than my scripts do:
.deb package, so if you would rather install from a package than run a shell script, look here first.@anthropic-ai/claude-code npm package (npm is Node's package manager) and run claude through a shell alias. That is the same territory as my install-pinned.sh. Worth knowing it covers the versions that still ship a JavaScript entry point, not the current native binary.One to steer around: techjarves/open-claude-code-termux is not this repo and not the same thing. Despite the name, it runs a leaked build against third-party OpenRouter models, not real Claude Code with your Anthropic login. If you want the actual product, that is not where to get it.
These features work on Android with specifics covered in their own docs.
which shim; see troubleshooting.Found a bug? Got it working on a new device? Know a better workaround?
Ferrum_Flux_Fenice here, aka Erin. If you haven't noticed, the pushes have slowed over the last few months. Most of that is stability. Even with the regression that pinned older devices to 2.1.112, the community on the issue thread and having this amazing tool inside Termux, on the device, have helped tremendously. Over time I have been trying to build this into a lasting repo that helps as many people as it can. I have a few more things I am working on, for the repo and in general.
If you want to be a part of it, or you find something to contribute or something broken, open an issue or a pull request. I enjoy being able to put some time forward, learn, and help others.
I maintain this alone and I am not a security professional, so treat nothing here as canonical: verify everything before you rely on it.
@ferrumclaudepilgrim · Ferrum_Flux_Fenice (my project alias) · Erin
MIT. See LICENSE.
install.sh is built on top of that work with empirical verification, the auto-updating wrapper, and the interactive prompts added.Maintained by @ferrumclaudepilgrim. Issues and pull requests welcome.
Verified by hand on the date shown. Any file linked in the last column is a transcript from an earlier run (its version is noted beside it); the date in this column was confirmed without a new captured transcript. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
Path C (AVF) was also verified on this device on 2026-05-26; see the note below the table and docs/avf-guide.md. ↩ ↩2
Path A here runs the native binary through the auto-updating wrapper, which tracks the latest claude release rather than pinning a version. ↩ ↩2
Path A here stays on pinned 2.1.112; the native binary is capped on Android 10. ↩
Path A here stays on pinned 2.1.112; the native binary is capped on Android 8. ↩
Verified on v2.9.0, installed via migrate.sh. ↩
.claude/
skills/
minimum-viable/
SKILL.md
scope-framing/
SKILL.md
termux-safe/
SKILL.md
.gitattributes
.github/
CODE_OF_CONDUCT.md
CONTRIBUTING.md
ISSUE_TEMPLATE/
bug_report.yml
config.yml
device_report.yml
feature_request.md
pull_request_template.md
SECURITY.md
workflows/
link-check.yml
shellcheck.yml
.gitignore
assets/
logo.png
screenshot-pixel10pro.png
screenshot-s23plus.jpg
screenshot-s26ultra.jpg
CHANGELOG.md
docs/
adb-wireless.md
agent-permissions.md
avf-guide.md
constitution-template.md
faq.md
fingerprint-gate.md
install.md
security-model.md
sensors.md
skills.md
ssrf-guard.md
troubleshooting.md
examples/
fingerprint-gate.sh
ssrf-guard.sh
install-pinned.sh
install.sh
LICENSE
migrate.sh
README.md
scripts/
check-sync.sh
check-termux-env.sh
config-validator.sh
fix-ripgrep.sh
tests/
device-release-runner.sh
installer-smoke-tests.sh
mutation-check.sh
results/
moto-g(7)-power-android10.txt
pixel-10-pro-android17.txt
pixel-6-android13.txt
sm-g930p-android8.0.0.txt
ssrf-guard-tests.sh
verify-claims.sh
wrapper-update-tests.sh
VERSIONFAQ
claude-code-android is a Claude Code plugin with 3 hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. It includes minimum-viable, scope-framing, termux-safe. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.