Nix flake that packages AI agent skills from many upstream repos and exposes them as installable paths.
packages.<system>.skills: nested attrset of fetched skillspackages.<system>.updater: CLI that updatesskills-flake.lock.jsonfromskill-list.kdlhomeModules.default: Home Manager module that installs selected skills into agent-specific skill directories
Skill paths are exposed under:
inputs.skills-flake.packages.${pkgs.stdenv.hostPlatform.system}.skills.<source>.<url-section>.<skill>
<url-section> depends on source parser (for GitHub, it is usually <owner>.<repo>).
Example:
inputs.skills-flake.packages.${pkgs.stdenv.hostPlatform.system}.skills.github.NousResearch.hermes-agent.apple.apple-notes
Add this flake to your inputs, then import its module and enable it:
{
imports = [ inputs.skills-flake.homeModules.default ];
home.skillsFlake = {
enable = true;
# Optional: explicit directories (relative to $HOME)
# skillDirs = [ ".agents/skills" ];
# Auto-install into enabled agent dirs via `agents.<name>.enable = true`
agents.pi.enable = true;
# Skills keyed by output directory name
skills = {
agent-browser = inputs.skills-flake.packages.${pkgs.stdenv.hostPlatform.system}.skills.github.vercel-labs.agent-browser.agent-browser;
};
};
}Supported agents:
Full supported agent list, install directories, and websites
- aider-desk:
.aider-desk/skills - amp:
${config.xdg.configHome}/agents/skills - augment:
.augment/skills - bob:
.bob/skills - claude-code:
<claude configDir>/skills - openclaw:
.openclaw/skills - cline:
.agents/skills - codearts-agent:
.codeartsdoer/skills - codebuddy:
.codebuddy/skills - codemaker:
.codemaker/skills - codestudio:
.codestudio/skills - codex:
${config.xdg.configHome}/codex/skillsor.codex/skills(version/config-dependent) - command-code:
.commandcode/skills - continue:
.continue/skills - cortex:
.snowflake/cortex/skills - crush:
${config.xdg.configHome}/crush/skills - cursor:
.cursor/skills - deepagents:
.deepagents/agent/skills - devin:
${config.xdg.configHome}/devin/skills - dexto:
.agents/skills - droid:
.factory/skills - firebender:
.firebender/skills - forgecode:
.forge/skills - github-copilot:
<copilot configDir>/skills - goose:
${config.xdg.configHome}/goose/skills - hermes-agent:
.hermes/skills - junie:
.junie/skills - iflow-cli:
.iflow/skills - kilo:
.kilocode/skills - kimi-cli:
${config.xdg.configHome}/agents/skills - kiro-cli:
.kiro/skills - kode:
.kode/skills - mcpjam:
.mcpjam/skills - mistral-vibe:
.vibe/skills - mux:
.mux/skills - opencode:
${config.xdg.configHome}/opencode/skills - openhands:
.openhands/skills - pi:
.pi/agent/skills - qoder:
.qoder/skills - qwen-code:
.qwen/skills - replit:
${config.xdg.configHome}/agents/skills - rovodev:
.rovodev/skills - roo:
.roo/skills - tabnine-cli:
.tabnine/agent/skills - trae:
.trae/skills - trae-cn:
.trae-cn/skills - warp:
.warp/skills - windsurf:
.codeium/windsurf/skills - zencoder:
.zencoder/skills - neovate:
.neovate/skills - pochi:
.pochi/skills - adal:
.adal/skills - universal:
.agents/skills
Edit skill-list.kdl, then run:
nix run .#updater -- sort-skill-list
nix run .#updater -- updateTo update only a subset of repos:
nix run .#updater -- update --repo github:owner/repo
nix run .#updater -- update --repo https://github.com/owner/repo.git
nix run .#updater -- update --repo github:owner/repo --repo github:other/repoThis updates skills-flake.lock.json with pinned revisions and hashes.
Subset updates keep existing lockfile entries for non-selected repos.
direnv allowUseful commands:
nix run .#updater -- --help