Write
Claude Code writes the change.
It reads the code, makes the edit and runs the tests in its own Git worktree.
claudewriter
> add rate limiting to /api
● Edit middleware/limit.ts +18 −2
● Bash npm test ✓ 47
Open source · MIT · Beta
Vulgr puts your coding agents in one terminal and gives each a role. They hand off work, check each other, and loop until it's right — you just lead the crew.
Works with
Vulgr is not a new agent. It drives Claude Code, Codex, Cursor, Gemini CLI, OpenCode and AGY — the same CLIs and sessions you use every day, wired together into one crew.
The crew
Vulgr gives every agent a job. One writes, one reviews, one tests — and they pass the work along.
↺ loop until approved
Write
It reads the code, makes the edit and runs the tests in its own Git worktree.
claudewriter
> add rate limiting to /api
● Edit middleware/limit.ts +18 −2
● Bash npm test ✓ 47
Review
A second agent reads the diff with fresh eyes. If something's off, the work goes straight back.
codexreviewer
> review claude's changes
1. 429 lacks Retry-After
→ handed back to claude
Test
The tester runs the real flow. Nothing reaches you until it passes.
agytester
> run e2e on /api
✓ Retry-After header set
✓ 48 passed (3.2s)
> add rate limiting to /api, 100 req/min per key ● Read src/routes/api.ts ● Read src/lib/redis.ts ● Edit src/middleware/limit.ts +18 −2 ● Edit src/routes/api.ts +4 −1 ● Bash npm test ✓ 47 passed (2.1s) Done — limiter uses a sliding window in Redis.
> review claude's changes • reading middleware/limit.ts • reading limit.test.ts 1. 429 response lacks Retry-After 2. window resets on Redis restart — acceptable for now → handed back to claude next: agy runs e2e…
Agent chat · new
Chat with Claude Code, Cursor, Codex or Gemini/AGY. Pick the model and effort, watch file changes live — or type two @mentions and the agents start working it out together.
@claude @claude @cursor add rate limiting to /api — 100 req/min per key
Team mode · 3 agents · splitting the work
Claude #1
I'll take the middleware. Plan: fixed window in Redis, reset every 60s.
Claude #2
Pushback — a fixed window lets a client burst 200 requests across the boundary. Sliding window instead?
Claude #1
Fair point, switching to a sliding window. Cursor, can you cover the 429 path?
Cursor
On it — writing limit.test.ts.
⠋ Claude #2 is reading limit.test.ts…
Cursor wants to run npm test -- limit
Chat with Claude Code, Cursor, Codex or Gemini/AGY. Choose the model and effort level and watch file changes live in the side panel.
Several agents genuinely debate in the same chat: they split the work, review each other's code and change their minds when they should. Two @mentions — like @claude @cursor — start it.
Give every agent in the team its own model.
Add the same agent more than once. Each copy thinks on its own and questions the other.
Runs team rounds on fast models so you aren't left waiting.
When an agent wants to run a command, you decide: allow, always allow in this chat, or deny. Or set the default to ask, auto-allow or always deny.
History: past chats sit in the sidebar, grouped by day and searchable. Open an old one and Claude picks up where it left off.
Crew
In Vulgr, agents don't just run next to each other. Each has a role, work moves from one to the next, and a result can be checked by another agent before it reaches you.
Two real terminals side by side. The checker writes tests from your goal, the writer codes until they pass, then the checker reviews the diff and approves or sends feedback.
Three roles in the background, optionally in an isolated Git worktree: a verifier writes tests, a builder codes until they pass, an auditor reviews the diff.
A planner splits a big goal into a task graph, workers run each task in parallel in their own worktree, and a reviewer checks the merged result.
Tip: pair different agents — Claude Code writing, Codex or AGY checking — so each catches what the other misses. Works with Claude Code, Codex, AGY / Gemini CLI, OpenCode and Cursor.
Workspace
Everything you expect from your terminal, plus the pieces that keep a crew organized.
Every pane is a real terminal on xterm.js and node-pty. Your shell, aliases and tools work as usual, and agents run in the same environment you do.
Keep each piece of work separate. Name sessions, group them by project, and pick up where you left off.
Start with # to describe a command in plain words and get the shell command back. Start with ? to ask Claude without leaving the terminal.
See which files the crew touched, get a summary of the session, and keep context the crew carries across sessions.
Download
Download the build for your system — the one that matches your computer is highlighted.
npm install -g vulgr@beta Latest: checking latest release…
Beta builds aren’t code-signed or notarized yet, so your system warns you the first time you open Vulgr. That’s expected — here’s how to run it.
macOS
Move Vulgr to Applications and open it once. When macOS blocks it, go to System Settings → Privacy & Security and click Open Anyway. Or clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/Vulgr.app Windows
Run the installer. When SmartScreen says “Windows protected your PC”, click More info, then Run anyway.
Linux
Make the AppImage executable, then run it:
chmod +x Vulgr-*.AppImage && ./Vulgr-*.AppImage