A VS Code–like native mobile code editor for your own git repositories, plus a chat tab where a full-tool Claude session reads and writes the same repo — browse, edit, and commit from your phone, then hand the repo to Claude. Single-user / personal use.
It serves two co-primary device classes from one Android APK: a standard LCD phone/tablet, and a Bigme B7 Pro color e-ink tablet — each a first-class experience, neither a bolt-on.
Android app (thin client) ──HTTPS REST + one WebSocket, over Tailscale──▶ Bridge (Node.js + TS)
Compose · Sora editor git read/write
DisplayProfile (Standard | E-Ink) Claude session manager
Keystore tokens audited MCP write surface
No git engine and no agent run on the device. A small bridge runs where your repos live; the handheld browses/edits/commits through it and drives a Claude session that executes on that host.
Driving a Claude agent on your own machine from your phone is now largely solved by first-party Anthropic features (Remote Control) and the Claude Agent SDK — so GitView adopts those and invests in its genuine differentiators: a native editor and a first-class color e-ink experience alongside a first-class standard one.
| Path | What |
|---|---|
bridge/ |
Node.js + TypeScript server: git read/write, Claude session manager, transport |
android/ |
Kotlin + Jetpack Compose app: editor, browse/diff/log, chat, DisplayProfile |
docs/ |
Architecture, plan, protocol, security, decisions, e-ink, setup |
- ARCHITECTURE — components and request lifecycles
- PLAN — phased build plan (MVP = phases 0–3)
- API — the frozen wire protocol (source of truth for both ends)
- SECURITY — the full-read/write, low-friction security model
- DECISIONS — ADRs (owner-mandate / research-backed / design-choice)
- EINK — the Color E-Ink profile and Bigme refresh strategy
- SETUP — run the bridge, expose over Tailscale, build & pair the app
On the host (the machine running the bridge):
-
Node.js 20+ and git.
-
Claude Code installed and signed in — required for chat. The bridge drives the Claude Code CLI on your machine; the packaged
.debdoes not bundle it (the Agent SDK ships it as a ~222 MB per-architecture binary, which would make the package ~30× larger and architecture-specific). Browsing, diffing, and editing repos work without it — only chat needs it.The bridge finds the CLI automatically: the SDK's own bundled binary if you installed from source, otherwise
claudeonPATH, then the usual install locations. To point at a specific binary, setclaude.cliPathinconfig.yaml(or theGITVIEW_CLAUDE_CLIenvironment variable):claude: cliPath: /home/you/.local/bin/claude # absolute path
If no CLI is found, chat fails with a message naming these options — check with
which claude, and note the bridge resolves it as the user the service runs as (the.debruns as the installing user, so a CLI in that user's~/.local/binis found).
On the device: Android 8.0+ (API 26).
# Bridge
cd bridge && npm install && cp config.example.yaml config.yaml # edit repo path(s)
npm run dev # prints a pairing code
# App
cd ../android && ./gradlew :app:assembleDebug # local.properties -> your SDKThen expose the bridge with tailscale serve --https=443 http://127.0.0.1:8787 and pair the app to
the resulting https://…ts.net URL. Full walkthrough in SETUP.
Prebuilt artifacts are attached to each GitHub Release:
gitview-<version>.apk (Android app) and gitview-bridge_<version>_all.deb (host bridge), plus a
SHA256SUMS file.
1. Integrity — the files match what was released:
sha256sum -c SHA256SUMS # run in the folder with the downloaded files → "OK" for each2. Authenticity — the APK was signed by the project's release key. Every GitView release APK is signed with the same key; verify its certificate fingerprint:
apksigner verify --print-certs gitview-<version>.apk # Android build-tools
# or, with only a JDK: keytool -printcert -jarfile gitview-<version>.apkand confirm the SHA-256 certificate digest equals:
67:53:4C:58:CB:46:3E:42:D7:8E:38:8C:8C:60:C7:19:3C:86:F1:36:4B:43:DB:C7:03:34:08:D3:28:A2:19:34
(Owner CN=Aldwin Hermanudin, O=Teapot Laboratories.) A matching digest means the APK was produced and
signed by this project; a mismatch means do not trust it. This fingerprint is stable across all
releases, so an install that fails to update with "signatures don't match" is the wrong key — not a
newer version. The .deb carries its version in the package metadata (dpkg-deb --info …); verify it
via the SHA256SUMS entry above.
Compiling scaffold covering MVP phases 0–3: the bridge boots, pairs, and serves git read/write (verified end-to-end); the app assembles to a debug APK. Highlighting grammar wiring, diff UI, and on-device e-ink refresh tuning are the marked next steps — see PLAN.
The design was validated against the mid-2026 Claude ecosystem and target hardware via two
adversarially-verified research passes. Two findings corrected the brief and are reflected in the
code: Sora Editor is LGPL-2.1 (not MIT/Apache — ADR-013) and the confined-agent profile is
built from allowedTools/disallowedTools rather than the unverified tools:[] mechanism
(ADR-012). See DECISIONS.
slopus/happy — an MIT, open-source mobile + web client for Claude Code (and Codex), built with TypeScript + Expo, offering remote agent control with end-to-end encryption. It's close prior art for GitView's chat side (a phone client driving a Claude Code session on your machine). GitView differs in being a native Kotlin/Compose app with a first-class editor and color e-ink experience, driving git through a self-hosted bridge — where Happy focuses on the encrypted remote-control channel. Worth studying for its sync/transport and mobile agent UX. (Also a useful cross-check on the SDK's permission modes — see ADR-012.)
MIT (see LICENSE). GitView depends on the LGPL-2.1 Sora Editor as an unmodified library; your use of GitView's own code remains under MIT. See ADR-013.