Releases: ksimback/looper
Release list
v0.4.0 - looper lint + runner contract
v0.4.0 — the rubrics become law, the spec becomes an interchange format.
looper lint — the design rubrics as a static checker
python scripts/looper.py lint path/to/loop.yaml # --strict, --jsonNo wizard, no interview. Errors mean the spec won't behave the way it reads at runtime (judge criteria a runner never evaluates, undeclared cross-vendor egress, egress entries naming nobody); warnings are rubric coaching (all-vibe verification, same-family judge, missing caps, and ten more). Exit 1 on errors — wire lint --strict into CI to gate loop specs in PRs the same way you lint code. The wizard runs it after every compile.
Runner contract v1 + conformance suite
loop.resolved.json is now an interchange format. RUNNER-CONTRACT.md is the normative contract for third-party runners — gates, caps, fail-closed consent, two-layer redaction, state/log obligations, exit codes — and the conformance suite proves a runner honors it:
python conformance/check_runner.py path/to/your-runnerTen scenarios, deterministic fixtures, no model CLIs needed. Sabotage-tested: a runner with redaction disabled fails five scenarios. The reference runner is held to the suite in CI.
Redaction covers every send
The host was the one recipient whose prompts were never scrubbed — flagged-file content that leaked into an artifact went verbatim to the host CLI. Now: every send is scrubbed (host included), cmd context-source output is scrubbed, caught leaks are logged and surfaced in state.json, the consent prompt shows leak warnings before asking, and unscrubbable flagged files (>1MB, non-UTF-8) are reported as blind spots instead of silently skipped.
Positioning
README reframed around the Claude Code team's loop taxonomy (turn-based / goal-based / time-based / proactive): each loop type hands something off — the check, the stop condition, the trigger, the whole prompt — and Looper is the design layer that supplies each hand-off.
Test suite 27 → 49; CI green on Python 3.9–3.13 × ubuntu/windows/macos. Every PR (#16–#19) passed a pre-merge high-effort adversarial review. Full details in CHANGELOG.md.
v0.3.0 — Loop pattern library
Named, pre-designed loops the /looper wizard customizes instead of starting from a blank interview.
Highlights
- Five templates under
templates/loops/, each a compiler-validatedloop.yamlwith{{PLACEHOLDER}}slots, a README (use-when, placeholder table, customization notes), and helper check scripts where the pattern needs them:- security-scan — read-only sweep for secrets, PII, and vulnerabilities → triaged
SECURITY-FINDINGS.md(promoted from the real run that produced hermes-ecosystem's security fixes) - code-review — review a branch's diff → typed, severity-rated
REVIEW.mdgrounded in the diff - bug-hunt — reproduce a bug, fix the root cause, prove it with before/after repro evidence
- docs-sync — find and fix doc/code drift → per-item
DRIFT-REPORT.md; docs follow code, code untouched - research-synthesis — synthesize collected sources into a cited
REPORT.md; every claim traceable to a file
- security-scan — read-only sweep for secrets, PII, and vulnerabilities → triaged
/looper [target-dir] --template <name>— Template Mode: a compressed interview that asks only for the placeholder slots, model selection, and paths, while keeping the full critique, structural-rule, privacy, and preview flow. A template is a pre-answered interview, not a bypass.- Compile guard —
looper.py compilewarns on unresolved{{PLACEHOLDER}}tokens; the wizard treats the warning as an emit blocker.
Tests 16 → 27; CI green across Python 3.9–3.13 on ubuntu/windows/macos.
See CHANGELOG.md for the full list.
v0.2.1 — installer hotfix
Hotfix for the Windows install one-liner, which crashed on PowerShell 5.1 with Argument expected for the -c option (#14).
The Python-validation probe introduced in v0.2.0 hit two PowerShell 5.1 behaviors at once: empty-string arguments are dropped when calling native executables, and the probe's stderr redirect became a terminating error under the installer's strict error mode. The probe now validates interpreters with --version and judges them purely by exit code — still correctly rejecting the Microsoft Store python stub (verified on real hardware).
If v0.2.0's installer failed for you, just re-run:
irm https://raw.githubusercontent.com/ksimback/looper/main/install.ps1 | iexmacOS/Linux installs were unaffected.
v0.2.0 — audit remediation
Remediation release from a full audit of the runner, compiler, installers, and docs (PRs #9–#13). No loop spec format changes — version: 1 loop.yaml files compile unchanged.
Highlights
- Runs on the declared Python floor again:
datetime.timezone.utcreplaces the 3.11-onlydatetime.UTC(#9 by @kenstephoang, fixes #8). CI now enforces 3.9–3.13 across ubuntu/windows/macos (#10). - Loop control fixed (#11):
fixed_passesgates complete cleanly instead of tripping the stall detector on their own synthetic marker; nested-JSON judge verdicts parse (previously every structured verdict silently degraded to revise); a no-progress stop actually stops the run; gate-boundary resume works; failures are recorded instate.json. - Security hardening (#11, #12): consent fails closed for any non-local council member; context gathering honors configured redactions; redaction globs match nested paths (
config/.env); workspace/context paths are confined to the loop directory at compile time and runtime;register-modelrefuses credential-shaped values. - Windows first-class (#11, #13): UTF-8 subprocess I/O, correct venv path resolution in SKILL.md, LF-stable generated artifacts, BOM-tolerant reads, and installer/skill detection of the Microsoft Store python stub (verified on real hardware).
- Compiler as a gate (#12): timeouts on every external invocation, empty-argv/negative-budget/duplicate-id rejection, null-tolerant parsing, schemas reconciled with the real compile contract.
- Project hygiene (#13): CHANGELOG, CONTRIBUTING, uninstall docs, documented
~/.looper/models.jsonfootprint, repo topics.
Full details in CHANGELOG.md. Tests: 7 → 16, all green on the full CI matrix.