rsk mcp · for Claude Code and OpenCode
Your agent asks.You approve.rsk installs.
rsk gives your coding agent three tools. Two only read: your project’s files and a catalogue of 60 skills. The one that writes, install_skills, makes Claude Code ask you on every call.
1Agent→rsk mcp
2Agent→You
Allow
install_skillsfrom rsk?go-architect, docker-architect, cli-tool-architect
you, every call
3Agent→rsk mcp
real Call 1 is a real project_profile response for a scratch Go folder (go.mod, Dockerfile, cmd/demo/main.go). sample The approval is drawn, not a capture of the client dialog, and call 3’s reply is the shape from internal/mcp/install_tool.go with real latest versions.
3 after call 3
It lands in two files you commit.
install_skills writes the skills into .rsk/rsk.mod and their exact versions into .rsk/rsk.lock. Whoever clones the repo runs rsk install and gets the same three, at the same versions. Think go.mod and go.sum, for your agent’s skills.
rsk new- ✓ registered the rsk MCP server (.mcp.json, opencode.json)
- ✓ initialized .rsk/ for all
install_skills · approved by yoursk pin go-architect
- version = 1
- tools = ["claude-code", "opencode"]
- pinned = ["go-architect"]
- [skills]
- cli-tool-architect = "*"
- docker-architect = "*"
- go-architect = "*"
| skill | version |
|---|---|
| go-architect | 1.16.0 |
| docker-architect | 1.4.0 |
| cli-tool-architect | 1.1.0 |
sample project Same scratch folder as above. The rsk new lines are a real run (paths shortened); the ◆ line stands for call 3. The file contents are what internal/install/apply.go writes for those three skills, with versions from the registry on 2026-11-04 — not a capture.
Before and after
What rsk new actually writes.
Six files in the project root and .rsk/, from a real run on a three-file Go project. Installing adds the lock and the links. Nothing lands outside the project except the cache.
rsk new real run
- go.modyours, untouched
- Dockerfileyours, untouched
- cmd/demo/main.goyours, untouched
- .rsk/rsk.mod (new)The manifest: which tools, which skills, which are pinned. Commit it.
- .rsk/CLAUDE.md (new)Imports for pinned skills; empty until you pin one. Commit it.
- CLAUDE.md (new)Starts with @AGENTS.md, then @.rsk/CLAUDE.md, then a short note for the agent.
- AGENTS.md (new)A skeleton, only when the project has none. An existing one is never touched.
- .mcp.json (new)Registers rsk mcp for Claude Code.
- opencode.json (new)Registers rsk mcp for OpenCode.
rsk install go-grpc from the code
- .rsk/rsk.lock (new)Exact versions and sources. Commit it, like go.sum.
- .claude/skills/<name> (new)A symlink into rsk’s cache under ~/.config/rsk/. OpenCode reads the same folder.
@AGENTS.md @.rsk/CLAUDE.md <!-- rsk-mcp:start --> ## Project standards Before scaffolding or a non-trivial change, call the rsk MCP `project_profile` tool to learn which skills apply here. Installed skills appear automatically in your skill list — invoke them with the Skill tool. Never install without asking. <!-- rsk-mcp:end -->
@AGENTS.md stays the first line so the guide you wrote loads before anything rsk generates. rsk destroy removes the note and the MCP registration and leaves AGENTS.md alone.
60 skills the agent chooses from, in 15 bundles.
Grouped by the folder they live in. Pick a bundle to see what rsk install <bundle> brings; personal skills stay hidden unless you pass --include personal, as in the CLI.
Showing the 51 skills rsk catalog lists by default; the 9 personal ones need --include personal.
frameworks8
- astro-architect1.1.0
- fastapi-architect1.1.0
- gin-architect1.1.0
- hugo-architect1.1.0
- nethttp-architect1.1.0
- nextjs-architect1.1.0
- react-architect1.2.0
- reveal-js-architect1.1.0
frontend6
- demo-presentation-architect1.2.0
- demo-script-architect1.1.0
- landing-page-designer1.1.0
- mockup-architect1.0.0
- ui-ux-architect1.1.0
- website-concept-architect1.1.0
infra5
- ci-cd-architect1.3.0
- docker-architect1.4.0
- grafana-architect1.1.0
- observability-architect1.1.0
- secrets-architect1.2.0
workflows5
- commit-author1.12.0
- docs-architect1.2.0
- feature-planner1.1.0
- grill-with-docs1.1.0
- tdd1.1.0
meta4
- caveman1.1.0
- rsk-guide0.5.1
- skill-builder1.1.0
- token-economy1.1.0
protocols4
- connectrpc-architect1.1.0
- grpc-architect1.1.0
- mcp-architect2.4.0
- rest-api-architect1.2.0
quality4
- api-contract-reviewer1.1.0
- codebase-hygiene-reviewer1.2.0
- performance-reviewer1.1.0
- security-reviewer1.1.0
refactoring4
- code-design-refactor1.1.0
- design-patterns1.1.0
- improve-codebase-architecture1.2.0
- logic-cleaner1.1.0
languages3
- go-architect1.16.0
- latex-architect1.1.0
- python-architect1.5.0
academic2
- ml-conference-paper-architect1.1.0
- study-artifact-builder1.2.0
design2
- ddd-architect1.1.0
- hexagonal-arch1.2.0
tooling2
- cli-tool-architect1.1.0
- repo-tooling-architect1.6.0
databases1
- sql-architect1.1.0
encoding1
- protobuf-architect1.1.0
messaging1
- event-driven-architect1.1.0
robotics1
- ros2-architect1.1.0
personal7
- go-house-libs0.7.0
- go-library-builder1.2.0
- pi-iteration-workflow1.1.0
- uru-scientific-paper-architect1.2.0
- uru-thesis-architect0.2.0
- uru-thesis-defense-architect1.1.0
- uru-thesis-reviewer0.3.0
- 7 personal skills, hidden by default
From internal/mcp/tools.go
Three tools. One writes, and it is marked to say so.
The descriptions are the ones the agent reads. destructiveHint is only advice to the client; the requiresUserInteraction flag is what makes Claude Code prompt you even in auto-approve modes.
project_profile
Detect this project's stack from its files and propose the ralvaskills skills that apply. Call it before scaffolding or a non-trivial change.
readOnlyHint: true destructiveHint: false idempotentHint: true
search_skills
Search the ralvaskills catalog by keyword. Use it to find a skill by name or intent when project_profile does not name one.
readOnlyHint: true destructiveHint: false idempotentHint: true
install_skills
Install one or more skills or bundles into this project by name, resolving them through the ralvaskills catalog. Writes symlinks and the project manifest. The client asks the user to approve.
readOnlyHint: false destructiveHint: true _meta: anthropic/ requiresUserInteraction
rsk://catalog
A resource, not a tool: every skill with its latest version, descriptions cut to 200 characters. Name
rsk-catalog.mimeType: application/json
From internal/mcp/signals.go
What project_profile looks for.
| Signal | Proved by | Proposes |
|---|---|---|
| language:go | go.mod | go-architect |
| language:python | pyproject.toml, requirements.txt, uv.lock | python-architect |
| language:typescript | tsconfig.json, package.json | — |
| framework:nextjs | next.config.*, or next in package.json | nextjs-architect, react-architect |
| framework:astro | astro.config.* | astro-architect |
| protocol:grpc | any .proto, or google.golang.org/grpc in go.mod | grpc-architect, protobuf-architect |
| protocol:rest | openapi.yaml/.yml, swagger.json, any .http | rest-api-architect |
| infra:docker | Dockerfile, docker-compose.yml/.yaml | docker-architect |
| infra:k8s | Chart.yaml, kustomization.yaml/.yml | — |
| infra:ci | files in .github/workflows | ci-cd-architect |
| repo:tooling | .golangci.yml, mise.toml, Taskfile.yml | repo-tooling-architect |
| repo:cli | main.go, or cmd/*/main.go | cli-tool-architect |
| data:postgres | .sql files with sqlx or psycopg | — |
It proposes, it does not rank. Refactoring skills are never proposed by a file; only when the agent is already refactoring. ● matched in the scratch folder.
The full response real
{
"candidates": [
{
"because": [
"language:go"
],
"installed": false,
"latest": "1.14.0",
"skill": "go-architect"
},
{
"because": [
"infra:docker"
],
"installed": false,
"latest": "1.3.0",
"skill": "docker-architect"
},
{
"because": [
"repo:cli"
],
"installed": false,
"latest": "1.0.0",
"skill": "cli-tool-architect"
}
],
"installed": [],
"manifest": {
"exists": false,
"pinned": 0,
"skills": 0
},
"project_root": "/tmp/rsk-demo-go",
"signals": [
{
"kind": "language:go",
"proof": "go.mod"
},
{
"kind": "infra:docker",
"proof": "Dockerfile"
},
{
"kind": "repo:cli",
"proof": "cmd/demo/main.go"
}
]
}The real file
The repository that ships rsk runs on rsk.
version = 1 tools = ["claude-code", "opencode"] pinned = ["docs-architect", "rsk-guide", "token-economy", "commit-author"] [skills] ci-cd-architect = "*" cli-tool-architect = "*" commit-author = "*" docs-architect = "*" go-architect = "*" landing-page-designer = "*" logic-cleaner = "*" repo-tooling-architect = "*" rsk-guide = "*" skill-builder = "*" token-economy = "*"
- 11 skills, 4 pinned. Pinned skills are imported through
.rsk/CLAUDE.mdandopencode.json, so they load in every session. "*"means latest; the lock records the exact version that resolved, so a clone gets the same ones.- Both tools from one list.
tools = ["claude-code", "opencode"]drives which adapter files rsk writes.
| skill | version | source |
|---|---|---|
| ci-cd-architect | 1.2.0 | registry |
| cli-tool-architect | 1.0.0 | registry |
| commit-author | 1.12.0 | registry |
| docs-architect | 1.2.0 | registry |
| go-architect | 1.14.0 | registry |
| landing-page-designer | 1.0.0 | registry |
| logic-cleaner | 1.0.0 | registry |
| repo-tooling-architect | 1.5.0 | registry |
| rsk-guide | 0.5.1 | registry |
| skill-builder | 1.0.0 | registry |
| token-economy | 1.1.0 | registry |
The whole surface
Thirteen commands, grouped the way rsk --help groups them.
Machine setup
- init
- Set up rsk for this machine.
Project lifecycle
- new
- Initialize an rsk project in the current directory.
- destroy
- Remove the rsk project from the current directory.
Install / uninstall / update
- install
- Install bundles or skills.
- uninstall
- Remove installed bundles or skills.
- update
- Pull the latest skills and re-link.
Project pinning
- pin
- Pin a skill so it is imported into each tool's project config.
Tool configuration
- tools
- Manage tool permissions (allow/deny/list/remove).
Read-only views
- catalog
- Browse the catalog of available skills and bundles.
- list
- Show installed skills (project / --global).
- status
- Show installed skills and version drift.
Other
- mcp
- Run the MCP server over stdio.
- completion
- Generate the autocompletion script for the specified shell.
Data on stdout, logs on stderr, --output json on the read-only views, NO_COLOR honoured.
The trade-off
One binary and one config file for every project. One dependency in exchange.
What you get
- One binary and one machine config,
~/.config/rsk/config.json, for every project. - Versions in a lock you commit. A clone runs
rsk installand matches. - Claude Code and OpenCode from one install: skills are linked once into
.claude/skills/.
What you accept
- The registry at skills.ralvarez.dev has to be reachable when you install or update, or you point rsk at a local clone of the repository.
- The MCP server needs
rskon PATH on every machine that opens the project. - The catalogue is one author’s standards. To change one, fork the repo and use your clone.
Quick start
Set it up once. Then let the agent ask.
rsk new registers the MCP server for both clients. Skip the last two lines if you want the agent to propose them.
# or a binary from Releases go install github.com/ralvarezdev/ralvaskills/v3/cmd/rsk@latest # once per machine rsk init # in a project: writes .rsk/ and registers rsk mcp rsk new # a bundle or a skill rsk install go-grpc # load it in every session rsk pin go-architect
Questions
Before you install.
Do I need the MCP server?
No. Every step works from the CLI: rsk install, rsk pin, rsk catalog. The server is there so the agent can propose skills from your files instead of you naming them.
Which clients does it support?
Claude Code and OpenCode. rsk new --for claude-code|opencode|all picks which config files rsk writes; installed skills are linked once into .claude/skills/.
Can I install a skill for every project?
Yes: rsk install <name> --global links it into ~/.claude/skills/ and ~/.config/opencode/skills/. The global bundle is meant for that.
Can I define my own bundles?
Write ~/.config/rsk/catalog.toml. A bundle with the same name replaces the built-in one; new names are added.
What are personal skills?
9 of the 60 are marked personal in the registry index. rsk catalog hides them unless you pass --include personal.
How do updates work?
rsk status shows installed skills and version drift; rsk update [name] pulls the latest and re-links. Each skill is versioned and released on its own.
What does it cost?
Nothing. rsk and the catalogue are GPL-3.0, on GitHub.