Claude Code plugin marketplace for framework-agnostic AI coding agent discipline. Standalone, usable in most projects.
Why "ronin"? The natural name
agent-skillsis reserved by Anthropic for official marketplaces from theanthropicsGitHub organization. Rōnin — a masterless samurai of feudal Japan, skilled, code-bound, self-directed — fits the spirit: a disciplined agent that arrives in any project, brings its own skills + ethics, and works without a fixed master.Extracted from fubits1/svelte-skills v0.3.1.
Biased towards:
- fff instead of grep/bash/cat/find/head/tail/awk/wc
- jq for JSON parsing/shaping
- Socket.dev for supply-chain checks
- pnpm
Two plugins. The skills (agent) and the enforcement hooks (hooks) install separately, so enforcement is opt-in.
| Plugin | Contents | What it does |
|---|---|---|
| agent | 16 skills | Research, planning, self-checks, completion verification, git/CI workflow, package-manager and security rules. Skills/guidance only, no global side effects. Requires the superpowers plugin. |
| hooks | 5 hooks | Optional enforcement: no-bash (route Bash file-read/search to dedicated tools), no-absolute-paths, force-plan-mode, auto-formatter, no-honest (stop the agent vouching with honest instead of showing evidence), plus a SessionStart discipline directive. Install to opt into enforcement. Requires agent. |
/plugin marketplace add fubits1/ronin-skills
For local development/testing:
/plugin marketplace add /path/to/ronin-skills
Superpowers plugin (required by agent):
/plugin install superpowers
The skills:
/plugin install agent
Optional — the enforcement hooks (Bash-tool blocking, plan-mode forcing, auto-format, discipline directive). These are global: once installed they fire in every project on the machine. All run on Node and work cross-OS (native Windows included — a plugin shell hook can't, #18610). Every hook except the auto-formatter needs only the Node standard library; the auto-formatter (fix-formatting.mjs) shells out to npx prettier / markdownlint-cli2 (npx ships with Node, which fetches them on demand). Install only if you want enforcement:
/plugin install hooks
To get the latest version:
/plugin marketplace update ronin-skills
/reload-plugins
This re-fetches the catalog and updates all installed plugins from this marketplace (e.g. agent, hooks) to the latest release. Run /reload-plugins afterward to apply changes without a restart.
To update automatically at startup instead, enable auto-update once: open /plugin, go to the Marketplaces tab, select ronin-skills, and choose Enable auto-update (off by default for third-party marketplaces). Claude Code then prompts you to run /reload-plugins whenever it pulls a new version.
Skills in this marketplace have auto-invocation triggers defined in their descriptions. Claude Code may invoke them automatically when it detects relevant context (e.g. starting research, declaring a task done, running git commands). You can also invoke any skill manually via /skill-name or its fully qualified form /agent:skill-name. To disable auto-invocation for a specific skill, add disable-model-invocation: true to that skill's SKILL.md frontmatter.
These skills install as a Claude Code plugin, so they land in ~/.claude/plugins/cache/ronin-skills/agent/<version>/skills/. That path is not one of OpenCode's skill-discovery roots (~/.config/opencode/skills/, ~/.claude/skills/, ~/.agents/skills/, plus project-local equivalents) — so OpenCode does not see them by default. Expose the cache directory explicitly:
OpenCode's config supports a skills.paths array ("Additional paths to skill folders"), scanned recursively for **/SKILL.md. Point it at this plugin's skills directory in ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"skills": {
"paths": ["~/.claude/plugins/cache/ronin-skills/agent/<version>/skills"]
}
}Pure config, no filesystem changes. The cache path is version-pinned, so bump <version> after /plugin marketplace update ronin-skills. ~/-prefixed and project-relative paths are accepted too. The key is schema-valid (present in opencode.ai/config.json under skills.paths) and implemented in the loader (skill/index.ts) even though the prose config docs don't list it yet (feature request #14370, closed).
This loads the skills in addition to anything in ~/.claude/skills/. On a duplicate name OpenCode keeps the last one scanned, so a ronin skill shadows a same-named personal one (e.g. ci).
The optional hooks plugin (/plugin install hooks) ships 5 enforcement hooks (plus a SessionStart directive) that back the agent skills. They are global once installed, and require the agent plugin (the SessionStart and plan-mode hooks reference agent skills):
| Hook | Trigger | What it does |
|---|---|---|
no-bash.mjs |
PreToolUse (Bash) | Hard-blocks Bash file-read/search tools (grep/cat/find/head/tail/awk/wc/rg) and their shell-out bypass vectors, checking each segment of compound commands so nothing rides along. Also blocks gratuitous command chaining (&&/||/;), forcing one command per call. Routes the agent to dedicated tools (fff MCP, Grep / Read / Glob / Write, jq). Zero-dependency cross-OS Node (Windows included — see #18610). Rationale + sources: no-bash.md. |
force-plan-mode.mjs |
UserPromptSubmit | Detects /plan, "make a plan", etc. — injects a directive forcing EnterPlanMode as the next tool call. Zero-dependency cross-OS Node. |
no-absolute-paths.mjs |
PreToolUse (Bash) | Blocks Bash calls that prepend the project-root absolute path (or ~-form / $HOME-form) to commands. Keeps permissions.allow clean. Zero-dependency cross-OS Node. |
fix-formatting.mjs |
PostToolUse (Write|Edit) | Auto-formats edited files via Prettier (non-Markdown) or markdownlint (.md). Silent on success. Cross-OS Node; spawns npx. |
no-honest.mjs |
Stop | Non-blocking nudge: if any message this turn says honest or honestly (the agent vouching for its own truthfulness instead of showing proof), injects additionalContext to show evidence next time. Advisory — the enforceable rule lives in agent:discipline; decision:block is avoided (it crashes Opus 4.x thinking sessions → 400). Zero-dependency Node; bounded read, flat ~28 ms; loop-guarded. Rationale + research: no-honest.md. |
A SessionStart hook (session-start.mjs, Node) also injects a mandatory directive to invoke the discipline skill at the start of every session.
The remaining shell hooks — force-plan-mode, no-absolute-paths, fix-formatting, and the inline SessionStart directive — are ported from Bash to zero-dependency Node (*.mjs), joining no-bash and no-honest. Plugin shell hooks don't run on native Windows (#18610), so the whole hooks plugin is now cross-OS with no bash/jq runtime dependency (the auto-formatter still spawns npx prettier / markdownlint-cli2, which ship with Node). Behavior is unchanged. Update with /plugin marketplace update ronin-skills + /reload-plugins.
The Bash-discipline hook and its paired skill, previously nogrep, are now no-bash — the name reflects that they cover all of Bash cat/grep/find/sed/awk/wc, mutating git, and command chaining, not just grep.
- Hook: the PreToolUse(Bash) hook is now
no-bash.mjs(wasnogrep.mjs). It has been zero-dependency cross-OS Node since 0.4.x, when it was ported from the originalnogrep.shbash script — plugin shell hooks don't run on native Windows (#18610), and it no longer needsjqat runtime. - Skill: the skill is now
agent:no-bash, invoked/no-bash(wasagent:nogrep//nogrep). - Behavior is unchanged — same blocks, same
reason=tags. (This release also fixes false positives on read-only git inspection —git stash list,git tag -l,git config --get,git clean -n,git apply --check— and on multi-line quoted arguments / line-continuations / heredocs.)
Update with /plugin marketplace update ronin-skills + /reload-plugins. Design rationale: hooks/no-bash.md.
Breaking change: the hooks moved out of the agent plugin into a new hooks plugin.
Before 0.3.0, installing agent also installed the 4 enforcement hooks. As of 0.3.0, agent is skills only and the hooks ship in a separate, optional hooks plugin.
If you had enforcement via agent, then after /plugin marketplace update ronin-skills the hooks stop firing — no-bash, no-absolute-paths, force-plan-mode, the auto-formatter, and the SessionStart discipline directive all go silent. To keep enforcement, install the new plugin:
/plugin marketplace update ronin-skills
/plugin install hooks
/reload-plugins
If you preferred the hooks NOT firing globally, do nothing: updating agent alone now gives you the skills with no global side effects, which is the new default.
Claude Code's plugin namespaces are global — agent:research resolves to whichever installed plugin is named agent, regardless of which marketplace provided it. This marketplace ships the canonical agent plugin.
If you also install fubits1/svelte-skills, its frontend:* and svelte-5:* skills reference agent:research, agent:done, agent:before-you-act, etc. — those references resolve against agent@ronin-skills installed here. No additional configuration needed.
If you don't install svelte-skills, the agent plugin still works fully — every cross-reference in its skills is either intra-plugin (e.g. agent:plan references agent:research) or uses generic wording (e.g. "your project's validate skill") with no hard dependency on other marketplaces.
Claude Code allocates 1% of context window (fallback: 8,000 chars) for skill descriptions. Each description is capped at 250 chars. This marketplace adds ~16 skill descriptions on top of whatever else is installed.
Run /context to check for budget warnings. Override with SLASH_COMMAND_TOOL_CHAR_BUDGET=<chars>.
Source: Claude Code skills docs
- fubits1/svelte-skills — frontend + Svelte 5 + Svelte 5 migration plugins. Soft-depends on
agent@ronin-skills. - spences10/claude-code-toolkit — domain-split alternative (mcp / analytics / workflow / devops / dev-practices / dev-environment / secrets plugins).
- JuliusBrussee/caveman — ultra-compressed communication mode for terser agent output.
- use agent:update-skills to backport skills between a local dir and this marketplace.
Browse release history at Releases. Maintainer release process: see RELEASING.md.
MIT