Dotfiles β A Jumpstart for Claude Code + Codex + Antigravity¶
π Browsable docs: everything in this repo is also published as a searchable site at jckeen.github.io/dotfiles β rebuilt on every push to main.
A one-command setup that gets you from a blank machine to a coordinated Claude Code, Codex, and Gemini-powered Antigravity environment with sane defaults, safety hooks, multi-session tooling, and a 24-agent pack of code reviewers and subject-matter experts. Built for macOS and Windows (via WSL2 + Ubuntu), with Linux supported as a side effect.
This is opinionated β it's how I (and now hopefully you) switch between Claude Code, Codex, and Antigravity day-to-day. Clone it, run ./setup.sh, and skip months of trial-and-error.
Get started:
git clone https://github.com/jckeen/dotfiles.git && cd dotfiles && ./setup.sh
Best practices sourced from Boris Cherny (creator of Claude Code), the official Claude Code docs, and hard-won experience across thousands of agent sessions.
What you get (and why it matters)¶
After setup, you don't have to remember much. Open a terminal and:
cc/cx/agyβ the three launchers share project selection, fast-forward-only repo sync, and runtime health checks.ccsafely publishes approved Claude memory paths;cxreapplies portable Codex defaults and reconnects opted-in Remote Control;agylaunches the Gemini-powered Antigravity CLI. Ordinary checkouts fast-forward; linked worktrees are fetched, never pulled. Repository and Claude memory sync failures warn and continue with local state. Required runtime health checks still stop the launch on failure.- A live status line β model name, context-bar (green/yellow/red), git branch, lines added/removed, session cost in USD. You always know how warm your context is, what branch you're on, and what the session has cost β without asking.
- 18 slash commands that cover the whole loop β
/kickoff(new project),/review(quality + security),/simplify(de-engineer),/fix-issue(GitHub issue end-to-end),/handoff(clean session transition),/changelog,/log-error,/commit-push-pr,/claude-server,/decompose,/orchestrate(full-lifecycle max-effort mode),/autonomous-run(pick the loop primitive, stop condition and cap for unattended work),/branch-hygiene,/jj(jujutsu driver),/session-retro(improve your own skills),/drift-sweep(doc-contract bootstrap + drift audit),/antigravity-review(Gemini second-opinion review gate),/review-gates(which review lane a change needs, handoff payload, verdict persistence). Type the verb, get the workflow. - A 24-agent pack β reviewers (
qa-lead,security-reviewer,frontend-architect,backend-architect,ux-reviewer,growth-strategist,trust-safety,perf-accessibility, and more), utility agents, and sixsme-*subject-matter experts you delegate questions about Claude Code tooling newer than the model's training. Each runs in its own isolated context and reports back without polluting your main session. Three-phase orchestration (Product β Architecture β Launch) for serious reviews. - Safety hooks that can't be forgotten β auto-format on edit (prettier, black, rustfmt, gofmt), conventional-commit enforcement, push notifications when Claude is waiting on you, and a
StripProjectPermissionshook that prevents per-project permission creep from overriding your global allowlist. - Multi-session tooling β open 3, 5, or 8 Claude sessions across different projects in a single Windows Terminal window via
cc-pane/cc-tab/cc-multi(bash) orccgrid/cctab/ccpane(PowerShell). Each session gets the fullcctreatment β repo sync, tab colors, health check. - Agent-neutral helpers β
wsl6opens a 3Γ2 grid of plain WSL shells (no Claude/Codex coupling) for ad-hoc multi-shell work. - Auto-hygiene β a daily systemd timer cleans stale branches across every repo in
~/dev/, surfaces drift at every Claude/Codex session start, and bootstraps the canonical 8 GitHub auto-merge settings on every newly-created or cloned repo. - Public-safe Codex parity β portable workflows live once under
agents/skills/and are exposed to Codex, Claude where applicable, and Antigravity. Codex selects them with/skillsor$skill-name(for example$orchestrate); Claude keeps its/skill-namesyntax.agents/skill-coverage.tsvand CI require every workflow to be explicitly shared or runtime-specific, so a new Claude skill cannot silently disappear from the other-agent layer. Codex auth, sessions, sqlite state, and liveconfig.tomlstay local. - Cross-platform symlink hygiene β
setup.shis idempotent and runs the same on macOS and WSL. Edit~/.claude/agents/foo.mdand the change is in your repo automatically (it's a symlink).dotfiles-updatekeeps everything in sync with one command.
Why this exists: Claude Code and Codex are powerful but the defaults aren't tuned for serious daily work β context bloats, sessions vanish without handoffs, branches pile up, agent reviews are ad-hoc, and you re-discover the same gotchas every project. This repo encodes the "second-day knowledge" that makes the tools actually compound. If you're going to spend hundreds of hours in these CLIs, spend the first 10 minutes setting up properly.
Quick Start¶
Pick your platform. Each path leaves you with the same end state: the agent services you choose (Claude Code, Codex, and/or Antigravity β all three by default) installed, shared workflows wired, runtime-specific hooks and integrations checked, and multi-session helpers ready. See Choosing agent services.
πͺ Windows (WSL2 β recommended)
Claude Code runs *much* better in WSL2 than directly on Windows: native Linux filesystem (~10x faster I/O than `/mnt/c/`), full POSIX tooling, and our PowerShell helpers (`wsl6`, `ccgrid`, etc.) bridge nicely between Windows Terminal and WSL. **Prerequisites** β install these once, in PowerShell as Administrator (skip any you already have):
# 1. WSL2 + Ubuntu (reboot if it's a fresh WSL install)
wsl --install -d Ubuntu
# 2. PowerShell 7 (preferred β Windows ships with PS 5.1, but PS 7 is faster
# and is what you should be using day-to-day)
winget install --id Microsoft.PowerShell --source winget
# 3. Windows Terminal (preinstalled on Windows 11; install on 10)
winget install --id Microsoft.WindowsTerminal --source winget
# Clone this repo into the Linux filesystem (NOT /mnt/c/ β that's ~10x slower)
mkdir -p ~/dev && cd ~/dev
git clone https://github.com/jckeen/dotfiles.git
cd dotfiles
# Run setup β auto-detects WSL, installs everything, prompts where it matters
./setup.sh
# Authenticate (do these once)
gh auth login # GitHub CLI β choose HTTPS + browser
claude # Sign in to Claude (or 'claude auth login' if it doesn't prompt)
ccw # Optional: sign in a second (work) Claude account β see CLAUDE-GUIDE
codex login # Optional: sign in for Codex CLI
jules login # Optional: sign in for the Jules CLI (cloud routine lane)
π macOS
**Prerequisites** β install these once if you don't have them:
# 1. Xcode Command Line Tools (gives you git, clang, etc.)
xcode-select --install
# 2. Homebrew (everything else installs through this)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
mkdir -p ~/dev && cd ~/dev
git clone https://github.com/jckeen/dotfiles.git
cd dotfiles
# Run setup β auto-detects macOS, installs Node/bun/gh/jq via brew if missing
./setup.sh
# Authenticate
gh auth login
claude
codex login # Optional
jules login # Optional
π§ Linux (native, not WSL)
mkdir -p ~/dev && cd ~/dev
git clone https://github.com/jckeen/dotfiles.git
cd dotfiles
./setup.sh
gh auth login
claude
codex login # Optional
jules login # Optional
Setup-script flags (all platforms)¶
./setup.sh # default: install the selected services (asks on first run), prompting only where it matters
./setup.sh --check # read-only audit of all symlinks; exits non-zero if broken
./setup.sh --repair # audit + recreate any broken/missing symlinks
./setup.sh --dry-run # show what would change without writing anything
./setup.sh --services claude,codex # manage only these agent services (saved for reruns)
./setup.sh --select-services # re-ask which services to manage (e.g. to add one later)
./setup.sh --show-services # print the effective selection and where it came from
Choosing agent services¶
setup.sh manages up to three agent services: Claude Code (claude), Codex
(codex), and Antigravity (antigravity, alias agy). Each is an independent
choice.
- First interactive run: setup asks about each service (default yes), then asks you to confirm the selection.
- Noninteractive: pass
--services claude,codex(orall), or setDOTFILES_SERVICES=claude,codex. The flag wins when both are set.--yeswith neither keeps the saved selection, or all three when none is saved. - Where it is saved:
$XDG_CONFIG_HOME/dotfiles/services(default~/.config/dotfiles/services), a machine-local file outside the repo holding one line likeservices=claude,codex. A real run writes it;--dry-runonly says it would. - Reruns (including
dotfiles-update) reuse the saved selection without asking. To add a service later, rerun with--select-servicesor a longer--serviceslist. - Existing installs (migration): with no saved selection, setup manages all three services, which is what it did before selection existed. The first real run records that as the saved selection, so nothing changes unless you opt out.
A service you don't select is skipped everywhere setup acts: its installer,
sign-in prompt, links, hooks, integrations (for Codex, also the codex
Claude plugin), the post-setup audit and --check/--repair, and the
completion hints. Deselecting never deletes anything: existing config,
sessions, and credentials for that service stay where they are, and setup
just stops managing them. The ~/.claude/scripts tooling and ~/.claude/dev-dir
are shared by every launcher and review gate, so they are linked whichever
services you pick. The cc/cx/agy launchers are unchanged: running one
still checks and heals its own runtime's links.
setup.sh refuses to run from a linked git worktree (agents create these for
review branches): every managed link resolves against the checkout that runs
it, so links would dangle once the worktree is removed. Run it from the main
checkout, or set DOTFILES_ALLOW_LINKED_WORKTREE=1 to link a worktree on
purpose. --check stays read-only and works anywhere.
./setup.sh --help # usage and flag reference
The launchers run their health checker with --heal --strict. Healing creates
missing managed links and removes only exact obsolete fable-mode skill links
and the retired Claude FABLE.md link when their original source is gone.
It preserves custom files, unexpected
targets, restored bundles, and symlinked ancestors. Running a checker without
a repair flag is read-only.
Public repo safety: this dotfiles repo is public. Don't commit Codex/Claude auth tokens, generated sessions or memories, sqlite state, logs, caches, private memory, account IDs, private MCP endpoints, personal identity notes, or client/project details. Private state lives in
claude-memoryandcodex-memory(separate private repos β see below). CI runs secret and personal-data checks on every PR; the canonical required-check policy lives in docs/BRANCH_PROTECTION.md.Private memory (optional): if you keep a private
claude-memoryrepo under~/dev/,setup.shcalls itsbootstrap.shto symlink your Claude Codesettings.json(MCP servers, permissions, plugins) into~/.claude/. Claude Code only runs hooks and the status line thatsettings.jsonregisters, so without the reposetup.shcopiesclaude/settings.example.json(the hooks and the status line, nothing private) to~/.claude/settings.json. It never overwrites an existing file. Skills, agents, and the globalclaude/CLAUDE.mdare symlinked either way.WSL filesystem rule: Always clone repos under
~/dev(Linux filesystem), not/mnt/c/(Windows mount). File I/O on the native Linux filesystem is ~10x faster. The setup script auto-configures your shell tocd ~/devon startup.
Try it now¶
After setup, run these to see what you've got:
cc # pulls all your repos, then launches Claude
cx # pulls repos, reconnects enabled Remote Control, launches Codex
agy # pulls repos, checks Antigravity config, launches Gemini/Antigravity
dotfiles-update # pull latest dotfiles + re-run setup (idempotent β safe anytime)
projects # list everything under ~/dev/
sessions # show active Claude sessions and their cwds
Once inside Claude:
- Type /review to run a code quality check on your last few commits
- Type /simplify after writing code to remove unnecessary complexity
- Ask "Run the qa-lead agent on this project" to spawn an isolated review
- Watch the status line β it shows context %, git branch, cost, and lines changed
Windows (PowerShell 7) users β open a fresh PowerShell 7 window and try:
| Command | What it does |
|---|---|
wsl6 |
Opens a Windows Terminal tab with a 3Γ2 grid of plain WSL shells (agent-neutral) |
ccprojects |
Lists projects available under your WSL ~/dev/ |
ccgrid dotfiles atlas stringer |
One new tab, three split panes, each running cc <project> inside WSL |
cctab dotfiles atlas |
One tab per project, each running cc <project> inside WSL |
ccpane dotfiles |
Splits the current Windows Terminal window with cc dotfiles |
These are auto-installed by setup.sh on WSL (it asks "Install into your PowerShell profile(s)? [Y/n]" β answer Y). The installer wires both PS 5.1 and PS 7 profiles, so the helpers work in whichever you prefer. If you missed the prompt or installed before this fix, just run dotfiles-update from WSL. Manual install, distro/dev-dir overrides, and more: docs/WINDOWS.md.
What this installs and configures¶
setup.sh installs CLI tools, wires the public and private layers for each selected runtime (all three unless you choose fewer), and configures platform-specific bits (audio on WSL, credential helpers per OS, etc.). Expand below for the full inventory.
π¦ Tools installed (gh, git, node, jq, tmux, claude, codex, agy, jules, bun)
| Tool | Purpose | Install method | |------|---------|---------------| | `gh` | GitHub CLI | Homebrew (macOS) / apt (Linux) | | `git` | Version control | Homebrew / apt | | `node` | Node.js LTS | Homebrew / NodeSource | | `jq` | JSON processing (used by hooks) | Homebrew / apt | | `tmux` | Detachable sessions for the opt-in `cct` launcher | Homebrew / apt | | `claude` | Claude Code CLI | SHA-256-pinned official native installer | | `codex` | OpenAI Codex CLI | npm | | `jules` | Google Jules CLI β the cloud routine lane (ADR-0009, paused 2026-10-19); `jules login` for interactive use, an API key file for the daily dispatcher | npm | | `agy` | Google Antigravity CLI (Gemini agent runtime) | SHA-256-pinned official installer; release payload checksum-verified by the vendor installer | | `bun` | Runtime for `*.hook.ts` hooks | Pinned GitHub release (`BUN_VERSION` in `setup.sh`), SHA-256-verified against the release's `SHASUMS256.txt` | WSL also gets: `pulseaudio-utils`, `libasound2-plugins`, `alsa-utils` (for audio routing).
βοΈ Files & symlinks configured (CLAUDE.md, hooks, skills, agents, aliasesβ¦)
Public Claude config pieces are **symlinked** from this repo to `~/.claude/`, so edits in either location stay in sync. The global instructions live in this repo and are symlinked into `~/.claude/`; private settings (MCP servers, permissions, plugins) come from `claude-memory`. Codex is stricter: only public-safe guidance and skills are symlinked into `~/.codex/`; live `~/.codex/config.toml` stays local because Codex stores machine-specific project trust there. An optional private `codex-memory` bootstrap can merge explicitly portable defaults without replacing that local state. | What | Files | Purpose | |------|-------|----------| | **Claude instructions** | `claude/CLAUDE.md` | Global rules Claude follows in every session (symlinked into `~/.claude/CLAUDE.md`; generated from `agents/canon/` per ADR-0007 β edit the sources, not the file) | | **Settings** | `~/dev/claude-memory/settings.json` | Private permissions, MCP servers, plugins (symlinked into `~/.claude/` by claude-memory's `bootstrap.sh`) | | **Settings template** | `claude/settings.example.json` | Public `hooks` + `statusLine` registrations; `setup.sh` copies it to `~/.claude/settings.json` when neither that file nor `claude-memory` exists (never symlinked, never overwrites). The hooks it omits are listed in `claude/settings-optout.txt`; a full private setup adds `"CHECK_HOOKS_REQUIRE_ALL": "1"` to its settings `env` to require every hook | | **Agent Pack** | `claude/AgentPack.md` | 24-agent pack: review orchestra plus subject-matter experts (loaded on-demand, not symlinked) | | **Status line** | `claude/statusline.sh` | Shows model, context %, git branch, lines changed, session cost | | **Commit hook** | `claude/hooks/conventional-commit.sh` | Enforces `type: description` commit message format | | **Format hook** | `claude/hooks/format-on-edit.sh` | Auto-formats files after edits (prettier, black, rustfmt, gofmt) | | **Notification hook** | `claude/hooks/ntfy-awaiting-input.sh` | Sends push notification when Claude needs input | | **Permission guard** | `claude/hooks/StripProjectPermissions.hook.ts` | Strips project-level permission overrides on SessionStart | | **Other hooks** | `claude/hooks/*` | Worktree guard, symlink repair, plugin/hygiene drift, stale-SHA warning, handoff reminder, pre-merge Codex harvest β full wired-state table in [CLAUDE-GUIDE β Hooks](guide.md#hooks) | | **Plugin manifest** | `claude/plugins.txt` | Read by `setup.sh` (Β§3b) and `sync-plugins.sh` to auto-install plugins (`plugin@marketplace`, one per line) at **user scope**; a `--scope project` or `--scope local` install belongs to that checkout and never satisfies a manifest entry; deliberately not symlinked (listed in `claude/nolink.txt`) | | **Skills** | `claude/skills/*/` | Claude slash commands (see below); each skill directory is one symlink at `~/.claude/skills/
π₯οΈ Platform-specific behavior (what differs across macOS / WSL / Linux)
| Feature | macOS | WSL | Linux | |---------|-------|-----|-------| | Package manager | Homebrew | apt | apt | | Shell config | `.zshrc` | `.bashrc` | `.bashrc` | | Credential helper | osxkeychain | Git Credential Manager (Windows) | git-credential-store | | Audio | Built-in | ALSA β PulseAudio | N/A | | Git safe.directory | Not needed | Auto-configured for `/mnt/c/` | Not needed |
Daily use¶
The day-to-day reference is CLAUDE-GUIDE.md β the cheat sheet for slash commands, hooks (with their wired-state), keyboard shortcuts, shell commands, worktree/multi-session helpers, autonomous scripts, stop-hook templates, and the golden rules. What follows is the short version.
The commands you'll actually type¶
| Command | What it does |
|---|---|
cc [project] |
Sync repos + memory, health check, heal plugin drift, launch Claude |
cx [project] |
Same ergonomics for Codex; reuses a listening shared server when Remote Control is enabled and otherwise launches locally; optional user service handles automatic startup |
cc-multi <p1> <p2> β¦ |
Multiple projects, one Windows Terminal tab each, fully synced |
cct [project] |
cc inside a named tmux session, so the process and its Remote Control link survive a closed terminal |
rc-start [--hold] |
Starts claude remote-control in a detached tmux session rc (with bun on its PATH), from ~/dev (RC_START_DIR overrides). The session ends when Remote Control exits (logged to ~/.local/state/rc-start.log), so running it again restarts it. --hold blocks, so the wsl.exe of a Windows boot task keeps WSL running |
dotfiles-update |
Pull latest dotfiles + re-run setup (idempotent β safe anytime) |
/handoff |
Capture session state before /clear or stopping |
/orchestrate |
Full-lifecycle max-effort mode β worktrees, parallel agents |
/autonomous-run |
Unattended or looping work β picks /loop, /goal, a workflow or /schedule, sets the stop condition and cap |
/fix-issue N |
GitHub issue end-to-end: investigate β test β fix β PR |
Most other slash commands auto-invoke when their triggers match β you rarely type them. Full table: CLAUDE-GUIDE.
The loop¶
Plan β Build β Verify β Simplify β Review β Log β Handoff
Each step is a mode or slash command β see CLAUDE-GUIDE β The Workflow, including the push-time Codex review gate that blocks on critical findings.
Going wider¶
- Worktrees & multi-session β
zaβze/z0jump between worktrees,wt-claude <name>spawns Claude in a fresh one,cc-pane/cc-tab/cc-multifan out across Windows Terminal (from inside Claude:! cc-pane <project>). Tables in CLAUDE-GUIDE; the PowerShell side (wsl6,ccgrid,cctab,ccpane, manual install, distro overrides) lives in docs/WINDOWS.md. - The 24-agent pack β spawn by name ("Use the qa-lead agent on
this feature"), in groups, or as a three-phase full review (Product β
Architecture β Launch).
/reviewand/simplifyuse them automatically. Roster and orchestration:claude/AgentPack.md. - Safety hooks β run automatically, can't be forgotten like CLAUDE.md
rules: conventional-commit enforcement, project-gated format-on-edit,
session-start symlink repair, permission-creep stripping, plugin drift
detection. The canonical wired-state table is in
CLAUDE-GUIDE β Hooks; files in
claude/hooks/. - Status line β model, context bar (green/yellow/red), branch, lines
changed, session cost. If the bar runs red:
/handoff, then/clear.
The private memory repos¶
This public dotfiles repo pairs with up to three separate private repos β claude-memory, plus optional codex-memory and agy-memory β that hold things that don't belong in public: Claude Code settings, auto-memory, archived personal context, and Codex/Antigravity preferences. All are optional; without them you still get skills, agents, git config, and cc/cx scaffolding. The hooks and status line come with a settings.json that registers them: without claude-memory, setup.sh copies the public claude/settings.example.json into ~/.claude/settings.json when no file is there yet.
π The claude-memory private repo β structure, contract, how to create your own
`claude-memory` holds: 1. Your **Claude Code settings** (`settings.json`) β private permissions, MCP servers, and enabled plugins. 2. Your **persistent Claude memory** (`dev/memory/`) β auto-memory files (`MEMORY.md` + `feedback_*.md`) Claude Code writes to `~/.claude/projects/`. Without this repo they only exist locally and vanish on machine rebuild. `sync-memory` publishes only `*/memory/**` paths and refuses any file whose *name* looks credential-like (`auth`, `oauth`, `session`, `cache`, `log`, `credential`, `token`, `secret`, `.env`, `.key`, `.pem`); name memory files after the topic, not the mechanism, or the sync aborts and names the file. 3. **Archived personal context** (`identity/`) β identity and steering notes kept for reference. These are no longer live-linked into Claude; they're retained as an archive. 4. **Project notes** (`stringer/`, `trnn/`) β durable per-project context. 5. Your **personal identity & preferences** (`CLAUDE.md`) β imported by the public `claude/CLAUDE.md` via `@~/dev/claude-memory/CLAUDE.md`, so identity loads globally while staying out of the public repo. 6. The `bootstrap.sh` script that symlinks `settings.json` into `~/.claude/`. **Minimum structure:**
~/dev/claude-memory/
βββ bootstrap.sh # idempotent; runs at end of setup.sh β links settings.json
βββ settings.json # symlinked into ~/.claude/settings.json
βββ CLAUDE.md # personal identity, imported by public claude/CLAUDE.md
βββ dev/
β βββ memory/ # Claude auto-memory (MEMORY.md + feedback_*.md)
βββ identity/ # ARCHIVED personal identity/steering notes (not live-linked)
βββ stringer/ # project notes
βββ trnn/ # project notes
# Create the skeleton
mkdir -p ~/dev/claude-memory/dev/memory
cd ~/dev/claude-memory
# Your Claude Code settings: start from the public template, which
# registers the hooks and the status line, then add your own
# permissions, MCP servers and plugins.
cp ~/dev/dotfiles/claude/settings.example.json settings.json
# A minimal bootstrap.sh that symlinks settings.json into ~/.claude/
# (idempotent; re-run safe). It backs up a real file that is already there,
# such as the copy setup.sh made before this repo existed. setup.sh's health
# audit calls it with --check (even under --dry-run), so that mode only
# reports: exit 0 when the link is in place, 1 otherwise, writing nothing.
cat > bootstrap.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
src="$(cd "$(dirname "$0")" && pwd)/settings.json"
dst="$HOME/.claude/settings.json"
if [ "${1:-}" = "--check" ]; then
[ -L "$dst" ] && [ "$(readlink "$dst")" = "$src" ] && exit 0
echo "settings.json is not linked to $src" >&2
exit 1
fi
mkdir -p "$HOME/.claude"
if [ -e "$dst" ] && [ ! -L "$dst" ]; then
mv "$dst" "$dst.backup.$(date +%s)"
fi
ln -sfn "$src" "$dst"
echo "linked $dst -> $src"
EOF
chmod +x bootstrap.sh
# Publish it private
git init && git add -A && git commit -m "init: claude memory"
gh repo create claude-memory --private --source=. --push
π The codex-memory private repo β structure, what never to commit
This public dotfiles repo only tracks reusable Codex guidance, skills, and examples. Anything personal or generated belongs in an optional private repo at `~/dev/codex-memory` for portable Codex memory and private instructions. Keep this separate from `claude-memory`; the tools have different runtime state and different config formats. **Minimum structure:**
~/dev/codex-memory/
βββ AGENTS.local.md # private Codex preferences
βββ MEMORY.md # durable private notes
βββ config.defaults.toml # portable top-level config choices
βββ bootstrap.sh # safe merge into the local live config
βββ merge_config.py # validated atomic TOML merger
βββ README.md
βββ .gitignore
π The agy-memory private repo β structure, what never to commit
Same pattern for Antigravity (`agy`): the public repo tracks only `antigravity/GEMINI.md` (global rules); anything personal belongs in an optional private repo at `~/dev/agy-memory`. **Minimum structure:**
~/dev/agy-memory/
βββ GEMINI.local.md # private Antigravity preferences
βββ MEMORY.md # durable private notes
βββ README.md
βββ .gitignore
Customizing (forking this repo)¶
What to edit, keep private, and leave alone
This repo is designed to be forked and adapted. Here's what to edit vs. leave alone: **Edit these only with public-safe content:** - `claude/AgentPack.md` β add, remove, or modify review agents - `agents/canon/` β the instruction sources (ADR-0007): shared cross-agent rules in `CANON.md`, per-tool voice in `fragments/`. Every instruction file named in that script's target map β including the root `AGENTS.md` β is generated from here by `claude/scripts/gen-instruction-files.sh`; never edit them directly - `agents/routines/*.md` β the cloud routine lane's standing prompts (ADR-0009); `claude/scripts/jules-dispatch.sh --dry-run` shows what a day would dispatch - `agents/skills/*/SKILL.md` β reusable agent-neutral workflows (Codex + Antigravity) - `codex/config.toml.example` β example Codex config only - `.bash_aliases` β your shell shortcuts **Keep private:** - `~/dev/claude-memory` β personal Claude memory, settings, and archived context - `~/dev/claude-memory/settings.json` β private Claude permissions, MCP servers, and plugins - `~/dev/codex-memory` β personal Codex memory and private instructions - live `~/.codex/config.toml` β machine-specific project trust and local settings **Leave these (the framework):** - `claude/hooks/*.sh` and `*.ts` β hooks (add new ones, but keep the defaults) - `claude/skills/*/SKILL.md` β slash commands (add new ones as needed) - `claude/agents/*.md` β subagent definitions - `setup.sh` β cross-platform installer - `claude/statusline.sh` β status line display
Architecture decisions¶
The why behind structural changes lives in docs/adr/ as
Architecture Decision Records, and the current backlog lives in
ROADMAP.md + GitHub Issues. This repo uses a four-layer record
model β Issues track what's next, CI-gated PRs are the unit of change, ADRs
capture the reasoning, and the CHANGELOG records what shipped.
ADRs are numbered NNNN-kebab-title.md and append-only: a decision that no
longer holds is superseded by a new record rather than edited away. Start with
ADR-0001, or copy
0000-template.md to write a new one.
Repo Structure¶
Deliberately coarse β visible top-level entries only, with one-line purposes,
so a rename inside a directory can't silently rot this diagram. Hidden root
files are omitted as policy, not oversight: .github/ holds the CI gates,
.doc-contract declares the doc tiers (ADR 0005), and the rest are shell,
git, and audio config wired by setup.sh. Run ls -A (or browse the
docs site) for the real inventory.
dotfiles/
βββ setup.sh # Cross-platform bootstrap β installs tools, wires every symlink
βββ check-claude.sh # Health checks (also check-codex.sh, check-antigravity.sh)
βββ git-hygiene.sh # Repo/branch hygiene (also gh-bootstrap.sh, hygiene-status.sh, lib-symlinks.sh)
βββ rc-start # Remote Control in a detached tmux session (linked into ~/.local/bin)
βββ README.md # This file (also CLAUDE-GUIDE.md, CHANGELOG.md, ROADMAP.md, LICENSE)
βββ mkdocs.yml # Docs-site config for the published Pages site
βββ docs/ # ADRs, Windows deep-dive, branch-protection notes
βββ claude/ # Claude Code layer β CLAUDE.md, hooks, skills, agents, scripts, statusline
βββ codex/ # Public-safe Codex layer β AGENTS.md, config example, Codex-only skills
βββ antigravity/ # Public-safe Antigravity (agy) layer β GEMINI.md, hooks, agy-only skills
βββ agents/ # Agent-neutral shared skills + the cloud routine catalog
βββ windows/ # PowerShell helpers β wsl6, ccgrid/cctab/ccpane
Sources¶
- How Boris Uses Claude Code β Tips from the creator
- Official Best Practices β Anthropic's documentation
- Claude Code Hooks Guide β Hook documentation
- Trail of Bits Config β Security-focused config reference
- Autonomy Kit by Joe Amditis (MIT) β the quality-bar / coach-pass / effort-matched-review discipline distilled into our review + orchestrate skills
Want to understand the reasoning behind these choices? Read the CHANGELOG.