app / adom-rc
!

Not installable via adompkg

This app has no published release. adompkg install kyle/adom-rc will not work until a maintainer publishes a tarball with install.sh and uninstall.sh.

See the publishing docs for the package.json schema and tarball layout required to ship this app.

Adom RC

adom-rc runs many parallel Claude Code chat threads on one Adom container, each in its own dedicated Hydrogen webview tab. Every thread is also live on claude.ai/code in your native browser and the Anthropic Claude phone app — same JSONL on disk, three windows.

Adom RC chat tab

What it does

  • Spawn a chat thread per task. Type a label, click New chat ⧉ — you get a popped-out Hydrogen tab RC · <label> with a Claude-style chat surface (scrolling feed, composer, image paste with thumbnails).
  • Three surfaces, one conversation. The thread is live on claude.ai/code in your default browser (one click, no extra login) and on the Anthropic Claude phone app. Type from any one — the other two see it.
  • Names you actually recognize. Your label (silkscreen-readability, tps562201-eval, bar-lighting-ideas) is coerced into the thread title on every surface — Hydrogen tab, /resume picker, claude.ai history, phone-app thread list. Three coercion paths for belt-and-suspenders coverage.
  • Image paste with thumbnails. Paste a screenshot in the composer — it auto-resizes to ≤1000 px, uploads to a temp path, shows as an 88×88 thumbnail above the composer with click-to-zoom. The @/tmp/... path is hidden from your text; only injected at send time.
  • Drive a chat tab from the CLI. adom-rc input <name> "<text>" queues a message that the tab consumes and submits — same code path as a real Enter keystroke. Useful for ralph-loops and automation.

Quick start

adom-rc start              # daemon on 127.0.0.1:8773 + watchdog
adom-rc open               # management UI as a Hydrogen tab

In the management UI: type a label, click New chat ⧉. Done.

The thread shows up on claude.ai/code under your /history (named adom-rc: <label>) and on the Anthropic Claude phone app under Recents. Same JSONL, same conversation, three windows.

How it works

[hydrogen webview chat tab]
   │ POST /api/inject {tmux_name, text}
   ▼
[adom-rc daemon] ── tmux send-keys ──→ [tmux session running `claude` REPL]
   │                                            │
   │                                            └─→ writes turn to
   │                                                ~/.claude/projects/-home-adom-project/<uuid>.jsonl
   │
   └─ live-tails the JSONL ──→ chat tab polls /api/conversation/<uuid>
                              ─→ claude.ai/code reads same conversation via bridge_session_id
                              ─→ Anthropic phone app same way

Each thread is claude --permission-mode bypassPermissions -n "<label>" running in tmux. tmux send-keys -l "<text>" is the inbound channel; the JSONL on disk is the live-tail source. Three windows, one source of truth.

Drive a chat tab from CLI

adom-rc input <tmux-name-or-label-slug> "<text>"

The tab consumes the queue on its next livetail tick (~1s) and fires the same code path as if you'd typed and hit Enter. The tab itself doesn't need to be focused.

Phone attach (legacy claude rc flow, still supported)

For phone-attachable threads, use adom-rc new --label "<topic>" or /adom-rc handoff "<label>" — the management UI shows a QR + a claude.ai/code?environment=env_… URL. Scan with the Anthropic phone app to attach.

Architecture highlights

  • Single Rust binary (~3 MB)
  • Bounded thread pool (8 workers, 32-slot queue) — chat-tab polling cannot OOM the daemon
  • Streaming JSONL parse + mtime-keyed LRU cache + per-UUID inflight coalescer
  • Background watchdog respawns crashed keepalive: true sessions every 15s
  • State persisted to ~/.adom-rc/state.json
  • All UI rendered from embedded HTML/CSS — no node, no bundler

Source

GitHub: adom-inc/adom-rc (v0.2.0)