The static-layer trigger heuristic was a literal substring match on
"Use when …" / "Use this skill when …" / "Use proactively" / "Trigger
when …". Three real-world phrasings were missed:
1. Third-person canonical form recommended by Anthropic's own plugin-dev
skill-development skill: "This skill should be used when …" (contains
"used when", not "use when"). Running the previous regex on plugin-dev
itself produces 7 false-positive MISSING_TRIGGER flags.
2. Prepositional temporal triggers: "Use after …", "Use before …",
"Use immediately before …", "Use whenever …". Common in self-audit
and hook-adjacent skills (e.g. functional-emotions: 6 flags).
3. Path-triggered self-documenting skills: "Auto-loads when …".
Extract the pattern to a module-level `_TRIGGER_PATTERN` and share it
between the anti-pattern detector and `_description_pushiness` so the
two sites stay in sync. Expand it to match `(should be )?use(d)?
(this skill )?(immediately )?(when|after|before|whenever)` plus
`auto-loads when` and `trigger when`.
Verification:
- plugin-dev (Anthropic's own): 33.82 → 55.18, MISSING_TRIGGER cleared
- functional-emotions: 39.04 → 59.68, all 6 false positives cleared
- 22 tests pass, including 11 new positive-form parametrised cases
and 2 regression tests against canonical Anthropic phrasings.
`plugin-eval certify <plugin-dir>` advertises a deep, three-layer
evaluation (static + judge + Monte Carlo) but `EvalEngine.evaluate_plugin`
only runs the static layer regardless of requested depth, since judge
and Monte Carlo are per-skill primitives. The docstring on that method
acknowledges this, but nothing surfaces it to the user:
- The CLI emits no warning.
- The markdown report prints `**Depth:** deep` even though only the
static layer ran.
- The user's only signal is a footnote ("No model usage") near the
bottom of the report and the `Confidence: Estimated` row — both
easy to miss when the requested depth said otherwise.
This change makes the downgrade impossible to miss without changing
the underlying eval behaviour (per-skill judge aggregation is a larger
feature, not a bug fix):
1. **CLI warning to stderr.** `_run_score` detects plugin-target runs
at non-quick depth and prints a yellow `warning:` line to stderr
naming the skipped layers and the workaround (run on a single skill
to get the deeper layers).
2. **In-band markdown callout.** `Reporter` now derives the *effective*
depth from the set of layers actually present in the result. When it
differs from the requested depth, the report header reads
`Depth: deep (requested) → quick (effective)` and a `> Note:` block
above the score table explains why and how to get the deeper layers.
3. **Effective-depth helper.** `_effective_depth(result)` maps the set
of layer names (`static` / `judge` / `monte_carlo`) back to a `Depth`
value, so the reporter never has to trust `result.config.depth` when
describing what actually ran.
Tests:
- `TestDepthDowngradeWarning` (4 tests): asserts the helper, the
"no warning when honored" path, and the warning content for both
deep and standard requests.
- `TestCLI` (2 new tests): asserts the stderr warning is emitted on
plugin-level certify and is *not* emitted at quick depth.
Full plugin-eval suite (75 tests) passes.
Supersedes #525 (1.0.6 / meigen@1.3.0).
What's new in npm meigen@1.3.1:
- Veo 3.1 capability expansion: fast/pro tiers + 4/6/8s durations +
720p/1080p/4K resolutions at the same price per tier+duration.
- Seedance 2.0 reference-video continuation: new `referenceVideo` +
`referenceVideoDuration` paired params for semantic continuation
of a previous clip.
No schema breaking changes — every new field is optional. Existing
1.3.0 calls continue to work unchanged.
Release notes: https://github.com/jau123/MeiGen-AI-Design-MCP/releases/tag/v1.3.1
* chore: add .worktrees/ to .gitignore
Isolate git worktrees from version control to keep repository clean.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: add Gemini CLI extension manifest
- Declare claude-agents as a Gemini CLI extension
- Point to GEMINI.md for bootstrap context
- Enable auto-discovery via gemini-cli-extension topic
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat: add Gemini CLI bootstrap context
- Document 150+ skills ecosystem for Gemini users
- Explain differences from Claude Code platform
- Provide plugin navigation and skill usage guidance
- Link to tool mapping and plugin catalog
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: Add Gemini CLI tool mapping reference
Add comprehensive docs/gemini-tool-mapping.md guide for users migrating from
Claude Code to Gemini CLI. Includes:
- Core Tools: Direct Equivalents (table format)
- Platform-Specific Features: Claude Code Only (slash commands, subagents, model tiers)
- Claude Code Specific: MCP Servers (description and migration guidance)
- Platform Differences: Behavior & Constraints (context limits, tool availability)
- Skill Design Guidelines (DO's and DON'Ts for Gemini compatibility)
- Migration Path (step-by-step guide for adapting Claude Code skills)
- Common Patterns (side-by-side code examples)
- FAQ (troubleshooting and common questions)
Document provides practical, self-contained guidance without requiring other docs,
though cross-references to GEMINI.md and plugins.md are included.
Co-authored-by: GitHub Copilot <noreply@github.com>
* fix: Correct syntax errors in code examples
- Lines 177-189: Convert Python pseudocode to valid bash for skill examples
- Line 347: Remove invalid read_file() function call; use sed for line extraction
- Lines 365-372: Replace mixed Python/bash with proper bash conditionals using exit codes
All code examples now syntactically valid and follow Gemini CLI bash patterns.
Co-authored-by: GitHub Copilot <copilot@github.com>
* docs: add Gemini CLI section to README
- Explain Gemini CLI extension availability and installation
- Link to GEMINI.md for navigation and tool mapping for platform differences
- Clarify multi-platform support (Claude Code primary, Gemini CLI skills)
* docs: add Gemini CLI plugin discovery guide
- List all 79 plugins organized by category with skill names
- Include natural-language trigger examples for Gemini auto-activation
- Complement GEMINI.md with detailed skill discovery navigation
* docs: update GEMINI.md to reference Gemini-optimized plugin guide
- Point plugin catalog navigation to gemini-plugin-guide.md for Gemini users
- Keep reference to plugins.md as full technical catalog fallback
* fix: remove trailing period from reference in GEMINI.md
* fix: correct repo URL, extension version, gitignore, and doc references
- Point install URL to upstream wshobson/agents (not fork)
- Set extension version to 1.0.0 (initial release)
- Fix .gitignore: restore .claude entry, add .worktrees/
- Fix broken @./plugins.md references → @./docs/plugins.md in tool-mapping doc
* fix: align Gemini extension name with marketplace, fix @./ refs, deduplicate plugin listing, fix pseudo-code, update README plugin count
* docs: add per-plugin GEMINI.md for all 79 plugins + generation script
Generated programmatically from each plugin's agents/commands/skills
frontmatter. Covers all three component types per plugin, providing
scoped context for Gemini CLI slash commands and developer workflows
inside the repo tree.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: add ADR for Gemini CLI integration strategy
Documents the four options considered, why hierarchical GEMINI.md
scanning and per-repo splitting were rejected, and the key findings
(slash commands are supported in Gemini; install granularity is a
hard platform limit). Records pending Phase A work.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: add Gemini CLI slash commands for all 100 plugin commands
Creates commands/<plugin>/<cmd>.toml for each of the 100 Claude Code
commands across 50 plugins, mapping /plugin:command to Gemini CLI's
TOML command format. Prompts are self-contained (no extension-relative
file inclusion) following confirmed patterns from real extension examples.
Includes generator script at tools/generate_gemini_commands.py.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: add ADRs for Phase A slash commands and Phase B distribution decision
- 2026-05-01-gemini-slash-commands.md: documents TOML format, directory
structure, self-contained prompt decision (no extension-relative @{path}),
and auto-discovery. Includes primary source citations.
- 2026-05-01-per-plugin-gemini-md-distribution.md: documents why per-plugin
GEMINI.md files are kept in the repo despite not auto-loading for extension
users. Refutes size/security liability claims with verified data.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: add integration planning document
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* refactor: remove per-plugin GEMINI.md files and generator (option C)
- Delete all 79 per-plugin GEMINI.md files (plugins/*/GEMINI.md)
- Delete per-plugin file generator (tools/generate_plugin_gemini_md.py)
- Eliminates false power user workflow benefit (files never auto-loaded)
- Keeps TOML slash commands for real discovery mechanism
- Single root GEMINI.md with bootstrap context remains
Rationale: Per-plugin files were in wrong location for Gemini CLI auto-discovery.
Power user benefit was fictional. Slash commands provide real discovery UX.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs(adr): update decisions to reflect Option C (removed per-plugin files)
ADR Updates:
- 2026-04-30-gemini-cli-integration.md: Explain Option C choice, document false power user claim
- 2026-05-01-gemini-slash-commands.md: Clarify slash commands are primary power user feature
- 2026-05-01-architecture-simplification.md (NEW): Document decision to remove per-plugin files
- docs/decisions/README.md: Updated to reflect final decision
- Archived: 2026-05-01-per-plugin-gemini-md-distribution.md
Rationale:
Audit revealed per-plugin GEMINI.md files don't auto-load (were positioned at root,
not in .gemini/ subdirectory). False power user benefit justification invalidated the
design. Slash commands (which do work) are the real power user feature.
Simplified architecture removes 79 files, 1 generator script, keeps all functionality.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: remove false power user claim from GEMINI.md, correct tool mapping doc, fix status claim
Critical fixes addressing three document contradictions:
1. GEMINI.md: Remove false auto-loading claim
- Line 42 claimed: 'Power users (repo cloned) | Auto-loaded when you cd plugins/<name>/'
- Audit + ADRs concluded this was INVALID (files never auto-loaded)
- Yet GEMINI.md still published the lie as fact
- Replaced with accurate description: slash commands are primary discovery mechanism
2. docs/gemini-tool-mapping.md: Correct slash commands status
- Listed slash commands as 'Claude Code only' without noting Gemini TOML support
- ADR 1 flagged: 'docs/gemini-tool-mapping.md requires correction (pending)'
- Correction never happened
- Updated to accurately describe Gemini's custom command support via TOML
- Clarified difference: Gemini has extension-specific commands, not global shortcuts
3. docs/decisions/README.md: Fix 'IMPLEMENTED' status claim
- Claimed: 'Status: IMPLEMENTED (2026-05-01)'
- Reality: All work on feature/gemini-cli-integration, not merged to main
- Main branch at c15b108 has zero Gemini files
- Changed to: 'Status: IN REVIEW' + noted 'Merged to main: NO'
These fixes ensure architecture docs match implementation reality.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: add ADR and plan for Gemini CLI integration
* feat: add Stitch MCP server integration
- Configure Stitch MCP via HTTP endpoint (https://stitch.googleapis.com/mcp)
- Follows pattern from VSCode MCP config and factory template
- Enables AI-powered UI/UX design capabilities via Google Stitch
- MCP server type: http with standard Accept header
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chore: remove working notes and design process artifacts from repo
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* chore: remove invented top-level TOML commands with no Claude Code equivalent
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: implement sync engine and protocol orchestrator for Gemini CLI
Upgraded the Gemini CLI integration to address maintenance and functional gaps identified during review.
Key Improvements:
- Protocol Orchestrator: Slash commands now treat Markdown files as executable protocols, achieving functional parity with Claude Code's interactive checkpoints and multi-step workflows.
- Sync Engine: Replaced the simple generator with a robust Python utility in tools/ that handles validation, pruning of stale TOMLs, and cross-platform path resolution.
- Local-Opt-In Workflow: Users can now selectively generate slash commands for specific plugins via the Makefile, eliminating repository drift.
- Fail-Safe Build Tools: Updated the Makefile with robust cleanup and sync targets.
- Documentation: Comprehensive updates to GEMINI.md and README.md, including a Windows compatibility guide (Git Bash/WSL).
PR Cleanup:
- Removed all 97+ derived TOML files and duplicates.
- Deleted all design process working notes and internal plans.
Strategic Note:
This PR provides the technical foundation for Gemini CLI support but defers to the maintainer on the directional decision of officially supporting multiple harnesses. All Gemini-specific features are designed to be lightweight and opt-in, preserving the core identity of the repository as a Claude Code marketplace.
* fix(gemini-tool-mapping): close unclosed code fence in skill migration template
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: address PR review feedback and consolidate Gemini CLI documentation
- Consolidated installation into a unified Quick Start section for Claude Code and Gemini CLI.
- Removed unused YouTube Design Extractor tool and associated Makefile targets.
- Corrected and synchronized plugin/agent/skill counts (81/185/153) across all documentation.
- Streamlined Gemini Skill Discovery Guide and removed redundant tool mapping reference.
- Hardened Makefile security by adding proper shell quoting to PLUGIN variable.
- Added Gemini CLI-specific uninstall and sync-commands examples.
* chore: remove .mcp.json and update plugin/agent counts
- Remove .mcp.json (personal MCP config, not for repo)
- Update CLAUDE.md and README.md counts to reflect current branch state
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: finalize gemini-cli integration and sync plugin counts
- Restore original YouTube Design Extractor functionality in Makefile
- Add Gemini CLI extension targets to unified Makefile
- Restore standalone YouTube tool files (yt-design-extractor.py, requirements.txt)
- Sync all documentation (README, CLAUDE, GEMINI, docs/*) to 81-plugin state
- Align marketplace.json metadata description with 81-plugin reality
- Resolve all PR review threads and merge conflicts with main
* docs: revert out-of-scope documentation count synchronization
Reverts global plugin/agent/skill count updates across existing reference docs
(CLAUDE.md, README.md, docs/*) to match origin/main state. Gemini CLI
documentation remains focused on the integration itself.
* fix: restore plugin/agent counts in CLAUDE.md to match upstream
Counts were incorrectly lowered in a previous commit. Using upstream values
pending doc sync resolution in #517.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: revert marketplace.json drift, restore Makefile Options help block
- Revert .claude-plugin/marketplace.json to upstream (description text was drifted)
- Restore Options block (URL/INTERVAL/OUTPUT/ENGINE) in Makefile help target
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: restore upstream README.md content removed by drift
- Fix plugin count in Key Features: 81 → 80 (upstream value)
- Fix architecture diagram comment: 77 → 81 plugins (80 local + 1 external)
- Restore Troubleshooting section dropped in prior session
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* remove: docs/gemini-plugin-guide.md (not useful)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(gemini): update broken links after doc removal
* docs: add update, clean-commands, and uninstall workflows to Gemini CLI section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: correct stale plugin/skill counts in gemini-extension.json and GEMINI.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Revert "fix: correct stale plugin/skill counts in gemini-extension.json and GEMINI.md"
This reverts commit 5a4a06d49f263d9eaa76a83d55b4141c8e4a0fc6.
* security: harden build tools and fix cross-platform paths
- Makefile: apply strict shell quoting to prevent command injection
- tools/generate_gemini_commands.py: rewrite using pathlib for Windows/Linux parity
- tools/generate_gemini_commands.py: add path validation to prevent traversal in pruning
- tools/generate_gemini_commands.py: add docstrings for maintainability
- GEMINI.md: fix numbering sequence in setup instructions
* docs(GEMINI): add Safety and System Integrity section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(readme): restore full Claude Code quick start into collapsible section
Original Step 1/Step 2 instructions were stripped to two lines. Restores
the complete content (plugin examples, explanatory text) inside the
recommended collapsible — no instructions removed, just reorganized.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(readme): restore Claude Code intro, add Gemini CLI section, clarify scope
- Reverts all Gemini CLI parenthetical notes injected into Claude Code bullets
- Restores original wording (100 Commands, Install only what you need, etc.)
- Adds dedicated ## Gemini CLI section after Overview with its own feature list
- Retitles 'Plugins vs Agents' to clarify it is Claude Code only
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(readme): use markdown bold in summary tags instead of <b>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* Revert "docs(readme): use markdown bold in summary tags instead of <b>"
This reverts commit 19b879760f248e9e049f7f3dc83fbd23cf6c87d0.
* docs(GEMINI): reduce context bloat, remove duplicate sections
- Removed duplicate Slash Commands, How to Use Skills, and Common Skill
Categories sections (all repeated Navigation content)
- Replaced full Skill Library listing with a link to docs/plugins.md
- Removed stale metadata block and incorrect "already installed" claim
- 167 lines → 55: leaner per-prompt context overhead
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: correct extension directory path from 'agents' to 'claude-code-workflows'
Extension installs as claude-code-workflows, not agents. All cd paths
and TOML cleanup references in README and GEMINI.md were pointing to a
directory that does not exist.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(readme): keep README Claude Code-first, badge links to GEMINI.md
- Remove ## Gemini CLI section and Gemini CLI Quick Start collapsible
- Unwrap Claude Code Quick Start from collapsible (back to original format)
- Restore 'Plugins vs Agents' heading (no Claude Code only qualifier needed)
- Add Gemini CLI badge next to Smithery badge pointing to GEMINI.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(readme): add GitHub NOTE callout for Gemini CLI users
Badge alone is easy to miss. The [!NOTE] callout renders visually
distinct on GitHub and gives Gemini users enough context to find
GEMINI.md without disrupting Claude Code content.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: sync counts to upstream and correct skill activation wording
- gemini-extension.json: 79 plugins/150+ skills → 80/153 (matches upstream)
- GEMINI.md: skills don't auto-activate silently; Gemini CLI asks first
- README callout: 'auto-discovered' → 'discoverable on-demand' (accurate)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(readme): add Gemini CLI entry to What's New section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(readme): match What's New link style for Gemini CLI entry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs(gemini): update comparison table for accuracy
* docs(gemini): correct command example prefix
* feat(gemini): improve sync engine to respect opt-in principle
- tools/generate_gemini_commands.py: only sync existing plugins by default (Smart Sync)
- tools/generate_gemini_commands.py: add --all flag for explicit full generation
- Makefile: update generate-all-commands to use --all
- Makefile: improve clean-commands to remove directories
* docs(gemini): audit and update GEMINI.md with high-fidelity counts and library summary
- Verified 80 plugins, 153 skills, 185 agents, and 100 commands against actual codebase.
- Re-added audited Skill Library summary for improved discovery.
- Corrected Plugin Catalog link and verified all technical examples.
- Reinforced Safety and System Integrity section.
* fix(GEMINI): replace colon-namespace syntax with flat Gemini slash command names
Gemini CLI does not support the /plugin:command namespace syntax used by
Claude Code. Updated Protocol Orchestrator example and Slash Commands
section to use flat /command-name format.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* revert: restore colon namespace syntax in GEMINI.md slash command examples
Gemini CLI derives command names from file paths — subdirectory separators
become colons, so commands/tdd-workflows/tdd-cycle.toml → /tdd-workflows:tdd-cycle.
The colon syntax is correct and matches the Claude Code namespace pattern.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: GitHub Copilot <noreply@github.com>
Co-authored-by: GitHub Copilot <copilot@github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
The Reference Documentation and Templates & Assets sections of
sast-configuration's SKILL.md linked to six files that don't exist
(references/{semgrep-rules,sonarqube-config,codeql-setup}.md,
assets/{semgrep-config.yml,sonarqube-settings.xml}, scripts/run-sast.sh).
The references/, assets/, and scripts/ directories were created but
never populated. Removed the two sections so the skill no longer
points users at 404s; the inline configuration examples that
remain in the skill body cover the immediate setup needs.
A repo-wide sweep across all 153 SKILL.md files confirms no other
dead references/, assets/, or scripts/ links remain.
Fixes#514
Update the "Composing with protect-mcp" example to use the current
hooks array schema and pin protect-mcp@0.5.5, matching the runtime
hooks.json. Prevents users from copy-pasting a config that current
Claude Code refuses to load.
Migrates plugins/review-agent-governance/hooks/hooks.json from the
deprecated singular "hook": {...} shape to the current
"hooks": [{...}] array shape, matching the schema fix that landed
in #503 for plugins/protect-mcp/hooks/hooks.json.
Same conversion applied to both PreToolUse and PostToolUse blocks:
Before: { "matcher": ".*", "hook": {"type": "command", ...} }
After: { "matcher": ".*", "hooks": [{"type": "command", ...}] }
Verified the resulting structure matches the post-#503 shape used by
plugins/protect-mcp/hooks/hooks.json byte-for-byte at the schema level.
Without this fix, current Claude Code reports
"path: hooks.PreToolUse.0.hooks - expected array, received undefined"
on plugin load.
Resolves wshobson's blocker: npx protect-mcp@latest reintroduces the
reproducibility gap closed by #497 for the protect-mcp plugin. Pins
both PreToolUse and PostToolUse hook invocations to 0.5.5.
Three blocking items + one non-blocking clarification from the review:
1. marketplace.json unicode regression FIXED. Reset the file to upstream
HEAD, then inserted ONLY the review-agent-governance entry with a
string-based append that preserves every existing UTF-8 character
byte-for-byte. No entries other than the new one are modified.
`grep -c '\\u' marketplace.json` returns 0 escape sequences.
2. approve-review.md $1 → $ARGUMENTS. The marketplace slash-command
convention (per plugins/codebase-cleanup/commands/deps-audit.md from
PR #490) is $ARGUMENTS, which captures the full argument including
spaces. $1 only captured the first word. Also JSON-escape the reason
before embedding in the approval record (via python3 json.dumps) so
quotes, backslashes, and newlines do not break the JSON body. This
resolves the non-blocking JSON-escape note too.
3. README honesty on the approval log. Previously claimed the chain
"records exactly which actions were human-gated and when," which was
overstating: approval log entries under ./review-receipts/approvals/
are plain JSON, not signed. Rewrote that paragraph to explicitly
separate the signed PostToolUse chain (covered by
@veritasacta/verify) from the operator-trust approval log. Points
users at protect-mcp sign directly if they need signed approval
records for regulated environments.
4. Added an explicit note on what the signed chain covers when the
approval flag is present: PreToolUse short-circuits without calling
Cedar, so the downstream PostToolUse receipt has decision:allow but
no policy_digest. Auditors walking the chain should expect this.
Resolves the "document the short-circuit" non-blocking item.
Not addressed (pending Seth's follow-up):
- marketplace.json conflict with #496 will be resolved by rebase order
(whichever merges first; the other rebases)
Tests:
- python3 -m json.tool validates marketplace.json, plugin.json, hooks.json
- grep -c '\\u' on marketplace.json = 0
Second inhabitant of the `governance` category. Addresses the failure mode
where an AI agent posts PR reviews, comments, merges, or edits CI config
without a human gate. Directly inspired by the Hermes-style incident
pattern where review-bot hallucinations produce account-linked damage.
Components
──────────
- plugin.json, README.md, skills/review-agent-setup/SKILL.md
- agents/review-policy-author.md (sonnet) — Cedar author specialized in
review-surface gating across GitHub / GitLab / protected branches /
CI paths / notification surfaces
- commands/approve-review.md — opens an approval window via ./.review-approved
flag file, records the reason in ./review-receipts/approvals/
- commands/list-pending.md — walks the receipt chain to show recent denials
(the set of actions the agent tried that were blocked)
- hooks/hooks.json — PreToolUse gate + PostToolUse sign
- policies/review-agent-governance.cedar — default Cedar policy with five
forbid rules covering gh/glab review actions, protected-branch pushes,
CI config paths, and WebFetch POSTs to hooks.slack.com / api.github.com
Behavior
────────
By default, the plugin forbids:
- gh pr review|comment|merge|close|edit, gh issue comment|close|edit,
gh release create|edit, gh api repos
- GitLab and Bitbucket equivalents
- git push to main|master|release|production
- Writes to .github/workflows/, .gitlab-ci.yml, .circleci/config.yml,
.github/CODEOWNERS
- WebFetch POSTs to api.github.com / api.gitlab.com / hooks.slack.com /
discord.com
Non-review actions pass through unchanged. Composes with protect-mcp for
general policy enforcement; configure separate receipt directories to
keep the chains distinct.
Approval pattern
────────────────
Human opens an approval window by creating ./.review-approved (or via
/approve-review "<reason>"). The PreToolUse hook short-circuits to
permit while the flag is present. Every action, approved or denied,
still produces an Ed25519 receipt, so the chain records exactly what
happened and under what approval.
Marketplace entry
─────────────────
Added under category: "governance" with seven discovery keywords. The
governance category now has two inhabitants (protect-mcp + this one),
which turns it from a vanity category into a real shelf.
Standards
─────────
- Ed25519 (RFC 8032), JCS (RFC 8785), Cedar (AWS)
- IETF draft-farley-acta-signed-receipts
- Uses protect-mcp as its evaluation/signing runtime
Both agent files were missing YAML frontmatter entirely, leaving them
unloadable as plugin agents. Adds name/description/model frontmatter
matching the conventions used by sibling architecture agents in each
plugin (opus tier, description sourced from existing intro line).
Bumps cloud-infrastructure to 1.3.1 and developer-essentials to 1.0.3.
Reported in #500.
Updates to match upstream MeiGen MCP release 1.2.10.
- Bump pinned MCP server: meigen@1.2.8 → meigen@1.2.10
- Bump plugin version and marketplace entry: 1.0.1 → 1.0.2
Why skip 1.2.9:
meigen@1.2.9 was deprecated on npm earlier today because of a pricing
regression. It set GPT Image 2.0 as the new default model but left the
server-side `resolution` fallback at 2K, silently doubling credit cost
for users who did not pass `resolution` explicitly. 1.2.10 defaults
gpt-image-2 to 1K (10 credits, matching the platform product default).
What changed in meigen@1.2.10:
- gpt-image-2* defaults to 1K/medium = 10 credits
- New generate_image parameters: `resolution` (1K / 2K / 4K) and
`quality` (low / medium) for opt-in upgrades or cost savings
- list_models now surfaces each model's supported resolutions and
quality tiers (via extra_config) so the host LLM can make
informed cost / detail tradeoffs
- SERVER_INSTRUCTIONS gains a "GPT Image 2.0 resolution / quality"
section guiding the LLM to stay on 1K unless the use case
(poster/print/wallpaper) justifies the cost
No behavioral change to agents, commands, or required env vars.
Upstream release: https://github.com/jau123/MeiGen-AI-Design-MCP/releases/tag/v1.2.10
npm deprecation note: https://www.npmjs.com/package/meigen/v/1.2.9
Closes the version-pinning suggestion from @wshobson on #494. The
tamper-detection test in plugins/protect-mcp/test/run-tests.sh
previously called `npx protect-mcp@latest` and `npx @veritasacta/verify`
with no version constraint, meaning an upstream npm publish could
flip the test green or red without any repo-side signal. Pinning
eliminates that.
Changes
───────
- plugins/protect-mcp/hooks/hooks.json: 2 x
protect-mcp@latest -> protect-mcp@0.5.5
(PreToolUse evaluate + PostToolUse sign)
- plugins/protect-mcp/test/run-tests.sh:
6 x protect-mcp@latest -> protect-mcp@0.5.5
3 x @veritasacta/verify -> @veritasacta/verify@0.3.0
(the four PreToolUse test invocations, keygen, sign, plus the two
verify calls in tests 7 and 8)
- Header comment at the top of run-tests.sh now mentions the pinned
@veritasacta/verify version for clarity.
What is NOT pinned
──────────────────
README.md and SKILL.md references remain as `npx protect-mcp@latest`
and `npx @veritasacta/verify`. Those are documentation of the pattern
a user should use in their own project, and "latest" is the right
advice for that audience. The test infrastructure is the only
executed path where pinning matters for reproducibility.
How to bump
───────────
When you want to update (e.g., protect-mcp publishes 0.6.0 with a
breaking change to --input handling), update both files together:
perl -i -pe 's/protect-mcp\@0\.5\.5/protect-mcp\@0.6.0/g' \
plugins/protect-mcp/hooks/hooks.json \
plugins/protect-mcp/test/run-tests.sh
Then re-run ./plugins/protect-mcp/test/run-tests.sh to confirm the
tamper-detection guard still passes before merging.
This PR does NOT touch review-agent-governance or signed-audit-trails
because those plugins are still in review (#495, #496). Once they
land, a follow-up PR will pin them too.
Tests
─────
- python3 -m json.tool hooks.json passes
- bash -n run-tests.sh passes
- No other files touched; no marketplace.json changes (avoids conflict
with #495 and #496)
1. marketplace.json unicode regression FIXED. Same fix as #495: reset
the file to upstream HEAD and did a string-based append of only the
new signed-audit-trails entry. No other entries are touched. Verified
with grep on \\u escape sequences returning 0.
2. refs.arewm.com/agent-commit/v0.2 link verified. curl -sIL returns
HTTP 200; the page is live and correct.
Non-blocking thought (standalone plugin vs skill under protect-mcp)
acknowledged; keeping as standalone for v0.1 since the user-evaluation
path ('read before commit to infrastructure') works better without
requiring protect-mcp install first. Happy to restructure if the
maintainer prefers the nested-skill shape.
Strict-form --fail-on-missing-policy true production example deferred
to a follow-up SKILL revision. Not in this fix since it would be new
content rather than a bug fix.
Companion to the existing protect-mcp and review-agent-governance plugins
in the governance category. This one is a teaching skill, not a runtime
hook: a cookbook-style walkthrough for explaining, evaluating, or
demonstrating the signed-audit-trails pattern before committing to the
protect-mcp infrastructure.
Contents
────────
- plugin.json, README.md (explains this is a teaching skill, not runtime)
- skills/signed-audit-trails-recipe/SKILL.md (~1600 words) walking through:
1. Hook configuration in .claude/settings.json
2. Cedar policy authoring (four permit/forbid rules)
3. Using Claude Code normally with hooks active
4. Inspecting a produced receipt
5. Verifying the chain with @veritasacta/verify
6. Demonstrating tamper detection live
Plus: three-invariant cryptographic model (JCS + Ed25519 + hash chain),
cross-implementation interop table (4 implementations), CI/CD YAML
snippet, SLSA composition via ResourceDescriptor byproduct, common
pitfalls, references.
Marketplace entry
─────────────────
Added under category: "governance" immediately after protect-mcp. Keywords
emphasize the tutorial/cookbook nature ("tutorial", "skill", "recipe") to
distinguish from the runtime plugins.
Why this is useful alongside the two existing plugins
─────────────────────────────────────────────────────
protect-mcp is runtime. review-agent-governance is runtime (with human-
approval pattern). signed-audit-trails is education. A user evaluating
whether to adopt receipts can invoke the skill to get the concept and a
reproducible demo in-session, then install the runtime plugin if they
decide to proceed. Pairs naturally with /audit-chain and /verify-receipt
slash commands shipped in protect-mcp.
No new dependencies. Same IETF draft + @veritasacta/verify references as
the other governance plugins.
Follow-up to #484 closing the test-plan commitment. Adds a
plugins/protect-mcp/test/ directory with:
- Six deterministic fixtures covering PreToolUse (allow + deny paths
on Read / Bash safe / Bash destructive / Write) and PostToolUse
(receipt signing input)
- A Cedar test policy exercising both permit and forbid semantics
- An expected receipt-schema.json (JSON Schema draft-07) pinned to
draft-farley-acta-signed-receipts required fields
- run-tests.sh: full round-trip, requires node >= 18 and python3.
Eight tests covering evaluate (permit/forbid exit codes), sign
(receipt file produced), schema conformance, verify (valid + tamper
detection).
- verify-fixtures.sh: static fixture validation, python3 only, safe
to run in sandboxed CI without network access.
- README.md explaining the layout, how to run, and the exit-code
convention (including 77 = autotools "skip" for missing tools).
The critical regression guard is test 8: flipping the `decision` field
in a signed receipt MUST invalidate the Ed25519 signature, so
`@veritasacta/verify` MUST exit 1. This locks in the tamper-detection
property that the plugin claims.
No changes to the plugin itself. No new runtime dependencies. No
changes to marketplace.json or hooks.json.
Three commands lacked YAML frontmatter and silently failed to register
in Claude Code. Added minimal description frontmatter to:
- framework-migration/commands/code-migrate.md
- framework-migration/commands/deps-upgrade.md
- c4-architecture/commands/c4-architecture.md
Co-Authored-By: Claude Code <noreply@anthropic.com>
All three commands in the error-diagnostics plugin had no YAML frontmatter,
causing them to silently fail registration in Claude Code. Added minimal
description frontmatter to each command.
Co-Authored-By: Claude Code <noreply@anthropic.com>
All three commands in the codebase-cleanup plugin had no YAML frontmatter,
causing them to silently fail registration in Claude Code. Added minimal
description frontmatter to each command.
Co-Authored-By: Claude Code <noreply@anthropic.com>
All three agents in the meigen-ai-design plugin had frontmatter blocks
but were missing the required `name` field. Without a name Claude Code
cannot identify or register these agents, making the entire plugin
non-functional.
Added `name:` derived from each file's filename:
- prompt-crafter.md → name: prompt-crafter
- gallery-researcher.md → name: gallery-researcher
- image-generator.md → name: image-generator
Co-Authored-By: Claude Code <noreply@anthropic.com>
The agent had no YAML frontmatter (name, description, model), causing
Claude Code to fail silently on registration. Without frontmatter the
agent is completely unavailable to users.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Pensyve is distributed from its own marketplace (major7apps/pensyve) so
version updates flow directly from the source. Reference it as a related
plugin in both the README and plugin reference doc with install commands.
Pensyve is now distributed exclusively from its own marketplace at
major7apps/pensyve. Removing the git-subdir entry from this marketplace
to avoid version drift (plugin.json in the subtree was stale vs the
source repo).
- Drop pensyve entry from .claude-plugin/marketplace.json
- Update plugin counts: 79 → 78, AI & ML 5 → 4
- Update docs/plugins.md and README.md accordingly
- README.md: three-tier model strategy now lists Opus 4.7; Tier 1
table entry and pricing bullet updated
- llm-application-dev README, ai-engineer agent, prompt-engineer agent:
Anthropic model list now reads Opus 4.7, Sonnet 4.6, Haiku 4.5
- plugin-eval judge.py: model map resolves "opus" tier to
claude-opus-4-7 (the ID the LLM judge layer hands to the SDK)
Sonnet 4.6 and Haiku 4.5 references left alone — those are the current
model versions for those tiers. Agent frontmatter is unaffected: all
184 agents already declare model as opus/sonnet/haiku/inherit, so the
new Opus version picks up automatically with no file changes.
Adds a GitHub Action that runs the full plugin-eval engine across every
local plugin and emits a structured report for review — not a PR gate.
- scripts/eval_all.py batch-runs EvalEngine.evaluate_plugin across
plugins/*/, writing per-plugin JSON plus summary.md and summary.json
- Report surfaces composite score, 95% CI, badge, confidence label,
anti-pattern flags, and three weakest dimensions per plugin
- Separate "Issues requiring attention" section for plugins scoring
under 60 or with anti-pattern flags raised
- Workflow triggers: workflow_dispatch (choose depth + optional
comma-separated plugin filter) and weekly cron (Mondays 06:00 UTC)
- Depth quick = static only (no credentials); standard/deep require
ANTHROPIC_API_KEY repo secret for LLM judge / Monte Carlo layers
- Posts summary.md to the job summary, uploads full eval-reports/
directory as an artifact for 30 days
Smoke-tested locally: 77 plugins evaluated at quick depth in < 5s,
mean 83.1/100, 2 plugins flagged (incident-response with
DEAD_CROSS_REF, plugin-eval with ORPHAN_REFERENCE + DEAD_CROSS_REF).
- Counts now reflect 79 plugins (77 local + 2 external via git-subdir),
184 agents, 150 skills, 98 commands across 25 categories
- README/docs: add Governance category (protect-mcp), bump Testing to 2
(adds qa-orchestra), expand Security table to include reverse-engineering
and block-no-verify, add Protect MCP skills section, surface pensyve in
AI & ML
- marketplace.json: bump metadata to 1.6.0, bump pensyve to 1.2.0
- Add .github/workflows/validate.yml to gate PRs on:
- marketplace.json + every plugin.json + hooks.json parse as JSON
- every ./plugins/<name> source resolves on disk with a plugin.json
- plugin-eval pytest suite (would have caught the #482 sdk.stream bug class)
Per review feedback on #484: introducing a new governance category for
better discoverability. This is the first governance-focused plugin in
the marketplace; existing low-count categories (testing, payments,
gaming, finance, blockchain, accessibility) show that niche categories
are acceptable once they have a clear inhabitant.
Also adds a keywords array for searchability.
No changes to plugin contents — this is a marketplace-entry-only update.
Addresses #471. Adds the first cryptographic governance plugin to the
marketplace: every Claude Code tool call is evaluated against a Cedar
policy before running, and every decision produces an Ed25519-signed
receipt that anyone can verify offline.
Contents of plugins/protect-mcp/:
- skills/protect-mcp-setup/SKILL.md — full setup + hook config guide
- agents/policy-enforcer.md — Cedar policy author (opus) with example
policies for research, development, and production contexts
- agents/receipt-verifier.md — verifier/chain expert (sonnet) that
diagnoses signature mismatches, chain breaks, and malformed receipts
- commands/verify-receipt.md — /verify-receipt <path>
- commands/audit-chain.md — /audit-chain [--last N]
- hooks/hooks.json — PreToolUse (Cedar evaluate) + PostToolUse (sign)
- README.md + plugin.json
The plugin depends on two published npm packages:
- protect-mcp (10K+ monthly downloads) — the hooks runtime
- @veritasacta/verify — offline receipt verification CLI
Receipts follow IETF draft-farley-acta-signed-receipts, use RFC 8032
Ed25519 signatures, and RFC 8785 JCS canonicalization. Cedar is AWS's
formally-verified authorization engine (the WASM bindings were
upstreamed in cedar-policy/cedar-for-agents#64).
Marketplace entry added under category "security". Category
"governance" does not exist in the marketplace today; happy to propose
one in a follow-up if the maintainer prefers.