`toString` converts a Nix path to a string without registering it as a
build input, causing "custom skill source not found" errors in the Nix
sandbox. String interpolation properly copies the path to the store.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
copytree makes files read-only in Nix sandbox; rglob("DESCRIPTION.md")
then tries to overwrite skill-level copies → PermissionError. chmod
0o644 before copy2 to handle already-existing read-only targets.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When bundled.include is set to a non-empty list, only the listed skills
are installed from the upstream bundled skills directory. When empty
(default), all bundled skills are installed (existing behavior).
Invalid include paths cause a build error with available skills listed.
DESCRIPTION.md files are only copied for categories that have at least
one included skill.
sanic 25.12.0 in nixpkgs has a flaky test_keep_alive_client_timeout
that fails in sandbox builds. Override the python package set to skip
sanic's tests — they're upstream's problem, not ours.
Cascade was: sanic → sanic-testing → slack-bolt → hermes-agent → all checks.
- Patch upstream pyproject.toml to include minisweagent_path in py-modules
- Copy mini-swe-agent/src/minisweagent into package for importability
- Add 3 nix checks: package-contents, cli-commands, doctor
- All binaries tested: hermes, hermes-agent, hermes-acp
- hermes gateway, config, status, claw migrate all verified working