Skip to content

Skill Routing

The orchestrator skill (/rails-cto) is the traffic cop for the whole plugin. When you invoke it at the start of a session, it loads the core Rails engineering context and then watches for signals that should activate specialized skills.

How routing works

Every skill in the plugin has a description field in its SKILL.md frontmatter. The description lists the file types the skill cares about, the keywords it responds to, and the situations where it should fire.

When your agent reads those descriptions at the start of a session, it builds an internal map of "if the user says X or I touch Y, invoke skill Z." That map is what makes the routing automatic — you don't have to type /rails-cto-qa yourself after editing a Ruby file. The orchestrator already knows to call it.

The mandatory routes

Three routes are mandatory. They are enforced both by the skill descriptions and by the CLAUDE.md block that rails-cto init installs:

WhenSkill that fires
Any .rb file is created or modifiedrails-cto-qa
Any .html.erb file is created or modifiedrails-cto-erb + rails-cto-tailwind
Any implementation plan is draftedrails-cto-qa (as the final step)

These can't be skipped. The orchestrator treats them as hard gates — if a task would otherwise finish without them running, the gate fires.

The proactive routes

Other skills fire based on the file path or the user's language:

WhenSkill that fires
Touching app/controllers/api/** or mentioning "endpoint", "serializer", "openapi"rails-cto-api
Touching any controller, route, or mentioning "REST", "CRUD", "nested resource"rails-cto-restful
Touching any Stimulus controller or mentioning "data-controller", "targets", "values"rails-cto-stimulus
Writing or fixing tests, or mentioning "minitest", "spec", "coverage"rails-cto-minitest
Touching app/components/** or mentioning "ViewComponent", "preview", "Lookbook"rails-cto-view-component
Modifying any .rb file (runs alongside QA)rails-cto-static-analysis
Modifying any .rb or .html.erb file (runs alongside QA)rails-cto-security

Git workflow routes

Git-workflow skills are user-invoked, not file-triggered. You can call them explicitly with a slash command or by saying the thing:

When you saySkill that fires
"commit this", "save my progress", "ship it", /commit-allrails-cto-commit
"open a PR", "create a pull request", /pr, /pull-requestrails-cto-pull-request
"release to production", "deploy this", /production-prrails-cto-production-pr

Overriding routing

If a skill keeps firing when you don't want it to, you have three options:

  1. Be more specific in your request. A lot of over-firing happens because the agent picks up a keyword. If you say "I just want a rough sketch of the controller, don't worry about tests yet," the orchestrator won't enforce the gate.
  2. Edit the CLAUDE.md block to remove the mandatory rule for a specific skill. See CLAUDE.md Wiring.
  3. Open an issue at the plugin's GitHub repo if the routing logic feels wrong — the skill descriptions can be tightened.

Released under the MIT License.