AI agents: skill, MCP, init
The bundled agent skill
Claude Code plugin. The same skill, the MCP server and the language
server are packaged as a Claude Code plugin (claude-plugin/ in the
runner repo, published from s-chathuranga-j/saffron-claude-plugin):
/plugin marketplace add s-chathuranga-j/saffron-claude-plugin then
/plugin install saffron@saffron. With the language server attached,
Claude gets diagnostics after each edit and StepSet / {env:VAR}
navigation, so it fixes a bad .saffron line in the same turn.
AI assistants now write most test code, and a runner whose economics
depend on wording discipline needs its agents to know the rules. The
npm package ships an Agent Skill
(skills/saffron/SKILL.md + reference sheets: syntax, config/CI) and
saffron init installs it into the project's agent directories
(.claude/skills, .agents/skills; Copilot/Cursor on request) with a
managed block in AGENTS.md/CLAUDE.md, and registers the saffron mcp vocabulary server in each host's project-scoped MCP config
(.mcp.json, .cursor/mcp.json, .vscode/mcp.json; merged, never
overwritten). The skill encodes what the
runner rewards: reuse the recorded vocabulary (saffron steps, saffron mcp) before inventing wordings, Then as the sacred verdict, no
volatile or secret literals, StepSet syntax, network waits and page
furniture phrasings, and the run → review → accept loop. Skills ship
with the exact runner version they describe and refresh on re-run.
The step vocabulary: steps, snippets, and MCP
saffron steps [search] lists everything the project knows: steps
from files (including unrecorded ones) badged with status from
caches: recorded (replays free), divergent, unrecorded, plus every
StepSet with usage counts. --json exports for tooling;
--snippets writes .vscode/saffron.code-snippets for native VS Code
completion. saffron mcp serves the same vocabulary to AI assistants
over stdio MCP (search_steps, list_step_sets, and project_status
for the whole project overview), so a Copilot/Claude
session writing feature files reuses your wordings instead of inventing
near-duplicates. saffron author <prose-file> drafts a .saffron
file from plain paragraphs using that vocabulary as required wording,
authored files are maximally seedable. And if a duplicate wording slips
through and gets recorded anyway, the runner proves it by behavior:
identical action lists under different text produce a rename
feature-edit in the proposal, so the vocabulary converges at the cost
of exactly one recording. The Saffron VS Code extension (sibling
repo saffron-vscode) adds .saffron highlighting, badge-carrying
completion, go-to-definition for step sets and {env:VAR} tokens,
near-duplicate wording warnings while typing, right-click Run on files
and folders, and a Saffron side panel (feature files with scenarios and
run buttons, tags to run, proposals to review and accept, vocabulary
health and config, last-run totals, and the report as an in-editor
dashboard); saffron lsp serves the same editing experience
to JetBrains (LSP4IJ on Community, native LSP on Ultimate), Neovim, and
any LSP-capable editor. The JetBrains plugin adds a Saffron run
configuration type, right-click Run, and a Saffron tool window that
lists feature files with Run Selected / Run All, Open Report, Accept
All Proposals and the last run's totals.