Skip to content

pAInapple Code

A self-hosted UI for Claude Code — a Python server that runs the CLI as a subprocess and serves a vanilla-JS web client on top, over a WebSocket chat stream and a REST API. Every turn is recorded in the Auto Journal: a per-project shadow git repo with structured, searchable summaries written by a background Haiku fork of the conversation. It can drive the OpenAI Codex CLI too — pick the engine per session.

The web client with a session on the left and the Auto Journal widget open on the right

The goal is native apps for every platform; today the client is a web app that installs as a PWA on iOS, Android, and desktop. Roughly a third of this app was developed on an iPhone, and the rest on an iPad with a hardware keyboard.

Read the security notes first

This is an MVP and it is very YOLO-oriented: the embedded terminal is a real PTY running as the server user, and the best experience comes from permissive Claude permission modes. Run it isolated (Docker, VM) and read Read this first before exposing it to anything.

What it is — and what it isn't

It is a thin wrapper around Claude Code. Every prompt is streamed to the CLI via --input-format stream-json --output-format stream-json, and sessions you create here can be resumed in the regular CLI with claude --resume <id>.

It is not an AI agent of its own. It does not modify your prompts, inject planning steps, parallelize work, or change Claude's behavior. The one exception is the optional shadow-git-helper agent, which knows how to query the Shadow Git history.

Get started

Highlights

  • Shadow Git auto-journal — every turn is committed to a parallel git repo with a Haiku-generated structured summary, searchable forever.
  • Multi-session tabs — several concurrent sessions, browser-style tabs, sessions survive page refresh and network drops.
  • AI engines — Claude Code by default, OpenAI Codex when you want it, chosen per session — each with its own models, permission modes, and effort scale.
  • Embedded terminal — a real PTY with xterm.js, persistent across refresh, with a mobile keyboard extension bar.
  • Comments stash & discussions — annotate any paragraph of a response and attach it to your next prompt, or fork a side-thread about it.
  • Cost analytics & prompt history — spend breakdowns per model/tool/session, and full-text search over every prompt you ever sent.
  • Images & annotation — paste screenshots, draw arrows and markers on them before sending.
  • Installable PWA — works as a standalone app on iPad, iPhone, Android, and desktop.

The full list lives in the features overview.