From 2eb213ee9208bbf68c1acca21cf6f58640d98055 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 21 Sep 2026 12:12:46 +0000 Subject: [PATCH] =?UTF-8?q?docs(site):=200.6.2=20copy=20=E2=80=94=20Cursor?= =?UTF-8?q?=20escalate,=20scaffold=20wall,=20DSH=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump changelog links and llms.txt to npm 0.6.2. Document that Cursor loops do not inherit OpenCode escalateModel, agent-loop-prompt stops at freeze (10-minute wall), and DSH credentials need version as a quoted string. Extend landing readiness tests. Co-authored-by: Paul Zgordan --- site/about/index.html | 2 +- site/about/index.md | 2 +- site/docs/index.html | 2 +- site/docs/index.md | 2 +- site/harnesses/index.html | 4 ++-- site/harnesses/index.md | 3 ++- site/index.html | 8 +++---- site/index.md | 6 +++--- site/llms.txt | 4 ++-- src/site/landingAgentReadiness.test.ts | 30 ++++++++++++++++++++++---- 10 files changed, 43 insertions(+), 20 deletions(-) diff --git a/site/about/index.html b/site/about/index.html index 36c5453..ba83be3 100644 --- a/site/about/index.html +++ b/site/about/index.html @@ -44,7 +44,7 @@

About Agent Looper

  • Product site
  • Source
  • npm
  • -
  • Changelog — 0.6.3
  • +
  • Changelog — 0.6.2
  • Author
  • diff --git a/site/about/index.md b/site/about/index.md index 739ed07..8adc032 100644 --- a/site/about/index.md +++ b/site/about/index.md @@ -9,5 +9,5 @@ Agent Looper is made by Paul Zgordan (dancingteeth), who also writes at The Vacu - Product: https://looper.dancingteeth.net/ - Source: https://github.com/dancingteeth/agent-looper - npm: https://www.npmjs.com/package/@dancingteeth/agent-looper -- Changelog (0.6.3): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md +- Changelog (0.6.2): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md - Author: https://dancingteeth.net/ diff --git a/site/docs/index.html b/site/docs/index.html index 5527889..6ccd1d2 100644 --- a/site/docs/index.html +++ b/site/docs/index.html @@ -50,7 +50,7 @@

    Agent Looper developer resources

  • Claude runtime — Claude Code CLI
  • Embed API — contract for embedding Agent Looper
  • Security — reporting vulnerabilities
  • -
  • Changelog — 0.6.3
  • +
  • Changelog — 0.6.2
  • Agent Looper llms.txt
  • Agent Looper homepage (markdown)
  • diff --git a/site/docs/index.md b/site/docs/index.md index ec4efed..97a5028 100644 --- a/site/docs/index.md +++ b/site/docs/index.md @@ -14,7 +14,7 @@ Agent Looper is the npm package `@dancingteeth/agent-looper` and the CLI `agent- - Claude runtime (Claude Code CLI): https://github.com/dancingteeth/agent-looper/blob/main/docs/claude-runtime.md - Embed API (contract for embedding Agent Looper): https://github.com/dancingteeth/agent-looper/blob/main/docs/embed-api.md - Security (reporting vulnerabilities): https://github.com/dancingteeth/agent-looper/blob/main/SECURITY.md -- Changelog (0.6.3): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md +- Changelog (0.6.2): https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md - Agent Looper llms.txt: https://looper.dancingteeth.net/llms.txt - Agent Looper homepage (markdown): https://looper.dancingteeth.net/index.md diff --git a/site/harnesses/index.html b/site/harnesses/index.html index 981d834..8fea7d5 100644 --- a/site/harnesses/index.html +++ b/site/harnesses/index.html @@ -115,7 +115,7 @@

    Cursor

    Judge Grok 4.6

    pnpm exec agent-loop run .cursor/loops/my-task --runtime cursor --review-gate

    -

    Export CURSOR_API_KEY or run under Doppler. Run pnpm exec agent-loop-init once. Set costPreset: "cursor" in loop.json to stay on Cursor for both worker and judge.

    +

    Export CURSOR_API_KEY or run under Doppler. Run pnpm exec agent-loop-init once. Set costPreset: "cursor" in loop.json to stay on Cursor for both worker and judge. Repo defaults that pin OpenCode escalateModel are not applied on --runtime cursor — judge uses reviewRuntime / reviewModel.

    @@ -133,7 +133,7 @@

    DSH

    Judge deepseek-v4-pro

    pnpm exec agent-loop run .cursor/loops/my-task --runtime dsh --review-gate

    -

    Default worker stays deepseek-official/deepseek-v4-flash; opt in to deepseek-official/deepseek-flash (DeepSeek-V41-Flash, image-capable) per loop in setup. Ensure dsh is on PATH. DSH companion plugin guard blocks accidental foreground grinds. See docs/dsh-plugin.md and plugins/dsh-agent-looper/.

    +

    Default worker stays deepseek-official/deepseek-v4-flash; opt in to deepseek-official/deepseek-flash (DeepSeek-V41-Flash, image-capable) per loop in setup. Ensure dsh is on PATH. In ~/.dsh/.credentials.yaml, use version: "1" (quoted) — a bare YAML integer breaks headless boot; the harness prints a one-line fix. DSH companion plugin guard blocks accidental foreground grinds. See docs/dsh-plugin.md and plugins/dsh-agent-looper/.

    diff --git a/site/harnesses/index.md b/site/harnesses/index.md index b2a9c53..ad718ba 100644 --- a/site/harnesses/index.md +++ b/site/harnesses/index.md @@ -32,7 +32,7 @@ IDE subscription via `@cursor/sdk`. - Judge (when worker is Cursor): Grok 4.6 - Run: `pnpm exec agent-loop run .cursor/loops/my-task --runtime cursor --review-gate` -Export `CURSOR_API_KEY` or run under Doppler. Run `pnpm exec agent-loop-init` once. Set `costPreset: "cursor"` in `loop.json` to stay on Cursor for both worker and judge. +Export `CURSOR_API_KEY` or run under Doppler. Run `pnpm exec agent-loop-init` once. Set `costPreset: "cursor"` in `loop.json` to stay on Cursor for both worker and judge. Repo defaults that pin OpenCode `escalateModel` are not applied on `--runtime cursor` — judge uses `reviewRuntime` / `reviewModel`. ### DSH (`--runtime dsh`) @@ -41,6 +41,7 @@ DeepSeek Harness CLI — worker is `dsh --profile headless`; `dsh-agent-looper` - Worker: `deepseek-official/deepseek-v4-flash` (escalates to `deepseek-official/deepseek-v4-pro`) — default; opt in per loop to `deepseek-official/deepseek-flash` (DeepSeek-V41-Flash, image-capable) - Judge: `deepseek-official/deepseek-v4-pro` (when `reviewRuntime: dsh`) - Run: `pnpm exec agent-loop run .cursor/loops/my-task --runtime dsh --review-gate` +- In `~/.dsh/.credentials.yaml`, use `version: "1"` (quoted) — a bare YAML integer breaks headless boot; the harness prints a one-line fix. - DSH companion plugin guard blocks accidental foreground grinds ### Cline (`--runtime cline-pass` · `cline`) diff --git a/site/index.html b/site/index.html index 7c76cc2..475da7f 100644 --- a/site/index.html +++ b/site/index.html @@ -107,7 +107,7 @@ "name": "How do Agent Looper worker and judge presets work?", "acceptedAnswer": { "@type": "Answer", - "text": "Named presets: minmax (efficiency — cheap capable worker, strongest included judge), balanced (spend more on the worker, same judge), cursor (stay on Cursor: Composer + Grok). Or you, your agent, or Looper wires a pair from what's installed. The pair stays for the whole loop. Not Auto." + "text": "Named presets: minmax (efficiency — cheap capable worker, strongest included judge), balanced (spend more on the worker, same judge), cursor (stay on Cursor: Composer + Grok). Or you, your agent, or Looper wires a pair from what's installed. The pair stays for the whole loop. Not Auto. On runtime: cursor, repo defaults that pin OpenCode Go escalateModel are not applied — Composer plus another judge uses reviewRuntime / reviewModel, not escalateModel." } }, { @@ -155,7 +155,7 @@ "name": "How do I start a loop from an idea?", "acceptedAnswer": { "@type": "Answer", - "text": "Two paths: (1) If you see your coding agent's logo on this page — type your idea as a normal prompt, and ask it to implement the feature with Agent Looper. It sets up the loop and keeps grinding until the check is green. (2) If you like the terminal — run pnpm exec agent-loop-setup: a one-screen setup wizard shows your recap and the current question, not a scrolling pile. Go back to change one answer without losing the rest. Then use pnpm exec agent-loop-prompt to type your idea and start the run. The check stays the finish line." + "text": "Two paths: (1) If you see your coding agent's logo on this page — type your idea as a normal prompt, and ask it to implement the feature with Agent Looper. It sets up the loop and keeps grinding until the check is green. (2) If you like the terminal — run pnpm exec agent-loop-setup: a one-screen setup wizard shows your recap and the current question, not a scrolling pile. Go back to change one answer without losing the rest. Then use pnpm exec agent-loop-prompt to type your idea and start the run. The scaffold judge stops as soon as frozen GOAL.md and verify.sh pass freeze (10-minute wall, not a long grind). The check stays the finish line." } }, { @@ -342,7 +342,7 @@

    Which coding agents does Agent Looper work with?

    How do Agent Looper worker and judge presets work?

    - Named presets: minmax (efficiency — cheap capable worker, strongest included judge), balanced (spend more on the worker, same judge), cursor (stay on Cursor: Composer + Grok). Or you, your agent, or Looper wires a pair from what's installed. The pair stays for the whole loop. Not Auto. + Named presets: minmax (efficiency — cheap capable worker, strongest included judge), balanced (spend more on the worker, same judge), cursor (stay on Cursor: Composer + Grok). Or you, your agent, or Looper wires a pair from what's installed. The pair stays for the whole loop. Not Auto. On runtime: cursor, repo defaults that pin OpenCode Go escalateModel are not applied — Composer plus another judge uses reviewRuntime / reviewModel, not escalateModel.

    @@ -383,7 +383,7 @@

    How do I start a loop from an idea?

    If you see your coding agent's logo on this page — type your idea as a normal prompt, and ask it to implement the feature with Agent Looper. It sets up the loop and keeps grinding until the check is green.

    - If you like the terminal — run pnpm exec agent-loop-setup: a one-screen setup wizard shows your recap and the current question, not a scrolling pile. Go back to change one answer without losing the rest. Then use pnpm exec agent-loop-prompt to type your idea and start the run. The check stays the finish line. + If you like the terminal — run pnpm exec agent-loop-setup: a one-screen setup wizard shows your recap and the current question, not a scrolling pile. Go back to change one answer without losing the rest. Then use pnpm exec agent-loop-prompt to type your idea and start the run. The scaffold judge stops as soon as frozen GOAL.md and verify.sh pass freeze (10-minute wall, not a long grind). The check stays the finish line.

    diff --git a/site/index.md b/site/index.md index 49da10f..a116226 100644 --- a/site/index.md +++ b/site/index.md @@ -12,7 +12,7 @@ Agent Looper uses the coding agents you already pay for: Cursor, Cline, OpenCode ## How do Agent Looper worker and judge presets work? -Named presets: minmax (efficiency — cheap capable worker, strongest included judge), balanced (spend more on the worker, same judge), cursor (stay on Cursor: Composer + Grok). Or you, your agent, or Looper wires a pair from what's installed. The pair stays for the whole loop. Not Auto. +Named presets: minmax (efficiency — cheap capable worker, strongest included judge), balanced (spend more on the worker, same judge), cursor (stay on Cursor: Composer + Grok). Or you, your agent, or Looper wires a pair from what's installed. The pair stays for the whole loop. Not Auto. On `runtime: cursor`, repo defaults that pin OpenCode Go `escalateModel` are not applied — Composer plus another judge uses `reviewRuntime` / `reviewModel`, not `escalateModel`. ## How does Agent Looper keep cost down for indie builders? @@ -40,7 +40,7 @@ Two paths: 1. **If you see your coding agent's logo on this page** — type your idea as a normal prompt, and ask it to implement the feature **with Agent Looper**. It sets up the loop and keeps grinding until the check is green. -2. **If you like the terminal** — run `pnpm exec agent-loop-setup`: a one-screen setup wizard shows your recap and the current question, not a scrolling pile. Go back to change one answer without losing the rest. Then use `pnpm exec agent-loop-prompt` to type your idea and start the run. +2. **If you like the terminal** — run `pnpm exec agent-loop-setup`: a one-screen setup wizard shows your recap and the current question, not a scrolling pile. Go back to change one answer without losing the rest. Then use `pnpm exec agent-loop-prompt` to type your idea and start the run. The scaffold judge stops as soon as frozen `GOAL.md` and `verify.sh` pass freeze (10-minute wall, not a long grind). The check stays the finish line. @@ -131,7 +131,7 @@ This tool is free. We keep building it when the community actually uses it and t - [llms.txt](https://looper.dancingteeth.net/llms.txt) - [Harnesses](https://looper.dancingteeth.net/harnesses/) - [Developer resources](https://looper.dancingteeth.net/docs/) -- [Changelog (0.6.3)](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md) +- [Changelog (0.6.2)](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md) - [Embed API](https://github.com/dancingteeth/agent-looper/blob/main/docs/embed-api.md) - [Security](https://github.com/dancingteeth/agent-looper/blob/main/SECURITY.md) - [GitHub](https://github.com/dancingteeth/agent-looper) diff --git a/site/llms.txt b/site/llms.txt index a633a60..d4d1918 100644 --- a/site/llms.txt +++ b/site/llms.txt @@ -6,7 +6,7 @@ When to use Agent Looper: a human wants a feature finished without babysitting C When not to use Agent Looper: there is no deterministic check (pure taste with no script or vision gate); you need a team-ops factory, shared org cloud, or multi-repo orchestration; you want the model to grade itself as “done.” -How an agent should call it: install `@dancingteeth/agent-looper`, ask the human what they want, then implement the feature with Agent Looper (set up the loop, write GOAL.md and verify.sh, run until green). Or from the terminal: `pnpm exec agent-loop-setup` (one-screen setup wizard — recap plus current question) then `pnpm exec agent-loop-prompt --out .cursor/loops/`, then `pnpm exec agent-loop run .cursor/loops/ --runtime `. Optional `--review-gate` re-opens the loop only on blocking review findings. If verify fails because the environment is broken, the loop waits instead of burning another worker. After each visit the harness restores frozen specs and removes any frozen basename a worker planted (e.g. `setup.sh`) so it cannot persist. OpenCode Go and Cline Pass model lists and list prices come from models.dev; unknown well-formed slugs warn at start and read `$0` until priced — budget caps still reject unpriced worker or escalate models. CLI binaries: `agent-loop`, `agent-loop-prompt`. Current npm: **0.6.3** (supported line **0.6.x**). +How an agent should call it: install `@dancingteeth/agent-looper`, ask the human what they want, then implement the feature with Agent Looper (set up the loop, write GOAL.md and verify.sh, run until green). Or from the terminal: `pnpm exec agent-loop-setup` (one-screen setup wizard — recap plus current question) then `pnpm exec agent-loop-prompt --out .cursor/loops/` — the scaffold judge stops as soon as frozen GOAL.md and verify.sh pass freeze (10-minute wall, not a long grind) — then `pnpm exec agent-loop run .cursor/loops/ --runtime `. On `runtime: cursor`, repo defaults that pin OpenCode Go `escalateModel` are not applied; Composer plus another judge uses `reviewRuntime` / `reviewModel`, not `escalateModel`. DSH headless: in `~/.dsh/.credentials.yaml`, quote `version` as `version: "1"` (a bare YAML integer breaks boot). Optional `--review-gate` re-opens the loop only on blocking review findings. If verify fails because the environment is broken, the loop waits instead of burning another worker. After each visit the harness restores frozen specs and removes any frozen basename a worker planted (e.g. `setup.sh`) so it cannot persist. OpenCode Go and Cline Pass model lists and list prices come from models.dev; unknown well-formed slugs warn at start and read `$0` until priced — budget caps still reject unpriced worker or escalate models. CLI binaries: `agent-loop`, `agent-loop-prompt`. Current npm: **0.6.2** (supported line **0.6.x**). ## Developer resources @@ -23,7 +23,7 @@ How an agent should call it: install `@dancingteeth/agent-looper`, ask the human - [Claude runtime](https://github.com/dancingteeth/agent-looper/blob/main/docs/claude-runtime.md): Claude Code CLI (`--safe-mode`) - [Embed API](https://github.com/dancingteeth/agent-looper/blob/main/docs/embed-api.md): contract for embedding Agent Looper - [Security](https://github.com/dancingteeth/agent-looper/blob/main/SECURITY.md): reporting vulnerabilities -- [Changelog](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md): 0.6.3 +- [Changelog](https://github.com/dancingteeth/agent-looper/blob/main/CHANGELOG.md): 0.6.2 - [Harnesses — Agent Looper worker runtimes](https://looper.dancingteeth.net/harnesses/index.md) ## Optional diff --git a/src/site/landingAgentReadiness.test.ts b/src/site/landingAgentReadiness.test.ts index cf76259..c264578 100644 --- a/src/site/landingAgentReadiness.test.ts +++ b/src/site/landingAgentReadiness.test.ts @@ -652,7 +652,7 @@ describe('landing agent readiness', () => { } }) - it('names 0.6.1 setup wizard, env-wait, harness setup, frozen restore, plant block, models.dev soft-gate, and DSH 4.1 Flash opt-in', () => { + it('names 0.6.2 setup wizard, env-wait, harness setup, frozen restore, plant block, models.dev soft-gate, Cursor escalate, scaffold wall, DSH credentials version, and DSH 4.1 Flash opt-in', () => { const html = readSite('index.html') const md = readSite('index.md') const llms = readSite('llms.txt') @@ -688,6 +688,13 @@ describe('landing agent readiness', () => { const softGateBeat = 'soft-gate' const flashOptIn = 'deepseek-flash' const flashLabel = '4.1 Flash' + const cursorEscalateBeat = 'are not applied' + const scaffoldWallBeat = '10-minute wall' + const dshVersionBeat = 'version: "1"' + + const presetsQuestion = faq?.mainEntity?.find( + (q) => q.name === 'How do Agent Looper worker and judge presets work?', + ) for (const surface of [html, md] as const) { expect(surface).toContain(setupWizardBeat) @@ -699,13 +706,17 @@ describe('landing agent readiness', () => { expect(surface).toContain(softGateBeat) expect(surface).not.toContain('0.5.0') expect(surface).not.toMatch(/\bInk\b/i) - expect(surface).not.toMatch(/Current npm.*0\.6\.2/i) + expect(surface).not.toMatch(/Current npm.*0\.6\.0/i) + expect(surface).not.toMatch(/Current npm.*0\.6\.1/i) + expect(surface).toContain(cursorEscalateBeat) + expect(surface).toContain(scaffoldWallBeat) } - expect(llms).toContain('Current npm: **0.6.3**') + expect(llms).toContain('Current npm: **0.6.2**') expect(llms).toContain('0.6.x') expect(llms).not.toContain('0.5.0') - expect(llms).not.toContain('Current npm: **0.6.2**') + expect(llms).not.toContain('Current npm: **0.6.1**') + expect(llms).not.toContain('Current npm: **0.6.0**') expect(llms).toContain(setupWizardBeat) expect(llms).toContain(plantBeat) expect(llms).toContain(modelsDevBeat) @@ -715,19 +726,30 @@ describe('landing agent readiness', () => { ) expect(promptQuestion?.acceptedAnswer?.text).toContain(setupWizardBeat) + expect(promptQuestion?.acceptedAnswer?.text).toContain(scaffoldWallBeat) + expect(presetsQuestion?.acceptedAnswer?.text).toContain('escalateModel are not applied') expect(envQuestion?.acceptedAnswer?.text).toContain(envWaitBeat) expect(spendQuestion?.acceptedAnswer?.text).toContain(modelsDevBeat) expect(spendQuestion?.acceptedAnswer?.text).toContain(softGateBeat) + const cursorCard = + harnessHtml.match( + /
    [\s\S]*?<\/article>/, + )?.[0] ?? '' + expect(cursorCard).toContain('reviewRuntime') + expect(cursorCard).toContain('escalateModel') + const dshCard = harnessHtml.match( /
    [\s\S]*?<\/article>/, )?.[0] ?? '' + expect(dshCard).toContain(dshVersionBeat) expect(dshCard).toContain(flashOptIn) expect(dshCard).toContain(flashLabel) expect(dshCard).toContain('deepseek-v4-flash') expect(harnessMd).toContain(flashOptIn) expect(harnessMd).toContain('deepseek-v4-flash') + expect(harnessMd).toContain(dshVersionBeat) }) it('every HTML page loads analytics.js', () => {