Settings per AI tool
This page lists the metadata fields that a skill or an agent of a plugin can set for each AI coding tool, with their values and where Athenode writes them when it installs the plugin. A plugin is a named bundle of what your AI tools work with: skills, agents, rules, MCP servers and plugin files. A skill is a reusable set of instructions that an AI tool loads when it is relevant, and an agent is a specialist that an AI tool can hand work to (a subagent in most AI tools).
The Metadata section of the editors
The editor of a skill and the editor of an agent each have a Metadata section. It starts with the common fields, which apply to every AI tool, and then has one part per AI tool, named by the tool's id, with the number of fields set in that part. A field set in one part reaches that AI tool only.
| Type | How you enter it | What is written |
|---|---|---|
| On/off | A switch | true when on. Off removes the field. |
| Number | A number | The number |
| Choice | A list of the allowed values, with Not set | The value chosen |
| Text | A text | The text |
| List | Values separated by commas | For Claude Code, Codex and Cursor, the text as you entered it, such as Read, Grep, Glob. For every other AI tool, a list with one item per value. |
| JSON | JSON text | The value, in the format of the file. A value that is not valid JSON shows "Not valid JSON." and is not saved. |
An emptied field is removed, and the AI tool's own default applies. A field you do not set is not written.
| AI tool | Part for skills | Part for agents |
|---|---|---|
| Claude Code | claudecode |
claudecode |
| Codex | codexcli |
codexcli |
| Cursor | cursor |
cursor |
| GitHub Copilot in the editor | copilot |
copilot |
| GitHub Copilot CLI | copilotcli |
copilotcli |
| OpenCode | opencode |
opencode |
| Google Antigravity | none | antigravity-ide and antigravity-cli |
| Devin | devin |
devin |
| JetBrains Junie | none | junie |
| Kiro | kiro-cli |
kiro-ide for the Kiro editor, kiro-cli for Kiro CLI |
| Kilo Code | kilo |
kilo |
| Factory Droid | factorydroid |
factorydroid |
| Grok CLI | grokcli |
none |
| Qoder | none | qoder |
| Command Code | commandcode |
commandcode |
| Codewhale | none | codewhale |
| MiMo Code | mimocode |
mimocode |
| ZCode | zcode |
zcode |
| Mistral Vibe | vibe |
vibe |
| Rovo Dev | rovodev |
none |
| Zoo Code | none | zoocode |
| Pool | none | pool |
| Qwen Code | qwencode |
qwencode |
| CodeBuddy Code | codebuddy |
none |
| Augment Code | none | augmentcode |
| Goose | none | goose |
| Kimi Code | kimi-code |
kimi-code |
| deepagents-cli | deepagents |
deepagents |
| oh-my-pi | omp |
none |
| Reasonix | none | reasonix |
| IBM Bob | none | bob |
An AI tool with no part gets the name and the description of a skill or an agent, the common fields where the tool reads them, and the instructions.
Common fields
| Field | Applies to | Type | Meaning |
|---|---|---|---|
description |
Skills and agents | Text, required | The Description of the editor. Every AI tool receives it. |
disable-model-invocation |
Skills | On/off | When on, the AI tool does not load the skill by itself. The skill runs only when you run it. |
user-invocable |
Skills | On/off | Whether you can run the skill yourself as a slash command |
The two common fields of a skill reach the AI tools in these forms. A field of the same name in a tool's own part takes the place of the common field for that tool. The switch in the web UI sets a field to true or removes it. A value of false comes with a skill you import, or from your AI agent through the Athenode MCP server.
| AI tool | disable-model-invocation |
user-invocable |
|---|---|---|
| Claude Code, Cursor, GitHub Copilot, Factory Droid, Grok CLI, Command Code, Mistral Vibe, Qwen Code, CodeBuddy Code | Written as disable-model-invocation |
Written as user-invocable |
| oh-my-pi | Written as disable-model-invocation |
Not written |
| Kimi Code | Written as disableModelInvocation |
Not written |
| Codex | true writes allow_implicit_invocation: false under policy in the skill's agents/openai.yaml |
Not written |
| Devin | true writes triggers with the value user |
false writes triggers with the value model. Both together write an empty triggers list. |
| Google Antigravity | Not written | false writes disable-slash-command: true |
| Every other AI tool | Not written | Not written |
Skill fields per AI tool
Every field of a tool's part is written into the frontmatter of that tool's SKILL.md, under the field's name, unless the notes under the table say otherwise. A choice lists its values after the type.
| AI tool | Fields |
|---|---|
Claude Code (claudecode) |
allowed-tools list, argument-hint text, model choice of sonnet, opus, haiku, inherit, when_to_use text, arguments list, disallowed-tools list, effort choice of low, medium, high, xhigh, max, context choice of fork, agent text, hooks JSON, paths list, shell choice of bash, powershell |
Codex (codexcli) |
allowed-tools list, argument-hint text, model choice of inherit, when_to_use text, arguments list, disallowed-tools list, model_reasoning_effort choice of low, medium, high, xhigh, paths list, policy JSON |
Cursor (cursor) |
paths JSON, metadata JSON |
GitHub Copilot in the editor (copilot) |
license text, allowed-tools list, argument-hint text, user-invocable on/off, disable-model-invocation on/off, context text |
GitHub Copilot CLI (copilotcli) |
license text, allowed-tools list, argument-hint text, user-invocable on/off, disable-model-invocation on/off |
OpenCode (opencode) |
allowed-tools list, license text, compatibility text, metadata JSON |
Devin (devin) |
argument-hint text, model text, subagent text, agent text, allowed-tools list, permissions JSON, triggers list of user |
Kiro (kiro-cli) |
license text, compatibility text, metadata JSON |
Kilo Code (kilo) |
allowed-tools list, license text, compatibility text, metadata JSON |
Factory Droid (factorydroid) |
disable-model-invocation on/off, user-invocable on/off, enabled on/off, allowed-tools list, license text, compatibility text, version text, metadata JSON |
Grok CLI (grokcli) |
disable-model-invocation on/off, user-invocable on/off, paths list |
Command Code (commandcode) |
license text, compatibility text, metadata JSON, disable-model-invocation on/off, user-invocable on/off |
MiMo Code (mimocode) |
allowed-tools list, license text, compatibility text, metadata JSON |
ZCode (zcode) |
when_to_use text, license text, metadata JSON |
Mistral Vibe (vibe) |
license text, compatibility text, metadata JSON, user-invocable on/off, disable-model-invocation on/off, allowed-tools list |
Rovo Dev (rovodev) |
allowed-tools list, license text, compatibility text, metadata JSON |
Qwen Code (qwencode) |
priority number, paths list, allowedTools list, user-invocable on/off, disable-model-invocation on/off, model text, when_to_use text, argument-hint text, hooks JSON |
CodeBuddy Code (codebuddy) |
disable-model-invocation on/off, user-invocable on/off |
Kimi Code (kimi-code) |
type choice of prompt, inline, flow, whenToUse text, disableModelInvocation on/off, arguments list |
deepagents-cli (deepagents) |
allowed-tools list, license text, compatibility text, metadata JSON |
oh-my-pi (omp) |
allowed-tools list, disable-model-invocation on/off, license text, compatibility text, metadata JSON |
Notes on how skill fields are written:
- Codex writes
policyintoagents/openai.yamlin the skill's folder, and its other fields into the frontmatter ofSKILL.md. - deepagents-cli and oh-my-pi receive
allowed-toolsas one text with the values separated by spaces. - Kiro has one skills folder for the Kiro editor and Kiro CLI, and both read the fields of the
kiro-clipart. - GitHub Copilot in the editor and Copilot CLI share one skills folder,
.github/skills. EachSKILL.mdholds the fields of both parts. Where both parts set a field to different values, thecopilotvalue is written and the plan ofinitorsyncshows a warning that names the file and the field. - With Codex and Google Antigravity selected together, both read the skills folder
.agents/skills, and eachSKILL.mdholds what both tools need. Where the two differ in a field, Codex's value is written and the plan warns. - Cursor writes every text of the frontmatter on one line, with line breaks replaced by spaces.
Agent fields per AI tool
| AI tool | Fields |
|---|---|
Claude Code (claudecode) |
tools list, model choice of sonnet, opus, haiku, inherit, color choice of red, blue, green, yellow, purple, orange, pink, cyan, maxTurns number, mcpServers JSON, hooks JSON, disallowedTools list, permissionMode choice of default, acceptEdits, auto, dontAsk, bypassPermissions, plan, manual, skills list, memory choice of user, project, local, background on/off, effort choice of low, medium, high, xhigh, max, isolation choice of worktree, initialPrompt text |
Codex (codexcli) |
model choice of inherit, model_reasoning_effort choice of low, medium, high, xhigh, mcp_servers JSON, sandbox_mode choice of read-only, workspace-write, danger-full-access |
Cursor (cursor) |
model choice of inherit, readonly on/off, is_background on/off, paths JSON, metadata JSON |
GitHub Copilot in the editor (copilot) |
tools list |
GitHub Copilot CLI (copilotcli) |
target text, tools list, model text, models list, modelPolicy choice of preferred, disable-model-invocation on/off, user-invocable on/off, mcp-servers JSON, metadata JSON |
OpenCode (opencode) |
mode text, model text, temperature number, top_p number, prompt text, disable on/off, tools JSON, permission JSON |
Google Antigravity (antigravity-ide, antigravity-cli) |
tools list, mainAgent on/off, subagent on/off, model text, commandExecutionPolicy text, mcpServers list, skills list, plugins list, hidden on/off, inheritMcp on/off |
Devin (devin) |
model text, allowed-tools list, permissions JSON, max-nesting number |
JetBrains Junie (junie) |
tools list, disallowedTools list, mcpServers list, model text, permissionMode text, reasoningLevel text, maxTurns number, skills list, allowPromptArgument on/off |
Kiro editor (kiro-ide) |
tools list, model text, includeMcpJson on/off, includePowers on/off |
Kiro CLI (kiro-cli) |
tools list, toolAliases JSON, toolSettings JSON, toolSchema JSON, hooks JSON, model text, mcpServers JSON, useLegacyMcpJson on/off, resources list, allowedTools list, includeMcpJson on/off |
Kilo Code (kilo) |
mode text, displayName text, color text, model text, variant text, prompt text, deprecated on/off, native on/off, hidden on/off, disable on/off, top_p number, temperature number, steps number, permission JSON, options JSON |
Factory Droid (factorydroid) |
model text, reasoningEffort text, tools list, mcpServers list |
Qoder (qoder) |
model text, permissionMode text, color text, isolation text, tools list, disallowedTools list, skills list, maxTurns number, timeoutMins number, mcpServers JSON, hooks JSON |
Command Code (commandcode) |
tools list, disallowedTools list, model text, reasoningEffort text, permissionMode text, maxTurns number, background on/off, showOutput on/off |
Codewhale (codewhale) |
role_hint text, base_role text, loadout text, model text, provider text, reasoning_effort text |
MiMo Code (mimocode) |
mode text, model text, prompt text, color text, variant text, temperature number, top_p number, disable on/off, hidden on/off, steps number, tools JSON, permission JSON |
ZCode (zcode) |
model text, thoughtLevel text, color text, tools list, disallowedTools list, mcpServers list, maxTurns number, injectAgentsMd on/off |
Mistral Vibe (vibe) |
agent_type choice of agent, subagent, display_name text, safety text, active_model text, compaction_prompt text, compaction_prompt_id text, enabled_tools list, disabled_tools list, tools JSON |
Zoo Code (zoocode) |
whenToUse text, roleDefinition text, customInstructions text, groups JSON, allowedMcpServers list |
Pool (pool) |
type choice of in_process, command, agent_server, instructions text, command text, agent_server text, args list, env JSON, session_config_options JSON, inherit_agent_config on/off, disabled on/off |
Qwen Code (qwencode) |
model text, approvalMode text, color text, tools list, disallowedTools list, mcpServers list, maxTurns number, hooks JSON |
Augment Code (augmentcode) |
color text, model text, tools list, disabled_tools list |
Goose (goose) |
model text |
Kimi Code (kimi-code) |
whenToUse text, override on/off, tools list, disallowedTools list, subagents list |
deepagents-cli (deepagents) |
model text |
Reasonix (reasonix) |
model text, effort text, color text, allowed-tools list |
IBM Bob (bob) |
whenToUse text, roleDefinition text, customInstructions text, groups JSON, allowedSubagents list |
Where an agent's fields are written
For most AI tools an agent is a Markdown file with the name, the description and the fields of the tool's part at the top and the prompt below. The tools that keep agents differently, or that add values of their own, are these:
| AI tool | The agent's file or entry |
|---|---|
| Codex | .codex/agents/<name>.toml, with the fields at the top and the prompt in developer_instructions |
| Codewhale | .codewhale/agents/<name>.toml, with display_name set to the agent's name and the prompt in [instructions] |
| Mistral Vibe | .vibe/agents/<name>.toml, with agent_type set to subagent and display_name to the agent's name unless you set them, and the prompt in .vibe/prompts/<name>.md |
| Kiro CLI | .kiro/agents/<name>.json, with the prompt in prompt. The kiro-ide part goes to .kiro/agents/<name>.md |
| GitHub Copilot | .github/agents/<name>.agent.md for both parts, with tools written last as a list. Where both parts set a field to different values, the copilot value is written and the plan warns |
| Google Antigravity | .agents/agents/<name>.md, with the fields of both parts. Where both set a field, the antigravity-cli value is written |
| OpenCode, MiMo Code | mode is written as subagent unless you set it |
| Kilo Code | mode is written as all unless you set it |
| Kimi Code | ${agents_md} is added at the end of the prompt, so that the agent receives the plugin's rules, unless the prompt holds ${agents_md} or ${base_prompt} already |
| Zoo Code | An entry in .roomodes with slug and name from the agent's name, roleDefinition set to the prompt and groups set to read, edit, command and mcp, unless you set them |
| IBM Bob | An entry in .bob/custom_modes.yaml with slug and name from the agent's name, roleDefinition set to the prompt and groups set to read, edit, execute and mcp, unless you set them |
| Pool | An entry under subagents.agents in .poolside/settings.yaml, with type set to in_process and instructions set to the prompt, unless you set them |
| Reasonix | A skill, .reasonix/skills/<name>/SKILL.md, with invocation: manual and runAs: subagent |
Cursor, Google Antigravity, Grok CLI, Command Code, ZCode, Rovo Dev, Qwen Code, CodeBuddy Code, Augment Code, Kimi Code and oh-my-pi write every text of an agent's frontmatter on one line, with line breaks replaced by spaces. Files installed per tool gives every path.
Hooks of skills and agents
A hook runs a command, or another action the AI tool offers, when the agent or the skill reaches an event. The value is JSON in the AI tool's own format for hooks, and Athenode writes it into the skill's or the agent's file.
| Field | Skills | Agents |
|---|---|---|
hooks in claudecode |
Yes | Yes |
hooks in qwencode |
Yes | Yes |
hooks in qoder |
No | Yes |
hooks in kiro-cli |
No | Yes, in the agent's JSON file |
Add hooks to an agent shows a Claude Code example.
MCP servers of one agent
These fields give an agent MCP servers of its own, next to the MCP servers of the plugin. A list field names servers that are configured elsewhere. A JSON field can also define a server for the agent alone.
| AI tool | Field | Value |
|---|---|---|
| Claude Code | mcpServers in claudecode |
JSON: a list of server names and objects that each define one server |
| Codex | mcp_servers in codexcli |
JSON: the servers by name, written as tables of the agent's TOML file |
| GitHub Copilot CLI | mcp-servers in copilotcli |
JSON |
| Kiro CLI | mcpServers in kiro-cli |
JSON |
| Qoder | mcpServers in qoder |
JSON |
| Google Antigravity | mcpServers in antigravity-ide and antigravity-cli |
List of server names |
| JetBrains Junie | mcpServers in junie |
List of server names |
| Factory Droid | mcpServers in factorydroid |
List of server names |
| ZCode | mcpServers in zcode |
List of server names |
| Qwen Code | mcpServers in qwencode |
List of server names |
| Zoo Code | allowedMcpServers in zoocode |
List of server names |
Three on/off fields decide whether an agent also gets the project's MCP configuration: includeMcpJson for Kiro, useLegacyMcpJson for Kiro CLI and inheritMcp for Google Antigravity.
A server defined in an mcpServers field holds tokens and keys as ${VAR} references. Athenode refuses to save a literal value under an env or header name that looks like a secret, such as a token, key or password. A server that a Claude Code agent defines for itself cannot take the name of an MCP server of the plugin. A reference is written as you enter it, so use the form the AI tool reads. Give an agent its own MCP servers shows a Claude Code example.
Fields in a plugin package
Seven AI tools can receive the plugin as a plugin package, the package that a tool loads a plugin from, named after the plugin's slug. A package reads the fields as the files do, with these differences:
| AI tool | What the plugin package takes |
|---|---|
| Claude Code | The claudecode fields of skills and agents, except the agent fields hooks, mcpServers and permissionMode |
| Qoder | The claudecode fields, then the qoder fields, which win where both set a field. The agent fields hooks, mcpServers and permissionMode are left out |
| CodeBuddy Code | The claudecode fields, then the codebuddy fields, which win where both set a field. The agent fields hooks, mcpServers and permissionMode are left out |
| GitHub Copilot | The copilotcli fields, then the copilot fields, which win where both set a field |
| Google Antigravity | The same fields as the files |
| Factory Droid | The name and the description of skills and agents, and no other field |
| Mistral Vibe | The name and the description of skills, and the name, description and prompt of agents |
When an agent field is left out, the plan of init or sync names the field and the agent under "Warnings". The field reaches the tool whenever it receives the plugin as files. Mistral Vibe takes an agent into its plugin package when the description has at most 300 characters and the prompt at most 65,536 characters. A longer agent is listed under "Not installed" with the reason, and you shorten its description or prompt to install it.
In the tool lists of Claude Code and Qoder, such as tools and allowed-tools, write the tools of an MCP server of the plugin as mcp__<server> or mcp__<server>__<tool>. When the plugin package holds that server, Athenode writes them as mcp__plugin_<slug>_<server>, the name those tools give a server of a plugin package.
Set fields from your AI tool
Your AI agent sets the same fields through the tools skills_create, skills_update, agents_create and agents_update of the Athenode MCP server, or when you ask /atn:manage. A field of a tool's part is named with the part first, such as claudecode.model, and a common field by its name alone. Fields that take JSON are set in the web UI. Run athenode sync after a change, so that the installed files follow.