Agents 0.0.7, Prague. Built overnight, Frankenstein case

Teach your phone once. It does it forever.

An Android agent that learns a task in any app once, turns it into tested code, and repeats it in seconds with no AI cost. Ask for something it cannot do yet. It explores the app, writes the steps as a program, tests it, installs it, and runs it as code from then on. Anything that sends, pays or deletes waits for you.

The studio runs on your own computer with an Android phone or emulators attached, so "Open the studio" works where Stitch is installed.

The Claude app on the phone showing a poem about Prague that Stitch asked for
Stitch asked Claude, in the Claude app, for a poem and read the answer back.
WhatsApp with the poem typed in and the send button marked while Stitch waits for permission
Then it typed it into WhatsApp and stopped at Send, marked, to ask first.
$0.15 once

Learning "ask Claude for a poem and send it on WhatsApp" from nothing: 82.7 s, 16 model calls. Two new capabilities, tested and installed.

$0.0003

Every time after, with any poem and any contact: about 18 s, one tiny call to split the request. The taps and typing cost nothing.

1 learns, 5 for $0

Six emulators. One learned to set an alarm (24.2 s, $0.052); the other five ran it as code in about 4 s each, with zero model calls.

The loop

An agent that builds itself: it notices what it cannot do, creates it, tests it, installs it and uses it again later. Nothing in it was pre-written for an app.

01 Gap

It knows what it cannot do

A request matches no installed capability, checked by the capabilities' own patterns with no model call. That is the gap.

02 Explore

It learns the app

A model reads the screen as an accessibility tree, not screenshots, and acts step by step, taking the shortest path a person would.

03 Create

It writes a program

The trace becomes a parameterized program: stable selectors, templates like {{message}}, trigger patterns and a permission manifest.

04 Test

No test, no install

It runs the program again with a different input. A program that sends gets a dry run up to the button, which the test never presses.

05 Reuse

Code from then on

Any later request runs it as code: seconds, zero model calls. Requests combine capabilities, passing Claude's answer into WhatsApp.

06 Evolve

It repairs itself

When an app changes and a step breaks, it explores again, retests and installs v2. Every version is kept, and you can roll back.

Its skills grow.
Its authority does not.

Stitch starts with three rights: read the screen, tap, type. It learns new skills on its own, but never new permissions.

  • A step that sends, posts, pays, deletes or agrees to terms is never pressed by the agent. It stops right before it, with everything else ready on the screen.
  • You see exactly what would go out, then allow it once, always for that one capability, or deny it. Always can be taken back from the capability's card.
  • Every run is capped in code: at most 40 model calls and $0.50, and a loop at 100 rounds.

The prompt in the studio, while the phone waits with the message typed and Send marked.

Learn once, run everywhere

With several devices, a request goes to one first. If it has to learn, only that one learns; the others get the new capability and run it as code once it works.

Emulator 124.2 slearned, $0.052
Emulator 24.1 s0 calls, $0
Emulator 33.8 s0 calls, $0
Emulator 44.0 s0 calls, $0
Emulator 53.6 s0 calls, $0
Emulator 64.4 s0 calls, $0

A tool for other agents too

The registry is also an MCP server. Every capability Stitch learns becomes a tool that Claude or any MCP client can call, and the list grows while it learns.

claude mcp add stitch -- node mcp/server.mjs

tools: phone_do, claude_ask_prompt,
       whatsapp_send_message, clock_set_alarm, ...

Measured on real devices

A Samsung Galaxy over USB and six Pixel emulators. Learning explores with Claude Sonnet 5.5, everything else uses Claude Haiku 5.5, at API list prices.

CapabilityLearning, onceEvery time after
Ask Claude for a poem and send it to Petr on WhatsApp82.7 s, 16 calls, $0.15about 18 s, 1 call, $0.0003
Set an alarm, Samsung Clock24.6 s, 8 calls, $0.053about 5 s, 0 calls, $0
Set an alarm, Google Clock on 6 emulators24.2 s, 8 calls, $0.0523.6 to 4.4 s, 0 calls, $0
Search Google Maps, repaired after the screen changedv2 in 31.2 s, 5 callsas code again
YouTube Studio metrics into a table, with CSV16.9 s, 5 callsas code

The whole night, all devices: 179 runs, 92 succeeded, 87 did not, most of them while the loop was being built. 52 of 55 reuses ran with zero model calls. $2.07 in total.

The demo

Ninety seconds, recorded live on the real phone and six emulators. Waiting is sped up.

What is not there yet

Honest limits from tonight.

Simulated

"Simulate app update" renames one selector to show a repair; it does not install an update. A real repair also happened tonight, in Google Maps.

Fragile

Google Clock on the emulators sets times on its dial, which labels only every fifth minute. "Delete all alarms" once stopped on the last alarm; it now retries once and says how far it got.

Missing

Longer chains and branching between capabilities. Apps that draw everything in one view, like games. A voice.

Trade-off

Learning uses a stronger model because the small one took detours. It is paid once per capability; reuse needs no model at all.