The first configuration framework designed for AI-assisted development.
This repository includes native Claude Code integration for portable sessions across machines.
If you use Claude Code across multiple machines, you've experienced the pain:
- Sessions reference paths like
/Users/john/projects/myappon Mac - Continue on Linux and paths don't match
- Conversation context breaks, productivity tanks
This repo solves it.
The bootstrap creates a symlink:
/workspace → ~/workspace
All Claude sessions use /workspace/project instead of platform-specific paths. Start on Mac, continue on Linux—same paths, same conversation.
How it works:
# ~/.zshrc loads this automatically
export WORKSPACE="${WORKSPACE:-$HOME/workspace}"
# Bootstrap creates the symlink
sudo ln -sf "$HOME/workspace" /workspaceWork in ~/workspace/project? Claude automatically resolves to /workspace/project.
# In zsh/zsh.d/00-init.zsh
cd() {
builtin cd "$@"
# Auto-redirect ~/workspace paths to /workspace for Claude compatibility
if [[ "$PWD" == "$HOME/workspace"* ]]; then
builtin cd "/workspace${PWD#$HOME/workspace}"
fi
}Claude Code sessions can accidentally cause merge conflicts. This repo includes defensive hooks:
Automatically runs when Claude Code starts a session:
- Fetches latest from remote
- Reports ahead/behind status
- Warns if branch has diverged
- Suggests resolution steps
# Runs automatically on session start
claude/hooks/git-sync-check.shBlocks dangerous git commands before Claude executes them:
| Command | Action | Reason |
|---|---|---|
git push --force / -f |
BLOCKED | Can overwrite remote history |
git reset --hard |
BLOCKED | Discards uncommitted changes |
git clean -f |
BLOCKED | Removes untracked files permanently |
git checkout --force |
BLOCKED | Can discard local changes |
git rebase -i |
BLOCKED | Not supported in non-interactive env |
git branch -D |
WARNING | Force deletes unmerged branches |
git commit --amend |
WARNING | Check authorship first |
The hooks are configured in claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "claude/hooks/block-dangerous-git.sh" }]
}
],
"SessionStart": [
{
"hooks": [{ "type": "command", "command": "claude/hooks/git-sync-check.sh" }]
}
]
}
}Every Claude Code session has access to CLAUDE.md which contains:
- Project structure and key files
- Coding standards
- Git safety rules
- Documentation requirements
- Review checklist
This ensures consistent AI assistance across sessions.
The claude/commands/ directory can contain custom slash commands for Claude Code.
Claude Code integration is automatic when you run the bootstrap:
curl -fsSL https://raw.githubusercontent.com/blackwell-systems/blackdot/main/install.sh | bashTo skip the /workspace symlink (not recommended for Claude users):
SKIP_WORKSPACE_SYMLINK=1 ./bootstrap-mac.shWorks with Claude via any provider:
- Anthropic Max (direct)
- AWS Bedrock
- Google Cloud Vertex AI
- Any Claude API endpoint
The /workspace symlink works regardless of how you access Claude.
| Feature | This Repo | chezmoi | yadm | dotbot |
|---|---|---|---|---|
| Portable Claude sessions | Yes | No | No | No |
| Git safety hooks | Yes | No | No | No |
| CLAUDE.md guidelines | Yes | No | No | No |
| Auto-redirect paths | Yes | No | No | No |
| Session start validation | Yes | No | No | No |
Edit claude/hooks/block-dangerous-git.sh to add patterns:
# Block a specific command pattern
if echo "$NORMALIZED" | grep -qE 'dangerous-pattern'; then
echo "BLOCKED: Reason"
exit 2
fiRemove the hook configuration from claude/settings.json or comment out specific hooks.
Create markdown files in claude/commands/:
# claude/commands/deploy.md
Deploy the current branch to staging environment.
Run: npm run deploy:stagingEnsure /workspace symlink exists:
ls -la /workspace
# Should show: /workspace -> /home/user/workspaceIf missing:
sudo ln -sf "$HOME/workspace" /workspaceCheck claude/settings.json exists and has correct format:
cat claude/settings.json | jq .Verify hook scripts are executable:
ls -la claude/hooks/
# Should show: -rwxr-xr-x for .sh filesOn some systems you need sudo:
sudo ln -sf "$HOME/workspace" /workspaceOr use a user-writable location:
WORKSPACE="$HOME/.workspace" ./bootstrap-mac.shThis repo integrates with dotclaude for Claude Code profile management across machines.
┌─────────────────────────────────┐ ┌─────────────────────────────────┐
│ blackdot │ │ dotclaude │
│ (shell config, secrets, etc) │ │ (Claude profile management) │
├─────────────────────────────────┤ ├─────────────────────────────────┤
│ │ │ │
│ blackdot status ───────────────────► shows Claude profile status │
│ blackdot doctor ───────────────────► checks Claude health │
│ blackdot drift ───────────────────► detects profile changes │
│ blackdot vault pull ───────────────► restores profiles.json │
│ blackdot packages ───────────────────► suggests dotclaude install │
│ blackdot setup ───────────────────► offers dotclaude setup │
│ │ │ │
└─────────────────────────────────┘ └─────────────────────────────────┘
▲
│
User runs directly:
dotclaude list
dotclaude switch work
dotclaude create personal
Key principle: dotclaude is NOT wrapped or hidden. Users run it directly for all profile management. blackdot just "knows about" dotclaude to enhance existing commands.
| Command | Claude Integration |
|---|---|
blackdot status |
Shows active Claude profile |
blackdot doctor |
Validates Claude/dotclaude setup |
blackdot vault pull |
Restores Claude profiles.json |
blackdot drift |
Detects profile changes vs vault |
blackdot packages |
Suggests dotclaude for Claude users |
blackdot setup |
Offers dotclaude installation |
- dotclaude manages profiles in
~/code/dotclaude/profiles/ - dotclaude auto-generates
~/.claude/profiles.jsonon activate/create - blackdot vault syncs
profiles.jsonto your password manager - blackdot vault pull restores it on new machines
The profiles.json format:
{
"active": "work-bedrock",
"profiles": {
"work-bedrock": {"backend": "bedrock", "created": "2025-11-30"},
"personal-max": {"backend": "max", "created": "2025-11-28"}
}
}# Install dotclaude (if not already)
curl -fsSL https://raw.githubusercontent.com/blackwell-systems/dotclaude/main/install.sh | bash
# Create and activate a profile
dotclaude create my-project
dotclaude activate my-project
# Sync to vault
blackdot vault push Claude-Profiles
# On new machine, restore everything including Claude profiles
blackdot vault pull# One command gets everything
curl -fsSL .../install.sh | bash
# Unlock vault and restore secrets (including Claude profiles)
bw login
export BW_SESSION="$(bw unlock --raw)"
blackdot vault pull
# Verify setup
blackdot doctor
# All systems green, including Claude
# Ready to work
dotclaude list
# Shows restored profilesIf you use Claude Code without dotclaude:
blackdot statusshows a gentle hint:try: dotclaudeblackdot doctorsuggests installation with instructionsblackdot packagesmentions dotclaude availability- No impact on other blackdot functionality - completely optional
We're exploring deeper Claude integration via Model Context Protocol (MCP). See Roadmap for details.
Potential capabilities:
blackdot://status- Health dashboardblackdot://secrets/restore- Trigger vault restoreblackdot://doctor- Run health checks- Native tool integration without shell commands
- CLAUDE.md - Session guidelines
- claude/hooks/README.md - Hook customization
- Roadmap - Future plans including MCP