Nix Profile Manager for Agents 是一套指导智能体维护本地 Nix profile 的技能,目的是让智能体能够在用户提供的目录中动态安装工具,而无需系统级包管理权限或 sudo。
用途 该技能帮助智能体以用户级、隔离的方式管理 Nix profile,用于按需安装命令行工具和依赖。它面向需要在不改动系统环境的前提下获取工具的运行场景,例如受限权限环境或希望保持环境干净的工作流。
主要能力 技能覆盖的核心内容包括:profile 的创建与维护、flake 的使用、包搜索、注册表别名管理以及故障排查。
Profile 是一个目录,其中包含 manifest.json(记录已安装包及其 flake 引用)以及 bin、lib、share、etc. 等目录(存放指向 Nix store 中二进制、库和文档的符号链接)。执行 nix profile add 时,Nix 会更新 manifest 并重建符号链接。
Flake 是标准化的 Nix 包集合,包含定义输入输出的 flake.nix 文件、通过 flake.lock 实现确定性版本控制,以及多种输出方案(packages、overlays、modules 等)。常见 flake 包括 nixpkgs(标准包库,默认注册表项,通常是 github:NixOS/nixpkgs/nixpkgs-unstable 的别名)以及来自 GitHub 的自定义 flake(如 github:user/repo)。
概念上需区分 Package(单个工具,如 git、python311)与 Flake(包集合,以 <flake>#<package> 访问)。部分 flake(如 nixpkgs)支持嵌套包名:<flake>#<scope>.<package>。
使用方式 快速起步时,用户需在 PATH 中提供一个由智能体管理的目录,并确保 AGENT_PROFILE 环境变量指向该目录。之后智能体执行:nix profile add --profile "$AGENT_PROFILE" "nixpkgs#git"。其中 --profile 标志指示 Nix 将 profile 元数据存储在该位置,而 profile 中创建的 bin 目录必须位于 PATH 中。注意:在较旧版本的 Nix 中,add 子命令名为 install,若遇到提示 add 不存在的错误需留意这一点。
常用命令包括: 搜索:nix search nixpkgs git;nix search "github:user/repo[/branch]" <package-name>;nix search nixpkgs python3 --json | jq '.[].pname'。 管理:nix profile add --profile <profile_path> "<flake>#<package>";nix profile list --profile <profile_path>;nix profile remove --profile <path>/profile 0(按索引或元素编号移除);nix profile upgrade --profile <profile_path> <package_name>;nix profile upgrade --profile <profile_path> --all。 注册表:nix registry list 列出可用的 flake 别名;nix registry add myflake github:user/repo/branch 添加用户级自定义注册表项。
一般工作流为:先用 echo $AGENT_PROFILE 确定 profile 路径(若未定义需询问用户使用哪个 profile),再搜索包,然后添加,最后直接使用该工具。
重要细节 profile 路径的 bin 子目录需在 PATH 中,否则链接的二进制文件不可访问。flake 引用是不可变的:nixpkgs#git 解析为当前 nixpkgs 版本,可用 github:user/repo/ref#package 固定到特定引用。profile 锁:同一时间只应有一个智能体修改 profile,锁定不是自动进行的。Store 链接不会过期:即使 flake 变化,Nix store 路径仍然有效,profile 在需要时会保留旧的包路径。
故障排查 包未找到时:确认 flake 名称正确(nix registry list 显示可用别名),用 nix search <flake> <partial-name> 查找确切的包名。安装后命令不在 PATH 中时:检查 profile 目录是否在 $PATH(echo $PATH),并验证 $AGENT_PROFILE 是否已创建(ls -la $AGENT_PROFILE,按需调整路径)。出现权限拒绝时:本地 profile 不需要 sudo,若遇权限问题应报告给用户。
参考资料 技能附带的文档包括 references/flakes.md(flake 概念与 GitHub 参考)、references/package-search.md(高级包发现技巧)、references/profile-internals.md(profile 结构与 manifest 格式)、references/registry.md(自定义注册表配置与固定)。
面向智能体实现 在智能体中实现 profile 管理时,应将 profile 路径作为环境变量或参数接收(如 AGENT_PROFILE 或函数参数);始终先搜索再安装,确认包存在且名称精确;解析时使用 --json 输出比文本输出更可靠;优雅处理错误,因为包可能不存在于所有 flake 中;并告知用户 profile 的修改,帮助其跟踪已安装的内容。
限制 资料未提供该技能的具体版本号、支持的 Nix 版本范围、许可证信息或性能指标。该技能依赖系统已安装 Nix 并配置好 flake 支持;未提供 Nix 安装本身的指导。