From nix-skills
Investigates why Nix packages aren't fetched from binary caches and get built locally. Verifies substituters, checks Hydra build status, confirms PR ancestry in nixpkgs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/nix-skills:nix-cache-check <flake installable または パッケージ名> [--channel <channel>] [--arch <system>]<flake installable または パッケージ名> [--channel <channel>] [--arch <system>]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
`nixos-rebuild switch` や `home-manager switch`、`nix build` で特定パッケージだけがキャッシュから来ずローカルビルドになるとき、原因は主に3系統に分かれる。**闇雲に `nix build -L` でログを眺める前に、まずどの系統かを切り分ける**。
nixos-rebuild switch や home-manager switch、nix build で特定パッケージだけがキャッシュから来ずローカルビルドになるとき、原因は主に3系統に分かれる。闇雲に nix build -L でログを眺める前に、まずどの系統かを切り分ける。
決定論的に確認できる部分(実出力パスの評価、narinfo 直接確認、Hydra API 呼び出し、PR 祖先関係の確認)は scripts/nix-cache-check.sh に切り出してある。HTML を自前でスクレイピングするのは最終手段(失敗ログの中身を読みたいときの build-log サブコマンドのみ)。
同じバージョン表記でも依存関係が更新されれば derivation ハッシュは変わる。まずこれを確定させないと、以降の cache-check や hydra 比較が的外れになる。
bash <skill-dir>/scripts/nix-cache-check.sh outpath '.#nixosConfigurations.<host>.pkgs.<package>'
.#homeConfigurations.<name>.pkgs.<package> や単なる nixpkgs#<package> 相当のインストーラブルでも同様に使える。
nix path-info --store https://... はローカルに .drv が無いと使えないことがあるため、narinfo を HTTP で直接叩くほうが確実。実行環境の nix show-config に登録済みの substituters(cache.nixos.org・cachix 各種)全部を自動で対象にする。
bash <skill-dir>/scripts/nix-cache-check.sh cache-check <出力パスまたは先頭ハッシュ>
HIT … そのキャッシュに存在するMISS … 存在しない(未ビルド or ビルド失敗)NO_ACCESS(401/403) … private cache の可能性。認証設定を疑うcache-check <path> <url> [<url>...] のように明示指定もできる全て MISS なら、次に Hydra 側の状況を見る。
HTML の一覧ページを自前でスクレイピングしない。 nix-community 製の専用ツール hydra-check(nixpkgs に pkgs.hydra-check として収録済み)をまず使う。
bash <skill-dir>/scripts/nix-cache-check.sh hydra <package> --channel nixpkgs-unstable --arch x86_64-linux
ビルド履歴が成功/失敗/日付付きで一覧表示される。特定の build ID の詳細を正確に見たいときは JSON API を使う(一覧ページのステータスバッジは簡易表示で不正確なことがある)。
bash <skill-dir>/scripts/nix-cache-check.sh build-json <build-id>
# finished/buildstatus で正確な成否がわかる。buildstatus: 0 = 成功
失敗していた場合、失敗ログの末尾は JSON に含まれないため HTML から読む(ここだけスクレイピングが必要な理由がある箇所):
bash <skill-dir>/scripts/nix-cache-check.sh build-log <build-id>
build-log の中身は Python スクリプト(scripts/hydra_build_log.py)で、uv run 経由(PEP 723 inline metadata で Python バージョンを固定)で実行して再現性を持たせている。uv が入っていない環境でも nix さえあれば nix run nixpkgs#uv -- run ... に自動フォールバックするので、素の python3 には依存しない。
「この不具合、nixpkgs の PR #xxxxx で直ってるはずでは?」を確認するとき、対象リポジトリを git clone するのは重すぎる(特に nixpkgs)。GitHub の compare API で祖先関係だけ確認する。
gh api repos/NixOS/nixpkgs/pulls/<PR番号> --jq '{merged, merge_commit_sha, merged_at}'
bash <skill-dir>/scripts/nix-cache-check.sh pr-ancestry NixOS/nixpkgs <PRのmerge_commit_sha> <flake.lockがロックしているrev>
behind_by: 0 なら base(PRの修正)は head(ロック中の revision)の祖先=取り込み済み。ここが Yes でも 2. でキャッシュに無いなら、原因は「ソースは直っているが Hydra のビルドがまだ/失敗」であって、こちらの設定側の問題ではない。
Queued/Failed → Hydra側の一時的な遅延・インフラ障害。設定側に問題はなく、ローカルビルドを許容するか nix flake update でさらに新しい revision(既にキャッシュ済みの可能性がある)に進めるか判断するNO_ACCESS が出る substituter がある → private cache。認証トークン設定(netrc や nix.conf の access-tokens)を確認するnix(flakes 有効)、curl、jq が必要。gh は pr-ancestry のみで使用(要 gh auth login)hydra-check はサブコマンド内で自動的に nix run nixpkgs#hydra-check -- にフォールバックするが、頻用するなら pkgs.hydra-check を環境に入れておくと速いGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.
npx claudepluginhub yasunori0418/skills --plugin nix-skills