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.

  1. 1Agent→rsk mcp

    project_profileread-only {}
    rsk mcp replies:
    signals
    language:go
    ← go.mod
    infra:docker
    ← Dockerfile
    repo:cli
    ← cmd/demo/main.go
    proposes
    go-architect 1.14.0 · docker-architect 1.3.0 · cli-tool-architect 1.0.0
  2. 2Agent→You

    install_skillswrites needs your approval

    Allow install_skills from rsk?

    go-architect, docker-architect, cli-tool-architect

    DenyAllow✓ Allowedyou, every call

  3. 3Agent→rsk mcp

    install_skillswrites {"names": ["go-architect", "docker-architect", "cli-tool-architect"]}
    rsk mcp replies:
    installed
    go-architect 1.14.0 · docker-architect 1.3.0 · cli-tool-architect 1.0.0
    failed
    none

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.

~/demo — a Go project
  1. rsk new
  2. ✓ registered the rsk MCP server (.mcp.json, opencode.json)
  3. ✓ initialized .rsk/ for all
  4. install_skills · approved by you
  5. rsk pin go-architect
.rsk/rsk.modcommit
  1. version = 1
  2. tools = ["claude-code", "opencode"]
  3. pinned = ["go-architect"]
  4.  
  5. [skills]
  6. cli-tool-architect = "*"
  7. docker-architect = "*"
  8. go-architect = "*"
.rsk/rsk.lockcommit
rsk.lock resolved versions, all from the registry, shown as a table
skillversion
go-architect1.16.0
docker-architect1.4.0
cli-tool-architect1.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.
CLAUDE.md, as rsk new wrote itreal
@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.

Signals, the files that prove them, and the skills proposed
SignalProved byProposes
language:gogo.modgo-architect
language:pythonpyproject.toml, requirements.txt, uv.lockpython-architect
language:typescripttsconfig.json, package.json—
framework:nextjsnext.config.*, or next in package.jsonnextjs-architect, react-architect
framework:astroastro.config.*astro-architect
protocol:grpcany .proto, or google.golang.org/grpc in go.modgrpc-architect, protobuf-architect
protocol:restopenapi.yaml/.yml, swagger.json, any .httprest-api-architect
infra:dockerDockerfile, docker-compose.yml/.yamldocker-architect
infra:k8sChart.yaml, kustomization.yaml/.yml—
infra:cifiles in .github/workflowsci-cd-architect
repo:tooling.golangci.yml, mise.toml, Taskfile.ymlrepo-tooling-architect
repo:climain.go, or cmd/*/main.gocli-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.

ralvaskills/.rsk/rsk.modreal · working tree 2026-11-04
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.md and opencode.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.
ralvaskills/.rsk/rsk.lock, shown as a table
skillversionsource
ci-cd-architect1.2.0registry
cli-tool-architect1.0.0registry
commit-author1.12.0registry
docs-architect1.2.0registry
go-architect1.14.0registry
landing-page-designer1.0.0registry
logic-cleaner1.0.0registry
repo-tooling-architect1.5.0registry
rsk-guide0.5.1registry
skill-builder1.0.0registry
token-economy1.1.0registry

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 install and 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 rsk on 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.