yet another agent harness

Configure your coding agent once, use it everywhere

yaah generates configuration for four coding agents from a single Go codebase. One command per agent, every repo, same result.

Terminal
$ yaah generate
 
Generated .claude/settings.json
Generated .claude/skills/ (30 skills)
Generated .claude/agents/ (12 agents)
Generated .mcp.json (3 servers)
Generated opencode.json
Generated .codex/config.toml
Generated .copilot/mcp-config.json
 
Done. 4 agents configured, 5 hooks, 3 MCP servers, 4 LSP servers.
4
Agents
30
Skills
5
Hooks
12
Sub-Agents

Agent config is a mess

Coding agent configuration is scattered everywhere. Settings live in JSON files, skills are markdown in random directories, hooks are shell scripts wired by hand, MCP servers need manual JSON entries. Multiply that by the number of repos and agents you use. Good luck keeping any of it consistent.

Everything you need, nothing you don't

yaah ships with batteries included. Turn off what you don't need.

Multi-Agent Support

Generate config for Claude Code, OpenCode, Codex CLI, and GitHub Copilot CLI from one codebase. Each gets files in its native format.

Built-in Hooks

Linting (golangci-lint, ruff, prettier, tsc, biome, rustfmt), command guard, secret scanner, comment checker, and session logger out of the box.

Middleware Chains

Compose handlers into sequential pipelines. Chain secret scanning with remediation advice, or build custom workflows with OnBlock, OnError, and Transform.

MCP Server

Built-in MCP server exposes yaah tools (secret scanning, linting, command checking) directly to your coding agent via stdio. Auto-discovered via .mcp.json.

Skill Catalog

33 skills organized by category, tags, risk level, and bundles. Search, filter, and discover skills via yaah skills CLI. Extend with external registries.

Sub-Agents

12 agents: executor, librarian, reviewer built in, plus 9 remote agents for AI engineering, security, code review, DevOps, SRE, and performance benchmarking.

LSP Support

Go (gopls), Python (pyright), TypeScript, and C# language servers enabled through the official Claude Code marketplace. yaah doctor checks binaries exist.

Session Tracking

Every tool call, blocked command, file modification, and security finding is logged to a per-session JSON file. Full audit trail across all sessions.

Extensible Architecture

Interface + registry pattern throughout. Implement hooks.Handler, mcp.Provider, skills.Skill, or agents.Agent and register it. Same pattern everywhere.

Three steps to consistent config

1

Define

Use the Go library to pick exactly what you need, or just use the built-in defaults.

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

Generate

One command creates config for all four agents. Target a specific agent with --agent.

$ yaah generate $ yaah generate --agent claude $ yaah generate --agent opencode $ yaah generate --agent codex $ yaah generate --agent copilot
3

Use

Each agent gets files in its native format. Start a coding session and everything works.

.claude/settings.json opencode.json .codex/config.toml .copilot/mcp-config.json

One codebase, four agents

Each agent gets config in its native format with per-agent adaptations.

Agent Settings MCP Hooks Skills Agents
Claude Code .claude/settings.json .mcp.json embedded in settings .claude/skills/ .claude/agents/
OpenCode opencode.json embedded ("mcp" key) .opencode/plugins/yaah.js .opencode/skills/ .opencode/agents/
Codex CLI .codex/config.toml embedded ([mcp_servers]) .codex/hooks.json .agents/skills/ not supported
Copilot CLI none .copilot/mcp-config.json .github/hooks/hooks.json .github/skills/ .github/agents/

Get up and running in seconds

Homebrew

macOS and Linux

brew install dirien/tap/yaah

Go Install

Requires Go 1.21+

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

Binary Releases

Signed with cosign, includes SBOMs

Commands

yaah generate Generate config for all agents with built-in defaults
yaah generate -a claude Generate for Claude Code only
yaah generate -a opencode Generate for OpenCode only
yaah generate -a codex Generate for Codex CLI only
yaah generate -a copilot Generate for GitHub Copilot CLI only
yaah generate -o ./out Output to a different directory
yaah hook <event> Runtime hook dispatcher (called by coding agents)
yaah serve Start the yaah MCP server over stdio
yaah info Show all registered components
yaah doctor Health check: validates binaries and config
yaah skills list List all available skills from the catalog
yaah skills search <query> Search skills by name, description, tags, or aliases
yaah skills info <name> Show detailed information about a skill
yaah skills bundles List all skill bundles with descriptions
yaah skills validate Validate that skill definitions can be fetched
yaah session list List recent Claude Code sessions
yaah session show <id> Show full details for a session
yaah session clean Remove sessions older than 7 days
yaah version Print version, commit, and build date