All notable changes to the claude-plugins project will be documented in this file.
The format is based on Keep a Changelog.
- Updated
plan-with-codexcommand argument-hint to use positional syntax instead of optional bracket notation
- New "Refactoring Existing Prompts" section in
context-engineeringskill covering pitfalls for stale cross-references, over-abstraction, lost preconditions, and silent behavior changes
plan-agentnow verifies Codex findings against the codebase before acting -- rejects findings that don't hold up with evidence, writes a revision summary for cross-round contextcodex-reviewskill accepts--revisions-fileparameter, injecting Claude's revision summary into Codex's prompt on rounds > 1 so rejected findings are not re-raised
- Fixed
plan-with-codexresume path triggering a redundant user review checkpoint when the user had already confirmed by choosing "resume with existing plan"
- New
plan-agentagent for creating and revising implementation plans via codebase exploration - New
plan-with-codexcommand for iterative plan refinement through Claude + Codex debate loops - New
codex-reviewskill to run Codex plan reviews and return structured verdict feedback - New
debate-loop.shscript providing standalone CLI for Claude + Codex debate orchestration - New
plan-review.shhook that triggers Codex review when Claude exits plan mode
- New
resolve-scopesubcommand incode_review_helpers.py-- deterministic scope resolution replacing inline shell logic for PR branch lookup, git fetch, base-ref overrides, and path filter preservation - New
fetch-intentsubcommand -- fetches PR description or commit messages as intent context for the Premise Reviewer - New
classify-intentsubcommand -- classifies diff intent (feature,fix,refactor,mixed) from PR metadata and file statuses for model routing - New
collect-findingssubcommand -- mergesagent_*.jsonfiles and hygiene findings into a singlefindings.json, replacing inline Python-in-Bash merge logic - New
verdictsubcommand -- computes deterministic PR verdict (approve,needs_attention,decline) from validated findings, replacing inline orchestrator logic - New
prep-assetssubcommand -- copiesshared_prompt.txtandbha_suffix.txtfrom plugin to CR_DIR in a single step, consolidating scatteredcpcommands - New
extract-patchessubcommand -- extracts per-partition and full-diff patches to disk with batched extraction for large diffs (>200 files) - New
bha_suffix.txtprompt file -- Bug Hunter A persona and focus areas extracted from inline heredoc instart.md - Intent-aware model routing: Premise Reviewer uses Opus for fix/refactor/mixed intents, Sonnet for feature intents; BHA uses Opus for implementation partitions, Sonnet for test-only partitions
- Mixed-partition splitting in
partitionsubcommand -- separates test files from implementation files when impl LOC exceeds threshold - Agent cap enforcement via
--max-bha-agentsparameter inpartition, computed fromrouteoutput - Trivial partition merging -- partitions below 20 LOC are absorbed into same-type normal partitions
- Cache status message (
status_kind,status_message) appended tocache_result.jsonbycache-check, replacing orchestrator-side message formatting --exclude-test-partitionsflag oncache-updateto skip caching files from Sonnet-reviewed test-only partitions- Self-discard validation rule (check 7) in
shared_prompt.txt-- agents must discard findings they conclude are not actually problems
- Refactored
start.mdorchestrator to delegate workflow steps to Python subcommands instead of inline shell logic setupsubcommand now accepts--cr-dir-prefixand creates CR_DIR with random suffix, removing the need for the orchestrator to generate random directory namesroutesubcommand now accepts--intentparameter and outputsmax_bha_agentsfor downstream partition cap enforcement- Reduced default partition LOC budget from 800 to 500
run-judgesskill now accepts a--workdir <path>parameter for standalone use outsiderun-loop.sh; resolved in order:--workdirarg →$CLOSEDLOOP_WORKDIRenv var →.closedloop-ai/judgesdefault (directory created automatically if absent)
run-loop.shjudge invocations (plan_judges,code_judges) now pass--workdir $workdirexplicitly in theclaude -pprompt, aligning with the updatedrun-judgesskill parameter contract
- New
prdartifact type support inrun-judgesskill — 4 dedicated PRD judges executed in 2-phase execution, output toprd-judges.json, validated with--category prd - New
prd-auditoragent — structural completeness auditor for draft PRDs; checks US/AC coverage, success metrics table completeness, critical open questions, scope section structure, kill criteria presence, and template section inventory - New
prd-dependency-judgeagent — evaluates PRD dependency completeness and risk assessment; flags missing dependencies, underdefined integration points, and unacknowledged cross-team risks - New
prd-testability-judgeagent — evaluates whether PRD acceptance criteria are testable and measurable; flags vague or unverifiable criteria and missing success metrics - New
prd-scope-judgeagent — evaluates PRD scope discipline and hypothesis traceability; flags stories with no traceable origin, out-of-scope overlaps, story count exceeding 8, and unacknowledged dependencies; emits review-delta JSON - New
prd_preamble.mdinskills/artifact-type-tailored-context/preambles/— artifact-type-tailored context preamble injected before PRD judge prompts validate_judge_report.py: Addedprdcategory toJUDGE_REGISTRYwith 4 expected judges (prd-auditor,prd-dependency-judge,prd-testability-judge,prd-scope-judge)validate_judge_report.py: Replacedvalid_suffixeslist withVALID_SUFFIXESdict mapping each category to its acceptedreport_idsuffixes (prdmaps to["-prd-judges"])validate_judge_report.py: ReconciledJUDGE_REGISTRYplan set — removed phantom entriesefficiency-judgeandinformativeness-relevance-judge; addedbrownfield-accuracy-judge,codebase-grounding-judge, andconvention-adherence-judgejudge-input.schema.json: Added"prd"to theevaluation_typeenum
stream_formatter.pynow accumulates per-model token usage from assistant events and prints a summary in the format the harness expects, fixing zero token counts for PLAN/EXECUTE loops
stream_formatter.pyreturns early onBrokenPipeErrorbefore printing usage summary, preventing tracebacks when used in pipelines with early-exit consumers
- New
brownfield-accuracy-judgeagent — evaluates how accurately a plan accounts for existing code (reuse vs reimplementation, integration-point accuracy, scope accuracy against investigation findings) - New
codebase-grounding-judgeagent — detects hallucinated file paths, nonexistent modules, and fabricated APIs by comparing plan claims against the investigation log - New
convention-adherence-judgeagent — evaluates whether a plan follows the conventions, patterns, and style found in the actual codebase as documented in the investigation log
- Updated
run-judgesskill to support 16 plan judges (up from 13), adding the three new grounding/brownfield/convention judges in Batch 4 brownfield-accuracy-judgeandconvention-adherence-judgenow invoke@code:pre-explorerto generateinvestigation-log.mdwhen absent, instead of immediately scoring 0.5; fall back to 0.5 only if pre-explorer fails or the file remains absentcodebase-grounding-judge: add validation step to ensure net-new code does not duplicate existing functionality (e.g., utilities/helpers already in codebase)
- Restored boolean semantics for
has_code_changesinrun-loop.shand updated judge gating to skip code judges when no implementation changes are detected, without relying on numeric stdout parsing
- New
context-manager-for-judgesagent (moved fromcodeplugin) to orchestrate context compression for judge evaluation - New
judge-input.schema.json— formal JSON schema defining the standard judge input contract withsource_of_truthfield - Investigation log (
investigation-log.md) reuse in plan judge context with pre-explorer fallback when noCLOSEDLOOP_WORKDIRis set
- Generalized judge input contract to use orchestrator-provided
judge-input.json(task + context envelope) instead of hardcoded artifact assumptions - Standardized all judge agents to read
judge-input.jsonfrom$CLOSEDLOOP_WORKDIRand load mapped artifacts via source-of-truth ordering - Centralized judge input-read requirements into shared preamble
common_input_preamble.md; judge-specific files no longer duplicate input-contract boilerplate - Enforced strict SSOT by removing residual per-agent
Input Contractstubs;common_input_preamble.mdis now the single runtime source for input-loading guidance
- Added
source_of_truthto required array injudge-input.schema.json— schema now matches SKILL.md and judge agent expectations for evidence prioritization
- Migrated session/hook data directory from
.claude/.closedloop/to.closedloop-ai/across all hooks (session-start,session-end,subagent-start,subagent-stop,pretooluse,loop-stop) andsetup-closedloop.sh, with legacy fallback for mid-upgrade sessions - Added legacy directory cleanup in
session-end-hook.sh— removes stale PID mappings, expired session files, and deletes empty legacy directory on session end
- Fixed pattern cap trimming to sort by staleness flags only instead of confidence — low-confidence patterns were always dropped before being observed, preventing them from ever earning higher confidence
- Fixed extraneous f-string prefix lint warning in
write_merged_patterns.pydefault header
- Updated
process-learningscap strategy to trim[PRUNE]then[STALE]then[REVIEW], withseen_countas tiebreaker
- Integrated
investigation-log.mdinto judge context assembly, sourced from$CLOSEDLOOP_WORKDIR
- Fixed judges agents path resolution in
run-loop.shto support monorepo, cache, and marketplace installation layouts via a four-level fallback strategy (CLOSEDLOOP_JUDGES_AGENTS_DIRenv override → repo-relative path → non-versioned sibling → latest semver-versioned sibling) - Fixed agent snapshot to read judge agents from the judges plugin rather than the code plugin, and corrected
pluginfield in manifest to"judges"
- Removed
github-reviewslash command —/code-review:github-reviewis no longer a valid entry point. Use/code-review:start --githubinstead. - Renamed
review.md→start.md— slash command is now/code-review:start - Moved
github-review.mdfromcommands/toprompts/— callers using${CLAUDE_PLUGIN_ROOT}/commands/github-review.mdmust update to${CLAUDE_PLUGIN_ROOT}/prompts/github-review.md
- Unified session directory path for all modes — removed
$RUNNER_TEMPoverride in GitHub CI, now uses.closedloop-ai/code-review/cr-<RANDOM>everywhere - Replaced Bash heredoc/cat usage with Write and Read tools for PR metadata file operations in
github-review.md - Updated temp file path references from
$RUNNER_TEMP/cr-review/to<CR_DIR>/*in GitHub mode constraints - Fixed usage examples to use
/startto match the command filename - Fixed internal references from
code-review-github.mdtogithub-review.md
- Compound Bash command prohibition in GitHub mode — no
&&,||,;, or|pipes allowed
- Updated
review-delta.schema.jsondescription to reference "code hybrid workflow" instead of "impl-plan hybrid workflow" - Updated
compliance-checkpoint.mdto reference/codeinstead of/impl-plan - Removed
Bashfromvisual-qa-subagenttool list to prevent shell access during visual QA
- Added credential theft blocklist to
pretooluse-hook.sh: denies Bash commands and file access targeting macOS Keychain, browser cookie databases, SSH private keys, and cloud credentials - Blocklist applies to all Claude sessions, not just ClosedLoop-managed sessions
- Schema-aligned constraints in AGENT_FORMAT.md:
tools,skills,permissionModefields,namekebab-case/64-char limit,description1024-char limit, expanded 8-color enum withcyan/pink - Context-engineering activation in agent-prompt-generator via
platform:context-engineeringskill - Tools/skills inline format validation in agent-prompt-validator (BLOCKING on block array syntax)
additionalPropertiesviolation detection andskills→Skilltool cross-check- Critic Review Schema Alignment (Check 8) and critic-gates.json Structure Validation (Check 9) in generation-validator
- critic-gates.json schema validation in bootstrap-validator
- Context-engineering compliance warnings in anti-pattern detection
descriptionmax raised from 120 → 1024 chars (warn >200)modelenum now acceptsinheritcolorfield changed from required to optional; enum expanded to 8 values- Removed legacy
prd2plan/directory namespace — agent output now writes to.claude/agents/(flat) - Moved
.bootstrap-metadata.jsonfrom.claude/agents/prd2plan/to.closedloop-ai/bootstrap-metadata.json - Replaced all
/impl-plancommand references with/code - Removed DAG validation infrastructure (deleted
impl-plan-dag.schema.json, removed Check 2 from bootstrap-validator) - Updated default
--target-commandfromimpl-plantocode - Updated default
--output-dirfrom.claude/agents/prd2plan/to.claude/agents/
- Generalized
prd-creatorskill description and replaced analytics discovery step with risks assessment - Updated PRD template to add compliance checkpoint and remove event instrumentation section
- Revised story patterns and examples references to align with compliance-focused workflow
- Deleted
event-instrumentation.mdreference
- Migrated learnings path from
~/.claude/.learnings/to~/.closedloop-ai/learnings/inpretooluse-hook.shandsubagent-start-hook.shwith legacy fallback
- Migrated learnings path from
~/.claude/.learnings/to~/.closedloop-ai/learnings/across commands, tools, and skills with legacy fallback
- Initial release
- Bootstrap plugin for ClosedLoop agent creation and validation
- Step 8.5 in
run-loop.shfor deterministic TOON writing viawrite_merged_patterns.py
- New
prd-creatorskill for drafting lightweight PRDs through conversational workflow
- Initial release
- Initial release
- Initial release
- New
claude-creatorskill for scaffolding and creating new skills from scratch
- Initial release
- New
write_merged_patterns.pytool for deterministic JSON-to-TOON conversion
- Refactored
process-learningscommand to outputmerge-result.jsoninstead of writing TOON directly - Updated
process-chat-learnings.shto run deterministic TOON write step after classification
- Initial release