Skip to content

Package the skills as a Claude Code and Codex plugin - #19

Open
homeyong wants to merge 3 commits into
mainfrom
add-plugin
Open

homeyong wants to merge 3 commits into
mainfrom
add-plugin

Conversation

@homeyong

@homeyong homeyong commented Nov 3, 2026

Copy link
Copy Markdown
Collaborator

Summary

Makes this repo installable as a plugin in Claude Code and Codex, so users get all four skills with one command and receive updates from this repo.

# Claude Code
/plugin marketplace add etherscan/skills
/plugin install etherscan@etherscan

# Codex
codex plugin marketplace add etherscan/skills
codex plugin add etherscan@etherscan

The plugin ships no MCP server. Coding agents should use the Etherscan CLI, so bundling the MCP would steer them away from it.

Changes

  • Plugin files at the repo root
    • Claude Code: .claude-plugin/plugin.json and .claude-plugin/marketplace.json
    • Codex: .codex-plugin/plugin.json and .agents/plugins/marketplace.json
    • Icon: assets/icon.png
  • skills/etherscan/SKILL.md: agents that can run shell commands now prefer the CLI over MCP, even when both are available. MCP is the fallback when there is no shell or no CLI. One workflow-check row was split to match.
  • skills/etherscan/references/mcp.md:
    • lists the keyless endpoint next to the authenticated one;
    • adds "keep calls minimal": one chain, no decorative fetches, an empty result is not proof of no activity, report retry timing;
    • says to call render_etherscan_widget only where the host displays MCP app UI.
  • README and CONTRIBUTING: plugin install steps, and where the plugin files live.

Decisions for review

  • Claude manifest has no version. Each merge to main becomes the new plugin version when users' marketplaces update. claude plugin validate warns about this. Add a version if you want to control releases by hand.
  • Codex manifest is 0.1.0. It may pin Codex users until it is bumped. I did not confirm this.
  • The chain rule is unchanged. The etherscan skill still asks for the chain when it is missing.
  • No SessionStart hook. A hook would add text to every session in every project. On Windows without Git Bash it would also show an error each session.

Testing

  • claude plugin validate .: passes, with only the missing-version warning.
  • Claude Code (throwaway CLAUDE_CONFIG_DIR): marketplace add and install succeed. The plugin loads 4 skills, 0 MCP servers and 0 hooks, and adds about 720 always-on tokens.
  • Codex 0.166 (throwaway CODEX_HOME): marketplace add and install succeed. All 4 skills are in the plugin cache, and the plugin shows as enabled.
  • npx skills add . --list at the repo root still finds exactly the 4 skills.
  • scripts/validate_skills.py, the 19 repo tests, and the etherscan-flow schema check and 34 tests all pass.

🤖 Generated with Claude Code

homeyong and others added 3 commits November 2, 2026 18:17
Add Claude Code and Codex plugin manifests and marketplaces at the repo
root, so the four skills install with one command and update with the
repo. The plugin ships no MCP server: the skills stay CLI first.

In the etherscan skill, prefer the CLI over MCP for agents that can run
shell commands, list the keyless MCP endpoint, keep MCP calls minimal,
and call render_etherscan_widget only where the host displays it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Keep the CLI as the preferred interface across products, but only when
it has a resolved API key and supports the requested chain, matching
etherscan-flow's fallthrough rule. Fall back to MCP when connected, and
otherwise to the API or website so agents without a shell or MCP
connection always have a route. Merge the two overlapping CLI bullets.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@homeyong

homeyong commented Nov 4, 2026

Copy link
Copy Markdown
Collaborator Author

Review notes. Pushed ba405d5 for the first one; the rest are open for discussion.

Fixed in ba405d5: interface routing in skills/etherscan/SKILL.md

  • CLI stays first, because the skill ships to every product. It's now preferred only when the CLI has a resolved API key and supports the requested chain. That matches the fallthrough rule in etherscan-flow. Before this, an installed CLI with no key would override a working MCP connection.
  • I added a final fallback (MCP if connected, otherwise the API or website). This covers no-shell products without MCP, and shell agents with neither the CLI nor MCP. Previously neither case had a route.
  • I merged the two overlapping CLI bullets and added workflow checks for both fallback cases.

Open items

  1. skills/etherscan/references/mcp.md still says "An authenticated agent" and tells readers to configure bearer auth. Neither fits the new keyless endpoint. It also doesn't say how to pick an endpoint, or that keyless lacks the PRO-only tools (such as get_address_labels).
  2. Codex only picks up a change after a manual bump of version in .codex-plugin/plugin.json, and nothing enforces it. Claude Code users get skill fixes, but Codex users stay on 0.1.0. The README says the plugin updates with the repo.
  3. CI doesn't validate the four plugin and marketplace manifests. Consider adding claude plugin validate . plus a JSON/schema check for the Codex files.
  4. .codex-plugin/plugin.json declares capabilities: ["Read"] only, but etherscan-flow and the transaction-debugger scripts write files.
  5. The marketplace source is ./, so tests/, scripts/ and .github/ are copied into every user's plugin cache. Any future root agents/, commands/ or hooks/ folder would also be loaded as part of the plugin.
  6. The README says "all four skills", which goes stale when a fifth is added. CONTRIBUTING says new skills ship with no extra step.
  7. The description, keywords and URLs are duplicated across three manifests, and the copies already differ (only the Claude description has "Uses the Etherscan CLI first.").

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant