ClosedLoop.ai
Resources

Release Notes

User-visible changes across the ClosedLoop desktop app and the Claude plugins.

The most recent user-facing changes, grouped by product surface. Internal refactors and dependency updates are not listed here.

Web app

Agent storage and CRUD API

The control plane now ships a versioned home for the expert agents that loops use. Eight new /agents endpoints (list, get, create, update, delete, list versions, get version, bulk-ingest) make agent rosters durable, org-scoped, and reusable across repos. Prompt and name edits are auto-versioned and require a changeNote; older versions stay queryable so in-flight loops can keep using the prompt they started with. The bootstrap plugin uses the new POST /agents/bulk-ingest path to push a freshly generated roster idempotently — re-running bootstrap only produces versions for agents that actually changed. See Agents API.

Multi-repo authorization at loop create

Loops with additionalRepos are now authorized and verified at creation time rather than only when a PLAN runs. The API checks each peer repo against the calling org's GitHub installation, verifies the requested branch exists, and rejects duplicates. Failures surface as explicit errors: 403 with UnauthorizedRepoError when a repo is not installed, and 400 with BranchNotFoundError when a branch does not exist. The POST /loops/{id}/github-token route also accepts an optional additionalRepos body so a desktop harness can request a token scoped to the right peer set, falling back to the stored loop record when the body is omitted. See Multi-repo development.

BOOTSTRAP loop command

BOOTSTRAP is now a first-class loop command alongside PLAN, EXECUTE, CODE_REVIEW, and the rest. It runs only on the desktop client (no prompt, artifacts, or repo are required), shows up in the loops table command filter with its own status badge, and produces structured results rather than artifact files. Pairs with the bootstrap plugin to seed a project's expert agent roster from the web app.

Plan Details "Start Building" button

The Plan Details page now wires the "Start Building" button to the same execute flow as Feature Details. Clicking the button opens the Execute Plan modal and reflects in-progress generation state. No handler changes — the page now passes the props that BranchesSection already supported.

Interactive Mermaid diagrams (gated)

Mermaid diagrams in the document editor render through a new interactive viewer with pan, zoom, and per-block fullscreen. The viewer is gated behind the mermaid-enhancements feature flag while it stabilizes; turn the flag on for an org to opt in. Fullscreen state is scoped to the owning viewer so multiple diagrams on a page do not clobber each other.

Multi-repo execution result schema (v2)

Loop completion events now carry an optional results[] array describing every repo touched by the loop, with a discriminated union per repo (success / skipped / failed). Each entry validates the branch name and PR URL canonically. Single-repo loops continue to publish v1 events; the platform normalizes both shapes so consumers see one consistent structure regardless of schema version.

Desktop onboarding API flow

A new desktop/onboarding-attempt and desktop/bootstrap/claim API pair backs the desktop client's first-run handshake. Onboarding attempts are persisted, desktop-managed API keys carry signed metadata, and the bound public key is validated on claim. Wall-clock expiry is hardened against regressions. End users see a smoother first launch with fewer "stuck on authenticate" failures.

Desktop app

0.13.18 — preserve matching plan.json on recovery

Boot recovery now detects when an existing plan.json is consistent with the in-progress run and preserves it instead of overwriting with a stale snapshot. Combined with the earlier import-plan fallback, the desktop now keeps the right plan visible to the web app across crash, restart, and partial-failure scenarios.

0.13.17 — automated sandbox enforcement tests

Every release now runs an automated security test suite that exercises the sandbox boundary directly: symlink-escape attempts, full hard-deny path coverage, and ../casing canonicalization. The build fails if path enforcement weakens.

0.13.17 — harness failure telemetry

When a loop crashes, the runtime now attaches a rich diagnostics payload: stderr tail (separate from stdout, ANSI-stripped, 4 KiB cap), exit signal, elapsed wall time, spawn command and args, cwd, binary path, auth-file presence, a redacted env snapshot, and the abort reason (cancelled / process-exit / ghost-loop). Spawn args are scrubbed for secrets. diagnosticsVersion is bumped to 2.

Expect faster root-cause turnaround when reporting failed loops.

0.13.16 — execute recovery replay

If the desktop app restarts mid-EXECUTE and the loop had already finished, boot recovery now retries finalization after transient errors and correctly handles the "no work produced" case. EXECUTE finalization is no longer lost on restart. Also fixes a bug where a terminal job could persist as RUNNING.

0.13.15 — plan preservation on failure

On EXECUTE failure the runtime now falls back to the staged imported-plan.md if plan.json is absent, so the web app still shows the plan for a failed run. Plan artifacts now carry {content, raw} so raw state rehydrates in fresh worktrees on resume.

0.13.14 — plan upload state preservation

On EXECUTE terminal failure, the runtime reloads the latest job snapshot before writing final state, preserving artifactsUploadedAt. The web app now correctly shows that artifacts were uploaded even on failed runs.

0.13.13 — auto-clone repos

When a cloud command targets a repo that isn't in your local repos.json, the runtime now runs gh repo clone <org/repo> automatically into the first allowed sandbox directory (120 s timeout). Required for PLAN/EXECUTE and optional for other commands. Requires gh auth login to succeed first. Stderr from gh is sanitized in surfaced error messages.

0.13.12 — gateway repo-path endpoint

New GET /api/gateway/git/repo-path?repoFullName=org/repo returns { path } so the web app can resolve a GitHub repo full name to a local filesystem path before dispatch. Read-only.

0.13.11 — cloud hello handshake version split

The desktop.hello payload now sends three distinct version fields: desktopClientVersion, gatewayProtocolVersion, pluginVersion. The CL_PLUGIN_VERSION env var overrides pluginVersion in sandboxed environments. Security hardening: path-allowlist now checks both expanded and canonicalized forms against the sensitive-path deny list.

0.13.10 — CMD+Q fix

Fixes a bug where quitting via CMD+Q could hang indefinitely. Added an eight-second hard-exit failsafe, a .catch() on the shutdown promise, a two-second cap on Observability.shutdown(), and server.closeAllConnections() to drop active NDJSON streams.

0.13.9 — queue stats debounce

queue.stats_changed telemetry events are now debounced so Datadog is not flooded on every job tick.

Claude plugins

code 1.9.3 — SendMessage subagent continuation

The orchestrator's Phase 6 INCOMPLETE_DOCS and BLOCKED handlers now continue a running visual-qa-subagent via SendMessage(to=<agent_id>) instead of launching a new Task. Preserves full agent context. SendMessage returns immediately with a queued ack; the orchestrator waits for a <task-notification> before proceeding. run-loop.sh now pins --model claude-opus-4-6 and --effort high.

code 1.9.2 — CLAUDE_BIN support

run-loop.sh, debate-loop.sh, and process-chat-learnings.sh all read CLAUDE_BIN and fall back to bare claude. Fixes silent failures for users whose claude is outside the default Homebrew path. Pairs with the desktop app's resolved binary path.

code 1.9.1 — loop bootstrap argument handling

setup-closedloop.sh parser now tolerates unquoted paths with spaces by joining consecutive non-flag tokens. Affects --prd, --plan, --add-dir, and positional workdir. run-loop.sh emits quoted arguments when writing loop state. /code invokes setup-closedloop.sh portably via bash "${CLAUDE_PLUGIN_ROOT}/scripts/setup-closedloop.sh".

code 1.9.0 — multi-repo support

--add-dir support for planning and exploration across sibling repositories. New env vars CLOSEDLOOP_ADD_DIRS, CLOSEDLOOP_ADD_DIR_NAMES, CLOSEDLOOP_REPO_MAP. Plans gain a repositories map. pre-explorer writes per-repo code maps. Cross-repo coordinator + discovery + PRD writer agents.

code 1.8.x — prompt compression

Editorial compression of the orchestrator prompt, extraction of inline bash, and deduplication of repeated sequences. Materially shorter orchestrator context per iteration.

code 1.7.x — post-loop code review

After a loop completes, run-loop.sh automatically runs /code-review:start --base <start_sha>, reads <CR_DIR>/verdict.json, and if the verdict is not approve, runs /code-review:fix <cr_dir> up to POST_LOOP_REVIEW_CYCLES (default 2) cycles. Aborts on two consecutive fix failures.

code 1.6.0 — .closedloop-ai/ state directory

Final phase of the migration from scattered .claude/.closedloop/ and similar paths into a single .closedloop-ai/ tree. All hooks, scripts, agents, skills, and the orchestrator prompt updated. A single CLOSEDLOOP_STATE_DIR constant unifies references.

judges 1.5.1 — canonical input envelope

Judges now read judge-input.json as the SSOT envelope. Legacy filename assumptions are allowed only when fallback_mode.active = true. Ships the artifact-type-tailored-context skill with a three-tier compression strategy and a 30K-token budget.

code-review 1.5.2 — fast path and hygiene

Small-diff fast path for ≤ 200 LOC routes to a single agent with three scoped passes plus a domain-critics pass, in one run. Deterministic hygiene check (CI artifacts, .env/.pem, path leakage) runs with zero LLM tokens. Findings below 0.5 confidence are discarded.

self-learning 1.1.2 — opt-in model

Self-learning is opt-in via --self-learning on run-loop.sh. Config propagates as CLOSEDLOOP_SELF_LEARNING=true through config.env and loop state frontmatter; hooks check the flag and skip injection when off.

bootstrap 1.2.0 — .closedloop-ai/ migration

Bootstrap writes critic gates, schemas, and run artifacts into .closedloop-ai/ alongside .claude/agents/<name>.md.

On this page