Most command logic lives in YAML workflows executed by the Go engine. In current Claude Code all skills are tab-completable slash commands — new entry points go in skills/, not commands/ (which is legacy).
- Create
workflows/my-workflow.ymlwith steps, model assignments, and loop/gate definitions - Test with
devkit_startMCP tool ordevkit workflow my-workflow "input"from terminal - Optionally add a context-activated skill in
skills/to auto-trigger it
See skills/creating-workflows/SKILL.md for YAML schema reference.
For side-effecting actions (install / deploy / setup) that should only run when the user explicitly invokes them, create a skill with disable-model-invocation: true:
- Create
skills/my-skill/SKILL.mdwith YAML frontmatter:--- name: my-skill description: What this skill does and when to use it. disable-model-invocation: true --- # Skill Title Instructions...
This makes /devkit:my-skill tab-completable but prevents Claude from auto-triggering it — useful for installers (setup-rules) and other side-effecting operations. The commands/ directory is legacy; don't add new files there.
Skills activate automatically based on natural language — no slash command needed.
- Create
skills/my-skill/SKILL.mdwith YAML frontmatter:--- name: my-skill description: Triggers on "natural language pattern". --- # Skill Title Guidelines or workflow (keep under 100 lines).
The skill will be auto-discovered as devkit:my-skill.
- Create
agents/my-agent.mdwith YAML frontmatter specifying name, description, model, effort, maxTurns, and disallowedTools - Scope tools to only what the agent needs
- Create a YAML file in
workflows/ - See the
creating-workflowsskill for schema reference - Run with
/my-workflow— every workflow has its own tab-completable skill
- Keep files concise — context space is expensive
- One logical change per PR
- Test commands manually before submitting
- Follow existing naming conventions (kebab-case)
- Don't duplicate built-in Claude Code commands
Open an issue at https://github.com/5uck1ess/devkit/issues