This guide covers installing claude-code-config when the path isn't a straight line — existing files, custom config, previous installs, or forks you want to keep in sync.
If you're starting fresh with no ~/.claude/ directory, you don't need this guide:
git clone https://github.com/aaronsb/claude-code-config ~/.claude
cd ~/.claude && make setupRestart Claude Code. Done.
Claude Code stores its configuration in ~/.claude/. This repo is ~/.claude/. That means installing it replaces the directory that Claude Code already uses — and you might have files there you care about.
The installer detects this and stops rather than silently clobbering your work. This guide helps you understand what you're dealing with and pick the right path forward.
Signs: ~/.claude/ exists with files like settings.json, CLAUDE.md, or projects/, but no .git/ directory.
This is common — Claude Code creates ~/.claude/ on first run with your settings.
What to save:
settings.json— your permissions and preferencesCLAUDE.md— your global instructions (if you wrote any)projects/— per-project memory and settingsmemory/— auto-memory files (if using memory)
Steps:
# 1. Back up what matters
mkdir -p ~/claude-config-backup
cp -a ~/.claude/settings.json ~/claude-config-backup/ 2>/dev/null
cp -a ~/.claude/settings.local.json ~/claude-config-backup/ 2>/dev/null
cp -a ~/.claude/CLAUDE.md ~/claude-config-backup/ 2>/dev/null
cp -a ~/.claude/projects ~/claude-config-backup/ 2>/dev/null
cp -a ~/.claude/memory ~/claude-config-backup/ 2>/dev/null
# 2. Move the old directory aside
mv ~/.claude ~/.claude-pre-install
# 3. Install
git clone https://github.com/aaronsb/claude-code-config ~/.claude
cd ~/.claude && make setup
# 4. Restore your files
cp ~/claude-config-backup/settings.json ~/.claude/ 2>/dev/null
cp ~/claude-config-backup/settings.local.json ~/.claude/ 2>/dev/null
cp ~/claude-config-backup/CLAUDE.md ~/.claude/ 2>/dev/null
cp -a ~/claude-config-backup/projects ~/.claude/ 2>/dev/null
cp -a ~/claude-config-backup/memory ~/.claude/ 2>/dev/nullYour settings are .gitignored in this repo, so they won't conflict with updates.
Signs: ~/.claude/.git/ exists, but it's your own repo — not a clone or fork of claude-code-config.
This means you're already version-controlling your Claude config. Good instinct. The question is whether you want to adopt this framework or keep your own.
Option A: Adopt this framework (replace your tracking)
# Back up everything
cp -a ~/.claude ~/.claude-my-version
# Remove your .git and install ours
rm -rf ~/.claude/.git
rm -rf ~/.claude # or mv to backup
git clone https://github.com/aaronsb/claude-code-config ~/.claude
cd ~/.claude && make setup
# Cherry-pick your customizations back in
# (compare ~/.claude-my-version/ with ~/.claude/ and copy what you want)Option B: Keep your tracking, adopt selectively
Read through this repo and copy the parts you want into your own config. The key pieces:
hooks/— the event-driven way systemhooks/ways/— the actual guidance contenttools/ways-cli/— unified CLI (matching, scanning, linting, governance)tools/way-embed/— embedding engine (separate binary, wraps llama.cpp)settings.json— hook registration (merge with yours)
This is more work but gives you full control.
Signs: ~/.claude/.git/ exists and origin points to aaronsb/claude-code-config or your fork of it.
You're already installed. Just update:
cd ~/.claude && git pull
make setupThe installer detects this automatically and runs the update path.
Recommended for anyone who plans to customize ways.
# 1. Fork on GitHub first (use the web UI)
# 2. Clone your fork
git clone https://github.com/YOUR-USERNAME/claude-code-config ~/.claude
# 3. Set up upstream tracking
cd ~/.claude
git remote add upstream https://github.com/aaronsb/claude-code-config
# 4. Set up semantic matching
make setupTo pull upstream improvements later:
cd ~/.claude
git fetch upstream
git merge upstream/main
# Resolve any conflicts in your custom ways
make setupThe built-in update checker (hooks/check-config-updates.sh) detects forks and nudges you when upstream has new commits.
If you just want it installed and don't care what's there:
scripts/install.sh --dangerously-clobberThis backs up ~/.claude/ to ~/.claude-backup-YYYYMMDD-HHMMSS/ and replaces it entirely. You'll be asked to type clobber to confirm (unless piped/non-interactive).
Your backup is a complete copy — you can always restore:
rm -rf ~/.claude
mv ~/.claude-backup-20260323-141500 ~/.claude- Restart Claude Code — ways activate on session start
- Check engine status —
ways statusshows binary, model, corpus, and project detection - Review ways.json —
~/.claude/ways.jsoncontrols which domains are active - Read the ways — browse
~/.claude/hooks/ways/to understand what guidance is loaded
make setup acquires binaries and the embedding model. Downloaded artifacts live in XDG-compliant locations, outside ~/.claude/:
| Artifact | Size | Location | Source | Verification |
|---|---|---|---|---|
ways binary |
~3.6MB | bin/ways |
GitHub Releases (or built from source) | SHA-256 checksum |
way-embed binary |
~3MB | ~/.cache/claude-ways/user/ |
GitHub Releases | SHA-256 checksum |
minilm-l6-v2.gguf model |
~21MB | ~/.cache/claude-ways/user/ |
GitHub Releases (or HuggingFace) | SHA-256 checksum |
The ways binary lands in bin/ (gitignored) and is symlinked into ~/.local/bin/ by make install. The repo itself stays clean and diffable.
If the download fails, BM25 fallback activates automatically (91% vs 98% accuracy — still very good).