Skip to content

Claude Code plugin

The in-session surface. claudectl ships as a Claude Code plugin, which puts its three most useful commands and its eight skills inside the conversation rather than in a separate window.

/plugin marketplace add babarmuhammad/claudectl
/plugin install claudectl@claudectl

What it adds

/claudectl:recall <topic> This project's task-relevant memory, scored locally against the topic — no model call
/claudectl:status Memory age, repositories and worktrees, health checks
/claudectl:review Review the current diff against this project's own learned conventions
8 skills changelog, code-explainer, commit-message, pr-description, refactor-planner, security-review, test-writer, token-economy

The three commands shell out to the claudectl CLI, so install that too:

pipx install claudectl     # or: pip install claudectl

The skills work on their own, without the CLI.

Skills, and where they come from

The bundled skills live in the package at claude_sessions/skills_templates/<name>/SKILL.md and are generated into the plugin's own root, because package-data cannot reach outside the package and the plugin needs them at its root. They are the same starters the skills manager offers, so installing the plugin and copying them from the manager gives you the same files either way.

A skill loads on demand — Claude reads SKILL.md when the task matches, not on every turn — which is why they are skills rather than more CLAUDE.md. See Usage & cost.

What it deliberately does not add

Hooks. claudectl already installs its own — the memory-recall hook, the worklog capture, the guard hooks — through a manager that places them per account and can show, repair and remove them.

Shipping the same hooks in the plugin would give two owners to one entry in settings.json: installing both runs the recall hook twice on every prompt, and uninstalling either leaves the other behind looking broken. ${CLAUDE_PLUGIN_ROOT} exists and hooks can be inlined in plugin.json — the constraint here is ownership, not capability.

Use claudectl → Hooks.

Updating and removing

The plugin is versioned with claudectl itself and updates through Claude Code's own /plugin commands. It is independent of the CLI install: removing one leaves the other working.

The plugin marketplace and install caches are Claude Code state whose format has already changed once, so claudectl never rewrites them directly — every plugin mutation it makes shells out to the claude CLI.