A team, not a chatbot
Each role is its own agent with its own model, instructions and permissions. A deterministic state machine calls one role at a time, and every answer is a typed schema.
Write what you want built. A Product Owner turns it into a backlog, an Architect into a plan, specialists build it phase by phase, QA writes the tests and DevOps opens the pull request. Nothing moves past a gate until a person says yes.
$ docker run -d --name slipwright -p 8500:8500 \
-v slipwright-state:/data -v slipwright-work:/work \
ghcr.io/ksksertac/slipwright:latest
Most coding agents are one model in a loop, and you find out what it did when it is finished. Slipwright keeps a person at the wheel from request to pull request.
Each role is its own agent with its own model, instructions and permissions. A deterministic state machine calls one role at a time, and every answer is a typed schema.
Backlog, architecture, screens, test cases, tests and deployment each stop at a gate. Edit what was proposed, approve it, or send it back with a reason.
Every step is written to the database before the next one runs. Stop the server mid-development and start it again: running work carries on, waiting work keeps waiting.
It runs on your own model keys, pushes to your own GitHub or Bitbucket, and mirrors the backlog into your own Jira.
Every stage stops at a gate you control. The agents never talk to each other; the engine hands work from one role to the next.
Describe what you want in plain words: in the pipeline, from the CLI or from Telegram.
Epics, stories and tasks, written after reading the request and the repository. Rename, add or remove anything before approving.
The stack, the build/test/run commands, the decisions and one phase per task. Reorder phases, change domains, files or commands.
Backend, web and mobile developers do the work, with the Designer's screens ready before any UI phase. After every phase the build gate runs your build_cmd and test_cmd; a red build goes back to the same specialist (up to three times), and QA reviews the diff against your standards.
Approve the test cases, then the unit and end-to-end tests written against exactly those cases. Or go on without tests.
Deployment files, the pushed branch and a pull request described from the plan, test cases and history. CI is watched; red CI goes back to the developer who wrote the code.
The pull request link is on the development and in the activity feed. Review it like any other PR.
From the Agents page to a new project linked to Jira. The backlog and the plan are approved and become issues on the Jira board, the Designer's screens are approved, QA's test cases are approved from Telegram, and DevOps proposes an AWS deployment on ECS Fargate, pushes the branch and opens the pull request.

Each agent has its own provider, model, thinking depth, standards and permissions, enforced by the engine, not by the prompt.
Reads the request and the repository, writes epics, stories and tasks.
Chooses the stack, the build/test/run commands, the decisions and one phase per task.
Draws the screens the web and mobile specialists will build, behind a gate of its own.
Implement one phase each, in the phase's own domain, behind the build gate.
Proposes test cases, then writes unit and end-to-end tests for the approved ones, and reviews every diff against your standards.
Proposes the deployment, writes it, pushes the branch and opens the pull request.
Reads every gate and recommends approve or reject, with confidence, risk and reasons.
Put a colleague on an agent: they approve and edit only at that agent's gates, and are mailed when work arrives.
Slipwright plans a development and splits it into phases. It never runs a model or a build on these machines itself: each agent asks for work it can do, and takes one phase at a time.
It keeps the plan, the gates and the order of the phases. It decides what is next and checks every answer: a wrong one is a retry, never a wrong file.
Each says what it can do (write:backend, write:web, ios, android …) and is given only that. A Mac with Xcode gets the iOS builds, a Windows PC with Codex writes the web phases, and a Linux box over SSH runs with no window at all.
The phase is written on the machine with its own Claude Code or Codex sign-in, or its own API key. Keys never leave it.
Plain HTTP on the same network, or sealed end to end through the relay when the machine is somewhere else.
Lend this computer to your Slipwright: a desktop app for macOS, Windows and Linux, or one file for a server with no window.
Prefer a .zip? Apple Silicon .zip · Intel .zip
xattr -cr "/Applications/Slipwright Agent.app"
Slipwright-Agent-Setup.exe.chmod +x Slipwright-Agent.AppImage
./Slipwright-Agent.AppImage
sudo apt install ./slipwright-agent.deb
For a box you reach over SSH (AWS EC2, Azure VM, any Linux server): no window, no keyring. One file that needs Node 20 or newer and nothing else, configured by a settings.json next to it.
mkdir ~/slipwright && cd ~/slipwright
curl -LO https://github.com/ksksertac/slipwright-agent/releases/latest/download/slipwright-agent.cjs
# writes settings.json: fill in "code", "name" and each agent's model
node slipwright-agent.cjs init
# models found, agents, tokens, pairing
node slipwright-agent.cjs check
# pairs the first time, then takes work
node slipwright-agent.cjs
{
"code": "SW-…",
"name": "build-server-1",
"max_concurrent": 1,
"work_dir": "./work",
"run_builds": true,
"agents": {
"backend": { "enabled": true, "model": "claude-code:sonnet" },
"web": { "enabled": true, "model": "codex" },
"mobile": { "enabled": false },
"devops": { "enabled": false }
},
"keys": { "anthropic": "env:ANTHROPIC_API_KEY", "openai": "" },
"source": { "github_token": "env:GITHUB_TOKEN", "bitbucket_user": "", "bitbucket_app_password": "" },
"jira": { "site": "acme.atlassian.net", "email": "you@acme.com", "token": "env:JIRA_TOKEN" }
}
:<model>: claude-code, codex, anthropic, openai, deepseek, gemini, qwen, glm, minimax, openrouter or evren."env:NAME" and read from the environment. Keep a file with keys at chmod 600.settings.json is re-read within seconds: switch an agent off or change its model without a restart.slipwright-agent.state.json, so uploading a new settings.json never unpairs the machine.[Unit]
Description=Slipwright Agent
After=network-online.target
[Service]
User=slipwright
WorkingDirectory=/home/slipwright/slipwright
ExecStart=/usr/bin/node /home/slipwright/slipwright/slipwright-agent.cjs
Environment=ANTHROPIC_API_KEY=sk-ant-…
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now slipwright-agent
No container can hold macOS, so Xcode can never run in Slipwright's Docker image. The Mobile Builder is a small helper on a Mac, outside Docker, that does the builds the server cannot: iOS with Xcode, Android with Android Studio.
slipwright worker --connect <code> from Settings → Machines → Connect a machine.
Gates you can edit, a pipeline for every development and a dashboard of what waits for you.
Each gate offers Save, Approve and Reject with a reason, and the reason goes back to the agent as feedback.

Rename epics, stories and tasks, add or remove tasks. The Architect designs one phase per task from exactly what you approve.

Read the decisions, reorder phases, change a phase's domain or its files, and adjust the build, test and run commands.

Running agents, approvals pending across every project (answerable right there), developments by state and a live activity feed.

Each card shows which provider and model the agent runs on right now, how deeply it thinks, which standards it reads and what it is allowed to do.

A strong model for the Architect and a cheap one for DevOps. Keys are stored encrypted, and Test connection tells you which models each key can use.

Group notifications in Telegram, Slack, Discord or Microsoft Teams: told when an agent is waiting, when a development stops and when one finishes.

Per project, choose how much the supervisor does. When a build fails, it also decides whether the same specialist fixes it, whether to re-plan, or whether to ask a person.

After every phase, the project's own build and test commands run. Every green phase is committed on the development's branch. Then QA reviews the diff against your standards: Markdown pages per domain, indexed for keyword and optional embedding search.
# the project's own commands, after every phase
$ uv run pytest -q
........................ 24 passed in 3.1s
$ npm run build
✓ built in 2.4s
# green → committed on sw/notes-search
# QA review against standards/backend.md
review: advisory · 0 blocking findings
Pin each agent to its own provider and model. Change the model in the profile and that role runs on it. No code change, no restart.
"architect": { "model": "claude-opus-5",
"thinking_depth": "high" },
"qa": { "model": "claude-sonnet-5",
"thinking_depth": "medium" },
"devops": { "model": "claude-haiku-4-5",
"thinking_depth": "low",
"permissions": ["git_push", …] }
Clone a private repository or use a local checkout. A finished development pushes its branch and opens a pull request; red CI goes back to the developer.
The approved backlog becomes epics, stories and sub-tasks. PR links and failures are commented, as a bot account you choose.
The interface is in English and Turkish. Agents write in the project's language; everything is shown in yours through a cached translation bridge.
Per-project budgets on tokens, wall-clock time and model calls stop a runaway development with a readable reason.
Start, approve, reject and message developments from the command line. A JSON API at /docs and server-sent events for every change.
Model keys and tokens are stored encrypted. State and work live in separate volumes, so a checkout can never reach the key.
| Local | Hosted | |
|---|---|---|
| Who writes the build commands | you | strangers |
| Database | SQLite file | PostgreSQL |
| Commands run | on the machine | in a throwaway container |
| Model keys | the installation's | each account's own |
| Quotas | off | on |
Phases written side by side, a branch you can follow on GitHub, an agent you can question, and a development you can take over by hand and give back.
The Architect says what each phase needs, and the plan gate shows it before you approve: which phases need no other, which come after which, and how wide the plan really is.
max_parallel_phases, per project).
Every green phase is committed and pushed at once, and the first push opens a draft pull request, so the work can be followed on GitHub or Bitbucket while it is still being made.

Open any step and Write to the agent that holds it. It answers on its own model, with the step's record, the plan and the work in progress in front of it, and changes nothing.

When you would rather write a part yourself, you do not have to wait for the agents or start over.



Settings → Move carries an account to another Slipwright on the network in one go: projects, developments at whatever gate they stopped, history, attachments, settings and keys, every checkout with its unpushed branches and uncommitted work.

No runaway loops: a phase that cannot get green stops spending and puts the decision to you.
Building, fixing, triage and review of one phase share one budget of model calls (8 by default). A phase that runs out stops spending, and QA recommends what to do next.
Choose Send to the developer or Plan this phase again, and write what should be different. What you write is what the next attempt is told.
A phase out of budget is set aside with its work kept, and the phases that do not need it carry on being built.
Planning again starts from the phase that failed. Phases already committed stay, and the Designer does not draw the same screens again.
Every prompt is trimmed to what that step can use, because tokens are what a development costs.
Optional and per person. Scan a QR code with any authenticator app and type the six digits back; eight recovery codes are shown once.
Link your Telegram account once, then answer gates, check on your projects and start new work from your phone, without opening the app. The bot reads your account and nobody else's.
/projects, /waiting, /status, /running and /cost are answered straight from your data, at no model cost. Or just ask in your own words.
/new, one sentence saying what should be built, and a Yes. Nothing starts until you confirm, because a development spends your own model credit.Create a bot with @BotFather, paste its token under Remote control, then press Get a link code and Open in Telegram. A one-time code, good for 30 minutes, proves the Telegram account is yours.
/durum, /bekleyen, /yeni …).
One image holds everything: the API, the web UI, git, gh, Python and Node. There is no separate database or queue to run.
docker run -d --name slipwright -p 8500:8500 \
-v slipwright-state:/data -v slipwright-work:/work \
ghcr.io/ksksertac/slipwright:latest
# first login (becomes admin)
docker exec -it slipwright slipwright user add ada
Open http://localhost:8500. Keep /data and /work as two separate volumes: /data holds the key that decrypts every stored credential.
git clone https://github.com/ksksertac/slipwright.git
cd slipwright
# optional: API keys, a stable SLIPWRIGHT_SECRET_KEY
cp .env.example .env
docker compose up --build -d
docker compose exec slipwright slipwright user add ada
Try it offline with SLIPWRIGHT_PROVIDER=scripted docker compose up. The whole pipeline runs on canned replies, no keys needed.
git clone https://github.com/ksksertac/slipwright.git
cd slipwright
uv sync
cd web && npm install && npm run build && cd ..
uv run slipwright user add ada
uv run slipwright serve
Serves on http://127.0.0.1:8500. The JSON API is documented at /docs.
Every push to main publishes :latest for amd64 and arm64; a v1.2.3 tag publishes :1.2.3 as well.
Slipwright is fully open source under the Apache 2.0 license. Read every line, run it anywhere, fork it, and help shape where it goes next.
Bug reports, fixes, new model providers, translations, documentation and ideas all help. Every contribution goes through a pull request on GitHub.
CLAUDE.md is the orientation: the layout, the rules that are easy to break and the mistakes already made.# fork on GitHub, then
git clone https://github.com/<you>/slipwright.git
cd slipwright && git checkout -b my-change
uv sync
# the whole suite, lint and types
uv run pytest
uv run ruff check . && uv run mypy
cd web && npm install && npm run lint && npm run build
# push and open a pull request
git push origin my-change
Yes. Slipwright is open source under the Apache 2.0 license. You pay only for the model API calls your agents make, with your own keys.
Run the published Docker image with the command above, create the first login with docker exec -it slipwright slipwright user add <name>, and open http://localhost:8500. A “Getting set up” card on the dashboard walks you through the rest.
Anthropic Claude, OpenAI GPT, Google Gemini, DeepSeek, Alibaba Qwen, Z.ai GLM, MiniMax, OpenRouter and EVREN work out of the box, and each agent can be pinned to its own provider and model. On a self-run install, agents can also use a ChatGPT subscription through OpenAI's Codex CLI.
Slipwright runs on your machine or server. Code is sent only to the model providers you configure, and pushed only to your own GitHub or Bitbucket repository.
Yes. Set SLIPWRIGHT_PROVIDER=scripted to run the whole pipeline on canned model replies. A new account also starts with Example: a Notes app, a finished development to read before you run one of your own.
Nothing is lost. Every step is written to the database before the next one runs, so running work carries on and work waiting for you keeps waiting.
Yes. The full source is on GitHub under the Apache 2.0 license. Open an issue for bugs and ideas, or fork the repository and send a pull request.
Yes. Switch to PostgreSQL, run every command in a throwaway container with SLIPWRIGHT_RUNNER=docker, and turn on sign-up, per-account keys and quotas. None of it is on by default, so a local install stays a single command.
Self-hosted, open source and running on your own keys. One command to start.