4.6 KiB
Cog Bootstrap — New Machine Setup
This document is intended to be read by a Claude Code instance to set up Cog on a new machine. If you are Claude: follow the steps below exactly, in order. If you are a human: hand this file to Claude with the instruction "read BOOTSTRAP.md and set up Cog on this machine".
What This Does
Sets up Cog — a persistent memory and skills system for Claude Code. After setup, Claude will have access to memory, domain routing, and skills in every session on this machine.
Prerequisites (verify before proceeding)
Run these checks first. Stop and tell the user if any fail:
# Git must be installed
git --version
# Claude Code must be installed and ~/.claude must exist
ls ~/.claude
# Must be on the artanis account (username check)
whoami
Expected: git version output, ~/.claude directory listing, username = artanis.
If the username is not artanis, stop and tell the user — the absolute paths in CLAUDE.md will need updating.
Step 1 — Clone the repo
Check if ~/.cog already exists:
ls ~/.cog 2>/dev/null && echo "EXISTS" || echo "NOT FOUND"
If NOT FOUND: clone it:
git clone https://gitea.bunny-wyvern.ts.net/artanis/Cog-Sync.git /home/artanis/.cog
If EXISTS: pull latest instead:
git -C /home/artanis/.cog pull --rebase --autostash
Step 2 — Symlink CLAUDE.md globally
Check if ~/.claude/CLAUDE.md already exists:
ls -la ~/.claude/CLAUDE.md 2>/dev/null && echo "EXISTS" || echo "NOT FOUND"
If NOT FOUND: create the symlink:
ln -s /home/artanis/.cog/CLAUDE.md ~/.claude/CLAUDE.md
If EXISTS and is already a symlink to the right place: skip.
If EXISTS and is a regular file: warn the user that an existing ~/.claude/CLAUDE.md is present. Ask if they want it replaced. If yes: rm ~/.claude/CLAUDE.md && ln -s /home/artanis/.cog/CLAUDE.md ~/.claude/CLAUDE.md.
Step 3 — Symlink settings.json globally
~/.claude/settings.json should be a symlink to the Cog settings so hooks and permissions apply in every session.
Check what's there:
ls -la ~/.claude/settings.json 2>/dev/null && echo "EXISTS" || echo "NOT FOUND"
If NOT FOUND: create the symlink:
ln -s /home/artanis/.cog/.claude/settings.json ~/.claude/settings.json
If EXISTS and is already a symlink to the right place: skip.
If EXISTS and is a regular file: replace it:
rm ~/.claude/settings.json && ln -s /home/artanis/.cog/.claude/settings.json ~/.claude/settings.json
Step 4 — Symlink skills globally
Create the commands directory and symlink all Cog skills into it:
mkdir -p ~/.claude/commands
For each .md file in /home/artanis/.cog/.claude/commands/, create a symlink in ~/.claude/commands/. If a file already exists at the target, skip it (don't overwrite — the user may have other skills there).
for f in /home/artanis/.cog/.claude/commands/*.md; do
target=~/.claude/commands/$(basename "$f")
if [ -e "$target" ]; then
echo "SKIP (exists): $(basename $f)"
else
ln -s "$f" "$target" && echo "linked: $(basename $f)"
fi
done
Step 5 — Verify
Run a quick sanity check:
# CLAUDE.md symlink resolves correctly
readlink ~/.claude/CLAUDE.md
# settings.json symlink resolves correctly
readlink ~/.claude/settings.json
# Skills are linked
ls ~/.claude/commands/ | grep -E "personal|freelance|reflect|evolve"
# Repo is on main and clean
git -C /home/artanis/.cog status
git -C /home/artanis/.cog remote -v
Expected:
- First
readlink→/home/artanis/.cog/CLAUDE.md - Second
readlink→/home/artanis/.cog/.claude/settings.json - Skills listed
- Repo clean,
originpoints tohttps://gitea.bunny-wyvern.ts.net/artanis/Cog-Sync.git
Step 6 — Done
Tell the user:
Cog is set up. CLAUDE.md and settings.json are active globally. Skills available:
/personal,/freelance,/reflect,/evolve,/history,/scenario,/housekeeping,/foresight,/explainer,/humanizer.Memory auto-syncs in every session: pulls from Gitea on session start, pushes on session end.
To add domains or reconfigure, open Claude Code in
~/.cogand run/setup.
Notes
- Don't edit files in
~/.cogmanually — let Claude do it through the skills - Git remote
upstreampoints to the original Cog template repo on GitHub — useful if you want to pull framework updates later memory/is gitignored? No — memory is the whole point of syncing. Everything commits.- Conflicts on observations files are handled by
merge=unionin.gitattributes— appends from different machines auto-merge