Skip to content

fix(agentic-engineering): pass the Claude plugin directory's checks - #659

Draft
devantler wants to merge 1 commit into
mainfrom
claude/plugin-directory-validation
Draft

devantler wants to merge 1 commit into
mainfrom
claude/plugin-directory-validation

Conversation

@devantler

Copy link
Copy Markdown
Contributor

Why

Submitting agentic-engineering to the Claude plugin directory (validated at main @ 5e3cd8e) failed on two blocking findings and warned on two more. This fixes all four.

What changes

Finding Cause Fix
⛔ Secret in a shipped file scripts/github-mcp-headers.test.sh used stub values shaped like GitHub tokens (gho_…, github_pat_…) Neutral stub values. The helper accepts any [A-Za-z0-9_]+ token, so the test still covers the same contract. A comment says why the stubs must not look real
⛔ Command path can't be followed flux-operator-mcp and kubescape started from inline sh -c programs They start as bash ${CLAUDE_PLUGIN_ROOT}/scripts/<server>.sh through two new launchers, scripts/flux-operator-mcp.sh and scripts/kubescape-mcp.sh, with the same KUBECONFIG → $HOME/.kube/config fallback. Each has a hermetic test
⚠ No icon — .claude-plugin/icon.png: the Devantler Tech orb (the org avatar) at 512 × 512
⚠ No privacy policy URL devantler.tech has no privacy page New PRIVACY.md, linked from the README by a Privacy link, which the directory accepts in place of privacyPolicyUrl. It states the plugin collects nothing itself and lists what each bundled server sends, and to whom

Also adds the README's Claude Code install line, which the directory profile advises, and moves the plugin to 7.1.2, after #657's 7.1.1.

Trade-off

A tool that does not substitute ${CLAUDE_PLUGIN_ROOT} in a stdio server's args now fails to start the two cluster servers; the rest keep working. Claude Code and VS Code document the substitution, and Codex's binary carries the alias. Copilot CLI documents ${PLUGIN_ROOT} for plugin MCP servers and ${CLAUDE_PLUGIN_ROOT} only for agent-shipped servers, so Copilot CLI is unverified. The README states this.

Not changed here

  • Owned upstream (external skills, never hand-edited here): the broad allowed-tools in git-commit and dependency-scanning, and the curl | sh install lines in siderolabs, which are documentation only. The 47 "frontmatter value needs quotes" notes are info-level and could not be reproduced locally.
  • Intentional: the unscoped mcp__flux-operator-mcp__* names in flux-troubleshooter (flux-troubleshooter's MCP tool allowlist likely matches no plugin-provided tool in Claude Code #635).
  • Left for a decision: GitHub sign-in through headersHelper. It drives most of the "uses a credential from the user's machine" policy holds, and the directory says headersHelper will later be accepted only from Verified organizations. Moving to a sensitive userConfig token in headers would need a Claude-only MCP override, because .mcp.json is shared with Copilot, VS Code and Codex. That means relaxing the manifest-parity rule, so it is a separate change.

Validation

  • ./scripts/validate-manifests.sh, check-plugin-version-bump.sh, plugin-changelog.sh check, guard-bundled-skill-edits.sh and check-skill-licenses.sh pass.
  • shellcheck is clean on the new and changed scripts.
  • All 47 bundled helper self-tests pass, including the new launcher tests. A mutation check showed the launcher tests fail when --read-only is dropped, when the KUBECONFIG default or export is removed, when the launcher writes to stdout, and when it accepts arguments.
  • claude plugin validate --profile directory --strict plugins/agentic-engineering (Claude Code 2.1.317) passes with no warnings, where main had the icon and privacy warnings.
  • Not yet observed: the directory's own re-validation, which runs more checks than the local profile.

🤖 Generated with Claude Code

The plugin directory refused the submission on two blocking findings and
warned on two more:

- flux-operator-mcp and kubescape started from an inline `sh -c` program
  the validator cannot follow. They now start from bundled launchers,
  scripts/flux-operator-mcp.sh and scripts/kubescape-mcp.sh, run by bash at
  ${CLAUDE_PLUGIN_ROOT}, with the same KUBECONFIG fallback and hermetic tests.
- The github-mcp-headers self-test shipped stub values shaped like GitHub
  tokens, which the secret scan reported. They are neutral stubs now.
- Add PRIVACY.md, linked from the README, and a 512 px
  .claude-plugin/icon.png from the Devantler Tech orb.
- Add the README's Claude Code install line.

Bump agentic-engineering to 7.1.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: 🫴 Ready

Development

Successfully merging this pull request may close these issues.

1 participant