/wizard
Fresh-machine golems setup: prereqs, config, repos, MCP, BrainLayer. Triggers: setup, wizard, install golems.
$ golems-cli skills install wizardUpdated 5 days ago
Automated fresh-machine setup. Checks prerequisites, writes config, clones repos, wires MCP servers, verifies connections.
Step 1: Check Prerequisites
Run all checks in parallel where possible:
for cmd in brew node bun claude gh git; do
path=$(which $cmd 2>/dev/null)
if [ -n "$path" ]; then
version=$($cmd --version 2>/dev/null | head -1)
echo " $cmd : $path ($version)"
else
echo " $cmd : NOT FOUND"
fi
doneRequired Tools
| Tool | Required? | Install if missing |
|---|---|---|
git | YES | xcode-select --install (macOS) or sudo apt install git |
brew | YES (macOS) | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
node | YES | brew install node or nvm install --lts |
bun | YES | brew install oven-sh/bun/bun or curl -fsSL https://bun.sh/install | bash |
claude | YES | brew install claude or npm install -g @anthropic-ai/claude-code |
gh | YES | brew install gh then gh auth login |
If any required tool is missing: List what's missing, provide install commands, and ask the user to install them before continuing. Do NOT proceed without all 6 tools.
After gh is confirmed installed, verify auth:
gh auth statusIf not authenticated, guide the user through gh auth login.
Step 2: Read or Create ~/.golems/config.yaml
Check if config exists:
cat ~/.golems/config.yaml 2>/dev/nullIf config.yaml EXISTS:
- Display the current config to the user (reposPath, tools, features, contextProfiles)
- Validate it:
bash <reposPath>/orchestrator/scripts/sync-config.sh --validate(substituting the actual reposPath from config) - Ask: "Config found. Use it as-is, or reconfigure?"
- If use as-is -> jump to Step 3 (clone repos)
- If reconfigure -> continue below
If config.yaml DOES NOT EXIST:
Create it interactively:
-
Ask for workspace root (parent dir for repos, e.g.,
~/Gits):- Validate the path exists:
ls -d "<expanded_path>" 2>/dev/null - If invalid -> re-ask. Do NOT proceed with nonexistent path.
- Expand
~to full path before writing.
- Validate the path exists:
-
Detect tool paths (store absolute paths for launchd compatibility):
which claude && which gh && which bun && which node && which git -
Ask about features (all OFF by default):
Feature Default Description nightShiftOFF Autonomous improvement loop at 3am telegramOFF Telegram notifications emailGolemOFF Email triage and scoring -
Write the config:
mkdir -p ~/.golemsWrite
~/.golems/config.yamlwith this structure:# Golems Configuration reposPath: "<workspace_root>" stateDir: "<home>/.golems-zikaron" tools: claude: "<path>" gh: "<path>" # ... other detected tools features: nightShift: false telegram: false emailGolem: false mcpServers: brainlayer: command: brainlayer-mcp-stdio-bridge context7: command: npx args: ["-y", "@upstash/context7-mcp@latest"] supabase: command: npx args: ["-y", "@supabase/mcp-server-supabase@latest", "--access-token", "<token>"] contextProfiles: # Start with one profile per cloned repo — user adds more laterShow the written config to the user for confirmation.
Step 3: Clone Required Repos
Read reposPath from config.yaml. Check which repos exist:
REPOS_PATH=$(python3 -c "import yaml; print(yaml.safe_load(open('$HOME/.golems/config.yaml'))['reposPath'])")
for repo in golems orchestrator brainlayer; do
if [ -d "$REPOS_PATH/$repo" ]; then
echo " $repo : EXISTS"
else
echo " $repo : NOT FOUND — will clone"
fi
doneRequired Repos
| Repo | URL | Purpose |
|---|---|---|
golems | git@github.com:EtanHey/golems.git | Main monorepo (skills, packages) |
orchestrator | git@github.com:EtanHey/orchestrator.git | Scripts, sync-config.sh, plans |
brainlayer | git@github.com:EtanHey/brainlayer.git | Memory layer (BrainBar daemon) |
For each missing repo:
cd "$REPOS_PATH"
gh repo clone EtanHey/<repo>After cloning golems, install dependencies:
cd "$REPOS_PATH/golems" && bun installFull SKILL.md source — includes LLM directives, anti-patterns, and technical instructions stripped from the Overview tab.
Automated fresh-machine setup. Checks prerequisites, writes config, clones repos, wires MCP servers, verifies connections.
CARDINAL RULE
ALL opt-in features are OFF by default. The user must explicitly enable each one. No surprises, no unsolicited actions.
Step 1: Check Prerequisites
Run all checks in parallel where possible:
for cmd in brew node bun claude gh git; do
path=$(which $cmd 2>/dev/null)
if [ -n "$path" ]; then
version=$($cmd --version 2>/dev/null | head -1)
echo " $cmd : $path ($version)"
else
echo " $cmd : NOT FOUND"
fi
doneRequired Tools
| Tool | Required? | Install if missing |
|---|---|---|
git | YES | xcode-select --install (macOS) or sudo apt install git |
brew | YES (macOS) | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
node | YES | brew install node or nvm install --lts |
bun | YES | brew install oven-sh/bun/bun or curl -fsSL https://bun.sh/install | bash |
claude | YES | brew install claude or npm install -g @anthropic-ai/claude-code |
gh | YES | brew install gh then gh auth login |
If any required tool is missing: List what's missing, provide install commands, and ask the user to install them before continuing. Do NOT proceed without all 6 tools.
After gh is confirmed installed, verify auth:
gh auth statusIf not authenticated, guide the user through gh auth login.
Step 2: Read or Create ~/.golems/config.yaml
Check if config exists:
cat ~/.golems/config.yaml 2>/dev/nullIf config.yaml EXISTS:
- Display the current config to the user (reposPath, tools, features, contextProfiles)
- Validate it:
bash <reposPath>/orchestrator/scripts/sync-config.sh --validate(substituting the actual reposPath from config) - Ask: "Config found. Use it as-is, or reconfigure?"
- If use as-is -> jump to Step 3 (clone repos)
- If reconfigure -> continue below
If config.yaml DOES NOT EXIST:
Create it interactively:
-
Ask for workspace root (parent dir for repos, e.g.,
~/Gits):- Validate the path exists:
ls -d "<expanded_path>" 2>/dev/null - If invalid -> re-ask. Do NOT proceed with nonexistent path.
- Expand
~to full path before writing.
- Validate the path exists:
-
Detect tool paths (store absolute paths for launchd compatibility):
which claude && which gh && which bun && which node && which git -
Ask about features (all OFF by default):
Feature Default Description nightShiftOFF Autonomous improvement loop at 3am telegramOFF Telegram notifications emailGolemOFF Email triage and scoring -
Write the config:
mkdir -p ~/.golemsWrite
~/.golems/config.yamlwith this structure:# Golems Configuration reposPath: "<workspace_root>" stateDir: "<home>/.golems-zikaron" tools: claude: "<path>" gh: "<path>" # ... other detected tools features: nightShift: false telegram: false emailGolem: false mcpServers: brainlayer: command: brainlayer-mcp-stdio-bridge context7: command: npx args: ["-y", "@upstash/context7-mcp@latest"] supabase: command: npx args: ["-y", "@supabase/mcp-server-supabase@latest", "--access-token", "<token>"] contextProfiles: # Start with one profile per cloned repo — user adds more laterShow the written config to the user for confirmation.
Step 3: Clone Required Repos
Read reposPath from config.yaml. Check which repos exist:
REPOS_PATH=$(python3 -c "import yaml; print(yaml.safe_load(open('$HOME/.golems/config.yaml'))['reposPath'])")
for repo in golems orchestrator brainlayer; do
if [ -d "$REPOS_PATH/$repo" ]; then
echo " $repo : EXISTS"
else
echo " $repo : NOT FOUND — will clone"
fi
doneRequired Repos
| Repo | URL | Purpose |
|---|---|---|
golems | git@github.com:EtanHey/golems.git | Main monorepo (skills, packages) |
orchestrator | git@github.com:EtanHey/orchestrator.git | Scripts, sync-config.sh, plans |
brainlayer | git@github.com:EtanHey/brainlayer.git | Memory layer (BrainBar daemon) |
For each missing repo:
cd "$REPOS_PATH"
gh repo clone EtanHey/<repo>After cloning golems, install dependencies:
cd "$REPOS_PATH/golems" && bun installStep 4: Run sync-config.sh
Wire MCP servers across all repos using the config.yaml source of truth:
bash "$REPOS_PATH/orchestrator/scripts/sync-config.sh" --diffShow the diff output to the user. Ask:
"This is what sync-config.sh will change. Apply these changes?"
If yes:
bash "$REPOS_PATH/orchestrator/scripts/sync-config.sh" --enforceIf sync-config.sh is not available (orchestrator not yet cloned or script missing), skip this step and note it in the final report.
Step 5: Create .claude.local.md in Each Repo
For each repo in reposPath that has a CLAUDE.md, create a .claude.local.md with machine-specific paths:
for repo in golems orchestrator brainlayer; do
repo_path="$REPOS_PATH/$repo"
if [ -f "$repo_path/CLAUDE.md" ] && [ ! -f "$repo_path/.claude.local.md" ]; then
echo "Creating .claude.local.md for $repo"
fi
doneTemplate for .claude.local.md:
# Local Machine Config (not committed)
## Paths
- Repos: <reposPath>
- State: <stateDir>
- Config: ~/.golems/config.yaml
## Tools
- claude: <path>
- gh: <path>
- bun: <path>
## Environment
- Platform: <uname -s>
- Shell: <echo $SHELL>
- Node: <node --version>
- Bun: <bun --version>IMPORTANT: Check .gitignore includes .claude.local.md in each repo. If not, warn the user to add it.
Step 6: Verify BrainLayer MCP Connection
Check if BrainLayer is running:
# Check if BrainBar socket exists
ls -la /tmp/brainbar.sock 2>/dev/null
# Check if BrainBar process is running
pgrep -f BrainBar 2>/dev/null || pgrep -f brainbar 2>/dev/nullIf BrainBar socket exists:
Test the MCP connection by calling brain_search with a simple query:
brain_search(query="test connection", limit=1)
- If it returns results (even empty) -> BrainLayer is connected
- If it errors -> report the error, suggest restarting BrainBar
If BrainBar is NOT running:
Report:
"BrainLayer MCP is not available. BrainBar daemon is not running. To start: open /Applications/BrainBar.app Skills that use memory (coach, catchup, research) will have reduced functionality."
Do NOT block setup on BrainLayer — it's optional but recommended.
Step 7: Final Report
Display a summary of everything that was configured:
=== Golems Setup Complete ===
Prerequisites:
brew : /opt/homebrew/bin/brew (4.x)
node : /opt/homebrew/bin/node (v22.x)
bun : /opt/homebrew/bin/bun (1.x)
claude : ~/.local/bin/claude (1.x)
gh : /usr/local/bin/gh (2.x)
git : /usr/bin/git (2.x)
Config: ~/.golems/config.yaml
Workspace: ~/Gits
State dir: ~/.golems-zikaron
Repos:
golems : CLONED (bun install done)
orchestrator : CLONED
brainlayer : CLONED
MCP Servers: sync-config.sh applied (3 servers wired)
.claude.local: Created in 3 repos
BrainLayer: CONNECTED (BrainBar running)
Skills: Symlinked from golems/skills/golem-powers/
=== Manual Setup Needed ===
- [ ] Configure Supabase access token in config.yaml
- [ ] Set up 1Password: op account list
- [ ] Enable Telegram if needed: update config.yaml features.telegram
List anything that needs manual setup — secrets, tokens, services that couldn't be auto-configured.
Anti-Patterns
- NEVER enable features without explicit user consent
- NEVER write config with an invalid/nonexistent workspace path
- NEVER overwrite existing config without asking first
- NEVER proceed without all 6 required tools installed
- NEVER clone repos without confirming the workspace path exists
- NEVER run sync-config.sh --enforce without showing --diff first
- NEVER block setup on BrainLayer — it's optional
- NEVER commit .claude.local.md — it's machine-specific
Composability
This skill is invoked by:
/wizardslash command in Claude CodeINSTALL_PROMPT.mdpaste into a Claude session- Fresh machine setup flow
It uses:
sync-config.shfrom orchestrator repoconfig.yamlas single source of truth- BrainLayer MCP for connection verification
Best Pass Rate
100%
Opus 4.6
Assertions
23
3 models tested
Avg Cost / Run
$0.2890
across models
Fastest (p50)
1.7s
Haiku 4.5
Behavior Evals
Phase 2 baseline — skill quality on ClaudeBehavior Baseline
| Assertion | Opus 4.6 | Sonnet 4.6 | Haiku 4.5 | Consensus |
|---|---|---|---|---|
| checks-all-six-prerequisites | 3/3 | |||
| creates-config-yaml-not-json | 3/3 | |||
| clones-repos-to-repos-path | 2/3 | |||
| runs-sync-config-with-diff-first | 2/3 | |||
| creates-claude-local-md | 3/3 | |||
| verifies-brainlayer-connection | 1/3 | |||
| displays-final-report | 3/3 | |||
| detects-missing-prerequisites | 3/3 | |||
| provides-install-commands | 2/3 | |||
| does-not-proceed-without-prerequisites | 3/3 | |||
| reads-existing-config | 1/3 | |||
| skips-existing-repos | 3/3 | |||
| offers-sync-config-diff | 3/3 | |||
| reports-brainlayer-unavailable | 3/3 | |||
| does-not-overwrite-config | 1/3 | |||
| clones-only-missing-repo | 2/3 | |||
| shows-diff-before-enforce | 2/3 | |||
| creates-claude-local-only-where-needed | 3/3 | |||
| runs-bun-install-after-clone | 3/3 | |||
| validates-workspace-path | 1/3 | |||
| rejects-invalid-path | 3/3 | |||
| accepts-valid-path | 2/3 | |||
| does-not-write-invalid-config | 3/3 |
Token Usage
Cost per Run
| Model | Input Tokens | Output Tokens | Cost / Run | Cost / 1K Runs |
|---|---|---|---|---|
| Opus 4.6 | 9,891 | 9,020 | $0.8249 | $824.90 |
| Sonnet 4.6 | 2,417 | 2,212 | $0.0404 | $40.40 |
| Haiku 4.5 | 1,339 | 1,014 | $0.0016 | $1.60 |
Response Time (p50)
Response Time (p95)
| Model | p50 | p95 | Overhead |
|---|---|---|---|
| Opus 4.6 | 7.7s | 14.7s | +92% |
| Sonnet 4.6 | 5.2s | 9.6s | +84% |
| Haiku 4.5 | 1.7s | 2.7s | +54% |
Last evaluated: 2026-03-12 · Data is generated from skill assertions (real cross-model benchmarks coming soon)
Changelog entries are derived from eval runs and skill version updates. Full cascading changelog (Phase 4D) coming soon.
Best Pass Rate
100%
Assertions
23
Models Tested
3
Evals Run
5
- +Initial release to Golems skill library
- +23 assertions across 5 eval scenarios
- +1 workflow included: setup