defining a new category: phone-use
an mcp/api that gives ai agents their own phones
cloud phones. real androids. real iphones.
tell your agent what to do, and it can operate a phone just like you do.
today, ai agents face three fundamental problems and phoneuse solves them 🧵
Same 500 interviews. Two ways to write the job.
As a chain: 503 steps.
As a graph: 4 levels.
the codebook first
all 500 interviews at once, none reads another
the aggregate, which needs all of them
the report
Runtime is the critical path, not the agent count.
Add 500 more interviews and the graph gets wider. It doesn't get longer.
Python already ships the scheduler for this. One import from graphlib.
How long is the longest chain in your pipeline?
The full graph with the code is in the article 👇
500 Claude agents, one after another: 2.8 hours.
All 500 at once: a wall of 429s.
asyncio.gather fires everything, the API rate-limits most of it, and backoff stretches the job right back out.
The cost of parallelism. The speed of a queue.
What works:
>25 in flight, what your tier sustains
>20 waves, about 7 minutes
>max_retries=6 rides out the short bursts
>a semaphore stops you causing them
Your real concurrency is your rate limit, not your agent count.
How many are you firing at once?
Full setup with the code in the article 👇
1 agent out of 500 fails.
The report still looks complete.
In a chain, a crash stops everything. Loud and obvious.
In a fan-out, int-0417 just disappears into the averages.
So every worker gets an ID before it starts:
> 500 IDs sent, 499 results back
> retry the gap once
> still missing? it goes into the report by name
"499 of 500, int-0417 missing" beats a report that looks perfect.
It's in the telemetry log. Did you spot it?
Full build with the Python in the article 👇
25 is an illustrative cap, not a hard limit or a measured cache threshold. The actual number depends on your API tier and rate limits. I'd tune it based on 429s, latency, and throughput. Cache hits are more about warming the shared prefix before the fan-out than the worker count itself.
500 Claude agents sounds impressive until they all hit the API at once.
Built a visual walkthrough of how to handle 500 customer interviews without turning the whole thing into a mess.
25 workers running at a time. One shared cache. Every result tracked by ID.
The interesting part is the cost.
Sending all 500 requests with a cold cache costs $16 in input tokens. Warming it first brings that down to $6.82 in the article's example.
And if interview 417 never comes back, the system actually catches it.
The full architecture and Python code are in the article below.