agents.nix
September 24, 2026 · View on GitHub
Nix expressions for AI agent skills from skills.sh and skillsdirectory.com.
As of September 2026, this flake provides Nix derivations for over 145,000 skills sourced from more than 21,000 GitHub repositories. Each skill is individually packaged, pinned to a specific revision, and made available through a nixpkgs overlay.
Prerequisites
(Optional) Enable flakes
Read about Nix flakes and set them up.
Overlay
Read about Overlays.
With flakes
Add agents.nix to your flake inputs:
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
agents-nix.url = "github:sudosubin/agents.nix";
};
outputs = { nixpkgs, agents-nix, ... }:
let
pkgs = import nixpkgs {
system = "aarch64-darwin"; # or "x86_64-linux", etc.
overlays = [ agents-nix.overlays.default ];
};
in
{
# pkgs.agent-skills.github.<owner>.<repo>.<skill-name>
};
}
Without flakes
let
agents-nix = import (builtins.fetchGit {
url = "https://github.com/sudosubin/agents.nix";
ref = "refs/heads/main";
});
pkgs = import <nixpkgs> {
overlays = [ agents-nix.overlays.default ];
};
in
# pkgs.agent-skills.github.<owner>.<repo>.<skill-name>
Usage
Get agent-skills
Get agent-skills via the overlay
After applying the overlay (see Overlay), skills are available under pkgs.agent-skills:
pkgs.agent-skills.github.<owner>.<repo>.<skill-name>
Get agent-skills from agents.nix directly
Without the overlay, you can access skills from the flake outputs:
agents-nix.agent-skills.${system}.github.<owner>.<repo>.<skill-name>
Skill identifiers
Skills are organized in a four-level hierarchy: github.<owner>.<repo>.<skill-name>.
github— the forge the repository lives onowner— repository owner, lower-cased (e.g.,vercel-labs)repo— repository name, lower-cased (e.g.,skills)skill-name— skill directory name (e.g.,find-skills)
For example, a skill from the repository vercel-labs/skills would be accessed as:
pkgs.agent-skills.github.vercel-labs.skills.find-skills
Note
If a skill identifier contains characters that aren't valid Nix identifiers, quote them like pkgs.agent-skills.github."01000001-01001110"."agent-jira-skills"."jira-issues".
Important
pkgs.skills.<owner>.<repo>.<skill-name> still resolves and warns on evaluation. It is kept for existing configurations only.
Example: install a skill for claude-code
# home-manager configuration
{ pkgs, ... }:
{
programs.claude-code = {
enable = true;
skills = {
find-skills = pkgs.agent-skills.github.vercel-labs.skills.find-skills;
};
};
}
Example: install a skill for pi
# home-manager configuration
{ pkgs, ... }:
{
home.file.".pi/agent/skills/find-skills" = {
source = pkgs.agent-skills.github.vercel-labs.skills.find-skills;
recursive = true;
};
}
Rename a skill
By default, SKILL.md is preserved unchanged. The derivation pname comes from the lowercased skill directory name, or the repository name for skills at the repository root.
Use .override { name = "..."; } to change both the derivation pname and the name field in SKILL.md frontmatter. Setting name = null restores the default package name and preserves the original file.
pkgs.agent-skills.github.vercel-labs.skills.find-skills.override { name = "my-find-skills"; }
Explore
List available skills in REPL
$ nix repl
nix-repl> :lf github:sudosubin/agents.nix
nix-repl> skills = outputs.agent-skills.${builtins.currentSystem}.github
nix-repl> skills.vercel-labs.skills
{ find-skills = «derivation ...»; ... }
nix-repl> skills.vercel-labs.skills.find-skills
«derivation /nix/store/...-find-skills-4f1d38e.drv»
Build a skill
nix build github:sudosubin/agents.nix#agent-skills.aarch64-darwin.github.vercel-labs.skills.find-skills
How it works
Three independent GitHub Actions workflows run on their own schedules and exchange data through committed JSON files in data/:
Agent Skills Fetch
- Fetches the latest skill listings from skills.sh and skillsdirectory.com.
- Records which of them listed each repository in
data/agent-skills/sources.json.
Reconcile
- Asks GitHub for each repository's current name, and confirms the ones it no longer serves.
- Moves a renamed repository under the name it goes by now, keeping the old one as an alias that warns when built.
Agent Skills Update
- Reads the committed source list (
data/agent-skills/sources.json) to determine which repositories to process. - Splits the work across 16 parallel shards. For each repository, it resolves the revision to pin — the newest release, or the newest commit that touched a skill when there is no usable tag — then downloads the tarball, hashes it, and discovers all
SKILL.mdfiles. - Stores the result in
data/agent-skills/<forge>/as one JSON file per repository, and proposes each change as its own pull request that merges once the skills build.
At evaluation time, Nix reads these JSON files and builds each skill using fetchFromGitHub with the pinned revision and hash. One file is read per repository, so only what you ask for is parsed.
aarch64-darwin, aarch64-linux, and x86_64-linux are supported. ci/README.md describes the workflows in more detail.