Aura for iPhoneJoin waitlist

Your agents, in your pocket

The agents keep working when you close the laptop. Aura for iPhone is the cockpit for that: every run on every repo, the questions they are stuck on, and the reviews waiting for a yes: answerable from a train.

Live agent runsReply from the phoneSemantic PR reviewWake your Mac

TestFlight first · no spam · one mail when it opens

9:41
All projects
A
Workspaces
Your computers
Sam’s MacBook Pro
Online · 2 agents running
Terminal
Studio iMac
Asleep · idle 3h
Wake
Needs you2
C
Ready to merge: retry backoff
Claude · acme/checkout-api
Review
G
Keep the Stripe webhooks?
Gemini · acme/web-dashboard
Decision
acme/checkout-api2
Open
Refactor retry logic with backoff
Claude · edited retry.rs, client.rs
Working
Add idempotency keys
Codex · 3 files · 1h ago
Done
acme/web-dashboard2
Open
Migrate settings to grid layout
Gemini · edited Settings.tsx
Working
Fix dark-mode contrast
Cursor · paused · 20m ago
Idle
acme/billing1
Open
Handle proration edge cases
Claude · tests failing · 2h ago
Failed
The retry loop hammers the API on 429s. Use exponential backoff that respects Retry-After.
Claude

Reworked retry.rs to back off exponentially and honor the Retry-After header. Base 500ms, cap 30s, full jitter.

for attempt in 0..max { match send(&req).await { Ok(r) if !r.throttled() => return Ok(r), _ => sleep(backoff(attempt)).await, } }
Claude

All 14 tests green. Ready to squash & merge when you are.

Editing client.rs · 2 files changed
Follow up…
9:41
Browse files142 files
History1,204 changes
Reviewed by Aura3
#219 · Retry backoff
Low risk
feat/retry-backoff → main
Adds polite backoff on rate limits. Nothing risky changed: one small note about a magic number.
C
Claude · 1 noteReview
#218 · Idempotency keys
Medium risk
feat/idempotency → main
Stops double-charges on retried payments. Two things to check before merge.
Slow lookups. The new key column isn't indexed, so payment checks scan the whole table.
payments.rs:88 · Medium
Undocumented. The new public function has no description for teammates.
keys.rs:12 · Low
Cx
Codex · 2 findingsReview
#215 · Cart rounding
Merged
Marco Diaz · 1h ago
Clean review · no findings
Retried payments could charge twice. This tags each payment with a unique key so the second attempt is ignored. Aura found 2 things to check.
Findings
Slow lookups. The idempotency key column isn't indexed: payment checks scan the entire table and will get slower as volume grows.
payments.rs:88 · Medium
Undocumented. The new public reserve_key() has no doc comment.
keys.rs:12 · Low
Changes +204−9 · 6 files
Squash & merge
9:41
Claude · Opus 4.8
Add agent
The retry loop hammers the API whenever we get rate-limited. Can you make it back off politely?
Claude

Here's the plan:

  1. Wait longer after each failed try, instead of retrying instantly.
  2. Respect the “try again in N seconds” the server sends back.
  3. Give up after a sensible cap so nothing hangs forever.
Claude

Done. I reworked retry.rs so it waits a little longer each time and honors the server's Retry-After hint: starting at half a second, capped at 30.

start 500ms · double each try cap 30s · honor Retry-After give up after 6 attempts
Editing client.rs · 2 files changed +38−12
Claude

All 14 tests pass. This should stop the rate-limit errors. Want me to squash & merge?

Follow up…
Waitlist
TestFlight first

iPhone builds go out to the waitlist in batches. Android follows once the push pipeline is settled.

Companion
Not an IDE

The phone is the cockpit, not the workshop. It watches the agents on your machines, answers them, and approves work. The editing stays on the desktop.

Same ledger
One account, one history

Sessions, tasks, pages and reviews are the same records the desktop app reads. Pick up a thread on the phone and finish it on the laptop.

01

Every agent, every repo, one list

Workspaces is the whole estate on one screen: what each agent is doing, which repo it is doing it in, and the two things waiting on a human. Your laptops are up top: open a terminal on one, or wake the one that fell asleep.

9:41
acme/checkout-api
A
Tasks
All In progress Todo Review
In progress2
Add exponential backoff to retry client
AURA-142 · Claude
High
C
Grid layout for Settings screen
AURA-138 · Gemini
Med
G
In review1
Idempotency keys for payments
AURA-140 · Codex · PR #218
Ready
Cx
Todo3
Handle proration edge cases
AURA-145 · Unassigned
High
Dark-mode contrast pass
AURA-147 · Cursor
Low
Cu
Webhook retry dashboard
AURA-149 · Unassigned
Med
Backlog2
Export audit log to CSV
AURA-151 · Unassigned
Low
Cache the pricing table
AURA-153 · Unassigned
Med
Run the backlog in the cloud
3 agents idle · always-on runner
Run
Retries fire instantly on rate limits and overwhelm the API. Back off exponentially and honor Retry-After. Cap total wait so nothing hangs.
Checklist3/4
Exponential backoff schedule
Honor Retry-After header
Cap at 6 attempts
Add metrics for retry counts
Activity
C
Claude12m ago
Pushed backoff to retry.rs. 14 tests green.
9:41
All projects
A
Workspaces
Your computers
Sam’s MacBook Pro
Online · 2 agents running
Terminal
Studio iMac
Asleep · idle 3h
Wake
Needs you2
C
Ready to merge: retry backoff
Claude · acme/checkout-api
Review
G
Keep the Stripe webhooks?
Gemini · acme/web-dashboard
Decision
acme/checkout-api2
Open
Refactor retry logic with backoff
Claude · edited retry.rs, client.rs
Working
Add idempotency keys
Codex · 3 files · 1h ago
Done
acme/web-dashboard2
Open
Migrate settings to grid layout
Gemini · edited Settings.tsx
Working
Fix dark-mode contrast
Cursor · paused · 20m ago
Idle
acme/billing1
Open
Handle proration edge cases
Claude · tests failing · 2h ago
Failed
The retry loop hammers the API on 429s. Use exponential backoff that respects Retry-After.
Claude

Reworked retry.rs to back off exponentially and honor the Retry-After header. Base 500ms, cap 30s, full jitter.

for attempt in 0..max { match send(&req).await { Ok(r) if !r.throttled() => return Ok(r), _ => sleep(backoff(attempt)).await, } }
Claude

All 14 tests green. Ready to squash & merge when you are.

Editing client.rs · 2 files changed
Follow up…
02

Answer a run without opening a laptop

Tap into a session and you get the thread as it happened: the plan, what actually changed, the files being edited right now. Reply in the composer and the agent picks it up on the machine it is running on.

9:41
Today
C
Claude12m ago
Made retries back off politely instead of hammering the API
retry.rsclient.rs+38−12
Cx
CodexAGENT2h ago
Stopped double-charges by tagging each payment with a unique key
payments.rskeys.rs+204−9
MD
Marco Diaz3h ago
Fixed cart totals rounding to the nearest cent
cart.rs+12−4
G
GeminiAGENT4h ago
Moved the Settings screen to a cleaner grid layout
Settings.tsx+96−140
Yesterday
Cu
CursorAGENT18h ago
Nudged the dark-mode colors for easier reading
theme.ts+22−18
SR
Sam Rivera20h ago
Simplified the cart total helper
cart.rs+9−31
C
ClaudeAGENT22h ago
Added tests so payments can't be charged twice
keys_test.rs+64
What changed
Retries now wait a little longer after each failure and respect the server's “try again in N seconds,” instead of retrying instantly.
Why
On busy days the API rate-limited us, and the old loop retried immediately: making the overload worse and surfacing errors to customers at checkout.
What it touches
retry.rs+31−12
client.rs+7
9:41
Claude · Opus 4.8
Add agent
The retry loop hammers the API whenever we get rate-limited. Can you make it back off politely?
Claude

Here's the plan:

  1. Wait longer after each failed try, instead of retrying instantly.
  2. Respect the “try again in N seconds” the server sends back.
  3. Give up after a sensible cap so nothing hangs forever.
Claude

Done. I reworked retry.rs so it waits a little longer each time and honors the server's Retry-After hint: starting at half a second, capped at 30.

start 500ms · double each try cap 30s · honor Retry-After give up after 6 attempts
Editing client.rs · 2 files changed +38−12
Claude

All 14 tests pass. This should stop the rate-limit errors. Want me to squash & merge?

Follow up…
03

The review is done before you open it

Aura reads every pull request semantically and tells you the risk in a sentence, with each finding pinned to the line that causes it. You approve from the queue, or ask for the one thing you want changed.

9:41
Claude · Opus 4.8
Add agent
The retry loop hammers the API whenever we get rate-limited. Can you make it back off politely?
Claude

Here's the plan:

  1. Wait longer after each failed try, instead of retrying instantly.
  2. Respect the “try again in N seconds” the server sends back.
  3. Give up after a sensible cap so nothing hangs forever.
Claude

Done. I reworked retry.rs so it waits a little longer each time and honors the server's Retry-After hint: starting at half a second, capped at 30.

start 500ms · double each try cap 30s · honor Retry-After give up after 6 attempts
Editing client.rs · 2 files changed +38−12
Claude

All 14 tests pass. This should stop the rate-limit errors. Want me to squash & merge?

Follow up…
9:41
Browse files142 files
History1,204 changes
Reviewed by Aura3
#219 · Retry backoff
Low risk
feat/retry-backoff → main
Adds polite backoff on rate limits. Nothing risky changed: one small note about a magic number.
C
Claude · 1 noteReview
#218 · Idempotency keys
Medium risk
feat/idempotency → main
Stops double-charges on retried payments. Two things to check before merge.
Slow lookups. The new key column isn't indexed, so payment checks scan the whole table.
payments.rs:88 · Medium
Undocumented. The new public function has no description for teammates.
keys.rs:12 · Low
Cx
Codex · 2 findingsReview
#215 · Cart rounding
Merged
Marco Diaz · 1h ago
Clean review · no findings
Retried payments could charge twice. This tags each payment with a unique key so the second attempt is ignored. Aura found 2 things to check.
Findings
Slow lookups. The idempotency key column isn't indexed: payment checks scan the entire table and will get slower as volume grows.
payments.rs:88 · Medium
Undocumented. The new public reserve_key() has no doc comment.
keys.rs:12 · Low
Changes +204−9 · 6 files
Squash & merge
04

Who's on the repo right now

People and agents in one roster, because on a repo they are the same kind of neighbour. When something you depend on changes under your branch, the phone says so: before you push into it.

9:41
All projects
A
Workspaces
Your computers
Sam’s MacBook Pro
Online · 2 agents running
Terminal
Studio iMac
Asleep · idle 3h
Wake
Needs you2
C
Ready to merge: retry backoff
Claude · acme/checkout-api
Review
G
Keep the Stripe webhooks?
Gemini · acme/web-dashboard
Decision
acme/checkout-api2
Open
Refactor retry logic with backoff
Claude · edited retry.rs, client.rs
Working
Add idempotency keys
Codex · 3 files · 1h ago
Done
acme/web-dashboard2
Open
Migrate settings to grid layout
Gemini · edited Settings.tsx
Working
Fix dark-mode contrast
Cursor · paused · 20m ago
Idle
acme/billing1
Open
Handle proration edge cases
Claude · tests failing · 2h ago
Failed
The retry loop hammers the API on 429s. Use exponential backoff that respects Retry-After.
Claude

Reworked retry.rs to back off exponentially and honor the Retry-After header. Base 500ms, cap 30s, full jitter.

for attempt in 0..max { match send(&req).await { Ok(r) if !r.throttled() => return Ok(r), _ => sleep(backoff(attempt)).await, } }
Claude

All 14 tests green. Ready to squash & merge when you are.

Editing client.rs · 2 files changed
Follow up…
9:41
acme/checkout-api
A
Team
Online now4
SR
Sam Rivera
Editing retry.rs · checkout-api
PN
Priya Nair
Reviewing PR #218
C
Claude
Building the retry backoff
G
Gemini
Migrating Settings layout
Needs attention1
retry.rs changed under your branch
Claude reworked retry_with_backoff(): your work calls it. Re-read before you push.
Rebase
Recent activity
MD
Marco Diaz1h
Merged PR #215, Cart totals rounding
Cx
CodexAGENT2h
Opened PR #218, Idempotency keys
Messages
Open
SR
Sam Rivera9m
Can you take the backoff PR when it's up?
Sam Rivera · 9m
Can you take the backoff PR when it's up?
On it: waiting for Claude to finish the tests.
Claude · AGENT · 2m
Tests are green. PR #219 is up for review whenever you're ready. feat/retry-backoff
Message the room…
05

What changed today, in plain language

Activity is the day read back to you as sentences, not commit subjects: what each change was for, which files it touched, how big it was. Open one and it tells you why it happened.

9:41
Browse files142 files
History1,204 changes
Reviewed by Aura3
#219 · Retry backoff
Low risk
feat/retry-backoff → main
Adds polite backoff on rate limits. Nothing risky changed: one small note about a magic number.
C
Claude · 1 noteReview
#218 · Idempotency keys
Medium risk
feat/idempotency → main
Stops double-charges on retried payments. Two things to check before merge.
Slow lookups. The new key column isn't indexed, so payment checks scan the whole table.
payments.rs:88 · Medium
Undocumented. The new public function has no description for teammates.
keys.rs:12 · Low
Cx
Codex · 2 findingsReview
#215 · Cart rounding
Merged
Marco Diaz · 1h ago
Clean review · no findings
Retried payments could charge twice. This tags each payment with a unique key so the second attempt is ignored. Aura found 2 things to check.
Findings
Slow lookups. The idempotency key column isn't indexed: payment checks scan the entire table and will get slower as volume grows.
payments.rs:88 · Medium
Undocumented. The new public reserve_key() has no doc comment.
keys.rs:12 · Low
Changes +204−9 · 6 files
Squash & merge
9:41
Today
C
Claude12m ago
Made retries back off politely instead of hammering the API
retry.rsclient.rs+38−12
Cx
CodexAGENT2h ago
Stopped double-charges by tagging each payment with a unique key
payments.rskeys.rs+204−9
MD
Marco Diaz3h ago
Fixed cart totals rounding to the nearest cent
cart.rs+12−4
G
GeminiAGENT4h ago
Moved the Settings screen to a cleaner grid layout
Settings.tsx+96−140
Yesterday
Cu
CursorAGENT18h ago
Nudged the dark-mode colors for easier reading
theme.ts+22−18
SR
Sam Rivera20h ago
Simplified the cart total helper
cart.rs+9−31
C
ClaudeAGENT22h ago
Added tests so payments can't be charged twice
keys_test.rs+64
What changed
Retries now wait a little longer after each failure and respect the server's “try again in N seconds,” instead of retrying instantly.
Why
On busy days the API rate-limited us, and the old loop retried immediately: making the overload worse and surfacing errors to customers at checkout.
What it touches
retry.rs+31−12
client.rs+7
Not out yet

Get the first TestFlight

The companion app is in private beta. Builds go out to the waitlist in batches: iPhone now, Android next. One email when your slot opens, nothing else.

TestFlight first · no spam · one mail when it opens

9:41
acme/checkout-api
A
Tasks
All In progress Todo Review
In progress2
Add exponential backoff to retry client
AURA-142 · Claude
High
C
Grid layout for Settings screen
AURA-138 · Gemini
Med
G
In review1
Idempotency keys for payments
AURA-140 · Codex · PR #218
Ready
Cx
Todo3
Handle proration edge cases
AURA-145 · Unassigned
High
Dark-mode contrast pass
AURA-147 · Cursor
Low
Cu
Webhook retry dashboard
AURA-149 · Unassigned
Med
Backlog2
Export audit log to CSV
AURA-151 · Unassigned
Low
Cache the pricing table
AURA-153 · Unassigned
Med
Run the backlog in the cloud
3 agents idle · always-on runner
Run
Retries fire instantly on rate limits and overwhelm the API. Back off exponentially and honor Retry-After. Cap total wait so nothing hangs.
Checklist3/4
Exponential backoff schedule
Honor Retry-After header
Cap at 6 attempts
Add metrics for retry counts
Activity
C
Claude12m ago
Pushed backoff to retry.rs. 14 tests green.

The desktop app is out now

The phone watches what the desktop runs. Point Aura at a repo, drive every agent you already use, and the companion picks up the same sessions.

Get Aura for desktop