Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion site/404.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<meta property="og:image" content="https://looper.dancingteeth.net/og.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://looper.dancingteeth.net/og.png">
<link rel="stylesheet" href="/styles.css?v=20260830-navkofi">
<link rel="stylesheet" href="/styles.css?v=20260901-muse">
</head>
<body>
<header class="site-header">
Expand Down
4 changes: 2 additions & 2 deletions site/about/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<meta property="og:image" content="https://looper.dancingteeth.net/og.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://looper.dancingteeth.net/og.png">
<link rel="stylesheet" href="../styles.css?v=20260830-navkofi">
<link rel="stylesheet" href="../styles.css?v=20260901-muse">
</head>
<body>
<header class="site-header">
Expand All @@ -38,7 +38,7 @@
<div class="wrap">
<h1>About Agent Looper</h1>
<p>Agent Looper (<code>@dancingteeth/agent-looper</code>, CLI <code>agent-loop</code>) is an open-source fix-until-green harness for people who already loop in a coding agent and are tired of being the verify step. Your agent writes a frozen <code>GOAL.md</code> and a determined check. A fresh worker implements toward that goal. Shell verify is the exit. An optional judge (<code>reviewGate</code>) only sends blockers back into the loop.</p>
<p>The project is MIT-licensed, inspectable, and runtime-agnostic: Cursor, Cline, OpenCode, Pi, Codex, and DSH. Models stay whoever you already pay. What you own is the loop — frozen goal, measurable <code>verify.sh</code>, sparse <code>REVIEWS.md</code> / <code>AGENTS.md</code>, and orchestration that keeps workers fresh and spend bounded.</p>
<p>The project is MIT-licensed, inspectable, and runtime-agnostic: Cursor, Cline, OpenCode, Pi, Codex, DSH, and Muse Code (in testing). Models stay whoever you already pay. What you own is the loop — frozen goal, measurable <code>verify.sh</code>, sparse <code>REVIEWS.md</code> / <code>AGENTS.md</code>, and orchestration that keeps workers fresh and spend bounded.</p>
<p>Agent Looper is made by Paul Zgordan (dancingteeth), who also writes at The Vacuum Cleaner Gets Smart and ships other tools under the dancingteeth name. This site is the product landing for the harness, not a company brochure.</p>
<ul>
<li><a href="../">Product site</a></li>
Expand Down
2 changes: 1 addition & 1 deletion site/about/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Agent Looper (`@dancingteeth/agent-looper`, CLI `agent-loop`) is an open-source fix-until-green harness for people who already loop in a coding agent and are tired of being the verify step. Your agent writes a frozen `GOAL.md` and a determined check. A fresh worker implements toward that goal. Shell verify is the exit. An optional judge (`reviewGate`) only sends blockers back into the loop.

The project is MIT-licensed, inspectable, and runtime-agnostic: Cursor, Cline, OpenCode, Pi, Codex, and DSH. Models stay whoever you already pay. What you own is the loop — frozen goal, measurable `verify.sh`, sparse `REVIEWS.md` / `AGENTS.md`, and orchestration that keeps workers fresh and spend bounded.
The project is MIT-licensed, inspectable, and runtime-agnostic: Cursor, Cline, OpenCode, Pi, Codex, DSH, and Muse Code (in testing). Models stay whoever you already pay. What you own is the loop — frozen goal, measurable `verify.sh`, sparse `REVIEWS.md` / `AGENTS.md`, and orchestration that keeps workers fresh and spend bounded.

Agent Looper is made by Paul Zgordan (dancingteeth), who also writes at The Vacuum Cleaner Gets Smart and ships other tools under the dancingteeth name. This site is the product landing for the harness, not a company brochure.

Expand Down
2 changes: 1 addition & 1 deletion site/contact/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<meta property="og:image" content="https://looper.dancingteeth.net/og.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://looper.dancingteeth.net/og.png">
<link rel="stylesheet" href="../styles.css?v=20260830-navkofi">
<link rel="stylesheet" href="../styles.css?v=20260901-muse">
</head>
<body>
<header class="site-header">
Expand Down
5 changes: 3 additions & 2 deletions site/docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Agent Looper developer resources — README, CLI, runtimes</title>
<meta name="description" content="Agent Looper developer resources: @dancingteeth/agent-looper README, ARCHITECTURE, OpenCode, Pi, DSH, npm, and llms.txt. Local CLI, no hosted API.">
<meta name="description" content="Agent Looper developer resources: @dancingteeth/agent-looper README, ARCHITECTURE, OpenCode, Pi, DSH, Muse Code, npm, and llms.txt. Local CLI, no hosted API.">
<link rel="canonical" href="https://looper.dancingteeth.net/docs/">
<link rel="describedby" href="https://looper.dancingteeth.net/llms.txt">
<link rel="alternate" type="text/markdown" href="https://looper.dancingteeth.net/docs/index.md">
Expand All @@ -14,7 +14,7 @@
<meta property="og:image" content="https://looper.dancingteeth.net/og.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://looper.dancingteeth.net/og.png">
<link rel="stylesheet" href="../styles.css?v=20260830-navkofi">
<link rel="stylesheet" href="../styles.css?v=20260901-muse">
</head>
<body>
<header class="site-header">
Expand Down Expand Up @@ -46,6 +46,7 @@ <h1>Agent Looper developer resources</h1>
<li><a href="https://github.com/dancingteeth/agent-looper/blob/main/docs/opencode-providers.md">OpenCode providers</a> — OpenRouter, Vercel, Ollama</li>
<li><a href="https://github.com/dancingteeth/agent-looper/blob/main/docs/pi-runtime.md">Pi runtime</a></li>
<li><a href="https://github.com/dancingteeth/agent-looper/blob/main/docs/dsh-plugin.md">DSH plugin</a> — DeepSeek Harness</li>
<li><a href="https://dev.meta.ai/docs/muse-code">Muse Code docs</a> — Meta terminal/CI coding agent (in testing)</li>
<li><a href="../llms.txt">Agent Looper llms.txt</a></li>
<li><a href="../index.md">Agent Looper homepage (markdown)</a></li>
</ul>
Expand Down
1 change: 1 addition & 0 deletions site/docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Agent Looper is the npm package `@dancingteeth/agent-looper` and the CLI `agent-
- OpenCode providers (OpenRouter, Vercel, Ollama): https://github.com/dancingteeth/agent-looper/blob/main/docs/opencode-providers.md
- Pi runtime: https://github.com/dancingteeth/agent-looper/blob/main/docs/pi-runtime.md
- DSH plugin (DeepSeek Harness): https://github.com/dancingteeth/agent-looper/blob/main/docs/dsh-plugin.md
- Muse Code docs (in testing): https://dev.meta.ai/docs/muse-code
- Agent Looper llms.txt: https://looper.dancingteeth.net/llms.txt
- Agent Looper homepage (markdown): https://looper.dancingteeth.net/index.md

Expand Down
23 changes: 21 additions & 2 deletions site/harnesses/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Harnesses — Agent Looper worker runtimes and Grok Bot</title>
<meta name="description" content="How to run Agent Looper with each worker harness: Cursor, Grok Bot, DSH, Cline, OpenCode, Pi, and Codex. Published models and how-to for each.">
<meta name="description" content="How to run Agent Looper with each worker harness: Cursor, Grok Bot, DSH, Cline, OpenCode, Pi, Codex, and Muse Code (in testing). Published models and how-to for each.">
<link rel="canonical" href="https://looper.dancingteeth.net/harnesses/">
<link rel="describedby" href="https://looper.dancingteeth.net/llms.txt">
<link rel="alternate" type="text/markdown" href="https://looper.dancingteeth.net/harnesses/index.md">
Expand All @@ -15,7 +15,7 @@
<meta property="og:image" content="https://looper.dancingteeth.net/og.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://looper.dancingteeth.net/og.png">
<link rel="stylesheet" href="../styles.css?v=20260830-navkofi">
<link rel="stylesheet" href="../styles.css?v=20260901-muse">
</head>
<body>
<header class="site-header">
Expand Down Expand Up @@ -64,6 +64,9 @@ <h1>Harnesses</h1>
<span class="harness-logo__icon" style="--logo: url('../logos/openai.svg')" aria-hidden="true"></span>
<span class="harness-logo__label">Codex</span>
</a>
<a class="harness-logo harness-logo--text-only" href="#muse">
<span class="harness-logo__label">Muse Code</span>
</a>
</nav>

<section class="harness-operator" id="grok-bot">
Expand Down Expand Up @@ -196,6 +199,22 @@ <h3>Codex</h3>
<p class="harness-card__run"><code>pnpm exec agent-loop run .cursor/loops/my-task --runtime codex --review-gate</code></p>
<p class="harness-card__note">Install <code>@openai/codex-sdk</code>; ensure <code>codex</code> CLI is on PATH.</p>
</article>

<article class="harness-card" id="muse">
<header class="harness-card__head">
<div class="harness-card__titles">
<h3>Muse Code <span class="harness-card__status">in testing</span></h3>
<span class="harness-card__pill"><code>--runtime muse</code></span>
</div>
</header>
<p class="harness-card__job">Meta's terminal/CI coding agent — PATH <code>muse</code> plus <code>@muse-code/sdk</code>. <a href="https://dev.meta.ai/docs/muse-code">Muse Code docs</a>.</p>
<p class="harness-card__chips">
<span class="harness-chip">Worker <code>muse-spark-1.2-contributor</code></span>
<span class="harness-chip">Judge any runtime, optional</span>
</p>
<p class="harness-card__run"><code>pnpm exec agent-loop run .cursor/loops/my-task --runtime muse --review-gate</code></p>
<p class="harness-card__note">PATH <code>muse</code> (<code>curl -fsSL https://dev.meta.ai/install.sh | sh</code>, then <code>muse --version</code>) + <code>pnpm add -D @muse-code/sdk</code>. <code>META_API_KEY</code> optional; <code>muse</code> login is enough. In testing. Not on minmax.</p>
</article>
</div>
</section>
</div>
Expand Down
10 changes: 10 additions & 0 deletions site/harnesses/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,13 @@ DeepSeek Harness CLI — worker is `dsh --profile headless`; `dsh-agent-looper`
- Worker: `gpt-5.6-luna` → `gpt-5.6-terra`
- Judge: any runtime, optional
- Run: `pnpm exec agent-loop run .cursor/loops/my-task --runtime codex --review-gate`

### Muse Code (`--runtime muse`) — in testing

Meta's terminal/CI coding agent — PATH `muse` plus `@muse-code/sdk`. [Muse Code docs](https://dev.meta.ai/docs/muse-code).

- Worker: `muse-spark-1.2-contributor`
- Judge: any runtime, optional
- Run: `pnpm exec agent-loop run .cursor/loops/my-task --runtime muse --review-gate`

Install Muse Code: `curl -fsSL https://dev.meta.ai/install.sh | sh`, then `muse --version`. Add `pnpm add -D @muse-code/sdk`. `META_API_KEY` optional; `muse` login is enough. In testing. Not on minmax.
18 changes: 12 additions & 6 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
"name": "Which coding agents does Agent Looper work with?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Agent Looper uses the coding agents you already pay for: Cursor, Cline, OpenCode, Pi, Codex, and DSH. It detects what's installed. You or your agent pick the model and provider. OpenCode and Pi can use OpenRouter, Vercel, Ollama, or another OpenAI-compatible router."
"text": "Agent Looper uses the coding agents you already pay for: Cursor, Cline, OpenCode, Pi, Codex, DSH, and Muse Code (in testing). It detects what's installed. You or your agent pick the model and provider. OpenCode and Pi can use OpenRouter, Vercel, Ollama, or another OpenAI-compatible router."
}
},
{
Expand Down Expand Up @@ -199,7 +199,7 @@
]
}
</script>
<link rel="stylesheet" href="styles.css?v=20260830-navkofi">
<link rel="stylesheet" href="styles.css?v=20260901-muse">
</head>
<body>
<header class="site-header">
Expand Down Expand Up @@ -298,6 +298,9 @@ <h1>Finally, you're not the verify step.</h1>
<span class="harness-logo__icon" style="--logo: url('logos/openai.svg')" aria-hidden="true"></span>
<span class="harness-logo__label">Codex</span>
</a>
<a class="harness-logo harness-logo--text-only" href="harnesses/#muse">
<span class="harness-logo__label">Muse Code</span>
</a>
<a class="harness-logo" href="harnesses/#dsh">
<span class="harness-logo__icon" style="--logo: url('logos/deepseek.svg')" aria-hidden="true"></span>
<span class="harness-logo__label">DSH</span>
Expand All @@ -307,7 +310,7 @@ <h1>Finally, you're not the verify step.</h1>
<article class="tui-answer tui-answer--agents">
<h2>Which coding agents does Agent Looper work with?</h2>
<p>
Agent Looper uses the coding agents you already pay for: Cursor, Cline, OpenCode, Pi, Codex, and DSH.
Agent Looper uses the coding agents you already pay for: Cursor, Cline, OpenCode, Pi, Codex, DSH, and Muse Code (in testing).
It detects what's installed. You or your agent pick the model and provider.
OpenCode and Pi can use OpenRouter, Vercel, Ollama, or another OpenAI-compatible router.
How-to and default models: <a href="harnesses/">Harnesses</a>.
Expand Down Expand Up @@ -424,7 +427,7 @@ <h2>How is Agent Looper different from looping in chat?</h2>
<div class="wrap">
<h2>Open spine, not rented brain</h2>
<p class="section-intro">
MIT. Inspectable. Models stay whoever you already pay — Cursor, OpenCode, OpenRouter, Codex, DSH.
MIT. Inspectable. Models stay whoever you already pay — Cursor, OpenCode, OpenRouter, Codex, DSH, Muse Code (in testing).
What you own is the loop: frozen <code>GOAL.md</code>, measurable <code>verify.sh</code>,
sparse <code>REVIEWS.md</code> / <code>AGENTS.md</code>, and orchestration that keeps workers fresh and spend bounded.
</p>
Expand Down Expand Up @@ -461,14 +464,14 @@ <h2>Install Agent Looper</h2>

Requirements: Node 22+ and pnpm.

1. Add @dancingteeth/agent-looper and the SDK for the coding agent on this machine. Cursor uses @cursor/sdk. If you're not sure, detect what's installed (Cursor, Cline, OpenCode, Pi, Codex, DSH).
1. Add @dancingteeth/agent-looper and the SDK for the coding agent on this machine. Cursor uses @cursor/sdk. If you're not sure, detect what's installed (Cursor, Cline, OpenCode, Pi, Codex, DSH, Muse).
2. Keep @dancingteeth/agent-looper in package.json even if you gitignore `.cursor/loops`. Don't only npx it.
3. Use an API key already on this machine, or run under Doppler. Don't invent keys.
4. Run: pnpm exec agent-loop-init
5. Write GOAL.md for the feature and freeze it. Don't rewrite the goal mid-loop.
6. Write a determined check until `bash verify.sh` is an honest pass/fail that the feature actually works. The model does not get to say done.
7. Start the loop:
pnpm exec agent-loop run .cursor/loops/&lt;task&gt; --runtime &lt;cursor|cline|opencode|pi|codex|dsh&gt; --review-gate
pnpm exec agent-loop run .cursor/loops/&lt;task&gt; --runtime &lt;cursor|cline|opencode|pi|codex|dsh|muse&gt; --review-gate
8. Review skill: blockers come back for the next iteration. Advisory is my call. Don't loop on subjective taste.

Cursor example (swap the SDK, key, and --runtime if this machine isn't Cursor):
Expand Down Expand Up @@ -546,6 +549,7 @@ <h2>Workers &amp; judge</h2>
<li><strong>OpenCode</strong> — Go or BYOK through OpenRouter, Vercel, Ollama, and more</li>
<li><strong>Pi</strong> — OpenRouter by default, or another OpenAI-compatible router you configure</li>
<li><strong>Codex</strong> — ChatGPT / OpenAI</li>
<li><strong>Muse Code</strong> — Meta terminal/CI (in testing)</li>
<li><strong>DSH</strong> — DeepSeek Harness CLI, plus a plugin for dsh web</li>
</ul>
<p class="docs-pointer">
Expand All @@ -555,6 +559,8 @@ <h2>Workers &amp; judge</h2>
·
<a href="https://github.com/dancingteeth/agent-looper/blob/main/docs/pi-runtime.md">Pi runtime</a>
·
<a href="https://dev.meta.ai/docs/muse-code">Muse Code docs</a>
·
<a href="https://github.com/dancingteeth/agent-looper/blob/main/docs/dsh-plugin.md">DSH plugin</a>
·
<a href="https://github.com/dancingteeth/agent-looper/blob/main/README.md">README.md</a>
Expand Down
6 changes: 3 additions & 3 deletions site/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ npm: `@dancingteeth/agent-looper` · CLI: `agent-loop` · site: https://looper.d

## Which coding agents does Agent Looper work with?

Agent Looper uses the coding agents you already pay for: Cursor, Cline, OpenCode, Pi, Codex, and DSH. It detects what's installed. You or your agent pick the model and provider. OpenCode and Pi can use OpenRouter, Vercel, Ollama, or another OpenAI-compatible router. How-to and default models: [Harnesses](https://looper.dancingteeth.net/harnesses/).
Agent Looper uses the coding agents you already pay for: Cursor, Cline, OpenCode, Pi, Codex, DSH, and Muse Code (in testing). It detects what's installed. You or your agent pick the model and provider. OpenCode and Pi can use OpenRouter, Vercel, Ollama, or another OpenAI-compatible router. How-to and default models: [Harnesses](https://looper.dancingteeth.net/harnesses/).

## How do Agent Looper worker and judge presets work?

Expand Down Expand Up @@ -57,14 +57,14 @@ Set up Agent Looper in this repo for the feature I want. I don't want to babysit

Requirements: Node 22+ and pnpm.

1. Add @dancingteeth/agent-looper and the SDK for the coding agent on this machine. Cursor uses @cursor/sdk. If you're not sure, detect what's installed (Cursor, Cline, OpenCode, Pi, Codex, DSH).
1. Add @dancingteeth/agent-looper and the SDK for the coding agent on this machine. Cursor uses @cursor/sdk. If you're not sure, detect what's installed (Cursor, Cline, OpenCode, Pi, Codex, DSH, Muse).
2. Keep @dancingteeth/agent-looper in package.json even if you gitignore `.cursor/loops`. Don't only npx it.
3. Use an API key already on this machine, or run under Doppler. Don't invent keys.
4. Run: pnpm exec agent-loop-init
5. Write GOAL.md for the feature and freeze it. Don't rewrite the goal mid-loop.
6. Write a determined check until `bash verify.sh` is an honest pass/fail that the feature actually works. The model does not get to say done.
7. Start the loop:
pnpm exec agent-loop run .cursor/loops/<task> --runtime <cursor|cline|opencode|pi|codex|dsh> --review-gate
pnpm exec agent-loop run .cursor/loops/<task> --runtime <cursor|cline|opencode|pi|codex|dsh|muse> --review-gate
8. Review skill: blockers come back for the next iteration. Advisory is my call. Don't loop on subjective taste.

Cursor example (swap the SDK, key, and --runtime if this machine isn't Cursor):
Expand Down
Loading
Loading