retort v1.0.0
16 generated targets · one spec

One YAML spec.
Consistent AI agent configs for every tool your team uses.

Describe your project, teams, commands and rules once. retort sync generates project-aware configs for Claude Code, Cursor, Copilot, Gemini CLI and a dozen more — instead of hand-maintaining each one until they drift apart.

pnpm -C .agentkit retort:init → View on GitHub
Idempotent sync Drift detection on generated files 80% test coverage, CI quality gates
.agentkit/spec/project.yaml
# describe the project once
name: retort
language: typescript
packageManager: pnpm
commands:
test: pnpm test --coverage
lint: pnpm lint
rules:
- never edit generated/ by hand
- conventional commits
retort sync 16 files written
CLAUDE.md .cursor/rules/ GEMINI.md .windsurf/rules/ copilot-instructions.md + 11 more
How it works

Spec in, generated configs out

Four steps, all of them repeatable. Sync is idempotent, so running it twice changes nothing and CI can fail the build when a generated file has drifted from the spec.

1 .agentkit/spec/*.yaml

Describe

project.yaml, teams.yaml, commands.yaml and rules.yaml hold the facts about your repo — stack, owners, scripts, conventions.

2 retort validate

Validate

The spec is schema-checked before anything is written, so a typo surfaces as an error instead of a broken agent config.

3 retort sync

Sync

One pass renders every enabled target to its native location and format. Same spec, same output, every time.

4 retort check

Commit & guard

Generated files are committed like any other artifact. Drift detection in CI catches hand-edits before they diverge.

Supported targets

16 config targets, generated in their native format

Each target gets the file it expects, in the place it looks for it. Enable or disable any of them per repo.

16files written 13integrations 0manual edits
Agents 10 targets
Claude Code
CLAUDE.md
Cursor
.cursor/rules/*.mdc
Windsurf
.windsurf/rules/
GitHub Copilot
.github/copilot-instructions.md
Gemini CLI
GEMINI.md
Codex
AGENTS.md
Junie
.junie/guidelines.md
Cline
.clinerules/
Roo
.roo/rules/
Warp
WARP.md
Editors & CI 3 targets
VS Code
.vscode/settings.json
VS Code extensions
.vscode/extensions.json
GitHub Actions
.github/workflows/
Protocols & docs 3 targets
MCP
.mcp/servers.json
A2A
.mcp/a2a-config.json
Docs
docs/agents/

Targets are counted as written files: a few tools receive more than one artifact — rules plus editor settings, for instance — which is how thirteen integrations produce sixteen generated files.

Quick start

Four commands from empty repo to synced configs

No global install, no config server, nothing to host. The spec and the generated files live in your repository.

01Scaffold the four spec files with sensible defaults detected from your repo.
02Edit the YAML, then validate before generating anything.
03Sync, review the diff, commit the generated configs.
04Add retort check to CI for quality gates, and diff sync output there to catch drift before it merges.
terminal
$ pnpm -C .agentkit retort:init
created .agentkit/spec/{project,teams,commands,rules}.yaml
$ pnpm -C .agentkit retort:validate
spec ok — 13 integrations enabled
$ pnpm -C .agentkit retort:sync
wrote 16 files · 0 unchanged skipped
$ pnpm -C .agentkit retort:check
format · lint · typecheck · test · build — all green
node ≥ 22 zero runtime deps in generated output MIT

Try it on one repo

Run it against an existing project, read the generated diff, keep it or delete it. Nothing outside your working tree changes.

pnpm -C .agentkit retort:init Read the docs