Repository navigation
feat(plugin): ship the hotdata skill as the hotdata-cli Claude Code plugin - #353
Conversation
…lugin The repo root is now a Claude Code plugin named hotdata-cli, following the <vendor>-cli convention (sentry-cli, teamcity-cli) so it stays unambiguous in the shared plugin directory. It is listed in a separate hotdata marketplace (hotdata-dev/claude-plugins), so users install it with hotdata-cli@hotdata. - A SessionStart hook stays silent when hotdata is on PATH, adds ~/.hotdata/cli to PATH when only the prebuilt binary is there, and otherwise asks Claude to offer the installer instead of running it. - The installer is run with HOTDATA_NO_SKILLS=1 so plugin users do not get a second copy of the skill in ~/.claude/skills. - cargo-release bumps plugin.json's version, and check-skills.sh --require-version fails if it does not match Cargo.toml. - The skill's install snippet now uses https://hotdata.dev/install.
| if [ -x "$DIST_BIN_DIR/hotdata" ]; then | ||
| if [ -n "${CLAUDE_ENV_FILE:-}" ]; then | ||
| echo "export PATH=\"$DIST_BIN_DIR:\$PATH\"" >> "$CLAUDE_ENV_FILE" | ||
| fi |
There was a problem hiding this comment.
nit: Print a context line when CLAUDE_ENV_FILE is unset (not blocking).
Suggested fix: add an else branch that tells Claude to call ~/.hotdata/cli/hotdata by full path. The missing-binary message at line 35 already gives the same instruction.
Consequence: with no CLAUDE_ENV_FILE, the hook exits silently and PATH is unchanged. Claude then runs hotdata, gets "command not found", and can offer to reinstall a CLI that is already installed.
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
| The plugin checks for the CLI when a session starts and offers to install it if | ||
| it's missing. Use either the plugin or the installer's skill, not both: if you | ||
| installed the CLI with the script above, install it with `HOTDATA_NO_SKILLS=1` | ||
| or Claude Code will list the skill twice. |
There was a problem hiding this comment.
nit: Tell users who already ran the installer how to remove the existing skill copy (not blocking).
Suggested fix: name the command or path that removes the installer's copy, for example ~/.claude/skills/hotdata. Use hotdata manage skills instead if it has an uninstall subcommand.
Consequence: HOTDATA_NO_SKILLS=1 only skips the skill step on a new install. Re-running the installer with HOTDATA_NO_SKILLS=1 does not delete a copy that an earlier run placed. The PR description lists this case as a known limitation, but the README text implies the flag fixes the duplicate.
| updates it with each release: | ||
|
|
||
| ``` | ||
| /plugin marketplace add hotdata-dev/claude-plugins |
There was a problem hiding this comment.
nit: Merge this section only after hotdata-dev/claude-plugins is public on GitHub (not blocking).
Consequence: the PR description states that the marketplace repo does not exist yet. Until the marketplace repo exists, /plugin marketplace add hotdata-dev/claude-plugins fails for every README reader.
Makes the repo root a Claude Code plugin,
hotdata-cli, so the skill can be installed with/plugin install hotdata-cli@hotdataand kept up to date with each release.Naming. The
<vendor>-clipattern matches how other CLIs are listed in Anthropic's plugin directory (sentry-cli,teamcity-cli,sap-hana-cli). A generic name likeclicould collide with another plugin; when that happens Claude Code loads only one of the two plugins' hooks and doesn't say so. The skill shows up as/hotdata-cli:hotdata.Marketplace. The marketplace is a separate repo,
hotdata-dev/claude-plugins(namedhotdata), so future plugins likehotdata-memorycan be added there without changing the install command. That repo is live: https://github.com/hotdata-dev/claude-plugins.marketplace add+install hotdata-cli@hotdatawork today, but they pullmain, which has the skill only. The manifest and hook arrive when this merges.What's in here
.claude-plugin/plugin.json: plugin manifest, version 0.43.0.hooks/check-cli.sh(SessionStart):hotdataon PATH → does nothing.~/.hotdata/cli→ adds that folder to PATH throughCLAUDE_ENV_FILE.curl -fsSL https://hotdata.dev/install | HOTDATA_NO_SKILLS=1 sh. It never installs on its own.HOTDATA_NO_SKILLS=1stops the installer from adding a second copy of the skill to~/.claude/skills. The SKILL.md install section now says this, and uses thehotdata.dev/installURL.cargo-releasebumps theplugin.jsonversion, andcheck-skills.sh --require-versionfails when it doesn't matchCargo.toml. CI already runs that check.README: new "Claude Code plugin" install section with the two commands, plus the use-one-not-both note.
Verified
claude plugin validatepasses for the plugin and the marketplace.shellcheckis clean.check-skills.sh --require-versionpasses, and fails when given a wrong plugin version.cargo test commands::skillpasses (12 tests).Not verified: loading the plugin in a live Claude Code session.
Known limitation: users who already have the skill from the README installer and also install the plugin will see both
hotdataandhotdata-cli:hotdata. A follow-up could makehotdata manage skills installskip~/.claudewhen the plugin is installed.Try it:
claude --plugin-dir ., then/hotdata-cli:hotdata.