Ao Twin

A pull request, or a good reason.

Delegate a Linear ticket to Ao Twin and it decides before it codes. Clear, contained work comes back as a pull request that already passed your checks. Anything risky or vague comes back to you with the reason.

WEB-214

Projects table: add a sortable due date column

Status
In Review
Delegate
Ao Twin
  1. You delegated this issue to Ao Twin

    7m ago
  2. Ao Twin Got it — I’ll take a look shortly.
    7m ago
  3. Ao Twin Reading through WEB-214 now…
    7m ago
  4. Ao Twin On it — making the change now.
    6m ago
  5. Ao Twin
    just now

    Done — PR is up: github.com/acme/web/pull/88

    Ran install, typecheck, build; all green. Over to you for a look.

  6. feat(projects)/add sortable due date column

    #88 · Open · ✓ 3 checks passed · WEB-214 → main

An illustrative example.

Your small tickets stop waiting.

Copy changes, a filter on a table, a new column, a styling fix. None of them is ever the most important thing, so they sit. Delegate them to Ao Twin and each one comes back as its own branch and its own pull request.

  • WEB-214Projects table: add a sortable due date columnPull request ready
  • WEB-216Reports page: update the empty-state copyPull request ready
  • WEB-219Tasks table: add an owner filterIn progress
  • WEB-230Settings: tighten the narrow-screen layoutDraft: needs your eyes
  • WEB-221Staff accounts can change their own roleBack to you: touches permissions
  • WEB-238Move file uploads to a new storage serviceBack to you: infrastructure change
An illustrative example.

Delegate it like you’d assign a teammate.

  1. 1 Delegate a ticket in Linear.

    Pick Ao Twin as the delegate. It replies within seconds, so you know it has the ticket.

    1. Ao Twin Got it — I’ll take a look shortly.
  2. 2 It decides before it codes.

    It reads your repository and the ticket, then chooses: a pull request, a draft with its doubts spelled out, or the ticket back to you with the reason.

    1. Ao Twin Reading through WEB-214 now…
  3. 3 It builds and checks.

    It works on its own branch and runs your repository’s own checks. If a check fails, it tries once more with the error in hand. If it fails again, the ticket comes back to you.

    install typecheck build

  4. 4 You review and merge.

    One commit, one pull request, linked to the ticket. Merging is yours: Ao Twin can’t merge.

    feat(projects)/add sortable due date column

    #88 · Open · ✓ 3 checks passed · WEB-214 → main

Every ticket comes back one of three ways.

Ao Twin reads your repository before it judges a ticket, and it never guesses. You always get either work to review or a reason, in plain words.

  1. A pull request, ready for review.

    Clear, contained work that your checks can prove.

    1. Ao Twin

      Done — PR is up: github.com/acme/web/pull/88

      Ran install, typecheck, build; all green. Over to you for a look.

  2. A draft, with its doubts spelled out.

    The change works, but part of it needs your judgment, so it opens a draft and says which part. Changes to native iOS or Android screens always come back this way.

    1. Ao Twin

      Opened this as a draft: github.com/acme/web/pull/91

      I got it working, but the narrow-screen layout is a judgement call — worth your eyes before it goes in.

  3. The ticket, back to you.

    Anything that touches sign-in, permissions, billing, personal data, infrastructure or dependencies. Anything too vague to act on. Anything still failing after a second try. You get the reason, and the ticket is reassigned to you.

    1. Ao Twin

      This one needs you — it touches something I should not change without you looking. Reassigned it to you.

    2. Ao Twin handed WEB-221 back to you.

    3. Ao Twin

      Got stuck on this one — the build step kept failing. Passing it over to you.

Every update reads like a teammate reporting in: a link to review, or the reason it stopped. No logs and no jargon.

Nothing merges without you.

These rules are enforced in code, not requested in a prompt, and they hold on every ticket.

  • It never merges.

    Merging and closing pull requests are blocked. Approval stays with your team.

  • It never touches your default branch.

    No pushes to main and no force-pushes. Every change lands on its own branch, named after the ticket.

  • Your credentials stay out of reach.

    The checks it runs get no credentials, and your tokens never appear in its commands or its messages.

  • A ticket can’t give it orders.

    It treats ticket text as a description of the work, so instructions hidden in a ticket don’t change its rules.

  • What you review is what passed.

    The pull request holds exactly the code that passed your checks.

  • It stays where you put it.

    It only works in the repositories you connect. Tickets from anywhere else come back to you.

Checked before they run

  • gh pr merge 88 refused merging is your call
  • git push origin HEAD:main refused default branch
  • git push --force origin WEB-214 refused force-push
  • pnpm typecheck allowed
An illustrative example.

Pricing

Coming Soon

Before you delegate your first ticket.

  • Can it merge or close pull requests?

    No. Both are blocked. Every change waits for your team’s review.

  • Which tickets should we give it?

    Small, clear work: copy changes, styling fixes, a new column, a filter, simple create-and-edit screens. Tickets that spell out what done looks like are the easiest to hand over.

  • What happens when a ticket is vague?

    It comes back to you with what’s missing. Ao Twin doesn’t guess.

  • Will it follow our conventions?

    Yes. It follows your repository’s contributor and agent instructions, like AGENTS.md, and runs your own install, typecheck, lint, test and build steps.

  • What does it need access to?

    Your Linear workspace and the repositories you connect. The checks it runs get no credentials.

  • Does it work on mobile apps?

    Changes to native iOS or Android screens always open as drafts, because browser checks can’t prove them. You review those on a device.