Changelog.

What shipped, and when. Newest first, dated by the day the work landed on main — runner releases carry their version.

Runners — your infrastructure, or ours

A task runs on a runner you choose. There are two kinds, not three: self-hosted (a machine you keep, or an AWS account you enroll) and Uai Cloud (ours). The isolation floor does not move — each task gets a throwaway environment and a fresh worktree. What changes is whose infrastructure it is, and who holds the secrets.

  • Self-hosted covers both paths in one enrollment flow. The command is one-time, valid for about sixty minutes, and nothing installs where you run it. Point it at this machine, or at your AWS account with a region and machine size you pick — each task then gets its own ephemeral machine in your account, and AWS bills you directly.
  • Uai Cloud runs the same model on infrastructure we operate: a fresh ephemeral machine per task, billed per hour against a prepaid balance. On this path, secret custody sits with us; that is the trade, stated rather than papered over.

Hosts became Runners. Orgs became Workspaces.

The nouns caught up with the product. What used to be a Host is a Runner — the orchestrator that takes tasks, whether it sits on infrastructure you control (a laptop, or your own AWS account) or on ours. Organizations are Workspaces. Older entries on this page keep the words they shipped under.

Six themes, and a task screen that says what it does

Three dark themes and three light ones. Midnight — the default — is unchanged, down to the hex: if you liked the old look, you already have it. Sepia and Nocturne join it on the dark side; Daylight, Parchment, and Mist are the light ones.

  • The palette became a typed registry, so the CSS variables, the pre-paint boot script, the picker swatches, and Clerk's chrome are all generated from one source instead of three hand-synced copies. Contrast is a build failure now, not a review note.
  • The task screen states its own layout: chat on the left, one panel on the right, with a tab strip for TLDR, Diff, and Code Editor. The diff is a panel beside the conversation that produced it, not a drawer over the top of it.
  • Browser on and Previews 0/0 — two controls asking the same question in two vocabularies — collapsed into one Preview menu with a Watch section and a Dev servers section, each port reporting reachability in words.
  • Fixed: a task you started and navigated away from never got its opening prompt delivered. Delivery was wired to a page load rather than to the launch, so it worked only because people usually watch a task they just started. It fires from the launch now — which is what a scheduled run, with nobody present, always needed.

Recurring task schedules

Give a task a cron expression and a timezone and it runs without you. Each occurrence clones your template into a fresh task, branch, and chat, so last night's run is a diff you read this morning rather than a thread you untangle.

  • Run history per schedule. An occurrence due while the previous one is still live is skipped, and downtime coalesces into a single catch-up run rather than replaying a backlog — twelve missed hours don't become twelve containers.
  • Schedules re-check permissions and org membership at the moment they spend, not at the moment you saved them — so one that outlives its grant stops rather than fires.
  • A pending occurrence can no longer be claimed out from under the scheduler — including across the whole retry window while a runner is offline, where the next tick would have torn down whatever someone else had started.

The composer also grew up. @ gets a typeahead instead of asking you to spell a handle from memory, ``` makes a code block you can actually type inside, -  makes a list that can reach a second item, and : opens an emoji picker. Attachments show image thumbnails rather than a filename and a generic icon.

  • A mention inside a code block used to route. Pasting a snippet containing @someone woke that agent and overrode the recipient you had picked. Mentions are prose, never code, and now there is exactly one definition of that in the codebase.
  • Backspacing into @ada left @ad — still a pill, still routing to an agent whose name was no longer on screen. Mention pills delete whole.
  • Pasting a URL onto selected text wraps it as a link instead of replacing what you selected.

The TLDR panel — a task summary you can check

Coming back to a busy task, the tail of the feed doesn't tell you where things stand, and reading the whole thing is the cost this product exists to remove. There's now a read-only panel beside the chat that answers "what happened while I was gone?"

  • Deterministic facts and generated ones are deliberately kept on separate surfaces — they have different cost, latency, and trustworthiness, and conflating them is how a feature like this goes wrong. Activity and Artifacts are projections of things that already happened: who is doing what, and every link, upload, and preview the task produced, indexed instead of scrolled away.
  • The generated digest — decisions made, questions still open — runs only when you ask for it, never on a page load or a panel open.
  • Every line of the digest cites the message it came from, and citations are re-validated server-side against the snapshot they were written from. Click one and you land on that exact message in the chat.

Organization roles and permissions

One permission catalog covering people and agents alike. Roles are additive and assignable several at a time, and they gate personas and runners the same way they gate members.

  • Organization administration moved into the Uai settings shell: General, Members, Roles, and Billing.
  • Every API handler declares the permission it requires, with coverage checked in both directions — a handler can't quietly ship ungated.
  • Every organization starts with a managed Org Admin and Member role. The Member baseline matches exactly what members could do before, so turning roles on granted and revoked nothing.
  • Empty states say what is true for the reader. A member without permission to create agents no longer gets told their organization is empty and handed a task they can't perform.
  • An org admin can close any task in their org. A task belongs to one person but spends the org's budget and pins a runner slot, and before this an abandoned one could only be stopped by an owner who might be on holiday. Closing is the only owner-level action an admin inherits — it uses nothing of the owner's credentials.

Drafts that follow you, handles you chose, faces you recognize

Typing into the composer and switching tasks used to throw the text away. Drafts now persist on the device on every keystroke and sync to the server per task, so you can start on the laptop and finish on the phone. Staged attachments are remembered with the text.

  • A failed send keeps your message. It used to show an error and wipe the composer.
  • Humans are mentioned by the username they picked, not by a guess taken from the first word of their display name — and everyone on a task shows their real avatar, not just you.
  • Every task gets a reliable browser by default, so agents can drive and verify a page rather than reason about it.

In-app support, and a GitHub connection that survives first contact

  • A support panel in the app with attachments, backed by a doc-grounded assistant that escalates to a real ticket when it can't answer.
  • Connecting GitHub stopped dead-ending: the first connect chains into the install picker, callbacks survive membership-sync lag, and a refused token connection reports the vendor's actual reason instead of a generic failure.
  • Sign-in works behind per-task preview URLs.

Watch it ship in your own repo.

The fastest changelog is the one in your task feed. Start a task and see.