
开发工具CLI【免费下载链接】devenvFast, Declarative, Reproducible, and Composable Developer Environments using Nix项目地址https://gitcode.com/gh_mirrors/de/devenv点击查看免费下载导读Claude Code 是 Anthropic 推出的官方命令行 AI 编程工具而 devenv 通过claude.code模块为其提供自动化 Hooks、斜杠命令、子代理Sub-agents、技能Skills与 MCP 服务器的声明式配置。本文基于当前仓库中 claude-code.md 文档结合 claude.nix 的完整实现讲解如何让 Claude Code 自动继承 devenv 环境中的工具与依赖读完即可在自己的devenv.nix中搭建一套包含代码格式化、安全防护、测试触发、知识库与外部工具接入的完整 AI 编码工作流。全局配置让 Claude Code 默认使用 devenv 环境Claude Code 本身并不了解你的项目环境需要通过全局指令告诉它“运行命令前先进入 devenv 环境”。在~/.claude/CLAUDE.md中写入以下内容即可When devenv.nix doesnt exist and a command/tool is missing, create ad-hoc environment: $ devenv -O languages.rust.enable:bool true -O packages:pkgs mypackage mypackage2 shell -- cli args When the setup is becomes complex create devenv.nix and run commands within: $ devenv shell -- cli args这段指令的效果是临时环境当项目里还没有devenv.nix、又缺少某个命令或工具时Claude 会通过-O覆盖选项临时创建一个即用即弃ad-hoc的环境例如即时启用 Rust 语言支持并注入两个包再执行后续 CLI 命令完整环境当项目配置逐渐复杂时应创建devenv.nix让 Claude 统一通过devenv shell -- cli args在受管环境中运行命令从而保证所有工具与依赖都可用、可复现。这样 Claude Code 的所有命令执行都落在 devenv 提供的可复现环境内避免“本机能跑、Claude 跑不了”的环境漂移问题。快速上手在 devenv.nix 中启用集成在项目的devenv.nix中加入一行即可启用整个 Claude Code 集成{ claude.code.enable true; }启用后devenv 会在仓库内自动生成以下文件生成逻辑见 claude.nix.claude/settings.jsonClaude Code 的 settings 主配置文件默认路径为${config.devenv.root}/.claude/settings.json由settingsPath选项控制.mcp.jsonMCP 服务器连接配置仅当配置了 MCP 服务器时生成.claude/commands/name.md每个自定义斜杠命令一个 Markdown 文件.claude/agents/name.md每个子代理一个 Markdown 文件.claude/skills/name/SKILL.md每个技能一个 Markdown 文件及其捆绑资源。同时devenv info会新增一条claude信息段报告 settings 文件位置、自动格式化是否开启、项目命令、Primary agent、Sub-agents、Skills 与 MCP 服务器清单见 claude.nix方便一键核对当前配置状态。自动格式化Claude 改完文件自动跑 git-hooksClaude 编辑文件后经常留下格式不统一的代码。devenv 的集成在启用git-hooks时会自动挂一个名为git-hooks-run的PostToolUse钩子matcher为^(Edit|MultiEdit|Write)$等价于每次编辑后执行cd $DEVENV_ROOT git-hooks run见 claude.nix。{ claude.code.enable true; # Enable formatters via git-hooks git-hooks.hooks { rustfmt.enable true; nixfmt.enable true; black.enable true; prettier.enable true; }; }只要启用了上述任意 formatterClaude 每次编辑文件后devenv 都会以pre-commit run的方式对被编辑文件执行格式化从而保证提交进仓库的每一处改动都符合项目格式规范。这个钩子默认跟随git-hooks.enable自动开关无需额外声明仓库 tests/claude-skills/devenv.nix 等测试用例则验证了 Claude 相关文件在 Nix store 中生成的具体形态。自定义 Hooks接管 Claude Code 的工作流阶段Hook 类型devenv 的 hook 子模块支持 Claude Code 的全部 17 种事件类型见 claude.nix比文档列举的 5 种更完整hookType触发时机PreToolUse工具执行前可阻止动作PostToolUse工具执行后PostToolUseFailure工具调用失败后NotificationClaude Code 发送通知时UserPromptSubmit用户提交提示词时SessionStart/SessionEnd会话开始 / 结束StopClaude 完成响应时SubagentStart/SubagentStop子代理任务开始 / 结束PreCompact消息压缩前PermissionRequest请求权限时WorktreeCreate/WorktreeRemove创建 / 移除 worktreeTeammateIdle队友代理空闲时TaskCompleted任务完成时ConfigChange配置变化时每个 hook 支持enable默认true、name日志中显示的名称、hookType默认PostToolUse、matcher匹配工具名的正则与command要执行的命令五个属性。实战示例{ claude.code.hooks { # Protect sensitive files (PreToolUse hook) protect-secrets { enable true; name Protect sensitive files; hookType PreToolUse; matcher ^(Edit|MultiEdit|Write)$; command # Read the JSON input from stdin json$(cat) file_path$(echo $json | jq -r .file_path // empty) if [[ $file_path ~ \.(env|secret)$ ]]; then echo Error: Cannot edit sensitive files exit 1 fi ; }; # Run tests after changes (PostToolUse hook) test-on-save { enable true; name Run tests after edit; hookType PostToolUse; matcher ^(Edit|MultiEdit|Write)$; command json$(cat) file_path$(echo $json | jq -r .file_path // empty) if [[ $file_path ~ \.rs$ ]]; then cargo test fi ; }; # Type checking (PostToolUse hook) typecheck { enable true; name Run type checking; hookType PostToolUse; matcher ^(Edit|MultiEdit|Write)$; command json$(cat) file_path$(echo $json | jq -r .file_path // empty) if [[ $file_path ~ \.ts$ ]]; then npm run typecheck fi ; }; # Log notifications (Notification hook) log-notifications { enable true; name Log Claude notifications; hookType Notification; command echo Claude notification received claude.log; }; # Track completion (Stop hook) track-completion { enable true; name Track when Claude finishes; hookType Stop; command echo Claude finished at $(date) claude-sessions.log; }; # Subagent monitoring (SubagentStop hook) subagent-complete { enable true; name Log subagent completion; hookType SubagentStop; command echo Subagent task completed subagent.log; }; }; }从源码看devenv 会把所有enable true的 hook 先按hookType分组claude.nix再渲染成 Claude Code settings 中形如{ matcher ...; hooks [ { type command; command ...; } ]; }的结构见 claude.nix最终写入.claude/settings.json。Hook 输入格式Hooks 通过 stdin 接收一个包含工具信息的 JSON 对象。对于 Edit/Write 等文件相关工具JSON 至少包含{ tool: Edit, file_path: /path/to/file.rs, // ... other tool-specific fields }示例中的json$(cat)就是从 stdin 读取该对象再用jq -r .file_path // empty提取文件路径做条件判断。自定义斜杠命令把常见任务变成 /command用claude.code.commands可以为项目定制斜杠命令Claude 中以/命令名形式调用{ claude.code.commands { test Run the test suite bash cargo test ; build Build the project in release mode bash cargo build --release ; deploy Deploy to production This will build and deploy the application. bash ./scripts/deploy.sh production ; db-migrate Run database migrations bash diesel migration run ; }; }启用后即可在 Claude Code 中直接使用/test、/build、/deploy与/db-migrate。实现上devenv 会把每个命令写成一个.claude/commands/name.md文件claude.nix文件正文即你提供的 Markdown 内容其中可以嵌入说明文字与 bash 代码块供 Claude 阅读和执行。Agents为项目定制专用子代理子代理Sub-agents是拥有独立上下文窗口、独立工具集与系统提示词的专用 AI 助手适合承接代码审查、测试编写、文档维护等复杂或重复性任务。它们既可在描述中包含 “use proactively” 让 Claude 自动按需委派也可被显式点名调用。基础配置{ claude.code.agents { code-reviewer { # Use proactively tells Claude to delegate to this agent automatically when relevant description Expert code review specialist that checks for quality, security, and best practices. Use proactively after code changes.; tools [ Read Grep TodoWrite ]; model opus; effort high; prompt You are an expert code reviewer. When reviewing code, check for: - Code readability and maintainability - Proper error handling - Security vulnerabilities - Performance issues - Adherence to project conventions Provide constructive feedback with specific suggestions for improvement. ; }; test-writer { description Specialized in writing comprehensive test suites; tools [ Read Write Edit Bash ]; prompt You are a test writing specialist. Create comprehensive test suites that: - Cover edge cases and error conditions - Follow the projects testing conventions - Include unit, integration, and property-based tests where appropriate - Have clear test names that describe what is being tested ; }; docs-updater { description Updates project documentation based on code changes. Use proactively when code changes affect documentation.; tools [ Read Edit Grep ]; prompt You specialize in keeping documentation up-to-date. When code changes: - Update API documentation - Ensure examples still work - Update configuration references - Keep README files current ; }; }; }属性说明description子代理做什么、何时该被委派。包含 “use proactively” 类短语可让 Claude 在相关场景自动调用tools子代理可用的工具列表出于安全限制其权限model为该代理覆盖模型接受别名opus、sonnet、haiku、fable、完整模型 ID如claude-opus-5或inheriteffort覆盖推理投入级别low、medium、high、xhigh、maxprompt定义子代理行为的系统提示词permissionMode该子代理专属的权限模式default、acceptEdits、plan、auto、dontAsk、bypassPermissions其中manual是default的别名。这些选项在 claude.nix 中定义渲染时会生成.claude/agents/name.md其 frontmatter 依次写入name、description、tools、model、effort、permissionMode正文为prompt见 claude.nix。常用工具清单可分配给代理的常见工具包括Read读文件、Write新建文件、Edit/MultiEdit修改文件、Grep/Glob搜索代码、Bash执行命令、TodoWrite管理任务列表、WebFetch/WebSearch访问网络资源。设置 Primary Agent默认情况下 Claude Code 的主会话运行在内置的通用代理general-purpose上。通过claude.code.agent可指定其他代理作为主代理{ claude.code.agent code-reviewer; }claude.code.agent接受两种值项目claude.code.agents.name中定义的某个代理名此时该代理成为主代理并从子代理列表中移除一个未在claude.code.agents中定义的 Claude Code 内置代理名如general-purpose此时所有已配置代理仍可作为子代理使用。这一点会反映在devenv info中报告一行Primary agent: name并在还有其他代理时输出Sub-agents: names。仓库中的 claude-primary-agent-internal、claude-primary-agent-external 与 claude-primary-agent-only 三个测试用例分别验证了“项目内代理作为主代理”“内置代理作为主代理且项目代理全部成为子代理”“仅主代理无子代理”三种场景。使用与最佳实践Claude 依据代理的description与当前任务决定委派对象描述中声明 “use proactively” 的代理会在其专业领域相关时被自动调用例如上述 code-reviewer 会在代码发生重大改动后自动审查任何代理也都可以被显式请求直接要求 Claude 使用某个代理或描述一个匹配其专长的任务即可。实践建议清晰的描述帮助 Claude 判断何时使用每个代理聚焦的提示词让代理的 prompt 紧扣其任务不要泛化谨慎声明自动使用只有希望自动运行的代理才在 description 中写 “use proactively”。Skills按需加载的项目知识库Skills 是 Claude 按需加载的指令文件夹。只有技能的description常驻上下文正文在 Claude 判定技能适用时才被读取——因此它是存放“相关时才重要、平时是噪音”的知识的最佳位置例如迁移工作流、API 约定、部署手册。技能文件会被写入.claude/skills/name/SKILL.md。基础示例{ claude.code.skills { database-migrations { description How to write and run migrations in this project. Use when adding, editing or rolling back a migration.; content Migrations live in migrations/ and are applied with diesel migration run. - One logical change per migration; never edit an applied migration. - Always write the matching down.sql. - Run devenv tasks run db:reset before opening a pull request. ; }; }; }属性全表description技能覆盖什么、何时使用。这是 Claude 加载技能前唯一能看到的部分直接决定技能是否触发建议一行写完并点名应当触发它的场景contentSKILL.md的正文allowedTools技能生效的那一轮中 Claude 无需询问即可使用的工具你发送下一条消息后授权即清除。它是“预批准”而非“限制”要剥夺工具请用disallowedToolswhenToUse触发技能的额外上下文触发短语、示例请求等会追加到技能列表中的description之后并计入 1536 字符上限devenv 会在超限时给出警告校验逻辑见 claude.nixdisallowedTools技能激活期间从 Claude 可用工具池中移除的工具同样在下一条消息时清除。适合禁止某个技能调用特定工具例如不允许自主循环停下来提问disableModelInvocation禁止 Claude 自动加载该技能用于只想通过/name手动触发的工作流userInvocable是否允许你自己用/name调用技能。设为false时只有 Claude 能调用适合作为背景知识而非命令argumentHint自动补全时提示预期参数的提示语如[issue-number]arguments命名位置参数按给定顺序以$name形式替换进contentmodel技能激活期间当轮剩余部分使用的模型接受别名、完整模型 ID 或inherit当context fork时改为设置 fork 出的子代理模型effort技能激活期间的投入级别low、medium、high、xhigh、maxcontext设为fork可在 fork 出的子代理上下文中运行技能agentcontext fork时使用的子代理类型如某个claude.code.agents条目background仅配合context fork使用设为false表示在发起技能的那一轮等待 fork 子代理的结果resources放在SKILL.md旁的额外文件键为相对技能目录的路径。裸路径是常见用法文件需要被直接执行而非传给解释器时用{ source ./x; executable true; }。资源的取值方式与files.name相同因此也可以内联写入内容而不指向路径copyMode文件的落地方式语义同files.name.copyMode默认symlink。命名约束技能名必须是小写字母、数字和单个连字符最长 64 个字符。devenv 会强制断言这一点见 claude.nix因为 Claude Code 会静默跳过它无法匹配为合法名称的技能目录。synced同样被拒绝——Claude Code 保留该目录存放从你的 claude.ai 账户下载的技能。捆绑资源把长参考文档拆出去长参考材料应当放进独立文件而非塞进content让 Claude 只在需要细节时读取{ claude.code.skills.api-conventions { description REST conventions for this codebase. Use when adding or changing an HTTP endpoint.; allowedTools [ Read Grep ]; resources { references/error-codes.md ./docs/error-codes.md; scripts/lint-endpoints.sh { source ./scripts/lint-endpoints.sh; executable true; }; }; content Endpoints are versioned under /v1. Read references/error-codes.md before inventing a new error code. ; }; }资源文件会随技能一并生成在.claude/skills/name/path位置见 claude.nix。就地编辑技能默认生成的技能文件是指向 Nix store 的符号链接无法直接编辑。设置copyMode seed可让 devenv 写入一次后保留可写状态方便在文案稳定后再把内容迁回devenv.nix{ claude.code.skills.api-conventions { copyMode seed; # ... }; }仓库 tests/claude-skills/devenv.nix 中的everything技能把每个 frontmatter 字段都渲染了一遍用于验证含冒号、引号、逗号的取值都能正确生成 YAML frontmatter可作为书写复杂技能的参考。Skills、Commands 还是 AgentsSkill技能任务匹配时由 Claude 自己加载的知识Command命令你用/name显式调用的东西Agent代理拥有独立工具与提示词的独立上下文窗口。当你不得不在多个会话间向 Claude 重复同样的解释时就该把它沉淀成一个技能。MCP Servers为 Claude 接入外部能力MCPModel Context Protocol服务器为 Claude Code 提供额外能力与上下文。devenv 同时支持 stdio 与 HTTP 两种类型{ claude.code.mcpServers { # Local devenv MCP server devenv { type stdio; command devenv; args [ mcp ]; env { DEVENV_ROOT config.devenv.root; }; }; # AWS IAM MCP server awslabs-iam-mcp-server { type stdio; command lib.getExe pkgs.awslabs-iam-mcp-server; args [ ]; env { }; }; # HTTP-based MCP server linear { type http; url https://mcp.linear.app/mcp; }; # HTTP-based MCP server with authentication github { type http; url https://api.githubcopilot.com/mcp/; headers { Authorization Bearer GITHUB_PAT; }; }; }; }服务器类型stdio执行一个通过 stdin/stdout 通信的命令command要执行的可执行程序args命令行参数可选env环境变量可选。http连接 HTTP 类型的 MCP 服务器url服务器地址headers用于鉴权或自定义配置的 HTTP 头可选。配置了 MCP 服务器后devenv 会生成.mcp.json供 Claude Code 连接。值得注意的是模块默认内置了一个mcp.devenv.sh的 HTTP 服务器见 claude.nixdevenv mcp子命令则对应 devenv 自身暴露给 Claude 的本地 MCP 接口同时源码会对配置做校验——stdio 类型缺command、http 类型缺url都会直接抛错见 claude.nix。细粒度工具权限掌控 Claude 能做什么claude.code.permissions提供全局与逐工具的权限控制在 claude.nix 中定义{ claude.code.permissions { defaultMode acceptEdits; disableBypassPermissionsMode true; additionalDirectories [ /shared/libs ]; rules { Edit { deny [ *.secret *.env ]; }; Bash { allow [ ls:* cat:* ]; ask [ git:* npm:* ]; deny [ rm -rf:* sudo:* ]; }; # Use an empty string to emit a bare tool entry for tools # without a matcher format (e.g. WebSearch, AskUserQuestion). WebSearch.allow [ ]; AskUserQuestion.deny [ ]; }; }; }各选项含义defaultMode全局权限模式——default首次使用各工具时询问manual是其别名、acceptEdits自动接受文件编辑、plan只读模式、auto带后台安全检查自动批准、dontAsk除非已通过 permissions 预批准否则自动拒绝、bypassPermissions跳过所有权限询问disableBypassPermissionsMode安全选项禁止危险的bypassPermissions模式会写入 settings.json 的disableBypassPermissionsMode: disableadditionalDirectories允许 Claude Code 访问项目根目录之外的目录rules逐工具权限规则推荐的写法每个工具下有allow、ask、deny三种模式列表。规则也可以直接写在工具名下向后兼容写法两者会合并且rules优先见 claude.nix。从实现看devenv 会把逐工具的 allow/ask/deny 列表扁平化为 Claude Code 的Tool(pattern)格式——例如Bash的allow [ ls:* ]会渲染为Bash(ls:*)当列表项是空字符串时则输出裸工具条目如WebSearch而非WebSearch(pattern)这正是WebSearch、AskUserQuestion这类没有匹配格式的工具的标准写法见 claude.nix。其他会话级配置项除了上述核心功能claude.code模块还提供若干会话级选项见 claude.nixmodel覆盖默认 Claude 模型例如claude-3-opus-20240229apiKeyHelper自定义生成认证令牌的脚本脚本需把 API key 输出到 stdout例如调用 AWS Secrets Manager 后经jq提取forceLoginMethod限制登录方式可取值claudeai仅 claude.ai 账户、console仅 Claude Console / API key 账户、gateway仅云网关cleanupPeriodDays聊天记录transcripts的保留天数例如 30env为 Claude Code 会话注入自定义环境变量例如PYTHONPATH、NODE_ENV。这些选项连同 hooks、agent、permissions 一起写入.claude/settings.json见 claude.nix。可组合的专用代理集社区还维护了一套可组合的专用代理集合devenv-ai-agents 仓库开箱即用提供六种专业化代理code-reviewer代码审查architecture-designer架构设计documentation-writer文档编写devops-specialistDevOps 专家fullstack-developer全栈开发quality-assurance质量保障可将这些代理作为claude.code.agents条目的配置参考或在此基础上按项目需求裁剪组合。验证配置启用集成后可通过以下方式确认一切就绪运行devenv info查看claude段确认 settings 文件路径、Auto-formatting: enabled via git-hooks、项目命令列表、Primary agent/Sub-agents、Skills 与 MCP 服务器清单检查仓库根目录下生成的.claude/settings.json、.mcp.json、.claude/commands/、.claude/agents/、.claude/skills/文件是否齐全在 Claude Code 中直接尝试/test等斜杠命令验证自定义命令是否生效。devenv 的 Claude Code 集成把环境管理Nix与 AI 编码Claude Code在声明式配置层面统一起来环境、格式化、钩子、知识库、权限与外部工具全部收敛到一份devenv.nix让每个开发者都能获得一致、可复现、可审计的 AI 辅助开发体验。赞分享开发工具CLI【免费下载链接】devenvFast, Declarative, Reproducible, and Composable Developer Environments using Nix项目地址https://gitcode.com/gh_mirrors/de/devenv点击查看免费下载相关推荐手把手玩转ROFL播放器英雄联盟回放文件解析与实战复盘完整指南手把手玩转ROFL播放器英雄联盟回放文件解析与实战复盘完整指南 昨晚你刚打完一局绝地翻盘的排位满脑子都是那两波关键团战打开官方客户端想复盘结果回放列表早开发工具CLIdevenv 开发环境配置实战从 devenv.nix 声明式配置到 MCP 智能体集成devenv 开发环境配置实战从 devenv.nix 声明式配置到 MCP 智能体集成 devenv 是一个基于 Nix 的「快速、声明式、可复现、可组合」开发工具CLISuperClaude 与 Claude Code 原生扩展点深度集成指南Commands、Agents、Modes、Hooks 与 MCP 全映射SuperClaude 与 Claude Code 原生扩展点深度集成指南Commands、Agents、Modes、Hooks 与 MCP 全映射 导读本开发工具CLIAI 技能/插件测试人工智能AI 评测上一篇football.json与其他足球数据API对比为什么选择开源方案下一篇h2ogpt日志分析最佳实践从日志中获取洞察创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考