Your Claude Code,
anywhere you are.

A native iPhone and iPad app for the Claude Code sessions on your Mac. Approve tools, answer questions, read every diff, browse the code and steer agents from anywhere, over your own Tailscale.

Install on your devicesWatch the film · 1:08
17features, one real session
4panes side by side
~12 msto your Mac over Tailscale
0servers in between
✓ bridge · 271 tests✓ kit · 280 testsSwift 6 · iOS 26Claude Agent SDKRunestone editorLiquid Glass
Steer the session
01 · SESSIONS

Every session, one tap away.

Every Claude Code session on your Mac, grouped by project, with live status, branch and diff size. See at a glance what’s running, what’s waiting for you and what changed while you were away.

Resume any sessionBranch + diff statsSearch
02 · LIVE

Watch the work, not a spinner.

Thinking, tool calls and output stream in as they happen. The running tool shows its elapsed time, every call becomes a chip, and Stop is always one tap away.

StreamingTool timersesc Stop
03 · APPROVALS

Approve from your pocket.

When Claude wants to query production, your phone buzzes. See the exact query and where it runs, then allow once, always allow, or deny.

Push via APNs or ntfyAlways allowExact command
04 · QUESTIONS

Answer when Claude asks.

When a decision matters, like how to ship an index on a 38M-row table, Claude asks. Pick an option or write your own.

Choices“Other…”Skip
05 · DIFFS

Read every change, file by file.

Tap any chip for the real diff, with hunks, line numbers and word-level highlights, or the full output of any command.

Multi-file diffsWord highlightsCommand output
06 · AGENTS

Every agent, step by step.

Sub-agents show live in the transcript: what they’re reading, which tools they ran and how long they’ve taken. Open any one to see its full transcript.

Live step feedTools + timeFull transcript
07 · QUEUE & LIMITS

Type ahead. Know why it’s waiting.

Messages you send mid-turn wait in a queue. When the API rate-limits you, a countdown shows exactly when it retries.

Send nowEditRetry countdown
The IDE, built in
08 · FILES NEW

Your project, right beside the chat.

Open Files and the side panel becomes an editor: a file tree with git status, tabs, syntax highlighting for 20+ languages, and line numbers. All of it comes from the session’s folder on your Mac.

⌘⇧E FilesGit badgesTabs
09 · LIVE FOLLOW NEW

Watch Claude edit, line by line.

When Claude edits a file you have open, it reloads in place and the changed lines flash. New files appear in the tree as they’re written. Tap “Open in editor” on any chip to jump straight to the line.

Live reloadChanged-line flashOpen in editor
10 · QUICK OPEN NEW

Any file in two keystrokes.

⌘P opens fuzzy file search, with recent files first. Matched letters are highlighted, so you always know why a file came up.

⌘PFuzzy matchRecents
11 · PROJECT SEARCH NEW

Grep the whole repo from the couch.

Search runs git grep on your Mac and returns results grouped by file. Toggle match case or regex; tap a hit to open the file at that line.

⌘⇧FAa · .*Grouped results
Go wider
12 · PANES & FORKS

Two, three, four sessions at once.

Drag a session onto the chat to split the screen. Fork any message to try another approach, and the branch opens beside the original.

Up to 4 panesFork from hereDrag & drop
13 · PREVIEW

Artifacts beside the chat.

Reports, charts, pages, photos and video open in a native browser panel with tabs and pinch-to-zoom. Pages Claude builds are served from your Mac over HTTPS.

TabsZoomResizable
14 · CONTEXT

Long sessions stay sharp.

The ring in the toolbar shows how full the context window is. Compaction folds the conversation and tells you exactly how many tokens it freed.

Context meter/compactSummary
15 · MCP & THINKING

Tune each session.

Set the thinking budget per session, see which MCP servers are connected and how many tools each provides, switch them on or off, and reconnect one that failed.

Thinking budgetMCP statusReconnect
16 · VOICE & FILES

Talk, snap, attach.

Dictate on the device, drop in a Grafana screenshot or a PDF spec, and see a thumbnail of everything you sent.

DictationPhotosFiles
17 · TAKE OVER

Pick up a terminal session.

A backfill still running in Terminal on your Mac? Follow its output live from the iPad, and take it over the moment you quit it there.

Live watchTake over
9:41 Fri 16 Oct100%
p99 spike on /v1/paymentsNightly ledger backfillledger-api · Opus34%2
Watching live: running in Terminal
Quit it in Terminal to take over
p99 on /v1/payments jumped from ~80 ms to 1.4 s after yesterday’s deploy. Find out why. Don’t touch prod without asking.
Thought for 9s
Running Bash 6s
git log -8 -- src/payments0.2shandler.tsidempotency_key14 hits0041_drop_legacy_idx.sqlbun run bench:payments6s
MCPpostgres · EXPLAIN ANALYZE1.3s
Found it. Migration 0041 (PR #4127) dropped the composite index, so the idempotency lookup now does a sequential scan over 38M rows: 1,312 ms per request.
handler.ts+3−20042_payments_idem_idx.sql+6handler.test.ts+31
Audit other unindexed lookupsUsing Grep
0:41
9 tools
Grep"WHERE .* = \$1" src/**/*.ts · 61 hits
Readsrc/refunds/repo.ts
MCPpostgres · pg_stat_user_indexes
Write regression benchAdded bench/payments.idem.ts · 500 req/s for 30 s
1:12
6 tools
Fixed on fix/payments-p99. Refunds has the same pattern; I left it for a separate PR.
p50p99rows scanned
before412 ms1,412 ms38.2M
after9 ms74 ms1
Done · 3m 41s · 23 tools · 2 agents
Chart p99 before and after, and open it.
OPENp99-latency.html
Conversation compacted
186,240 → 29,870 tokens · 84% freed · 14s · /compact
Add a Grafana alert when p99 goes over 300 ms for 5 minutes
Run the ledger backfill since Oct 1st in batches of 5k, and keep going if a batch fails.
Running Bash 41m 12s
bun run backfill --since 2026-10-01 --batch 5000
QUEUED · 2
Open a PR against main with the bench numbers in the descriptionSend nowEdit✕
Then tag @payments-oncallSend nowEdit✕
SLO
.PDF
Message Claude — type / for commands⌘↩
p99 spike · forkledger-api · try/redis-idem
p99 on /v1/payments jumped…
Forked from message 3
What if idempotency keys lived in Redis with a 24 h TTL instead?
Worked for 52s · 7 tools
That removes the DB read entirely (p99 ≈ 31 ms in the bench) but adds a failure mode: if Redis evicts a key early, a retried payment could be charged twice. I’d keep the index and put Redis in front of it as a cache.
Message Claude — type / for commands
p99 spike on /v1/paymentsClaude wants to query prod-replica
now
Allow postgres · query?
prod-replica=> EXPLAIN (ANALYZE, BUFFERS) SELECT id, status FROM payments WHERE idempotency_key = 'pay_7Hq2…';
MCP · postgresread-only replicaledger-api
SkipClaude is askingSubmit
MIGRATION
payments has 38M rows. How should the index ship?
CREATE INDEX CONCURRENTLYNo table lock, ~6 min, needs its own migration
Plain CREATE INDEXBlocks writes for ~40 s during deploy
Other…
DoneEdit · 3 filesOpen in editor
handler.ts +3 −20042_payments_idem_idx.sql +6handler.test.ts +31
@@ -45,5 +45,6 @@ export async function createPayment(
45 const prior = await db.query(
46− `SELECT id, status FROM payments WHERE idempotency_key = $1`,
47− [key],
46+ `SELECT id, status FROM payments
47+ WHERE merchant_id = $1 AND idempotency_key = $2`,
48+ [body.merchantId, key],
49 )
@@ 0042_payments_idem_idx.sql (new file) @@
1+-- migrate:no-transaction
2+CREATE INDEX CONCURRENTLY payments_merchant_idem_idx
3+ ON payments (merchant_id, idempotency_key);
fix/payments-p99 · 3 files · +40 −2Swipe for the next file
Session settingsDone
ModelOpus
PermissionsAsk every time
Thinking
DefaultLowMediumHigh
Default lets the model decide. Higher levels think longer, slower and costlier.
MCP SERVERS
postgres
Connected · 12 tools
github
Connected · 38 tools
sentry
Needs authentication
linear
Failed · connection refused
Reconnect
TSpool.tsrecentsrc/db
TSpayments.idem.tsbench
TSpsp-client.tssrc/payments/vendors
SQ0042_payments_idem_idx.sqlsrc/db/migrations
↑↓ select↩ openesc close
The film

The whole story in 68 seconds.

And the rest

Everything the terminal does, made for touch.

Not a remote screen. A native client that understands Claude Code: its tools, its permissions, its agents, its sessions.

Rich Markdown

Code with syntax highlighting, tables, math and Mermaid diagrams, all rendered natively. Long outputs collapse; copying is one tap.

CREATE INDEX CONCURRENTLY payments_merchant_idem_idx
  ON payments (merchant_id, idempotency_key);
Endpointp50p99
/v1/payments9 ms74 ms
/v1/refunds11 ms88 ms
iPadBridgeAgent SDKClaude Code

Slash commands & skills

Type / for every command and skill your Mac knows, project ones included, recent first.

/
/compactFold the conversation
/contextShow context usage
/costTokens and spend
/reviewReview the branch
/release-notesproject · skill

Permission modes

Remembered per session, switchable mid-run.

Ask every time
Accept edits
Plan only
Skip permissionscareful

Rewind & fork

Go back to any message, or branch from it into a new pane.

p99 jumped after the deployFork from here
Ship it concurrentlyFork from here
Try Redis for idempotencyRewind to here
Open a PRFork from here

Keyboard first on iPad

With a Magic Keyboard, every common action has a shortcut.

⌘↩SendescStop Claude⌘PQuick open⌘⇧FSearch the project⌘⇧EFiles

Pair with a QR code

Scan once from the Mac. No accounts, no cloud.

✓ Paired with studio-mac

Never lose a turn

Lock your phone mid-reply. When you’re back, the missed events replay in order.

Reconnecting…
↺ tool_use · Edit handler.ts
↺ tool_result · ok · 41 ms
↺ text · “Fixed on fix/payments-p99…”

Themes

Light, dark or true black, with its own sidebar style.

iPhone too

The same app; the sidebar becomes a floating drawer.

Run the bench
p99 74 ms, down from 1.4 s.
Sessionsp99 spikePostgres 17Flaky e2e

Next up

Editing in the IDE is next, followed by a terminal and a git panel.

✎Edit & save›_Terminal±Git panel{}VS Code✦Ask about a selection
Private by design

Your Mac. Your network. Your sessions.

A small bridge on your Mac runs Claude Code through the Agent SDK, using the login you already have. The app reaches it only over Tailscale. Nothing sits in between.

No relayThe bridge listens only on your Tailscale IP.
No new accountIt uses your existing Claude Code login and history.
Scoped file accessThe IDE can only read inside the session’s folder: no .., no symlink escapes.
Locked by defaultFace ID app lock, and a bearer token on every request.

Leave the desk. Keep the session.

Install the bridge on your Mac, the app on your devices, and scan once.

Install Steerhand
1Run the bridge on your Mac2Install the app over the air3Scan the pairing code