On startup MiMo-Code scans the skill directories of other agent tools — ~/.claude, ~/.agents, ~/.codex, ~/.opencode, plus their project-local counterparts (packages/opencode/src/skill/index.ts, EXTERNAL_DIRS). On a machine where several of these tools are installed side by side this causes a real problem: they often ship skills with the same name, and which copy wins depends on scan order. For the user the result looks non-deterministic — the duplicate only surfaces as a warning in the logs.
Disabling an individual source today is only possible via environment variables (MIMOCODE_DISABLE_CLAUDE_CODE_SKILLS, MIMOCODE_DISABLE_CODEX_SKILLS, MIMOCODE_DISABLE_OPENCODE_SKILLS), and:
- the
.agents directory has no switch at all;
- env flags can't go into the config file, so the setting doesn't travel with
mimocode.json between machines and doesn't live next to skills.paths.
The config already lets you add custom directories via skills.paths but can't disable the defaults. I would like to close that gap with a skills.sources section — one boolean per source:
{
"skills": {
"sources": {
"claude": false,
"codex": false
}
}
}
Keys: builtin, compose, claude, agents, codex, opencode. All default to true, so existing setups don't change. Disabling a source skips both its home- and project-local variants, so a half-disabled source can't keep producing collisions. The existing MIMOCODE_DISABLE_* flags keep working and win over the config (they can only disable, so an env-disabled source never gets re-enabled via config).
Related (not a duplicate): #1535 covers a different layer — external_directory permission blocking compose skills — but it's the same "control over skill sources" area.
On startup MiMo-Code scans the skill directories of other agent tools —
~/.claude,~/.agents,~/.codex,~/.opencode, plus their project-local counterparts (packages/opencode/src/skill/index.ts,EXTERNAL_DIRS). On a machine where several of these tools are installed side by side this causes a real problem: they often ship skills with the same name, and which copy wins depends on scan order. For the user the result looks non-deterministic — the duplicate only surfaces as awarningin the logs.Disabling an individual source today is only possible via environment variables (
MIMOCODE_DISABLE_CLAUDE_CODE_SKILLS,MIMOCODE_DISABLE_CODEX_SKILLS,MIMOCODE_DISABLE_OPENCODE_SKILLS), and:.agentsdirectory has no switch at all;mimocode.jsonbetween machines and doesn't live next toskills.paths.The config already lets you add custom directories via
skills.pathsbut can't disable the defaults. I would like to close that gap with askills.sourcessection — one boolean per source:{ "skills": { "sources": { "claude": false, "codex": false } } }Keys:
builtin,compose,claude,agents,codex,opencode. All default totrue, so existing setups don't change. Disabling a source skips both its home- and project-local variants, so a half-disabled source can't keep producing collisions. The existingMIMOCODE_DISABLE_*flags keep working and win over the config (they can only disable, so an env-disabled source never gets re-enabled via config).Related (not a duplicate): #1535 covers a different layer —
external_directorypermission blocking compose skills — but it's the same "control over skill sources" area.