Personal dotfiles and safe agent setup.
Security boundary: this repo may contain personal workflow preferences, but it must not contain credentials, work/customer data, or company-specific agent config. Put secrets and private overlays in ignored local files or their owning private repos.
From a checked-out repo:
./install.shOn a fresh Apple Silicon Mac:
xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
git clone <dotfiles-repo-url> ~/dotfiles
cd ~/dotfiles
brew bundle --file Brewfile
./install.sh --status
./install.sh --dry-run
./install.shThen install the agent npm tools from a Node 24+ shell:
npm install -g \
@mariozechner/pi-coding-agent \
@mariozechner/pi-ai \
@openai/codex \
@google/gemini-cli \
@anthropic-ai/claude-code \
mcp-remote@0.1.38 \
@tobilu/qmd \
eas-cli \
@playwright/cliPrivate auth/session state still needs to be restored manually from 1Password or provider login flows.
If you are using Claude, Codex, or pi on a clean machine, tell the agent:
Read AGENTS.md and install this dotfiles repo end-to-end. Run status first, install safe missing prerequisites, run the dry run, then run the installer and verify the agent surfaces.
The agent-facing procedure lives in AGENTS.md. The installer is idempotent and prints what it detects before mutating anything. It refuses to overwrite regular files, refuses to repoint existing AI config symlinks unless --force-links is passed, leaves existing non-matching git checkouts untouched, and relies on component installers that are safe to rerun. Preview first with:
./install.sh --dry-run
./install.sh --statusDefault install does this:
- Stows base dotfiles with GNU Stow:
config/git/zsh/
- Links safe AI config from
ai/:- pi settings, MCP config, and keybindings
- generic Claude instructions and concierge agent
- generic Codex config
- generic Memento config template
- Clones public/open-source setup repos when missing.
- Installs Memento Vault.
- Registers the Memento pi package with only the generic skills enabled if
piexists. - Installs personal pi extensions if
piexists. - Installs Beislið workflow skills.
- Installs pinned
mcp-remotewhennpmexists. - Installs pinned Worktrunk CLI when
cargoexists.
Skip parts with:
./install.sh --no-stow
./install.sh --no-ai
./install.sh --no-memento
./install.sh --no-pi-extensions
./install.sh --no-beislid
./install.sh --no-clone
./install.sh --no-mcp-remote
./install.sh --no-worktrunk
./install.sh --force-linksThe installer clones the known public/open-source setup repos below when missing. If a path already exists, it is reused only when its origin matches the expected public URL. Non-git directories or different repos are left untouched. It does not clone private repos or restore private overlays.
| Component | Default path | Public clone URL | Purpose |
|---|---|---|---|
| Memento Vault | ~/Projects/memento-vault |
https://github.com/sandsower/memento-vault.git |
durable memory, MCP server, Claude hooks, pi extension |
| pi extensions | ~/Personal/pi-extensions |
https://github.com/sandsower/pi-extensions.git |
usage tracker, safety gate, task state, MCP bridge, subagent runner |
| Beislið | ~/Personal/beislid/main |
https://github.com/sandsower/beislid.git |
workflow skills and optional show-me pi tools; bare repo lives at ~/Personal/beislid.git |
Override paths when your machine layout differs:
MEMENTO_REPO=~/src/memento-vault \
PI_EXTENSIONS_REPO=~/src/pi-extensions \
BEISLID_REPO=~/src/beislid/main \
./install.shOverride clone URLs if a repo moves:
MEMENTO_REPO_URL=https://github.com/sandsower/memento-vault.git \
PI_EXTENSIONS_REPO_URL=https://github.com/sandsower/pi-extensions.git \
BEISLID_REPO_URL=https://github.com/sandsower/beislid.git \
./install.shDo not commit these here:
- API keys, tokens, auth JSON, SSH keys, cookies, or MCP bearer config
- work-specific agent config, reviewer lists, ticket config, or project rules
- command aliases that expose private infrastructure
- session histories, logs, caches, generated state, or local Claude/Codex settings
Use local-only files instead, for example:
~/.private_commands.shfor shell secrets/private aliases~/.gitconfig.localfor machine/user-specific Git identity~/.claude/*for private project agents and ticket workflow config~/.config/memento-vault/memento.ymlfor private Memento project rules after bootstrap
The tracked git/.gitconfig includes ~/.gitconfig.local; create that file locally with your user identity.
A clean agent session should be able to complete setup by following AGENTS.md. The top-level installer is intended to be the central setup piece on a new machine, not just a dotfile stow helper.
Agent flow:
- read the docs and installer
- run
./install.sh --status - install safe missing prerequisites with approval
- locate or clone optional component repos
- run
./install.sh --dry-run - run
./install.sh - verify pi/Claude/Codex surfaces
- report missing private overlays without creating or committing them
Use the manual sections below when doing the same work yourself.
If the checkout exists, ./install.sh runs:
env MEMENTO_VAULT_PATH="$HOME/Personal/memento" ~/Projects/memento-vault/install.sh --experimental --mcp
# then normalizes ~/.pi/agent/settings.json to load only Memento's generic pi skillsManual status checks after install:
~/.claude/hooks/memento-status.sh 2>/dev/null || true
pi --versionInside pi, run:
/memento-status
/memento-queue
If the checkout exists, ./install.sh runs:
pi install ~/Personal/pi-extensionsExpected pi tools after restart include usage reporting, safety gate, task state, MCP bridge, and subagent runner. Inside pi, check:
/usage
/safety
/tasks
/mcp
/subagents
If the checkout exists, ./install.sh runs:
~/Personal/beislid/main/install.sh --with-security-hooks --with-pi-show-meThat installs portable workflow skills into supported agent skill directories and optional pi show-me tools.
If cargo exists, ./install.sh installs the pinned Worktrunk CLI:
cargo install worktrunk --version 0.46.1config/.config/worktrunk/config.toml is intentionally minimal and global-safe. It does not auto-symlink .env*, agent config, workflow state, local E2E folders, or node_modules into new worktrees.
Those conveniences should be recreated only as trusted per-repo setup or a private local overlay. They are useful for local dev, but not safe as global defaults because they can spread credentials, local agent permissions, or mutable package state into unrelated worktrees.
If you recreate them, keep them opt-in and defensive:
- never commit secret values
- refuse to overwrite regular files
- only replace an existing path when it is already the expected symlink
- avoid sharing
node_modulesunless you explicitly accept cross-worktree dependency state - document which repo/worktree layout the hook assumes
ai/pi/mcp.json launches Linear MCP through /usr/bin/env mcp-remote, so mcp-remote must be on PATH. Install it outside this repo, pinned through your package manager or global npm tooling:
npm install -g mcp-remote@0.1.38OAuth/auth caches are runtime state and must stay outside this repo.
Run these scans before committing dotfiles changes:
rg -n -i "api[_-]?key|token|secret|password|bearer|authorization" .
rg -n -i "<known-private-company-terms>|<known-private-project-paths>|<known-private-key-names>" .
git status --shortReplace the placeholders with private terms from your local context before publishing or committing. The scans can match documentation. Investigate every hit and make sure it is not a value or private work context.
install.shis the supported installer.install_arc.shis an old Arch package helper.install_osx.shis disabled until its remote installers are pinned.config/.config/eww/install.shis disabled until its source/toolchain are pinned.