Reference
Providers
Where Agentyx installs for Codex, Claude Code, Kimi Code and Qwen Code, and what it deliberately declines to do.
Agentyx is provider agnostic. Packs, Skills, MCP definitions and agents describe development environments, never providers, so everything a provider knows lives in its adapter. Every provider receives byte-identical Skill content; the only difference is the destination.
Three words are kept apart throughout:
- provider supports — the provider documents the feature.
- Agentyx supports — Agentyx installs it, project-local, with tests.
- Agentyx declines — the provider supports it but there is no safe project-local installation, so Agentyx deliberately does nothing. That is a policy limit, not a provider limit.
Destinations
Every path is relative to the project root. Agentyx writes nothing else, and never $HOME.
| Resource | Codex | Claude Code | Kimi Code | Qwen Code |
|---|---|---|---|---|
| Skills | .agents/skills/… |
.claude/skills/… |
.agents/skills/… |
.qwen/skills/… |
| Agents | .codex/agents/<name>.toml |
.claude/agents/<name>.md |
.agents/agents/<name>.md |
.qwen/agents/<name>.md |
| MCP | .codex/config.toml |
.mcp.json |
.kimi-code/mcp.json |
.qwen/settings.json |
| Hooks | .codex/hooks.json |
.claude/settings.json |
none | .qwen/settings.json |
| Ownership | .agentyx.lock.json |
same | same | same |
Inspect any target directly:
pnpm dlx @agentyx/cli target list
pnpm dlx @agentyx/cli target show qwen
Shared destinations
Two kinds of sharing exist, and they are handled differently.
A directory shared between providers. Codex and Kimi Code both read .agents/skills. One
identical file is planned once, recorded once, and owned by both targets in the lock. Planning for one
target alone never deletes a file the lock also records for the other. Two targets asking for the same
path with different content fail with shared_install_conflict before anything is written.
A document shared between capabilities. Qwen Code reads both mcpServers and hooks from
.qwen/settings.json. Two independent merges of one file cannot both be planned from a read of that
file: the second write would drop what the first added, and the lock — indexed by path — could only
keep one of the two ownership records. So Agentyx plans that file once: the MCP merge runs first and
its output is handed to the hook merge as the document to merge into. The result is one write and one
lock entry of kind settings, naming both the servers and the hooks.
target show qwen prints the file twice, once per capability, because that is what the provider does.
Trust gates Agentyx does not bypass
- Codex loads project
.codex/layers only for trusted projects, and non-managed hooks must be reviewed with/hooksbefore they run. A written hook is "configured", not "known active". If.codex/config.tomlalready defines inline[hooks], Agentyx adds no secondhooks.jsonand says so. - Claude Code asks for approval before using
.mcp.jsonservers in interactive sessions. - Kimi Code treats stdio entries in a project
.kimi-code/mcp.jsonas local command execution behind its workspace trust prompt. - Qwen Code loads project hooks only for a folder you have trusted;
--safe-mode,--bareanddisableAllHooksall turn them off. Its adapter reportsreview-may-be-requiredfor the same reason Codex does.
Treat project agent files as prompt configuration and review them in repositories you do not trust.
What Agentyx declines
Kimi Code hooks. Kimi Code supports lifecycle hooks, but configures them only in the user-level
~/.kimi-code/config.toml, and plugin installation is per-user. "Kimi Code supports hooks" and
"Agentyx has a safe project-local hook installation for Kimi Code" are different claims; only the
first is true. Agentyx never writes under $HOME, so it declares no hooks for Kimi Code and reports
its runtime usage as unobservable. Kimi still gets the full static analysis.
Qwen Code HTTP headers from the environment. Qwen Code documents headers as literal values with
no reference mechanism. An HTTP server that needs a header from the environment therefore fails with
unsupported_mcp_env_reference instead of being written, because ${VAR} in a header would be sent
to the server as the credential itself.
SSE MCP transport. Agentyx models stdio and http. A server whose transport an adapter does not
declare fails with unsupported_mcp_transport; it is never rendered.
See Compatibility for the full rendering rules per provider.