ai-agent-config

CASOON Open Source

One config tree for Claude Code and Codex.

ai-agent-config keeps global instructions, subagents and skills in a single neutral folder and symlinks them into ~/.claude and ~/.codex under the names each tool expects. Edit a file once and it is live for every tool.

git clone https://github.com/casoon/ai-agent-config.git && ai-agent-config/install/link-all.sh
./install/link-claude.sh
./install/link-codex.sh
./install/link-mistral.sh
MITpublic snapshotbash + python3macOS tested
./install/link-all.sh
  linked ~/.claude/CLAUDE.md -> ~/ai-agent-config/GLOBAL.md
  linked ~/.claude/agents -> ~/ai-agent-config/agents
  linked ~/.claude/skills -> ~/ai-agent-config/skills
Claude config linked from ~/ai-agent-config
  seeded codex-config.toml from codex-config.example.toml
  linked ~/.codex/AGENTS.md -> ~/ai-agent-config/GLOBAL.md
  linked ~/.codex/config.toml -> ~/ai-agent-config/codex-config.toml
  linked ~/.codex/agents -> ~/ai-agent-config/codex-agents
  linked ~/.codex/skills -> ~/ai-agent-config/skills
Codex config linked from ~/ai-agent-config
skip: ~/.vibe/config.toml not found — Vibe CLI not installed or not yet configured.
All configs linked.
skills, each a folder with a SKILL.md
82
subagents, written once in Markdown
5
tools wired up: Claude Code, Codex, Mistral Vibe
3
copy steps: every target is a symlink
0

What it does

  1. One source, several tools

    GLOBAL.md becomes ~/.claude/CLAUDE.md and ~/.codex/AGENTS.md; skills/ is linked into both. Nothing is duplicated, so the tools cannot drift apart.

  2. Agents rendered for Codex

    Subagents live as Markdown with YAML frontmatter in agents/. scripts/render-codex-agents.py writes the TOML that Codex reads, and the pre-commit hook runs it on every commit.

  3. Nothing gets lost

    A target that exists and is not a symlink is moved to <path>.bak before the link is created. Existing symlinks are replaced.

  4. Machine state stays local

    The live Codex config is git-ignored and seeded from codex-config.example.toml on first install. Secrets are scanned with nosecrets before each commit.

Generated from agents/

All examples →
name = "reviewer"
description = "Reviews a diff or proposed change for correctness, regression risk, maintainability, and architectural fit. Returns findings grouped by severity. Does not implement."

prompt = """
You are a review agent. You read code and report — you do not change it.

## When to invoke

- After an implementer has produced a diff and before it is merged or shipped.
- When the user wants a second opinion on a change they've already written.
- When a change touches security-sensitive, concurrency-sensitive, or data-migration code.

Do **not** invoke for: trivial fixes (typos, formatting), or as a gate on every change — reserve for non-trivial diffs.

## Expected input

- The diff (or the files that changed) and the intent behind the change.
- Context about the surrounding code if the reviewer would otherwise have to guess.

## Required output format

```
## Summary
<one sentence — does the change do what it claims, and is it safe to ship>

## Critical
- <bug, regression, or safety issue that must be fixed before merge>

## Warning
- <real problem, but not a blocker — e.g. missing test, edge case, maintainability>

## Suggestion
- <nice-to-have, style, or optional improvement>

## Not reviewed
- <area you skipped and why — unclear scope, missing context, out of expertise>
```

Omit any severity section that has no findings — don't pad with filler.

## Rules

- Be specific: cite `file:line` for every finding.
- Explain **why** something is wrong, not just **what** is wrong. A reviewer who says "this is bad" without a reason is useless.
- Distinguish between "this is a bug" (Critical), "this will cause friction later" (Warning), and "I would do it differently" (Suggestion). Do not inflate severity.
- Check: correctness, regression risk, error handling at real boundaries (not invented ones), test coverage, architectural consistency, a11y for UI, and obvious security footguns.
- If the change looks correct, say so plainly. A clean review is a valid outcome.
"""

codex-agents/reviewer.toml as committed: the pre-commit hook renders it from agents/reviewer.md. The showcase pairs every subagent with its generated file.

codex-agents/reviewer.toml

Quickstart

Clone, link, and optionally enable the hook. The full walkthrough lives in the documentation.

  1. Clone the repository to a permanent location; the symlinks point into it.
  2. Run ./install/link-all.sh, or one of the per-tool scripts.
  3. Enable the pre-commit hook if you edit agents, so codex-agents/ stays in sync.
Install
git clone https://github.com/casoon/ai-agent-config.git ~/ai-agent-config
cd ~/ai-agent-config
./install/link-all.sh
Hook
git config core.hooksPath .githooks