Skiller looks for .agents/skiller.toml by walking up from --project-root.
- If no local
.agents/skiller.tomlis found, it falls back to$XDG_CONFIG_HOME/skiller/skiller.toml. - If
.agents/exists but has noskiller.toml, Skiller keeps walking.
skiller apply --agents ...default_agents = [...][agents.<id>].enabled = falsedisables an agent- Otherwise: all agents are enabled
Skiller reads the authored root AGENTS.md first, then supplemental .md and .mdc files under .agents/ recursively. It never rewrites root AGENTS.md.
- Primary file: repository root
AGENTS.md .agents/AGENTS.mdis not a rule source- Remaining files are appended in sorted path order
Filtering:
[rules].includeonly keeps matching files[rules].excludedrops matches (wins overinclude)- Bare directory patterns expand to
dir/**/*.{md,mdc}
Cursor merge strategy:
rules.merge_strategy = "cursor"keeps rootAGENTS.mdplus Cursor-style.mdcrules underrules/andskills/withalwaysApply: true
High level (see docs/mcp.md for MCP details):
default_agents = ["claude-code", "codex"]nested = true|false[sync] source, mode = "auto"|"preset"|"repo", clean, include, exclude[rules] include = [...], exclude = [...], merge_strategy = "all"|"cursor"[backup] enabled = true|false[gitignore] enabled = true|false[skills] enabled = true|false[mcp] enabled = true|false, merge_strategy = "merge"|"overwrite"[mcp_servers.<name>]server definitions[agents.<id>] enabled, output_path, output_path_instructions, output_path_config, gitignore[agents.<id>.mcp] enabled, merge_strategy
Instruction output_path overrides do not apply to agents that read the authored root AGENTS.md; their MCP/config output paths remain configurable.
[sync] lets skiller install and skiller update hydrate a project from a shared preset or repo source before lock restore/update and apply.
Use it for internal repos that intentionally inherit from another local source.
For distributable starters or templates, prefer one-shot materialization with skiller install <source> --preset <name> so the generated repo does not keep a live dependency on your local filesystem.
Preset installs can also reuse shared source files without duplicating them inside the preset folder:
- add
preset.tomlto the preset root - declare
include = ["../../.agents/rules/react.mdc", "../../skills-lock.json"] - include entries must resolve to files, not directories
- includes resolve relative to the preset root
- target paths are derived from root
AGENTS.mdor the first supported root marker:.agents,.claude,.codex,skills-lock.json, orskiller-lock.json - files that physically exist inside the preset root still override included files with the same target path
Fields:
source: required, resolved relative to the project rootmode: optional,auto(default),preset, orrepoclean: optional, defaults totrueinclude: optional in preset mode, required in repo modeexclude: optional in both modes
Mode rules:
preset: sync allowlisted roots by default:AGENTS.md,.agents/**,.claude/**,.codex/**,skills-lock.json,skiller-lock.jsonrepo: sync onlyincludematches, then applyexcludeauto: uses preset mode when the source looks like a curated preset root; otherwise requireincludeand switch to repo mode
Important:
- Source
.agents/skiller.tomlis not copied verbatim. Skiller reads it as a base config and merges the local target.agents/skiller.tomlon top. - Local
[sync]always wins. - Generated/runtime surfaces are never synced:
.agents/skills/**,.claude/skills/**,.git/**,node_modules/**
- Preferred:
skiller.toml[mcp_servers.*] - Legacy:
.agents/mcp.jsonis still read, but deprecated - Merge rule: TOML wins by server name
${VAR}is expanded insidemcp_servers.<name>.envvalues