Releases: dancingteeth/agent-looper
Releases · dancingteeth/agent-looper
Release list
0.7.0
0.7.0 — 2026-09-25
Cursor judge is Grok 4.7, DeepSeek Flash defaults are 4.1, and the Go / Cline Pass catalogs pick up the new models.dev rows.
Headline
- Cursor judge is Grok 4.7 —
reviewModeldefaults togrok-4.7when the worker is Cursor.grok-4.6andgrok-4.5stay allowed. Composer 2.5 is still the only Cursor worker. - DeepSeek Flash defaults are 4.1 — DSH worker
deepseek-official/deepseek-flash, OpenCode Goopencode-go/deepseek-v4.1-flash, Cline Passcline-pass/deepseek-v4.1-flash. Previousdeepseek-v4-flashstays allowed. Go minmax stays Hy3. - Claude aliases track the CLI —
opus/sonnet/fablefollow Claude Code latest-per-family (Opus 5, Sonnet 5, Fable 5.1 on 2.1.273). List-price estimates match those ids. Opus 5.5 is on the Cursor SDK catalog; theclauderuntime does not offer it until the CLI does. - Codex lists
gpt-6-astra— optional, not the default judge (gpt-5.6-solstays).
Also
- OpenCode Go / Cline Pass catalog —
pnpm sync:modelspicks up Grok 4.7, GPT-6 Luna, MiMo V2.6 Flash/Pro, and Space Bunny Free from models.dev. - Error discovery between runs — label a diverse sample of
.cursor/loop-exports/before adding averify.sh/REVIEWS.mdcheck. Procedure indocs/unknowns-preflight.md;design-loopand meta-review point at it. Freeze during a run is unchanged. - Supported line: 0.7.x.
0.6.3
0.6.3 — 2026-09-21
DSH wrapped credentials abort before WORKER — quoting version is not enough.
Headline
- DSH wrapped credentials abort before WORKER —
~/.dsh/.credentials.yamlmust be a flatKEY: "string"map. A wrapped store (version/refs/records) or YAML integer (version: 1) now failsagent-check dshandagent-loop runbefore spawning headless. Quotingversionis not enough. The harness does not rewrite that file.
0.6.2
0.6.2 — 2026-09-21
Cursor loops no longer inherit OpenCode escalate from repo defaults; scaffold judges stop when the spec exists; DSH credentials version must be a quoted string.
Headline
- Cursor loops no longer inherit OpenCode
escalateModel— repodefaultsthat pin Go minmax (opencode-go/qwen3.7-plus) are dropped whenloop.jsonsetsruntime: "cursor". Composer worker + another judge still usesreviewRuntime/reviewModel, notescalateModel. Invalid Cursor slugs now say whether the field is the worker, the hung-worker fallback, or the judge. agent-loop-promptscaffold stops when the spec exists — 10-minute wall (not 45m); abort as soon asGOAL.md+verify.shpass freeze; prompt forbidstsc/vitest/viteand copying sibling loops.- DSH credentials
versionmust be a string — a YAML integerversion: 1now fails headless boot (credentials-local). The harness prints a one-line fix instead of the Node stack. Quote it asversion: "1".
0.6.1
0.6.1 — 2026-09-15
Frozen-file creation guard, models.dev catalog + pricing, and soft-gated Go / Cline Pass slugs.
Headline
- Frozen files also cover creation — a worker that adds a frozen basename (
setup.sh,RESEARCH.md, …) that did not exist at loop start now has it removed on restore and the visit fails, closing the cross-run persistence path where a plantedsetup.shwould be auto-selected by the nextagent-loop run. - Model catalog from models.dev —
pnpm sync:modelsregeneratesOPENCODE_GO_LOOP_MODELS,CLINE_PASS_LOOP_MODELS, and pricing from https://models.dev/api.json; weekly CI PR viasync-models.yml. Go / Cline PasscostUsd/maxCostUsdfollow the new rows (some list prices are higher than the old hand table). - Soft-gate unknown Go / Cline Pass slugs — well-formed
opencode-go/<id>andcline-pass/<id>slugs parse even when absent from the curated catalog; unpriced models warn at loop start and report$0cost.maxCostUsdrejects worker orescalateModelslugs with no pricing row.
Also
- Per-runtime defaults, model-shape validation, and capability flags live in one
RUNTIME_SPECtable. Invalid-model errors now readInvalid <field> "<slug>" for <runtimeField> "<runtime>". <hint>; the zod issue path comes from the typedAgentModelError.field. Public exports fromloopAgentConfigare unchanged. - DSH companion bash guard documented as a best-effort tripwire (not a sandbox); README states the shell-trust default is warn-and-run.
- Supported line: 0.6.x.
0.6.0
0.6.0 — 2026-09-11
Single-screen setup wizard, DeepSeek 4.1 Flash on the DSH runtime, a hardened DSH companion guard, and harness control-plane gates.
Headline
- Env vs product verify —
verify.shexit75(EX_TEMPFAIL), exit127(command not found), or aVERIFY_CLASS=envline parks the loop (status: waiting, HITL) instead of sending another worker. Other non-zero exits stay product failures and keep iterating.VerifyResult.verifyClassisok|product|env.deriveLoopRunStatusmaps env-classlastVerify/ failedsetuptowaiting. - Harness setup — optional
loop.jsonsetup, orsetup.shbesideGOAL.md. Runs once, awaited, before the first worker. Evidence insetup.log/run-report.md. Failure does not spawn a worker and restores frozen spec files if setup mutated them. Template:templates/setup.example.sh. - Frozen files — after each visit the harness restores
GOAL.md,loop.json,verify.sh,VERIFY.skill.md,RESEARCH.md,PERMISSIONS.md, andsetup.shif a worker edited them, and fails that visit. The worker prompt names all seven. - Single-screen setup wizard — one persistent Ink render shows the recap plus the current question instead of appending a block per prompt. Back re-asks one step; the review screen re-asks one row and keeps the rest, dropping disabled-branch answers (Telegram, Taskwarrior UUID). A re-asked row starts on your previous answer, so Enter keeps it.
--plain/--answersunchanged. - DeepSeek 4.1 Flash on the DSH runtime —
deepseek-official/deepseek-flash(the DSHDeepSeek-V41-Flashcatalog row, image-capable by default) joins the setup menu, usage pricing, anddocs/dsh-runtime.md. The pinneddeepseek-v4-flashstays the DSH worker default; opt in per loop. - DSH companion guard hardening (
@dancingteeth/dsh-agent-looper0.1.1, first npm release) — the bash guard denies foreground grind launches:agent-loop runand bareagent-loop <loop-dir>,agent-loop-batch,node dist/cli/run.js/./dist/cli/run.js, andtsx src/cli/run.ts, whether started vianpx/pnpm exec/pnpm agent-loop/node_modules/.bin, behinddoppler run … --,sudo -u,env -i,timeout, ornice, inside subshells orif/thenbodies, through$()/ backtick substitution orbash -c/-lc/--login -c, or in executed heredocs. It also blocks secret copy-outs (cp/mv/rsync/install,< fileredirects) and env dumps (doppler run … -- env/printenv,doppler configure), while allowing commands that merely mention the CLI (rg,git log --grep,sed, single-quoted text, doc-writing heredocs).
Also
- Judge prompts fence the goal, diff stat, and
REVIEWS.mdas data, so instructions injected into them cannot steer the verdict. - With
reviewGateon, the configured secondary judge always runs instead of being skipped on a primary PASS. - Log-append, Cline usage, and OpenCode permission-reply failures are logged instead of thrown or swallowed.
agent-loop-batchlists each loop'sverify/finalVerify/setupin the shell-trust warning (same gate as a singleagent-loop run).- DSH plugin: registrations are released through
ctx.effect, a missingskillsDirwarns throughctx.logger, CI compiles the plugin, and its guard cases run inpnpm test. - Landing site: deterministic-check copy, judge caveat, rewritten FAQ and install paths.
Compatibility
- A
verify.shthat used exit75or127for product failures now parks instead of iterating — switch those to another non-zero exit. - A
setup.shbesideGOAL.mdnow runs automatically before the first worker; it is listed in the shell-trust warning. - A worker visit that edits a frozen file is restored and counted as failed.
AgentLoopPhasegainsSETUP(emitted only when setup runs). Phase events stay Experimental.- Pre-0.6.0 lines are unsupported for security fixes.
npm · DSH plugin · tag
0.5.0
0.5.0 — 2026-09-04
Fix-until-green with a prompt TUI, Claude Code as a first-class runtime, list-vs-billed spend, and a documented embed contract.
Headline
agent-loop-prompt— Ink TUI: type an idea; the judge (not the worker) draftsGOAL.md+verify.sh; freeze lint rejects gameable greps; confirm; existing watch TUI grinds. Optionalpreviewafter green is trust-gated and is not executed byagent-loop run. Resume lines keep Doppler when the shell was started that way.- Claude Code worker and judge —
runtime: claude/reviewRuntime: claudespawn PATHclaude -ponce per outer iteration under--safe-mode(CLI 2.1.169+). NoCLAUDE.md, hooks, plugins, MCP, skills, or auto-memory.--no-session-persistenceplusCLAUDE_CODE_DISABLE_AUTO_MEMORY=1. Child unsetsANTHROPIC_API_KEYso print mode uses Claude Code login, not Console pay-per-token. Worker default sonnet (escalate opus); Claude judge default opus. Not oncostPresetminmax. No@anthropic-ai/claude-agent-sdkon the CLI package. Seedocs/claude-runtime.md. - List vs billed spend — Watch and run-report show list (public API rates, including prompt-cache read/write) and billed (runtime invoice). Subscription quota
$0is billed$0, not free;maxCostUsduses billed when PAYG and list when the invoice is$0. DSH headless usage is parsed from session JSONL (including logs that grow in place). - Embed contract + security policy —
docs/embed-api.mdnames stable vs experimental exports, Portal-storable shapes, ADE composition, and a hard-to-rewrite bill of materials.AgentLoopPhase/AgentLoopPhaseEventare re-exported from the package entry.SECURITY.md:security@dancingteeth.netand GitHub private vulnerability reporting. Supported line: 0.5.x only.
Also
- OpenRouter
:freeslugs as valid OpenCode BYOK worker ids; setup labels hosted-$0 stacks. - Review gate treats
BLOCKERSwith an empty list as unparseable, not a silent pass. Verify spawn buffer no longer kills a passing oversized log. - Hosts can pass
workerSessionintorunAgentLoop(still disposed at end of run). - Muse Spark 1.3 is the setup/docs default (1.2 stays as a prior pick). Contributor vs PAYG is billing, not a worker/judge pair.
- Watch TUI: live assistant stream + pid pulse; OpenCode tools in the run report;
check-running-loopsdistinguishes alive / stale / hung / dead / done. - OpenCode skill preflight relinks or drops dangling
~/.agents/skillssymlinks after Cursor plugin-cache rotations. - Competitive-steal planning notes are gitignored and no longer ship in the tarball.
- Publish CI runs on Node 22.15 (DSH
zlib.zstd*).
Compatibility
- Claude Code 2.1.169+ required for
runtime: claude. - Default
costPresetis still minmax. - Phase events stay Experimental (no
schemaVersionyet). No thin-corepackage.jsonexport subpath. - Pre-0.5.0 lines are unsupported for security fixes.