Scaffold Skills per AI Agent

bellatrix init places the same provider-neutral skills into each agent's native layout, and never rewrites a file you own.

Scaffold

Run bellatrix init in the root of your test repository:

bellatrix init --agent claude --domains desktop,web,mobile --json
bellatrix init --agent claude,cursor --dry-run --json      # several agents; preview only
bellatrix init --json                                      # re-run for the agents already scaffolded

Without --agent, init re-uses the agents already scaffolded (their manifests under .bellatrix/), else the single agent it detects from the repository, else it exits with code 2 and lists the choices. Re-running is safe: files you edited are skipped and reported unless you pass --regenerate.

Options

OptionMeaningNotes
--agent <a[,b,...]>AI agent(s) to scaffold for, comma-separated (windsurf = devin, agy = antigravity).Default: the agents already scaffolded, else the one detected from repo markers.one of: claude | copilot | cursor | devin | codex | gemini | antigravity | kiro | opencode
--target <a[,b,...]>Legacy spelling of --agent.legacy spelling of --agent
--language <language>BELLATRIX flavor. Default: the recorded language, else detected from build files, else csharp.one of: csharp | java | typescript
--domains <d[,d,...]>Domains to scaffold.default: desktop,web,mobile; one of: desktop | web | mobile
--out <dir>Repository root to scaffold into.default: current directory
--regenerateOverwrite files you edited (otherwise they are skipped and reported).
--forceLegacy spelling of --regenerate.legacy spelling of --regenerate
--dry-runReport what would be written; change nothing.
--template-source <dir>Render your own template folder (same layout as the built-in templates) instead of the BELLATRIX templates.
--prefix <prefix>Namespace for --template-source output (skills, agents, fragment, manifests). Default: inferred from the folder.

Also accepted: bellatrix update-skills (same as init).

Claude Code

bellatrix init --agent claude
Instructions.bellatrix/bellatrix.instructions.md + one @import line in CLAUDE.md
Skills.claude/skills/
Subagents.claude/agents/*.md
DelegationIsolated subagent (@agent-<name>)

GitHub Copilot

bellatrix init --agent copilot
Instructions.github/instructions/bellatrix.instructions.md (applyTo: "**")
Skills.github/skills/ (or reuses .claude/skills/)
Subagents.github/agents/*.agent.md, with agents: allow-list on generators. Reuses .claude/agents/ when Claude is scaffolded
DelegationSubagent (VS Code runSubagent, CLI). Cloud agent: see limits

Cursor

bellatrix init --agent cursor
Instructions.cursor/rules/bellatrix.mdc (alwaysApply: true)
Skills.cursor/skills/ (or reuses .claude/skills/)
Subagents.cursor/agents/*.md (readonly: true on specialists)
DelegationIsolated subagent (/name)

Devin Desktop (formerly Windsurf)

bellatrix init --agent devin
Instructions.devin/rules/bellatrix.md (trigger: always_on)
Skills.devin/skills/ (or reuses .claude/skills/)
Subagents.devin/agents/*.md (allowed-tools)
DelegationSubagent (experimental). Fallback: bellatrix <domain> find

Codex CLI

bellatrix init --agent codex
InstructionsOne marker block in AGENTS.md pointing at .bellatrix/bellatrix.instructions.md
Skills.agents/skills/
Subagents.codex/agents/*.toml
DelegationName the subagent in the prompt. Fallback: find

Gemini CLI (enterprise — Gemini Code Assist)

bellatrix init --agent gemini
InstructionsOne marker block in GEMINI.md importing @./.bellatrix/bellatrix.instructions.md
Skills.agents/skills/
Subagents.gemini/agents/*.md (kind: local, Gemini tool names)
DelegationIsolated subagent (@name)

Antigravity CLI (agy)

bellatrix init --agent antigravity
Instructions.agents/rules/bellatrix.md (trigger: always_on)
Skills.agents/skills/
Subagents.agents/agents/<name>/agent.md (documented tool names; mainAgent/subagent)
DelegationSubagent chosen by the main agent (no @name syntax). Fallback: bellatrix <domain> find

Kiro CLI

bellatrix init --agent kiro
Instructions.kiro/steering/bellatrix.md (inclusion: always)
Skills.kiro/skills/
Subagents.kiro/agents/*.md (v3 Markdown; resources list the steering file and skills)
DelegationSubagent named in plain language. Fallback: find

OpenCode

bellatrix init --agent opencode
InstructionsOne marker block in AGENTS.md pointing at .bellatrix/bellatrix.instructions.md (shared with Codex)
Skills.opencode/skills/ (or reuses .claude/skills/ / .agents/skills/)
Subagents.opencode/agents/*.md (mode: subagent, edit: deny on specialists)
DelegationSubagent (@name)

Rules every agent gets

  • Human-owned files are never rewritten. CLAUDE.md, AGENTS.md and GEMINI.md get exactly one import line or one marked block.
  • Skills are written once per directory set. When several agents read the same skills folder, BELLATRIX writes it once; --dry-run shows these decisions.
  • One manifest per agent. Re-running for one agent never touches another agent's files.
  • Delegation fallback is mandatory. Every fragment tells the agent to delegate locator work to the locator specialist or, when delegation is unavailable, to use only bellatrix <domain> find --snapshot, and never to read a snapshot or page source into its main context.
  • No MCP registration. init only removes BELLATRIX's own stale MCP entries; other servers' entries are kept.

Your own templates

Teams with their own conventions can render their own template folder (same layout as the built-in templates) with the same contract:

bellatrix init --agent claude --template-source ./my-templates --prefix acme --json

The prefix namespaces everything that is written: the skills and agents (acme-…), the fragment .bellatrix/acme.instructions.md and the manifests. bellatrix is reserved.