Supported harnesses¶
ai-rulez ships 52 built-in presets, one per AI coding harness. The table below lists them; ai-rulez init also writes the list into a comment in the new config.toml. Each preset
writes the harness's own layout: file names, frontmatter, directories and settings documents. For a harness that
is not listed, use a provider-backed custom preset.
The shared mcp preset (the root .mcp.json) is not a harness and is not in the table.
Feature matrix¶
yes means the preset writes that output at project level. - means it does not; the reason is under
Skipped features. Terms:
- Rules: a native rules folder.
-means rules are inlined into the root instructions file. - Commands: slash commands. A command is written as a skill where the harness has no command folder
(
codex,antigravity,devin,warp) and as a prompt or workflow file forcopilot,pi,clineandkiro(.kiro/prompts).claudestill reads.claude/commands, but ai-rulez writes commands there as user-invocable skills, because Claude Code merges the two. - Hooks and Perms (permissions):
yesrenders into a project file,userrenders only withgenerate --userbecause the vendor reads them from the user configuration only. See Hooks, permissions and settings keys and Permissions. - Checks: code-review guidelines.
- User: supported by
generate --user; see User-level configuration for the paths.
| Preset | Harness | Rules | Skills | Agents | Commands | MCP | Hooks | Perms | Checks | User |
|---|---|---|---|---|---|---|---|---|---|---|
aiassistant |
JetBrains AI Assistant | yes | yes | - | - | yes | - | - | - | - |
amp |
Sourcegraph Amp | - | yes | - | - | yes | yes | - | yes | yes |
antigravity |
Google Antigravity | yes | yes | yes | yes | yes | yes | - | - | yes |
augment |
Augment Code | yes | yes | yes | yes | yes | yes | yes | yes | yes |
baz |
Baz | - | yes | yes | - | - | - | - | - | - |
bob |
IBM Bob | yes | yes | - | yes | yes | yes | - | - | yes |
claude |
Claude Code | yes | yes | yes | yes | yes | yes | yes | - | yes |
cline |
Cline | yes | yes | yes | yes | - | yes | - | - | yes |
codebuddy |
CodeBuddy Code | yes | yes | yes | yes | yes | yes | yes | - | yes |
codebuff |
Codebuff | - | yes | - | - | yes | - | - | - | - |
codewhale |
Codewhale | yes | yes | - | yes | yes | - | - | - | yes |
codex |
OpenAI Codex | - | yes | yes | yes | yes | yes | yes | - | yes |
commandcode |
Command Code | - | yes | yes | yes | yes | yes | yes | - | yes |
copilot |
GitHub Copilot | yes | yes | yes | yes | yes | yes | yes | - | yes |
copilot-cli |
GitHub Copilot CLI | yes | yes | yes | - | yes | yes | yes | - | yes |
cortex |
Snowflake Cortex Code | - | yes | yes | - | - | yes | - | - | yes |
crush |
Crush | - | yes | - | - | yes | yes | - | - | yes |
cursor |
Cursor | yes | yes | yes | yes | yes | yes | yes | yes | yes |
deepagents |
Deep Agents Code | - | yes | yes | - | yes | yes | - | - | yes |
devin |
Devin CLI | yes | yes | yes | yes | yes | yes | yes | - | yes |
dsh |
DeepSeek Harness | - | yes | - | - | - | - | - | - | yes |
factory |
Factory Droid | - | yes | yes | yes | yes | yes | - | yes | yes |
gemini |
Gemini CLI | - | yes | yes | - | yes | yes | yes | - | yes |
gitlab-duo |
GitLab Duo CLI | - | - | - | yes | yes | yes | - | yes | yes |
goose |
goose | - | yes | yes | - | yes | yes | - | - | yes |
grok |
Grok Build CLI | yes | yes | yes | yes | yes | yes | yes | - | yes |
hermes |
Hermes Agent | - | agents_md |
- | - | - | user | user | - | yes |
junie |
JetBrains Junie | yes | yes | yes | yes | yes | user | - | - | yes |
kilo |
Kilo Code | yes | yes | yes | yes | yes | yes | yes | yes | yes |
kimi |
Kimi Code | - | yes | yes | - | yes | user | user | - | yes |
kiro |
Kiro | yes | yes | yes | yes | yes | yes | - | - | yes |
letta |
Letta Code | - | yes | yes | yes | - | yes | yes | - | yes |
mimocode |
MiMo Code | - | yes | yes | yes | yes | yes | yes | - | yes |
muse |
Meta Muse Code | - | yes | - | - | - | - | - | - | yes |
omp |
oh-my-pi | yes | yes | yes | yes | yes | - | yes | - | yes |
openclaw |
OpenClaw | - | - | - | - | - | - | - | - | yes |
opencode |
OpenCode | - | yes | yes | yes | yes | yes | yes | - | yes |
pi |
pi | - | yes | yes | yes | yes | yes | - | - | yes |
poolside |
Poolside Pool | - | yes | - | - | yes | yes | yes | - | yes |
qoder |
Qoder | yes | yes | yes | yes | yes | yes | yes | - | yes |
qwen |
Qwen Code | yes | yes | yes | yes | yes | yes | yes | yes | yes |
reasonix |
Reasonix | - | yes | yes | yes | yes | yes | - | - | yes |
replit |
Replit Agent | - | yes | - | - | - | - | - | - | - |
rovodev |
Atlassian Rovo Dev | - | yes | yes | - | - | - | - | yes | yes |
takt |
Takt | yes | yes | yes | yes | - | - | - | - | yes |
trae |
Trae | yes | yes | - | - | yes | - | - | - | yes |
vibe |
Mistral Vibe | - | yes | - | - | yes | yes | yes | - | yes |
warp |
Warp | - | yes | - | yes | yes | - | - | - | yes |
xum |
Xum | - | yes | yes | - | yes | - | - | - | - |
zcode |
ZCode | - | yes | yes | yes | yes | user | - | - | yes |
zed |
Zed | - | yes | - | - | yes | - | user | - | yes |
zoocode |
Zoo Code | - | yes | - | yes | yes | - | yes | - | yes |
Where each output lands (file names, merged documents, user-level paths) is in the preset's provider spec under
internal/generator/providers/builtin/<preset>.toml and, for the Go presets (antigravity, baz, cline,
codex, copilot, cursor, devin, gemini, opencode, xum), in internal/generator/presets/. The
user-level table is in User-level configuration.
Cross-cutting behavior¶
- Shared outputs. Presets that write the same path (
AGENTS.md,.agents/skills/, the root.mcp.json) must render identical bytes.generatefails and names the presets when they diverge, except for anAGENTS.mdthat omits rules because its harness reads them from a rules folder; the complete file is kept with a warning. See AGENTS.md and .agents/skills. - Merged documents. Settings files that hold your own keys (
.claude/settings.json,opencode.json,.codex/config.toml,.qwen/settings.json, ...) are merged, not replaced. ai-rulez owns the keys, array elements and map members it writes, and comments in JSONC, TOML and YAML survive. See Settings document merge behavior. - Native MCP environment references. Where the harness expands
${VAR}-style references itself, the reference is written instead of the secret. See Environment references. - Native tool and model names. Frontmatter is translated to each harness's own tool names, and bare Claude
model aliases (
sonnet,opus,haiku) are dropped where the harness has no such model.
Skipped features¶
A missing feature is a deliberate skip, with the reason taken from the provider spec or the settings and permissions docs. Nothing is approximated.
Instructions, rules, skills and agents¶
| Preset | Skipped | Reason |
|---|---|---|
aiassistant |
root file | AI Assistant has no root instructions file, so every rule and context item becomes a .aiassistant/rules/*.md file |
amp |
agents | .agents/agents is an Antigravity format Amp does not read; agents are only listed in AGENTS.md |
baz |
rules folder, commands, MCP | Baz has no repository config file and reads only instruction files from the default branch; it ignores .claude/commands and does not read .claude/rules. See Baz |
bob |
agents | Bob has no file-based subagents; its modes live in a Roo-style custom_modes.yaml aggregate |
codebuff |
rules, agents, commands | Codebuff documents only a knowledge file (AGENTS.md), skills and MCP |
codewhale |
agents | Subagents are TOML profiles with a deny-unknown-fields schema the provider DSL cannot express |
crush |
rules folder, agents, commands | Crush has inline guidance (CRUSH.md), skills and MCP only |
cline |
MCP | Cline has no project MCP file |
cortex |
rules folder, MCP | Cortex reads only AGENTS.md; project MCP is not documented (servers live in ~/.snowflake/cortex/mcp.json) |
dsh |
MCP | Servers live in the home-level cordis.patch.yml, which a project preset cannot express |
gemini |
rules folder, commands | Rules stay in the root file (AGENTS.md, or GEMINI.md with agents_md = false); project commands are not generated (see the plugin runtime for commands/<name>.toml) |
gitlab-duo |
skills, rules folder | GitLab documents skills only inside plugins; Duo CLI reads one rules file, .gitlab/duo/chat-rules.md |
goose |
rules folder, commands | goose has no rules folder; recipes are not slash commands |
hermes |
skills | With agents_md = false only project context is written (.hermes.md); skills come from the shared .agents/skills, which agents_md (the default) writes |
kimi, deepagents, factory, zcode, mimocode, zoocode, warp |
rules folder | No rules folder (or one the harness does not auto-load): rules are inlined into the root file. kilo keeps .kilo/rules and registers it in kilo.jsonc |
letta |
rules, MCP | No rules or MCP file the tool documents |
muse |
MCP | MCP servers live only in the user settings.json |
openclaw |
everything but the root file | Only the shared root AGENTS.md is written; no rules folder or skills layout can be targeted |
poolside |
agents | Subagents are entries of the settings file, which the preset does not generate |
replit |
rules, agents, commands, MCP | Replit has replit.md and .agents/skills only |
rovodev |
commands, MCP | Saved prompts need a prompts.yml manifest; .rovodev/mcp.json is inert until config.yml points at it |
takt |
MCP | Takt keeps MCP definitions inside workflow YAML. Rules, skills, agents and commands map to facets under .takt/facets/ |
trae |
root file | Trae has no root instructions file; the preset writes rule files, skills and MCP |
vibe |
agents | A Vibe agent is a TOML profile whose prompt is a second file, which one output cannot produce |
xum |
commands | The tool documents no slash-command file |
amp, codex, commandcode, dsh, hermes, muse, opencode, pi, poolside, reasonix, rovodev, vibe, xum |
rules folder | The tool documents no rules folder: rules are inlined into the root instructions file (AGENTS.md, .hermes.md for hermes, REASONIX.md for reasonix) |
aiassistant, dsh, gitlab-duo, hermes, muse, trae, warp |
agents | The tool documents no such file |
zoocode |
agents | Custom modes are an aggregated .roomodes YAML file, which the provider DSL cannot produce |
aiassistant, amp, copilot-cli, cortex, deepagents, dsh, hermes, kimi, muse, poolside, trae, vibe |
commands | The tool documents no such file |
hermes |
MCP | The tool documents no project MCP file |
zed |
agents, commands, rules folder | Zed has no rules folder, subagent or command file format; rules go to the root .rules file |
Hooks¶
Sixteen presets generate no [[hooks]]: aiassistant, baz, codebuff, codewhale, dsh, muse, omp,
openclaw, replit, rovodev, takt, trae, warp, xum, zed and zoocode. A preset without hook
support is named in one generate warning; ai-rulez emits no hook it could not read from the vendor's
documentation.
user in the matrix marks harnesses whose vendor reads hooks (or permissions) only from the user configuration:
junie ("ignores project hooks"), zcode (ignores project hooks), hermes, kimi (user config.toml
only) and, for permissions, zed. They render with generate --user. Per-harness event, matcher and timeout
details are in Hooks, permissions and settings keys.
Permissions¶
These harnesses have no documented, committable permission file that can express [permissions], so they get
nothing from it and generate names them in a warning (from Permissions):
| Preset | Reason |
|---|---|
amp |
Current Amp docs removed amp.permissions; only whole-tool amp.tools.disable remains |
pi |
No permission mechanism; defaultTools only enables or disables whole tools |
cline |
Command permissions are documented only as the CLINE_COMMAND_PERMISSIONS environment variable |
kiro |
Conflicting documented shapes in .kiro/agents/*.json; the workspace permissions file lives outside the repository |
factory |
The project settings path is documented as settings.local.json, and commandDenylist means "ask", not "deny" |
crush |
crush.json is deprecated for crushrc; its schema has allowed_tools and no deny |
rovodev |
The bash rules location differs between Atlassian's pages and their match order is undocumented |
takt |
Only a coarse permission mode (readonly, edit, full), no rules |
antigravity |
Only the user-level CLI file is documented; the project path is not |
goose, junie, deepagents, warp |
User-level files with whole-tool, allow-only, exact-command or regex semantics that cannot hold the rules without widening them |
Every other preset without a yes or user in the Perms column has no permission surface in its provider spec.
Checks¶
Only eight harnesses read code-review guidelines from a repository file: amp, augment, cursor,
factory, gitlab-duo, kilo, qwen and rovodev. Not generated: Augment area grouping and per-area globs,
GitLab fileFilters, Takt quality gates, Hermes pre-verify specs, and JetBrains AI Assistant (its self-review
path is a per-user IDE setting). See Checks.
User scope¶
aiassistant, baz, codebuff, replit and xum have no documented user-level location for anything
generate --user writes and are reported and skipped. codebuff has only an MCP file, which user scope does not
generate. User-level MCP servers are never generated.