AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Worktrees는 파일 충돌을 해결하지만 의존성을 못한다. Wooi는 의존 작업을 겹치지 않게 쌓아 리뷰를 차이로 바꾼다
Worktrees solve file collisions; they don't solve dependencies. Wooi stacks dependent work so it never collides — and agents stack their own — then turns every review into a diff you work on.
개발 도구TypeScript · JavaScriptGitHub @youngminnnn온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Run AI coding agents in parallel — and stack them when work builds on work. A macOS app that gives every task its own git worktree, branch, and Claude Code session.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Parallel agents are the easy part. Landing their work isn't.
Wooi is a macOS desktop app for orchestrating multiple AI coding agents in
parallel, each on its own isolated git worktree. Each task gets its own worktree,
branch, and agent session.README 전문 보기 ↗Parallel agents are the easy part. Landing their work isn't.
English · 한국어
Wooi is a macOS desktop app for orchestrating multiple AI coding agents in parallel, each on its own isolated git worktree. Each task gets its own worktree, branch, and agent session.
Running agents side by side is the horizontal axis, and isolated worktrees already cover it. Worktrees solve file collisions; they don't solve dependencies — when task B builds on task A's schema change, isolation is the thing in the way. Wooi adds the vertical axis: dependent work branches off the work it depends on, and Wooi keeps the whole chain valid as parents merge. Agents can build those chains themselves through Wooi's built-in tools, and every review lands on the diff instead of in a transcript.
Agent support — Since v1.4.0, Wooi supports both Claude Code (via the Claude Agent SDK) and OpenAI Codex (via the Codex CLI). Choose an agent when creating a workspace, then switch between them later with
/agent. When a conversation is already under way, Wooi carries its context into the next message to the new agent.
Wondering how this lines up with other tools? See the comparison page, where every claim is sourced and dated.
Wooi ships as a signed and notarized .dmg (Apple Developer ID), so it opens
without Gatekeeper warnings. Apple Silicon only.
brew install --cask youngminnnn/tap/wooi
That's it — the cask installs Wooi.app into Applications. Open it from there and follow the onboarding.
Already installed Wooi from the .dmg? Homebrew won't take over an app it
didn't put there, and stops with It seems there is already an App at '/Applications/Wooi.app'. Add --adopt to hand the copy you already have over
to Homebrew instead of replacing it — any version works, and the app on disk is
left exactly as it is:
brew install --cask --adopt youngminnnn/tap/wooi
.dmg.dmg
and drag Wooi into Applications. Older builds live on the
Releases page.Wooi updates itself: it checks GitHub Releases on launch, downloads new versions in the background, and shows a "Restart to update" banner when ready. Restarting mid-turn would cut an agent off, so the banner also offers "Restart when work finishes" — Wooi then waits until every workspace is idle and restarts on its own. You can also check manually in Settings → About.
On v1.0.0? That build predates auto-update, so it won't update on its own — download v1.0.1 (or later) once from the Releases page. Every version from v1.0.1 onward updates automatically.
~/wooi/workspaces/<repo>/<branch>.Edit, Write, and NotebookEdit
tools from changing another known workspace or a connected repository's main checkout.
This is a tool-level guard, not a filesystem sandbox: shell commands are not covered,
while directories explicitly granted with /add-dir remain writable.npm install, npm run dev,
etc.). Setup runs automatically when a workspace is created (optional), Dev is
started/stopped from the script panel, and Archive runs once when a workspace is
archived.When you first launch Wooi, onboarding walks you through:
Wooi reuses the credentials of your installed Claude Code, Codex, and gh CLIs.
An API key is not required when you sign in with a Claude or ChatGPT account.
npm i -g @openai/codex)gitgh (GitHub CLI) — needed for the PR, review, and stacking features: creating/
merging/closing PRs, PR review, stacked branches, and the Check tab. Everything that's
pure git — connecting repos, creating workspaces, running agents, diffs, terminal,
scripts — works without it.Ordered by what sets Wooi apart, not by what you click first.
Not every task is independent — sometimes step 2 has to build on step 1. Wooi manages
those chains itself with plain git and gh — no extra stacking CLI needed.
create_stacked_workspace opens the next workspace on
top of the current branch when the work just finished is a complete, reviewable unit.
See Agent orchestration below.<base> rebases a workspace onto the latest parent
branch and pushes with --force-with-lease. A conflict stops in the worktree so you
can resolve it there.git checkout -b and gh pr create, Wooi reconstructs the stack from the PRs' base
links and shows it the same way.gh-merge-base, so a bare gh pr create — yours or an
agent's — targets the parent branch instead of the repo's default branch. If a PR
still ends up on the wrong base, Wooi says so and offers to retarget it rather than
quietly accepting it and dropping the stack.Wooi attaches a built-in MCP server named wooi to every Claude Code and Codex session
it starts — nothing to install or configure. The agent doesn't just edit files in its
worktree; it can drive Wooi itself: split a task, open the workspaces for the pieces,
stack them in dependency order, and pass results along the chain.
check_related_work lists the other workspaces open on
this repo and the file paths each one is changing, flags the overlaps with what this
agent plans to touch, and tells it to check with you before editing those paths. Paths
only — diffs are never shared between workspaces.create_workspace starts an independent workspace off the
default branch — in this repo, or in any other repo you've added to Wooi
(list_repositories lists them); create_stacked_workspace starts a child off the
committed tip of the current branch, so its PR targets the current branch. Either can be
handed a first message that starts the new agent's turn immediately.report_to_parent records a result for the workspace this
one was stacked on (it doesn't interrupt the parent), check_stacked_work lists the
children with their branch, PR, and latest report, and notify_child sends an update
that starts a turn in a child — queued behind its current turn if it's busy.list_workspace_peers and send_to_workspace carry a
short text message to another open workspace, even outside the current repo. The
receiver decides whether to accept, hold for approval, or refuse it. Files, diffs, and
transcripts do not travel with the message.open_preview points Wooi's preview at this workspace's dev
server, capture_preview returns a screenshot as an image, and read_preview_issues
returns the console errors and failed requests from that page. The agent drives the
same panel you are looking at, so you can see what it is looking at. Reading only —
there are no click or type tools.open_pull_request (Wooi picks the base: the parent
branch when stacked, the default branch otherwise), list_issues, and run_script /
stop_script / read_script_output for the repo scripts you configured.archive_workspace folds a finished workspace away and
delete_workspace removes one for good. They reach any open workspace, in any
repository, including the one the agent is running in (archive only — deleting itself
would take this conversation with it). You approve each one on a card that names the
workspace and counts what is lost, in every permission mode.Every tool, input, and constraint is documented in the built-in MCP reference.
Getting an agent to review a pull request is the easy part — every agent does that now. The hard part is what comes back: a wall of prose in a chat log, detached from the code it describes, that you then have to translate into actual review comments by hand.
Wooi makes the diff the workspace instead. And since the PR is usually someone else's, a review isn't the next step after your own work — it gets its own row in the sidebar and runs alongside your workspaces instead of taking one over.
N inline · M general tally.~/wooi/reviews/<repo>/pr-<number>-<id>, a worktree dedicated to that review, so the
agent can read code outside the changed hunks and grep the rest of the tree without
touching the checkout you're working in.Wooi supports two coding agents — Claude Code (Claude Agent SDK) and OpenAI Codex (Codex CLI) — and follows each one down to its own controls instead of flattening both into a shared subset. The renderer reads what the selected backend can do, so a workspace only ever shows controls that actually work there.
/agent even after
work has started. Claude and Codex cannot resume each other's native session IDs, so
Wooi builds a bounded handoff from the conversation and sends it with your next message
to the new agent, showing the estimated handoff cost first./rewind (roll the code, the conversation, or
both back to a message) and /btw (ask a side question without derailing the turn) show up where
the backend supports them./model,
/effort, and /fast; options that the current model doesn't support are marked
rather than silently ignored.wooi server.See agent backends for the full capability matrix.
/agent later as well. If work has already started, the next agent receives a bounded
handoff of the conversation; stacked workspaces initially inherit their parent's agent./model and /effort. When unset they follow the global settings;
changing them resumes the same conversation.A tabbed panel on top plus an interactive terminal below (resizable split):
N changed · ↑ahead · ↓behind) opens this as a modal. When there's no PR and the
branch is ahead, a Create PR button opens GitHub's PR page in your browser.@ to fuzzy-search the worktree and pull a file into your
message, so the agent gets its contents without hunting for it first. The menu shows
each file's size and warns when a file is big enough that the agent may truncate or
skip it. Directory mentions (@src/) attach a listing. In the All files viewer,
Mention adds the open file — select lines first and it narrows to just that range
(@src/app.ts#L40-80)./compact manually..env, CLAUDE.local.md, …) would be missing. List them per repo and Wooi brings
them into every new workspace: Copy for files each workspace needs its own version
of (like .env with a per-workspace $PORT), Link to share one original.Note: the diff viewer is read-only — no staging, commit, or revert from within Wooi.
gh CLI.~/Library/Application Support/Wooi/).PRIVACY.md and TERMS.md for details.Requires Node.js 24 (see .nvmrc) on macOS (Apple Silicon).
git clone https://github.com/youngminnnn/wooi.git
cd wooi
nvm use # optional, selects Node 24
npm install # installs deps + Electron binary
npm run dev # launch in development mode
Other useful scripts:
npm run typecheck # node + web TypeScript
npm run lint # eslint
npm test # vitest unit tests
npm run build # production build
npm run dist # package a macOS build into release/
Contributions are welcome! Please read CONTRIBUTING.md for the dev setup, branch/commit conventions, and PR process, and follow the Code of Conduct. To report a security issue, see SECURITY.md — please don't file security bugs as public issues.
Apache 2.0 © youngminnnn. You are free to use, modify, and redistribute the software under the terms of the Apache License 2.0, which also includes an express patent grant.
The "Wooi" name and logo are trademarks and are not covered by that license — see TRADEMARK.md. Contributors sign a CLA before their first PR is merged.
workspaceId can only name a workspace that the caller created, and notify_child is
limited to a direct stacked child. Read-only tools run without a prompt; state-changing
ones follow the workspace's permission mode and show an approval card./wooi:* slash
commands, so you can deliberately invoke the same orchestration path from the composer.