Skip to content

feat(plugin): ship the hotdata skill as the hotdata-cli Claude Code plugin - #353

Merged
eddietejeda merged 2 commits into
mainfrom
feat/claude-plugin
Oct 18, 2026
Merged

eddietejeda merged 2 commits into
mainfrom
feat/claude-plugin

Conversation

@eddietejeda

@eddietejeda eddietejeda commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Makes the repo root a Claude Code plugin, hotdata-cli, so the skill can be installed with /plugin install hotdata-cli@hotdata and kept up to date with each release.

Naming. The <vendor>-cli pattern matches how other CLIs are listed in Anthropic's plugin directory (sentry-cli, teamcity-cli, sap-hana-cli). A generic name like cli could 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 (named hotdata), so future plugins like hotdata-memory can be added there without changing the install command. That repo is live: https://github.com/hotdata-dev/claude-plugins. marketplace add + install hotdata-cli@hotdata work today, but they pull main, 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):

    • hotdata on PATH → does nothing.
    • Binary only in ~/.hotdata/cli → adds that folder to PATH through CLAUDE_ENV_FILE.
    • Missing → tells Claude to ask the user, then run curl -fsSL https://hotdata.dev/install | HOTDATA_NO_SKILLS=1 sh. It never installs on its own.
  • HOTDATA_NO_SKILLS=1 stops the installer from adding a second copy of the skill to ~/.claude/skills. The SKILL.md install section now says this, and uses the hotdata.dev/install URL.

  • cargo-release bumps the plugin.json version, and check-skills.sh --require-version fails when it doesn't match Cargo.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 validate passes for the plugin and the marketplace.
  • shellcheck is clean.
  • The hook was run in all three cases above, against a temp HOME.
  • check-skills.sh --require-version passes, and fails when given a wrong plugin version.
  • cargo test commands::skill passes (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 hotdata and hotdata-cli:hotdata. A follow-up could make hotdata manage skills install skip ~/.claude when the plugin is installed.

Try it: claude --plugin-dir ., then /hotdata-cli:hotdata.

…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.
@eddietejeda
eddietejeda requested a review from a team as a code owner October 18, 2026 03:09
@eddietejeda
eddietejeda requested review from rohan-hotdata and removed request for a team October 18, 2026 03:09
Comment thread hooks/check-cli.sh
if [ -x "$DIST_BIN_DIR/hotdata" ]; then
if [ -n "${CLAUDE_ENV_FILE:-}" ]; then
echo "export PATH=\"$DIST_BIN_DIR:\$PATH\"" >> "$CLAUDE_ENV_FILE"
fi

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

claude[bot]
claude Bot previously approved these changes Oct 18, 2026
@codecov

codecov Bot commented Oct 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Comment thread README.md
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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread README.md
updates it with each release:

```
/plugin marketplace add hotdata-dev/claude-plugins

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@eddietejeda
eddietejeda merged commit 1ecb482 into main Oct 18, 2026
15 checks passed
@eddietejeda
eddietejeda deleted the feat/claude-plugin branch October 18, 2026 15:44
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