I use Claude Code and Codex CLI as AI coding agents in my development workflow. Both are configured through my dotfiles repo, which syncs configuration across machines.
Both tools share a three-layer identity system:
| File | Purpose |
|---|---|
soul.md | Voice, character, and relationship — who the agent is |
principles.md | Decision-making heuristics — how to navigate ambiguity |
agents.md | Operating manual — autonomy levels, git conventions, safety |
These live in ~/.claude/ and ~/.codex/ respectively.
Custom skills are invoked with /skill-name in Claude Code:
| Skill | Description |
|---|---|
cargo-just | Smart Rust/just task runner |
code-review | Code review for quality, bugs, and style |
git-push-pr | Automated git workflow: stage, commit, push, create/update PR |
grill | Relentlessly interrogate an idea before proposing a plan |
interview | In-depth interviewing to create detailed specifications |
slidev | Create web-based developer presentations |
test-writer | Generate tests for existing code |
Codex uses tiered command approval rules:
ls, cat, rg, git status/diff/log, cargo check/clippy)git add/commit/push, cargo build/test, package installs)sudo, rm -rf /, cargo publish, shutdown)Both tools are configured with Playwright MCP for browser automation:
# .codex/config.toml
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
No manual install needed — npx auto-fetches on first use.
All configuration is managed through a sync utility that handles bidirectional synchronization between the repo and $HOME:
./sync-dotfiles.sh push # Install configs from repo to home
./sync-dotfiles.sh pull # Backup current configs to repo
./sync-dotfiles.sh status # Show differences
Skill directories with many files are dynamically discovered — adding files to those directories automatically updates the sync list.