Otto

Delegated work

The job runner, token budgets counted off the stream, partial returns, overnight parking, and what a job is allowed to do on your behalf.

Live.

Otto is one conversation on one thread. Anything slow you ask for is paid for in silence: you ask a question that deserves forty minutes of work, and either you wait forty minutes or Otto gives you a five-minute answer. The job runner is the third option.

What delegate does

A job is a detached headless session with its own scratch directory, tool allowlist, wall-clock cap and token budget. Creating one returns a job id in under a second; the finished result posts back through the loopback webhook as a normal event.

You ask, you get an acknowledgement now, and the answer arrives when it is ready.

Lifecycle

queued, running, parked, done, failed, killed. Terminal states are terminal; finished jobs are retained for a window and then pruned.

Budgets are counted, not estimated

Token usage is tallied off the job's own output stream as it runs, which means the budget can be enforced mid-run rather than discovered afterwards. A job that hits its budget or its wall clock is killed.

A killed job still returns what it got. Progress is written incrementally, so the answer is "three of five vendors done, here they are" rather than nothing. That is the difference between a budget and a cliff.

Overnight parking

A job tagged overnight sits unstarted until quiet hours, and the scheduler only launches what fits before your wake time. The Mac's idle window becomes real capacity, and nothing is half-finished at breakfast because it started at 07:40.

Failures land quietly

A job that broke at 03:00 is never worth a 03:00 notification. Failures are sent at normal priority and are subject to the ordinary holds.

Not built yet

These do not exist. The substrate each one reads is live, so every item below is a self-contained piece of work rather than a rewrite. The button copies a prompt that builds it in your own checkout.

#170Errands as first-class objectslarge

A `start_errand` tool handing a multi-step browser job to a background subagent with durable state on disk, so a half-finished booking survives a restart, a snooze or a captcha, halting at every irreversible step with a cropped screenshot of the actual form and [go / cancel] and resuming the same parked browser context on the tap; they say "book it" once and gets a confirmation number instead of an agent that quietly gave up.

#171Scope handshake before spendingsmall

Above a threshold, Otto first replies with a one-line plan, the sources it will hit and estimated wall-clock and dollar cost, with [go / narrow it / never mind]; they approves a 40-minute $3 job knowingly rather than discovering it in the ledger, and steers scope before the money is spent.

#172Live browser handoffsmall

When an errand hits a captcha, a 3-D Secure step or a login it can't clear, it opens that exact page in their real Chrome, says "it's on your screen, I'll pick it up when you're done", and watches for the URL to advance; a dead end becomes a 15-second tap.

#173Errand receipts and reconciliationsmall

Every completed errand files a write note with the confirmation number, the amount in the currency charged, the exact cancel/modify URL, the cancellation deadline and the final screenshot, and a nightly pass flags any booking with no matching calendar entry; "cancel the Friday thing" is answerable three weeks later and no reservation lives only in a chat scrollback.

#174Re-run a job as a watchsmall

Every finished job keeps its prompt, rubric and result, so its message carries [watch this] converting the one-off into a recurring trigger that re-runs the same rubric and reports only what changed; a one-time comparison of transfer routes becomes the thing that tells them in March the cheapest one stopped being cheapest.

#175Bureaucracy dossier jobssmall

Hand it a two-country question — tax residency, a visa renewal path, an EUR/BRL transfer rule — and it spends an hour on official sources in both jurisdictions overnight, returning a dated dossier with a decision, citations and what's still uncertain, then arms a re-check trigger because a six-month-old answer here is a trap.

#176Site playbooks and dry runsmedium

The first run against a domain walks to the step before submit and reports "I can do this, here are the 3 fields I'd guess", then on success writes a playbook with the working selectors, step order and gotchas that later runs read first; the second haircut booking takes 20 seconds and "it worked last week" stops being a coin flip.

#177Login broker and OTP relaymedium

A keychain-backed persistent browser profile per site so errands start logged in, passwords typed from Keychain and never printed to Telegram, and when a flow hits 2FA the mail scan promotes itself to a 20-second poll, lifts the code and types it into the waiting form; they stop being the human copy-paste between Gmail and a login page.

#178Live job board, one messagemedium

A `running:` brief section (job, phase, elapsed, spend) plus exactly one Telegram message per job edited in place as it progresses with a [cancel] button — hard rule of one notification per job, its result, plus one if it parks; a 40-minute job is visible without ever being an interruption.

#179Budget governor and partial returnsmedium

Parse token usage from the job stream and hard-stop at its budget or deadline, with every job writing progress incrementally so a killed or crashed one still returns what it got ("3 of 5 vendors done, here they are"), and failures always landing at priority normal — a job that broke at 03:00 is never worth a 03:00 buzz.

#180Fan-out comparison matrixmedium

A `compare` recipe taking N candidates and a fixed rubric, running one subagent per candidate in parallel and blind to the others, merging into a single scored table with per-cell sources; "compare these four Brazilian health plans on these five things" comes back even and sourced rather than favouring whichever it read first.

#181Reservation shortlist to bookingmedium

"Somewhere for two Friday 8pm near Vila Madalena" reads the calendar for genuinely free windows, browses booking widgets and returns three options as buttons with cuisine, price band, walk time and first free slot; one tap books it, writes the event and stores the cancel link.

#182Parcel tracker with reschedulemedium

Shipping mail feeds a tracked-parcels store polled via carrier pages, speaking only on transitions that change what they do — out for delivery, failed attempt, locker deadline, Brazilian customs/Receita holds needing payment before release — with [reschedule delivery] and [switch to pickup point] driving the carrier's own form, everything else collapsing to "in transit: 2 (1 today)"; a customs hold learned late costs storage fees.

#183Overnight window schedulermedium

Jobs tagged `overnight` sit unstarted until quiet hours and the scheduler only launches what fits before their wake time, deferring the rest; the Mac's idle window becomes real capacity and nothing is half-finished at 08:57 because it started at 07:40.

#184Repo night shiftmedium

On explicit request, a job picks up a repo the workspace probe already sees them in, runs tests and typecheck and does the boring pass they keep postponing — flaky triage, a dependency bump with the suite green, a review of the uncommitted diff — landing on a fresh branch it never pushes, summarized in three lines.

#185Pantry list to cartmedium

A running pantry note fed by throwaway voice notes ("we're out of coffee") and a weekly errand that fills the cart at their supermarket, stops dead at checkout and sends the total plus every substitution for approval; they never places an order, they approves one.

#186Appointment slot sniperlarge

A polling errand driving agent-browser against the booking sites that gate their life — Prenot@Mi, Polícia Federal, questura, the dentist's cancellations page — firing an urgent webhook with a deep link the instant a slot opens in their window, and offering [take it] that rebooks and releases the old slot; it never logs in with stored credentials, it just wins them the 90 seconds that decide three months.

#187Park-on-question, resume on answerlarge

A job that hits a fork writes its question and session id into the job record and exits `parked`; Otto asks once with buttons and their tap resumes the same session with the answer injected, so nothing is thrown away because a job needed one word while they slept.

#188Marketplace listing from photoslarge

Four photos of something they want to sell become researched sold-comparables, a drafted title, description and honest condition notes, a price band, and after approval a posted listing whose replies get triaged — lowballs get a canned decline draft, serious buyers get surfaced with a meeting slot from their calendar; things don't get sold because of the listing, and this removes it.

On this page