代码代理配置工具

yaah是一个统一的代码代理配置工具,支持从单一代码库生成多种代码代理(如Claude Code、OpenCode等)的配置,提供钩子、中间件链、MCP服务器等功能,适用于多代码库的代理配置管理。

  • by dirien
  • Go
  • 本地部署
  • 20 星标
  • 更新于
在 GitHub 查看 dirien/yet-another-agent-harness

使用说明

呀

又一个代理工具

只需配置一次编码代理,即可在任何地方使用。

的问题

编码代理配置一团糟。设置位于JSON文件中,技能标记分散在各个目录中,钩子是手工连接的shell脚本,MCP服务器需要手动JSON条目。将其乘以您使用的repo和代理的数量。祝你好运,保持一致。

yaah是做什么的

yaah生成配置 四种编码剂 来自一个Go代码库:Claude Code、OpenCode、Codex CLI和GitHub Copilot CLI。每个代理、每个仓库都有一个命令,结果相同。

yaah generate                      # all agents
yaah generate --agent claude       # Claude Code only
yaah generate --agent opencode     # OpenCode only
yaah generate --agent codex        # Codex CLI only
yaah generate --agent copilot      # GitHub Copilot CLI only

这个命令可以给你:

  • 5个开箱即用的钩子:linting(golangci lint,ruff,better,tsc),一个阻挡的指挥警卫 rm -rf / 和朋友,一个泄露密钥的秘密扫描仪,一个捕捉 TODO: implement 占位符和会话记录器,以及一个使用事实检查器的实验工具 Stop/SubagentStop (通过以下方式选择加入 YAAH_EXPERIMENTAL_FACT_CHECK=1)
  • 用于组合处理程序的中间件链(例如秘密扫描+自动修复建议)
  • 用于Context7和Pulumi的MCP服务器,以及一个内置的yaah MCP服务器,将秘密扫描、linting和命令检查等工具直接暴露给代理
  • 生成多代理配置,并对每个代理进行调整(MCP格式、钩子交付、代理工具、技能前沿)
  • 通过官方市场为Go、Python、TypeScript和C#提供LSP支持
  • 会话跟踪,记录会话中的每个工具调用、阻止的命令和文件修改
  • 3种内置技能(提交、公关、审核)加上74种远程和工作流技能,涵盖Pulumi IaC、Flux CD GitOps、Go、Python、TypeScript、Kubernetes、DevOps、SRE、安全审计、代码质量、技术债务分析等
  • 16个代理:3个内置代理(执行者、图书管理员、审阅者)加上4个工作流代理(研究员、规划师、文档编写者、验证者)和9个远程代理 代理代理商 涵盖人工智能工程、后端架构、安全、代码审查、DevOps、SRE和测试
  • 插件支持市场自动启用——随附 OpenAI 代码专家 用于代码审查和任务委派

不想要全部吗?关闭你不需要的东西:

opts := harness.DefaultOptions{
    EnableCommandGuard:  true,
    EnableSecretScanner: true,
    EnableGopls:         true,
    EnableCommitSkill:   true,
    EnableYaahMCP:       true,
}
h := harness.NewWithDefaults(opts)

安装

家酿

brew install dirien/tap/yaah

走

go install github.com/dirien/yet-another-agent-harness/cmd/yaah@latest

二进制

获取释放 GitHub 发布。二进制文件由共同签署,包括SBOM。

快速开始

# Generate .claude/ with all defaults
cd your-repo
yaah generate

# Check that everything is installed
yaah doctor

yaah doctor 告诉您缺少什么以及如何安装:

LSP Servers:
  ✓ gopls                    /usr/local/bin/gopls
  ✓ pyright                  /usr/local/bin/pyright-langserver
  ✗ csharp                   not found → dotnet tool install -g csharp-ls

工作流程

yaah包含一个结构化的项目工作流,其中包含29个斜线命令。所有命令的命名空间为 /yaah:* 并且被注册为显式用户命令——模型永远不会自动触发它们。

生命周期

/yaah:init → /yaah:discuss → /yaah:plan → /yaah:execute → /yaah:verify → /yaah:ship
                                                                    ↓
/yaah:next ← /yaah:progress ← /yaah:complete-milestone ← /yaah:docs

命令参考

命令 描述 子代理
核心工作流程
/yaah:init 项目入职:发现代码库,设定愿景,创建路线图 是
/yaah:discuss 在规划之前捕捉实施决策 是
/yaah:plan 创建波浪分组实施计划 是
/yaah:execute 与并行子代理一波接一波地执行计划 是
/yaah:verify 根据计划进行三级工件验证 是
/yaah:docs 生成经过代码库验证的文档 是
/yaah:next 自动检测并推荐下一步 否
/yaah:quick 在没有充分计划的情况下执行任务 是
运输和里程碑
/yaah:ship 从已验证的阶段工作创建PR 是
/yaah:complete-milestone 归档里程碑、标签发布、生成变更日志 是
/yaah:new-milestone 以新的目标开始新的版本周期 是
会话管理
/yaah:pause 保存会话状态以供稍后恢复 否
/yaah:resume 从上一个会话切换恢复 否
阶段管理
/yaah:add-phase 将阶段添加到路线图末尾 否
/yaah:insert-phase 在现有阶段之间插入紧急阶段 否
/yaah:remove-phase 删除未来阶段 否
质量与安全
/yaah:review 阶段实施的结构化代码审查 是
/yaah:secure STRIDE威胁建模和漏洞分析 是
/yaah:health 验证 .planning/ 完整性和一致性 否
状态和捕获
/yaah:progress 详细的项目进度和指标 否
/yaah:todo 捕获、列出或完成快速待办事项 否
/yaah:note 零摩擦创意捕捉 否
配置
/yaah:settings 查看或更新工作流配置 否
分析与高级
/yaah:explore 交互式代码库探索 是
/yaah:scan 扫描安全性、质量、依赖性问题 是
/yaah:import 将现有项目导入规划工作流 是
/yaah:autonomous 无需人工干预即可运行完整的工作流程 是
/yaah:forensics 调查失败或卡住的工作流运行 是
/yaah:cleanup 清理临时规划工件 否

.规划/目录结构

.planning/
├── PROJECT.md          # Vision, goals, tech stack, constraints
├── REQUIREMENTS.md     # Scoped requirements with REQ-IDs
├── ROADMAP.md          # Phases with scope, success criteria, status
├── STATE.md            # Current position and progress tracking
├── HANDOFF.md          # Session pause/resume state
├── TODOS.md            # Quick todo items
├── config.json         # Workflow settings
├── research/           # Project-level research
├── phases/             # Per-phase artifacts
│   └── 01-auth/
│       ├── CONTEXT.md        # Implementation decisions
│       ├── RESEARCH.md       # Phase-specific research
│       ├── 01-01-PLAN.md     # Task plan with wave grouping
│       ├── 01-01-SUMMARY.md  # Execution outcomes
│       ├── VERIFICATION.md   # Validation results
│       ├── REVIEW.md         # Code review findings
│       ├── SECURITY.md       # Threat model (STRIDE)
│       └── CHANGELOG.md      # Milestone changelog
├── quick/              # Ad-hoc task records
└── notes/              # Idea captures

四名专业代理支持工作流程: researcher (十四行诗,只读), planner (opus,目标向后分解), doc-writer (十四行诗、代码库验证文档),以及 verifier (十四行诗,人工制品验证)。还暴露了两个MCP工具: yaah_planning_status 和 yaah_planning_init.

看 组件文档 了解全部细节。

运行时功能

yaah不仅仅是一个配置生成器,它还与Claude Code一起作为运行时运行。

MCP服务器

yaah serve 通过stdio启动MCP服务器,将yaah的功能作为Claude Code可以直接调用的工具公开:

工具 说明
yaah_scan_secrets 扫描文件以查找硬编码的机密和凭据
yaah_lint 使用配置的配置文件运行lint检查
yaah_check_command 检查shell命令是否可以安全运行
yaah_doctor 运行健康检查并报告缺少的依赖项
yaah_session_info 查询会话历史记录或获取服务器信息

MCP服务器由Claude Code通过以下方式自动发现 .mcp.json 在项目根目录(由生成 yaah generate).

会话跟踪

每个钩子事件都被记录到 .claude/sessions/<session-id>.json这为您提供了Claude Code在每个会话中所做工作的完整审计跟踪:工具调用、被阻止的命令、修改的文件和安全发现。

yaah session list              # List recent sessions
yaah session show <id>         # Full details for a session
yaah session clean             # Remove sessions older than 7 days

中间件链

使用条件逻辑将处理程序组合到顺序管道中:

chain := hooks.NewChain("secret-remediation",
    []schema.HookEvent{schema.HookPostToolUse},
    regexp.MustCompile(`(?i)^(Edit|Write)$`),
    hooks.HandlerLink(handlers.NewSecretScanner()),
    hooks.OnBlock(func(ctx context.Context, input *hooks.Input, prev *hooks.Result) (*hooks.Result, error) {
        prev.Output += "\n\nRemediation: Move the secret to an env var or secrets manager."
        return prev, nil
    }),
)
h.Hooks().Register(chain)

可用组合子: HandlerLink, OnBlock, OnError, Transform.

运作原理

yaah有一个简单的心智模型:接口和注册表。每种组件类型(钩子、MCP、LSP、技能、代理、命令)都有一个你实现的接口和一个你添加到其中的注册表 Harness 将它们连接在一起,每个代理生成器就会生成正确的文件。

多代理输出

每个代理都以其本机格式获取文件:

代理 设置 MCP 钩子 技能 代理
克劳德 .claude/settings.json .mcp.json 嵌入设置中 .claude/skills/ .claude/agents/*.md
开源代码 opencode.json 嵌入式("mcp" 按键) .opencode/plugins/yaah.js .opencode/skills/ .opencode/agents/*.md
法典 .codex/config.toml 嵌入式([mcp_servers]) .codex/hooks.json .agents/skills/ 不支持
副驾驶 没有 .copilot/mcp-config.json .github/hooks/hooks.json .github/skills/ .github/agents/*.agent.md

每个代理的关键调整:

  • 开源代码:MCP使用 "mcp" 钥匙与 "local"/"remote" 类型和 "command" 作为阵列。代理工具呈现为禁用映射。通过JS插件交付的钩子(execFileSync).
  • 副驾驶:MCP使用 "stdio"/"http" 运输类型。Env vars穿过。代理文件使用 .agent.md 扩展。
  • 法典:MCP嵌入TOML。挂钩仅限于 SessionStart/Stop --通过yaah MCP工具提供衣冠和安全检查。
  • 克劳德:原生格式,支持所有功能。

写你自己的钩子?实施 hooks.Handler自定义MCP服务器?实施 mcp.Provider到处都是同样的模式。

文档

详细的参考文献位于 docs/:

  • 组件 --钩子、MCP、LSP、技能、代理、命令、插件、MCP服务器、会话存储、中间件链
  • 配置 --设置、CLI命令、项目结构

许可证

麻省理工学院