Three agents means three terminals to watch, three “done”s to trust, and three diffs you didn’t read.

Coding agents that follow your process.

A desktop app that runs Claude Code, Codex, GitHub Copilot and OpenCode through stages you design.

Runs on your machineYour own subscriptionsMerges only the way your flow saysNo account, no serverSource available · FSL-1.1-MIT
How it works

Say what you want. Answer when asked. Approve the diff.

Everything in between is agents, checked by other agents. Watch SHOP-29 go from a note to main.

Ready for Dev
Dev
Security
Review
Done
SHOP-29CC
Coupon field at checkout
Ready for Dev
filed by Noyan · P2
SHOP-20CC
Checkout page
waits for SHOP-29
1 of 6

Noyan, your planning agent, files it

You said “add a coupon field at checkout”. Noyan read the code and filed SHOP-29 with what it found. It starts in priority order, once an agent is free.

You step in twice. Click a step to jump to it.
Tickets come from wherever you work:Ask Noyan: “Why is checkout slow? Make tickets.” It reads the code and proposes them; you say go.Import from your tracker: Noyan runs your own import skill on GitHub issues, Jira or Linear.Write one yourself: ⌘N, or otaq create from a terminal or script.
Design your flow

Build the flow your tickets walk.

You decide the stages, in your order, and what each one is: an agent working, a check, or a delivery. If a check fails, the work goes back to the stage you choose. Start from a preset, or have one made from how you already work. Flip them to see the columns change.

Start fromPresets use your default model.
Ready for Dev
starts in priority order
Add a stage
an agent works · a check · a delivery
Add a stage
as many as you need, in your order
Done
when your last stage says so
Every stage you add is one of three kinds
An agent works

Runs a skill you pick, in the ticket’s own worktree. Asks you when the ticket doesn’t say.

A check

An agent, or you, passes or fails the work. Several check agents can run side by side.

Delivery

Merge on your machine, on your click or on its own once the checks pass, or open a pull request.

Or have one made from how you already work.

Ask Claude Code, Codex, Copilot or OpenCode to read its own history and your repo. It proposes a flow, and every stage says why it’s there. Keep what you like, then Apply.

CCMade for shop-web· proposed by Claude Code
DevYour sessions run pnpm test before every commit, in 112 of 130 sessions.
SecurityFrom 41 /security-review runs in shop-web.
ValidateYou ask for a second look before merging in most sessions that touch prisma/.
Review · youEvery merge in the last 60 days was yours.
Ship · PRYour remote is GitHub and gh is signed in.
Nothing runs, and no tokens are spent, until you ask.
Start fromshop-web’s flowOtaq defaultSolo autopilotTeam PRSpec firstMade for shop-webCCAsk Claude CodeOCAsk OpenCodeImport a flow…
shop-web’s flow 7 steps · in use
Ready for Devwaits
Devagent · Rust developer
Securitycheck · Security reviewer
KindCheck · an agentAgentSecurity reviewer · Claude CodeSkill/security-reviewFails go toDev
Validatecheck · Validator · moved by Noyan
Reviewyou check
Shipdelivery · PR · Shipper
Donemerged
Noyan · your planning agent
Put Security before Validate.
Done: Security now runs right after Dev, and Validate after it. A fail at either goes back to Dev. Undo?
Ask about the flow…⌘L
Reordering waits until no ticket is between Dev and Validate (3 are). Nothing changes on the board until you apply.CancelApply
Know which one needs you

Stop watching terminals.

Anything waiting on you is turquoise, and nothing else is. One strip above the board lists it for the open project. Other projects show a badge on the rail, and ⌘J moves on to them.

Needs you · 3SHOP-22allow a commandSHOP-12a questionSHOP-32decideNext ⌘J

The Needs you strip

One chip per thing waiting on you: a permission prompt, a question, your check, a check that failed three times. An open question stays until it’s answered, even when you answer in the terminal.

SHOP-12 asks you
Follow the system setting for dark mode? · shop-web

A notification, when it matters

Permission prompts, questions and stopped agents send a macOS notification. None while that ticket’s terminal has focus. Working normally is quiet.

Pause
This project⇧⌘.
All projects
Stops spending at once. Survives restarts. Never lifts on its own.

Pause, and it stays paused

One button holds every agent in a project, or all of them. Nothing is lost, and nothing resumes until you say so.

Review what was already checked

By the time it reaches you, it passed your checks.

The diff, the agent’s summary, every check’s report, the decisions it made, and a list of what the agents couldn’t verify themselves. Run it from the review. Then merge, or open a PR.

SHOP-18Checkout APIYour check
OverviewFiles · 9SessionActivity
Checks
Security · passed · round 1No raw SQL, secrets or auth changes. Report attached.
Validate · passed · round 2Round 1 found a missing 409 for out-of-stock items. Fixed in Dev, then passed.
Decisions
Totals are recomputed on the serverThe client total is ignored. The other option, trusting the cart and only checking it, lets a stale cart through.
Manual checks for you
Pay with a card that gets declined, on the real gateway.
Check the order email renders in Outlook.
Files
app/api/checkout/route.ts
- const total = body.total;
+ const total = priceCart(cart, prices);
+ if (!inStock) return conflict(item);
RunSend back · to DevApprove

On Local merge, if main moved since the checks ran, the merge check runs your command, pnpm test, on the combined result first. If it fails, the work goes back to the agent. A conflict found during Review goes back the same way, with no click needed.

Send back goes to the stage the flow names. To send a ticket anywhere earlier, drag its card.

Live demo

Try it right here.

shop-web, with a flow of its own. Click around: nothing really runs, and nothing leaves this page.

Press Next on the stripChange flow…Ask NoyanApprove SHOP-18Pause
main
Drag a Backlog card to Ready to start it · click a card to open it
Needs you · 6
Backlog2waits
Noyan’s tickets and yours · drag to Ready, or Start
SHOP-31P1CC
P1 · not started
Rust developer
SHOP-41CC
not started
Docs updater
Ready for Dev3waits
Starts in priority order
SHOP-20P2CC
waits for SHOP-29 to merge
Rust developer
SHOP-21P2CC
waits for SHOP-18 to merge
Rust developer
SHOP-44CC
starts in priority order
Rust developer
Dev3agent
Rust developer
SHOP-22P2CC
Needs you: allow rm -rf .next?
Rust developer2m
SHOP-40P2CC
40.2 asks: keep the heart filled after sign-out?
Pieces · 4 · 1 merged
40.2Wishlist button · asks you
40.3Wishlist page · being reviewed
40.4Share link · waits for 40.2, 40.3
Rust developer12m
SHOP-12CC
Asks you: follow the system setting?
Rust developer8m
Security3check
Security reviewer
SHOP-32CC
Failed 3 times: decide
Security reviewer20m
SHOP-29CC
Checking · round 2 · back from Dev
Security reviewer40s
SHOP-19CC
Checking · round 1 of 3
Security reviewer40s
Validate0check
Validator
Nothing here
Review2you
You
SHOP-18P1CC
Your check · passed Security and Validate
Rust developer25m
SHOP-23CC
Your check · passed Security and Validate
Rust developer1h
Ship1delivery
Shipper · opens a PR
SHOP-26OC
PR #481 open · mark merged when it lands
Shipper2h
Big work

Big features: plan first, then build in pieces.

Two things Otaq does for a feature that’s too big for one sitting. Both are stages in a flow, so they show up on the board like everything else.

Plan it first

With the Spec first preset, planning is stages. An agent asks you one question at a time and commits each decision to your project’s docs. Another works out how. A third writes the plan as numbered pieces. You check all three at Spec review, then Dev starts. Small tickets skip the planning stages.

Product specSHOP-40WishlistCC Spec writer
Spec writer · question 3 of 5Should a signed-out visitor be able to add to a wishlist, or do we ask them to sign in first?
Ask them to sign inKeep a local wishlist, merge on sign-inOther…
Ask them to sign in. Keep it simple for v1.
Decision 3, committed to docs/decisions: wishlist needs a signed-in user.
Plan · 4 pieces · written by Milestone plan
1Wishlist API
2Wishlist buttonwaits for 1
3Wishlist pagewaits for 1
4Share linkwaits for 2, 3

Build it in pieces

A big ticket stays one card. Its build agent, the one in charge, starts a helper agent per piece, each in its own worktree, and merges their work. The helpers show as rows inside the card. A helper’s question goes to the agent in charge first; only what it can’t settle reaches you. The checks judge the whole ticket, and it takes one slot of your agent limit.

DevOne card, four worktrees
SHOP-40 · WishlistCC
Wishlist
40.2 asks: keep the heart filled after sign-out?
Pieces · 4
40.1Wishlist APImerged
40.2Wishlist buttonasks you
40.3Wishlist pagebeing reviewed
40.4Share linkwaits for 40.2, 40.3
CCRust developer · in chargeAnswer
Pick the agent for every stage

An agent is a name, a tool, a model, instructions and skills.

Make as many as you like and put one on each stage. Mix vendors: one company’s model can write, another’s can check. Names below are examples. Models are each tool’s “always the newest” choices, so they never go out of date.

CC
Rust developer
Claude Code · opus
“Follow our error-handling rules. Run cargo clippy before you submit.”
/work-ticket/tdd
WorkingSHOP-33
CC
Spec writer
Claude Code · opus
“Ask one question at a time until the spec is clear. Record every decision. Never write code.”
/product-spec
Asks youSHOP-40 · Product spec
CC
Security reviewer
Claude Code · opus · effort high
“Read-only. Flag anything that touches auth, SQL or secrets.”
/security-review
CheckingSHOP-19 · round 1 of 3
CX
Validator
Codex · gpt-sol
“Run the tests and lint. Compare the change with the ticket.”
/validate
CheckingSHOP-30
CC
Docs updater
Claude Code · haiku
“Docs, comments and config only. Never change behaviour.”
/work-ticket/docs-style
Idle
OC
Shipper
OpenCode · default model
“Write the PR description from the ticket and the diff.”
/open-pr
PR openSHOP-26
Dev · a stage with options
CCRust developer · opusdefault
CCFrontend developer · opusapp/ and components
CCDocs updater · haikucheaperdocs and config
Validate · a stage with options
CXValidator · gpt-soldefault
CCStrict validator · opus · effort highprisma/ and payments

Noyan picks one per ticket from your notes (“docs-only change”, “touches payments”). Your choice always wins, and a stage with one agent just uses it.

See what’s left on every plan.⇧⌘U
CC
Claude Code3 running
5h window · 18% left · resets 3:45 pm · week 62% left
today 412k tokens
Use fallback now
CX
Codex1 running
5h window · 71% left
today 96k tokens
CP
GitHub Copilot1 running
month · 80% left · resets Nov 1
today 31k tokens
OC
OpenCode0 running
Limits not reported · tokens only
today 6k tokens

Each tool’s limit windows with reset times, and today’s tokens. When one tool runs out, only its agents wait;Use fallback now moves them to another. Otaq shows no dollar estimates.

Board and List viewsProject Files viewKeyboard shortcuts15 themesotaq CLI
Local first

Your code stays on your machine.

Your tools, your sign-ins

Otaq runs the real claude, codex, copilot and opencode programs with your own subscriptions and permission modes. Never your passwords or keys.

No account, no server

Tickets live in ~/.otaq. Worktrees sit outside your repository, one per ticket. Pushes happen only at a Delivery stage you set.

Otaq itself sends nothing

Unless you opt in to anonymous usage data: which features are used, the Otaq version and your OS. Never code, ticket text or file names. There is no update check.

v0.1Honest status

Otaq is used daily by its author and is early. There are no prebuilt releases yet: build it from source. macOS is the most tested platform; Windows and Linux build and run but have seen less use. Expect rough edges, and please open issues.

Build from source

Rust 1.99+ and Node 24, plus at least one agent tool installed and signed in.

# the desktop app (the web page is built into the binary)
$ git clone https://github.com/otaq-io/otaq.git && cd otaq
$ cd crates/otaq-desktop && npm ci && npm run tauri build
# the otaq command: opens the app, runs the service, and is what agents call
$ cargo build --release -p otaq-cli
$ otaq
Questions

Fair questions.

Why not tmux, a few worktrees and a script?

That works until the third agent asks you something and you miss it. Otaq adds the parts a script doesn’t: a board that is the picture of your flow, checks that run before you see the work, a strip that tells you which one needs you, and a merge that only happens the way your flow says.

Does my agent change?

No. Otaq starts the real claude, codex, copilot or opencode program in a worktree with a ticket. Your sign-in, permission mode, skills, hooks and settings stay as they are. What Otaq writes into a tool’s config is mainly that the folders you add are trusted; Settings → Agent tools lists everything.

Can it merge on its own?

Only if you set a Delivery stage to automatic, and then only after its checks pass. The default flow always waits for your click.

What does checking cost in tokens?

A check is another agent session, so it costs what that tool charges for it. Activity (⇧⌘U) shows each tool’s tokens today and what’s left in every limit window; each ticket shows its own tokens too. You decide how many checks a flow has and which model runs each.

Can my team review on GitHub instead?

Yes. The Team PR preset has no Review stage: checks pass, a pull request opens, and your team reviews it there. Use Delivery · PR in any flow you design.

Is it Mac only?

No, but macOS is the most tested platform. Windows and Linux build and run, with less use so far. Warm builds need a filesystem that can clone copy-on-write (APFS, btrfs, XFS, ReFS); elsewhere a new worktree builds from scratch.

What leaves my machine?

Only what your agent tools, git, gh or az send, with your own sign-ins. Otaq has no account and no server. It sends nothing itself unless you opt in to anonymous usage data, and there is no update check.

Hand off the tickets.
Keep the decisions.

Your flow. Your agents. Your call.