feat: template-based dual-target generator for Claude + Codex

Replace generate-codex.sh with unified generate.sh that produces both
claude/ and codex/ output from template source files.

Agent bodies use ${PLANS_DIR}, ${WEB_SEARCH}, ${SEARCH_TOOLS} placeholders
expanded per-target via envsubst. Skills and rules made tool-agnostic
(no Claude tool names or .claude/ paths). Orchestrate skill stays
Claude-only.

install.sh now symlinks from claude/agents/ instead of agents/ directly.
flake.nix adds gettext (envsubst) to devShell.
This commit is contained in:
Bryan Ramos 2026-04-02 08:51:00 -04:00
parent 37ec0fd7ec
commit b9d8b03895
17 changed files with 687 additions and 211 deletions

View file

@ -7,10 +7,12 @@ A portable Claude Code agent team configuration. Clone it, run `install.sh`, and
```bash
git clone <repo-url> ~/agent-team
cd ~/agent-team
./install.sh
nix develop # enter devShell with yq + envsubst
./generate.sh # generate Claude + Codex config from templates
./install.sh # symlinks into ~/.claude/ and ~/.codex/ (if present)
```
The script symlinks `agents/`, `skills/`, `rules/`, `CLAUDE.md`, and `settings.json` into `~/.claude/`. Works on Linux, macOS, and Windows (Git Bash).
The scripts generate configuration for both Claude Code and Codex CLI (if `~/.codex/` exists), then symlink agents, skills, rules, CLAUDE.md, and settings.json into `~/.claude/`. Works on Linux, macOS, and Windows (Git Bash).
## Maintenance
@ -66,19 +68,20 @@ This project also generates configuration for [OpenAI Codex CLI](https://github.
### Setup
```bash
nix develop # enter devShell with yq
./generate-codex.sh # generate Codex config from Claude source files
nix develop # enter devShell with yq + envsubst
./generate.sh # generate Claude + Codex config from templates
./install.sh # installs both Claude and Codex (if ~/.codex exists)
```
### What gets generated
| Source | Generated | Codex location |
| Source | Generated | Location |
|---|---|---|
| `agents/*.md` | `codex/agents/*.toml` | `~/.codex/agents/` |
| `agents/*.md` (templates) | `claude/agents/*.md` | `~/.claude/agents/` |
| `agents/*.md` (templates) | `codex/agents/*.toml` | `~/.codex/agents/` |
| `CLAUDE.md` + `rules/*.md` | `codex/AGENTS.md` | `~/.codex/AGENTS.md` |
| `settings.json` | `codex/config.toml` | `~/.codex/config.toml` |
| `skills/` | (shared as-is) | `~/.agents/skills/` |
| `skills/` | (shared as-is) | `~/.claude/skills/` + `~/.agents/skills/` |
### Model mapping
@ -88,6 +91,18 @@ nix develop # enter devShell with yq
| `sonnet` | `o4-mini` |
| `haiku` | `o4-mini` |
### Template variables
Agent body text uses `${VAR}` placeholders that are expanded per-target by `generate.sh`:
| Variable | Claude | Codex |
|---|---|---|
| `${PLANS_DIR}` | `.claude/plans` | `plans` |
| `${WEB_SEARCH}` | `via WebFetch/WebSearch` | `via web search` |
| `${SEARCH_TOOLS}` | `Use Grep/Glob/Read` | `Search the codebase` |
Skills and rules are tool-agnostic and shared as-is — do not add tool-specific references to them.
## Project-specific config
Each project repo can extend the team with local config in `.claude/`: