Editors and agents

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.