Agent LoopLicenseThis project is source-available under the PolyForm Perimeter 1.0.1. You may use, study, modify, and contribute to the software subject to the license terms. Use of this software to create or provide a competing product is not permitted. Commercial licensing and other licensing arrangements are available from the copyright holder. One button that runs a self-routing AI development loop against a ClickUp board. Claude, Codex and Grok take turns coding and reviewing each other's work. A ClickUp list is the task
queue, the state machine and the audit trail. You press one button; work moves from What it actually doesEvery pass, the dispatcher senses which agent CLIs are up and not rate-limited, then routes itself. There are no modes and no reviewer to pick.
The invariant that never bends: nothing is ever committed that was reviewed by the agent that wrote it. When the second opinion isn't available, work parks instead of landing. That is the whole design — an agent grading its own homework is not review. Beyond the routing, the parts that matter in practice:
Requirements
The extension ships the dispatcher inside itself. Your repository needs nothing added to it. InstallSearch Agent Loop in your editor's Extensions panel, or install from the command line. Either way the editor keeps it up to date for you. VS Code — Marketplace listing
Cursor, VSCodium, Windsurf — these do not use the Microsoft Marketplace, so they pull the same extension from Open VSX
Installing the
|
| Required | CLICKUP_TOKEN, AGENT_LOOP_LIST_ID |
| Your project | base branch, repo path, project prompt contract |
| Verification | repo-relative test command, sandbox location, dependency dirs to seed (coder/reviewer/verify), test env file, deliberate primary-path opt-out, parseable verify-scope line |
| Board vocabulary | all 8 status names, both custom field names, the never-pick-up column |
| Agent commands | the full CLI invocation for each agent — change model, flags, or binary |
| Timing | poll interval, churn cap, per-stage timeouts, implement idle-progress cap, CLI turn budget, opt-in forge check wait, retry policy |
| State files | lock, stop flag, log, handover report, churn tally, rescue manifest |
Nothing about your board's vocabulary is hardcoded. If your workflow spells things differently,
override the names; no code change is needed. npm test enforces this — a setting the dispatcher
reads but the example never documents fails the build.
Commands
| Command | |
|---|---|
| Agent Loop: Start / Safe Stop | The status-bar button. Start, or stop cleanly. |
| Agent Loop: Set up / reconfigure ClickUp | The first-run wizard. |
| Agent Loop: Check the ClickUp board | Validate token, statuses and fields. Writes nothing. |
| Agent Loop: Open the config file | Open ~/.agent-loop.env. |
| Agent Loop: Force Stop | Kill now. May leave a task mid-implement; the next start recovers it. |
| Agent Loop: Open last handover report | What the last Safe Stop left behind. |
| Agent Loop: Recover unsafe stop | Commit preserved sandbox work after an unsafe-child stop, if no descendant is still alive. |
Writing tasks
This is the part that determines whether the loop converges or churns, and it is worth ten minutes before you write twenty tasks. examples/TASK_AUTHORING.md covers it in full. The short version:
- The Acceptance Criteria field is the spec. The task name is just a label the branch name is derived from.
- One concern, one layer, per task. Not a line-count rule — a large cohesive change is safer than a small one secretly bundling two independent issues.
- Add an explicit SCOPE GUARD line naming what the task must not touch. Single biggest churn-preventer there is.
- Bake required tests and known edge cases into the criteria. A reviewer will block on an untested edge case whether or not you mentioned it — better to state it than to lose a round discovering it.
Other examples in this repository:
agent-loop.contract.example.md— a per-project rules file appended to every implement and review prompt.agent-loop-verify.example.mjs— a selective verification harness, for when running the whole suite is too slow. Also the worked example of loading test environment from a file rather than hardcoding an engine, and of the one rule that makes a narrowed run trustworthy: a diff is run against only its own changed tests when it contains nothing but test files. One production file and the whole suite runs.
Safety and scope
Be clear-eyed about what this is: you are letting AI agents write, review and push code to your repository unattended. The guard rails are real but they are not a sandbox.
- Agent calls run in throwaway clones with no remotes and no credentials, and the dispatcher detects any agent that reaches back into your primary repo — detects, not prevents. Nothing stops an agent that invents an absolute path. Real containment needs an OS-level sandbox and is out of scope here.
- Only reviewed, verified commits are pushed, and only to task branches merged into your base branch.
- Deploy is never automated. The loop stops at
committed. - Your ClickUp token is a personal token with your full permissions. It lives in one file outside
your repos, at
0600, and the VS Code extension never loads it into memory.
Run it on a repository you can recover, with a base branch you can revert, and read the review comments for the first few tasks.
Contributing
Contributions are welcome, subject to CONTRIBUTING.md and the Contributor
License Agreement in CLA.md. npm test needs no network, no token and no VS Code.
License details
Agent Loop is source-available, not OSI open-source software.
See LICENSE.md for the full PolyForm Perimeter License 1.0.1 text and the required
notices. The PolyForm license itself is the controlling legal text; the summary at the top of this
file does not replace or modify it.
Commercial licensing
If you want to use Agent Loop in a way the public license does not permit — including any use that would provide a competing product — contact sergey.ohanyan@gmail.com to discuss a separate commercial license. See COMMERCIAL-LICENSING.md.
The Contributor License Agreement allows the Project Owner to incorporate community contributions while retaining the ability to offer the Project under separate commercial or future licensing terms.
Copyright © 2026 Sergey Ohanyan. All rights reserved.