2025/12/24

Nix で Agent Skills を管理する

Nix を用いた Agent Skills 設定のためのフレームワークを開発しました

はじめに

Model Context Protocol だなんだと​言っていた​時期も​もう​懐かしく、​今と​なっては​コンテキストウィンドウの​関係から、​多くの​ MCP Server を​入れる​ことは​主流ではなくなってきたように​見えます。

そうした​背景の​中で、​10 月に​ Agent Skills なる​ものが​ Anthropic から​発表され、​12 月 18 日に​オープンな​規格と​なりました。​ここ一週​間ずっと​驚き屋が​驚いててやかましかったですね。

https://platform.claude.com/docs/ja/agents-and-tools/agent-skills/overview

MCP Server に​ついてはすでに​ Nix を​用いて​宣言的に​管理する​手法が​存在しますが、​まだ​ Agent Skills に​ついて​ Nix で​管理する​手法は​見当たらないように​思えました。​非 Nix での​手法と​しては​ OpenSkills なる​ものが​あるらしいです。​詳しくは​調べる​気に​なりませんでした​(Nix ではないので)

https://github.com/numman-ali/openskills

その​ため、​Nix を​用いた​ Agent Skills 設定の​ための​フレームワークである​ agent-skills-nix を​作成しました。

https://github.com/Kyure-A/agent-skills-nix

なぜ Nix?

Nix で​ Agent Skills を​管理する​最大の​利点は、​Nix Flake に​よる​環境の​固定と​ home-manager に​よる​宣言的な​設定です。​どの​ Agent Skills を​どの​エージェントに​入れるかを​設定で​固定できる​ため、​環境を​増やす・再構築しても​同じ​状態を​再現でき、​将来の​更新や​悪意ある​差し替えにも​強くなります。

Agent Skills で​ LLM に​悪意の​ある​動作を​させる​ことができるのかは​さて​おき、​警戒する​ことに​越した​ことは​ありません。​Nix Flake で​ commit 単位で​ロックしておけば、​未来の​ commit に​おいて​悪意の​ある​プロンプトに​差し替えられた​としても​問題ありません。

また、​複数リポジトリから​提供される​ Agent Skills の​統合が​できたり、​エージェントの​設定ファイルごとの​配置も​一箇所で​完結するので、​運用が​シンプルに​なります。

…と​いう​建前を​連ねましたが、​実際は​ home-manager ですべての​設定を​管理している​ため、​Agent Skills に​ついても​一元​管理したいと​いう​邪心 - Driven Development です。

実装

MCP Server とは​違い、​Agent Skills は​単なる​テキストファイルと​それに​付随する​スクリプトが​あるだけですから、​単に​各エージェントごとの​ディレクトリに​シンボリックリンクを​貼って​やれば​よさそうです。 最初は​すべての​エージェントに​ついて​シンボリックリンクですべて​配置する​想定でしたが、​Codex に​ついては​実体が​なければ​ Agent Skills を​読み込んでくれないらしく、​実体を​配置する​オプションも​実装しました。

設定ファイル

この​手の​先駆者である​ mcp-servers-nix は​ NixOS や​ home-manager などの​システム構成フレームワークに​依存していないのが​特徴ですが、​agent-skills-nix に​ついては​ home-manager に​しっかり​依存しています。

Agent Skills の​リポジトリが​たくさん​ config の​ Nix Flake の​ inputs に​並ぶのは​気持ち悪いので、​子ディレクトリに​ flake.nix と​ default.nix を​作り、​子供の​ Nix Flake を​親の​ Nix Flake が​ inputs に​入れる​形式に​して​依存関係を​分離しています。 AGENTS.md / CLAUDE.md などの​指示用の​ファイルに​ついては​悩んでいて、​Agent Skills ではないしな…と​思い、​まだ​配置機能は​実装していません。

{
  description = "Agent Skills";

  inputs = {
    agent-skills.url = "github:Kyure-A/agent-skills-nix";
    anthropic-skills = {
      url = "github:anthropics/skills";
      flake = false;
    };
    my-skills = {
      url = "github:Kyure-A/skills";
      flake = false;
    };
  };

  outputs =
    {
      self,
      agent-skills,
      anthropic-skills,
      my-skills,
      ...
    }:
    {
      homeManagerModules.default =
        { ... }@args: import ./ (args // { inherit agent-skills anthropic-skills my-skills; });
    };
}
{
  lib,
  agent-skills,
  anthropic-skills,
  my-skills,
  ...
}:
{
  imports = [
    (import "${agent-skills.outPath}/modules/home-manager/agent-skills.nix" {
      inherit lib;
      inputs = { };
    })
  ];

  programs.agent-skills = {
    enable = true;
    sources = {
      anthropic = {
        path = anthropic-skills;
        subdir = "skills";
      };
      personal = {
        path = my-skills;
      };
    };
    skills.enable = [
      "frontend-design"
      "skill-creator"
    ];
    skills.enableAll = [ "personal" ];
    targets = {
      codex = {
        dest = ".codex/skills";
        structure = "copy-tree";
      };
      claude = {
        dest = ".claude/skills";
        structure = "copy-tree";
      };
    };
  };
}

sources は​ Agent Skills の​取得元です。

subdir は​ SKILL.md が​並ぶディレクトリで、​anthropics/skills の​場合は​ root からみた​ "skills" ディレクトリです。

skills.enable は​許可リストと​なっていて、skills.enableAll は​ true ですべての​リポジトリに​ついて​すべての​ Agent Skills を​有効化でき、​あるいは​ ["personal"] のように​リポジトリ単位ですべての​ Skills を​有効化する​ショートカットです。

targets で​配置先を​決め、dest は​ $HOME との​相対パスで​指定し、structure と​して​ link/symlink-tree/copy-tree を​選びます。​Codex のように​実体が​必要な​エージェントに​ついては​ copy-tree が​無難です。

まとめ

  • Agent Skills を​ Nix Flake で​ピン留めして、​将来の​差し​替えや​悪意ある​変更に​強く​できるよ!
  • home-manager で​ Agent Skills を​宣言的に​管理できるよ!
  • 既存の​ Agent Skills リポジトリを​そのまま​束ねられるので、​複数ソースの​統合が​楽だよ!
  • ただし home-manager 依存であり、AGENTS.md の​生成/更新は​別途行う​必要が​あるよ!

おわりに

半年前くらいまでは​ LLM が​ Nix を​書くのは​難しそうでしたが、​今と​なっては​ gpt-5.2-codex xhigh が​ほとんど​作ってくれて​進歩を​感じています。 まだ​執筆時点だと​作って​ 2 日目くらいの​発展途上な​フレームワークなので、​issue や​ Pull Request の​ほう​ぜひ​お待ちしております。 https://github.com/Kyure-A/agent-skills-nix