/repogolem
Launch repoGolem agents in any repo. Triggers: spawn agent, launcher, brainlayerClaude, flags -s/-c/-w/--worker.
$ golems-cli skills install repogolemUpdated 5 days ago
Fleet law: canon #5 owns model policy; canon #6 owns launcher naming, registry override precedence, and skip-perms. This skill keeps invocation mechanics, examples, and troubleshooting.
Every project has launchers:
{name}Claude,{name}Codex,{name}Cursor,{name}Gemini,{name}Kiro. The launcher handles EVERYTHING: cd to repo, MCP wiring, secrets, iTerm profile, badge. You NEVER needsource ~/.zshrc && cd ~/Gits/X && claude -s. Just:brainlayerClaude -s.
UNIFIED FLAGS (same across ALL CLIs)
| Flag | Short | What It Does | Claude | Codex | Cursor |
|---|---|---|---|---|---|
| Skip permissions | -s | Auto-approve tool calls | --dangerously-skip-permissions | Compatibility no-op; host config supplies the policy | --yolo --approve-mcps |
| Continue/resume | -c | Resume last session | --continue | Resume the newest usable rollout for the launch cwd | (no-op, not supported) |
| Model override | -m <model> | Explicit model selection | Non-Sonnet full panes allowed; Sonnet headless only | Any model string passes through | Refused for interactive agent sessions |
| Reasoning effort | -E <effort> | Explicit Codex effort | — | low, medium, high, xhigh, max, ultra | — |
| Headless/print | -p "prompt" | Scripted one-shot only; NOT agent sessions or verification gates | --print -p "prompt" | Headless prompt | --print --output-format text |
| Worktree | -w <abs-path> | Launch from pre-created git worktree cwd | cd <path> | cd <path> | cd <path> |
CRITICAL:
-s= skip permissions. For Codex it is a compatibility no-op;golem-installvalidatesapproval_policy = "never"andsandbox_mode = "danger-full-access"in host config. Capital-S/--sonnetis a separate Claude-only model request and is refused for full panes.- Model/session policy lives in canon #5. A bare Claude launch pins the current top Opus at 1M; a bare Codex launch pins the current top Sol. Explicit Codex
-mand-Evalues pass through, including when supplied through cmuxspawn_agent. -pis NOT for agent sessions or verification gates. Open scope: it may survive for non-agent scripted one-shots; confirm with Etan before using it in automation.- Codex resume is fail-closed.
-crequires at least one usable rollout for the launch cwd and skips malformed newer candidates; a fresh cwd with no usable rollout exits loudly. Bareresumepicker mode is refused because the launcher cannot recover model/effort before the picker selects a session. - Codex
-p/--printcannot be combined with-cor explicitresume; that combination exits loudly instead of silently starting a fresh headless session. A resumed session restores its recorded model and effort; explicit-mand/or-Eoverride the recovered field, and when both are explicit the launcher skips rollout-state recovery and lets Codex validate the requested session. -con Cursor is a no-op (not supported yet)
LAUNCHER NAME PATTERN
{projectName}{CLI}
Examples:
brainlayerClaude brainlayerCodex brainlayerCursor
golemsClaude golemsCodex golemsCursor
orcClaude orcCodex orcCursor
6pmClaude 6pmCodex 6pmCursor
dashboardClaude dashboardCodex dashboardCursor
The name is the project key from ~/.config/ralphtools/registry.json, lowercased.
Agent-style projects
Registry entries can include an agent field:
{
"yash": {
"path": "$HOME/Gits/golems",
"agent": "yash",
"clis": ["claude", "codex", "cursor", "gemini", "kiro"]
}
}Claude launchers pass this through as --agent <name>.
Codex, Cursor, Gemini, and Kiro do not read Claude Agent SDK files directly, so repoGolem reads ~/.claude/agents/<name>.md and injects it as the launcher's initial prompt.
It preserves the frontmatter initialPrompt block when present, strips the rest of the YAML metadata, then appends the Markdown body.
This is intentional: yashCodex, yashCursor, yashGemini, and yashKiro should inherit the same agent protocol instead of acting like generic shells in the project directory.
Plain Codex worker mode
Agent-style *Codex launchers keep registry persona injection by default. Opt into
a plain worker with the long-only --worker flag or GOLEM_ROLE=worker:
orcCodex --worker -s -w $HOME/Gits/orchestrator.wt/my-lane
GOLEM_ROLE=worker orcCodex -s -w $HOME/Gits/orchestrator.wt/my-laneThe generated *CodexWorker aliases remain compatible and select the same mode.
Worker mode adds only a one-line role banner before an optional caller prompt; it
does not inject registry agent front-matter or boot-store instructions. Short
-w remains the worktree-path flag and always requires an absolute path.
WARNING — launcher names strip hyphens from repo names
repoGolem launcher names are generated from the registry key, not the raw repo folder name. If a repo name contains hyphens, the launcher drops them:
repo: skill-creator
wrong launcher guess: skill-creatorClaude
actual launcher: skillcreatorClaudeThis matters when another tool tries to build a launcher name from repo directly. Known live failure: mcp__cmuxlayer__spawn_agent({repo:"skill-creator", cli:"claude"}) guessed skill-creatorClaude, hit zsh: command not found, and left the agent stuck at booting.
Before relying on a generated launcher for a new repo, verify the real launcher first:
which skillcreatorClaude
which skillcreatorCodex
which skillcreatorCursorIf the launcher guess is wrong, use the verified repoGolem launcher manually until cmuxlayer normalizes repo -> launcher with the same hyphen-stripping rule.
KEY REGISTERED PROJECTS
| Project | Path | Launchers |
|---|---|---|
| golems | ~/Gits/golems | golemsClaude, golemsCodex, golemsCursor |
| brainlayer | ~/Gits/brainlayer | brainlayerClaude, brainlayerCodex, brainlayerCursor |
| voicelayer | ~/Gits/voicelayer | voicelayerClaude, voicelayerCodex, voicelayerCursor |
| orc (orchestrator) | $ORCHESTRATOR_REPO | orcClaude, orcCodex, orcCursor |
| dashboard | ~/Gits/golems-dashboard | dashboardClaude, dashboardCodex, dashboardCursor |
| 6pm | ~/Gits/6pm-mini | 6pmClaude, 6pmCodex, 6pmCursor |
| portfolio | ~/Gits/etanheyman.com | portfolioClaude, portfolioCodex, portfolioCursor |
| taskowl | ~/Gits/taskowl | taskowlClaude, taskowlCodex, taskowlCursor |
| taskowl | ~/Gits/TaskOwl-app | taskowlClaude, taskowlCodex, taskowlCursor |
| cmuxlayer | ~/Gits/cmuxlayer | cmuxlayerClaude, cmuxlayerCodex, cmuxlayerCursor |
| mcplayer | ~/Gits/mcplayer | mcplayerClaude, mcplayerCodex, mcplayerCursor |
| metacomlayer | ~/Gits/metacomlayer | metacomlayerClaude, metacomlayerCodex, metacomlayerCursor |
| qwan | ~/Gits/qwan-drill | qwanClaude, qwanCodex, qwanCursor |
| coach | ~/Gits/golems/packages/coach | coachClaude, coachCodex, coachCursor |
| jobs | ~/Gits/golems/packages/jobs | jobsClaude, jobsCodex, jobsCursor |
| content | ~/Gits/golems/packages/content | contentClaude, contentCodex, contentCursor |
| services | ~/Gits/golems/packages/services | servicesClaude, servicesCodex, servicesCursor |
| skills | ~/Gits/golems | skillsClaude, skillsCodex, skillsCursor |
| eval | $ORCHESTRATOR_REPO | evalClaude, evalCodex, evalCursor |
| maintenance | $ORCHESTRATOR_REPO | maintenanceClaude, maintenanceCodex, maintenanceCursor |
| recruiter | ~/Gits/recruiterGolem | recruiterClaude, recruiterCodex, recruiterCursor |
| teller | ~/Gits/tellerGolem | tellerClaude, tellerCodex, tellerCursor |
| monitor | ~/Gits/monitorGolem | monitorClaude, monitorCodex, monitorCursor |
| rudy | ~/Gits/rudy-monorepo | rudyClaude, rudyCodex, rudyCursor |
| songscript | ~/Gits/songscript | songscriptClaude, songscriptCodex, songscriptCursor |
| union | ~/Gits/union | unionClaude, unionCodex, unionCursor |
| ralph | ~/.config/ralph | ralphClaude, ralphCodex, ralphCursor |
| taba | ~/Gits/taba | tabaClaude, tabaCodex, tabaCursor |
| project2 | ~/Desktop | project2Claude, project2Codex, project2Cursor |
| maakaf | ~/Gits/maakaf_home | maakafClaude, maakafCodex, maakafCursor |
brainlayer topology — bare-mirror-style hub, main lives elsewhere (2026-06-07 weave E12)
~/Gits/brainlayer is the repo HUB, not the canonical main checkout: main is
checked out at ~/Gits/brainlayer-prod (the prod/deploy worktree), and feature
branches live in worktrees under ~/Gits/brainlayer/.worktrees/. Two rules:
- Briefs must PIN the exact worktree path (
-w $HOME/Gits/brainlayer/.worktrees/<task>). A brief that just says "brainlayer" leaves the worker guessing among three checkouts — live failure: worker'sgit statusfailed despite.gitexisting because the brief never pinned a path (bl-orqi-codex#2). - Local merges fail there. Because
mainis held bybrainlayer-prod,gh pr merge --delete-branchfrom any other checkout dies with'main' is already used by worktree at '…/brainlayer-prod'— see /pr-loop "Worktree-Locked Local Merge" for the remote fallback.
Full SKILL.md source — includes LLM directives, anti-patterns, and technical instructions stripped from the Overview tab.
Fleet law: canon #5 owns model policy; canon #6 owns launcher naming, registry override precedence, and skip-perms. This skill keeps invocation mechanics, examples, and troubleshooting.
Every project has launchers:
{name}Claude,{name}Codex,{name}Cursor,{name}Gemini,{name}Kiro. The launcher handles EVERYTHING: cd to repo, MCP wiring, secrets, iTerm profile, badge. You NEVER needsource ~/.zshrc && cd ~/Gits/X && claude -s. Just:brainlayerClaude -s.
UNIFIED FLAGS (same across ALL CLIs)
| Flag | Short | What It Does | Claude | Codex | Cursor |
|---|---|---|---|---|---|
| Skip permissions | -s | Auto-approve tool calls | --dangerously-skip-permissions | Compatibility no-op; host config supplies the policy | --yolo --approve-mcps |
| Continue/resume | -c | Resume last session | --continue | Resume the newest usable rollout for the launch cwd | (no-op, not supported) |
| Model override | -m <model> | Explicit model selection | Non-Sonnet full panes allowed; Sonnet headless only | Any model string passes through | Refused for interactive agent sessions |
| Reasoning effort | -E <effort> | Explicit Codex effort | — | low, medium, high, xhigh, max, ultra | — |
| Headless/print | -p "prompt" | Scripted one-shot only; NOT agent sessions or verification gates | --print -p "prompt" | Headless prompt | --print --output-format text |
| Worktree | -w <abs-path> | Launch from pre-created git worktree cwd | cd <path> | cd <path> | cd <path> |
CRITICAL:
-s= skip permissions. For Codex it is a compatibility no-op;golem-installvalidatesapproval_policy = "never"andsandbox_mode = "danger-full-access"in host config. Capital-S/--sonnetis a separate Claude-only model request and is refused for full panes.- Model/session policy lives in canon #5. A bare Claude launch pins the current top Opus at 1M; a bare Codex launch pins the current top Sol. Explicit Codex
-mand-Evalues pass through, including when supplied through cmuxspawn_agent. -pis NOT for agent sessions or verification gates. Open scope: it may survive for non-agent scripted one-shots; confirm with Etan before using it in automation.- Codex resume is fail-closed.
-crequires at least one usable rollout for the launch cwd and skips malformed newer candidates; a fresh cwd with no usable rollout exits loudly. Bareresumepicker mode is refused because the launcher cannot recover model/effort before the picker selects a session. - Codex
-p/--printcannot be combined with-cor explicitresume; that combination exits loudly instead of silently starting a fresh headless session. A resumed session restores its recorded model and effort; explicit-mand/or-Eoverride the recovered field, and when both are explicit the launcher skips rollout-state recovery and lets Codex validate the requested session. -con Cursor is a no-op (not supported yet)
LAUNCHER NAME PATTERN
{projectName}{CLI}
Examples:
brainlayerClaude brainlayerCodex brainlayerCursor
golemsClaude golemsCodex golemsCursor
orcClaude orcCodex orcCursor
6pmClaude 6pmCodex 6pmCursor
dashboardClaude dashboardCodex dashboardCursor
The name is the project key from ~/.config/ralphtools/registry.json, lowercased.
Agent-style projects
Registry entries can include an agent field:
{
"yash": {
"path": "$HOME/Gits/golems",
"agent": "yash",
"clis": ["claude", "codex", "cursor", "gemini", "kiro"]
}
}Claude launchers pass this through as --agent <name>.
Codex, Cursor, Gemini, and Kiro do not read Claude Agent SDK files directly, so repoGolem reads ~/.claude/agents/<name>.md and injects it as the launcher's initial prompt.
It preserves the frontmatter initialPrompt block when present, strips the rest of the YAML metadata, then appends the Markdown body.
This is intentional: yashCodex, yashCursor, yashGemini, and yashKiro should inherit the same agent protocol instead of acting like generic shells in the project directory.
Plain Codex worker mode
Agent-style *Codex launchers keep registry persona injection by default. Opt into
a plain worker with the long-only --worker flag or GOLEM_ROLE=worker:
orcCodex --worker -s -w $HOME/Gits/orchestrator.wt/my-lane
GOLEM_ROLE=worker orcCodex -s -w $HOME/Gits/orchestrator.wt/my-laneThe generated *CodexWorker aliases remain compatible and select the same mode.
Worker mode adds only a one-line role banner before an optional caller prompt; it
does not inject registry agent front-matter or boot-store instructions. Short
-w remains the worktree-path flag and always requires an absolute path.
WARNING — launcher names strip hyphens from repo names
repoGolem launcher names are generated from the registry key, not the raw repo folder name. If a repo name contains hyphens, the launcher drops them:
repo: skill-creator
wrong launcher guess: skill-creatorClaude
actual launcher: skillcreatorClaudeThis matters when another tool tries to build a launcher name from repo directly. Known live failure: mcp__cmuxlayer__spawn_agent({repo:"skill-creator", cli:"claude"}) guessed skill-creatorClaude, hit zsh: command not found, and left the agent stuck at booting.
Before relying on a generated launcher for a new repo, verify the real launcher first:
which skillcreatorClaude
which skillcreatorCodex
which skillcreatorCursorIf the launcher guess is wrong, use the verified repoGolem launcher manually until cmuxlayer normalizes repo -> launcher with the same hyphen-stripping rule.
KEY REGISTERED PROJECTS
| Project | Path | Launchers |
|---|---|---|
| golems | ~/Gits/golems | golemsClaude, golemsCodex, golemsCursor |
| brainlayer | ~/Gits/brainlayer | brainlayerClaude, brainlayerCodex, brainlayerCursor |
| voicelayer | ~/Gits/voicelayer | voicelayerClaude, voicelayerCodex, voicelayerCursor |
| orc (orchestrator) | $ORCHESTRATOR_REPO | orcClaude, orcCodex, orcCursor |
| dashboard | ~/Gits/golems-dashboard | dashboardClaude, dashboardCodex, dashboardCursor |
| 6pm | ~/Gits/6pm-mini | 6pmClaude, 6pmCodex, 6pmCursor |
| portfolio | ~/Gits/etanheyman.com | portfolioClaude, portfolioCodex, portfolioCursor |
| taskowl | ~/Gits/taskowl | taskowlClaude, taskowlCodex, taskowlCursor |
| taskowl | ~/Gits/TaskOwl-app | taskowlClaude, taskowlCodex, taskowlCursor |
| cmuxlayer | ~/Gits/cmuxlayer | cmuxlayerClaude, cmuxlayerCodex, cmuxlayerCursor |
| mcplayer | ~/Gits/mcplayer | mcplayerClaude, mcplayerCodex, mcplayerCursor |
| metacomlayer | ~/Gits/metacomlayer | metacomlayerClaude, metacomlayerCodex, metacomlayerCursor |
| qwan | ~/Gits/qwan-drill | qwanClaude, qwanCodex, qwanCursor |
| coach | ~/Gits/golems/packages/coach | coachClaude, coachCodex, coachCursor |
| jobs | ~/Gits/golems/packages/jobs | jobsClaude, jobsCodex, jobsCursor |
| content | ~/Gits/golems/packages/content | contentClaude, contentCodex, contentCursor |
| services | ~/Gits/golems/packages/services | servicesClaude, servicesCodex, servicesCursor |
| skills | ~/Gits/golems | skillsClaude, skillsCodex, skillsCursor |
| eval | $ORCHESTRATOR_REPO | evalClaude, evalCodex, evalCursor |
| maintenance | $ORCHESTRATOR_REPO | maintenanceClaude, maintenanceCodex, maintenanceCursor |
| recruiter | ~/Gits/recruiterGolem | recruiterClaude, recruiterCodex, recruiterCursor |
| teller | ~/Gits/tellerGolem | tellerClaude, tellerCodex, tellerCursor |
| monitor | ~/Gits/monitorGolem | monitorClaude, monitorCodex, monitorCursor |
| rudy | ~/Gits/rudy-monorepo | rudyClaude, rudyCodex, rudyCursor |
| songscript | ~/Gits/songscript | songscriptClaude, songscriptCodex, songscriptCursor |
| union | ~/Gits/union | unionClaude, unionCodex, unionCursor |
| ralph | ~/.config/ralph | ralphClaude, ralphCodex, ralphCursor |
| taba | ~/Gits/taba | tabaClaude, tabaCodex, tabaCursor |
| project2 | ~/Desktop | project2Claude, project2Codex, project2Cursor |
| maakaf | ~/Gits/maakaf_home | maakafClaude, maakafCodex, maakafCursor |
brainlayer topology — bare-mirror-style hub, main lives elsewhere (2026-06-07 weave E12)
~/Gits/brainlayer is the repo HUB, not the canonical main checkout: main is
checked out at ~/Gits/brainlayer-prod (the prod/deploy worktree), and feature
branches live in worktrees under ~/Gits/brainlayer/.worktrees/. Two rules:
- Briefs must PIN the exact worktree path (
-w $HOME/Gits/brainlayer/.worktrees/<task>). A brief that just says "brainlayer" leaves the worker guessing among three checkouts — live failure: worker'sgit statusfailed despite.gitexisting because the brief never pinned a path (bl-orqi-codex#2). - Local merges fail there. Because
mainis held bybrainlayer-prod,gh pr merge --delete-branchfrom any other checkout dies with'main' is already used by worktree at '…/brainlayer-prod'— see /pr-loop "Worktree-Locked Local Merge" for the remote fallback.
USAGE PATTERNS
Interactive agent (most common)
brainlayerClaude -s # Claude in brainlayer repo, skip-permissions
orcCodex -s # Codex in orchestrator repo, skip-permissions
golemsCursor -s # Cursor in golems repo, skip-permissionsContinue/resume a session
brainlayerClaude -s -c # Resume last Claude session in brainlayer
orcClaude --resume # Session picker for orchestrator
brainlayerCodex -s -c # Resume newest usable Codex rollout for this cwd
brainlayerCodex -s resume ID # Resume an explicit Codex session UUIDCodex deliberately refuses bare resume picker mode, -c in a cwd with no usable rollout, and
every resume combined with -p/--print. These are fail-closed continuity guards: use -c from the
session's cwd or pass its UUID, and send any follow-up prompt after the interactive resume opens.
The fresh-cwd -c failure says Cannot honor Codex resume: no rollout found for selector --last in ${CODEX_HOME:-$HOME/.codex}/sessions.; bare resume says Cannot honor Codex resume: no session id or --last selector was provided. If matching rollouts exist but none carries usable state, it says
Cannot honor Codex resume: no usable model/effort state found for selector --last.
Launch in a worktree
# Create the worktree FIRST — bare names fail silently. IN-REPO convention (ratified 2026-08-09):
git -C ~/Gits/golems worktree add ~/Gits/golems/.worktrees/my-task -b feat/my-task origin/master
golemsCodex -s -w $HOME/Gits/golems/.worktrees/my-task
# (legacy sibling ~/Gits/<repo>.wt/ paths resolve read-only until 2026-09-30, then die)The launcher consumes -w/--worktree, cds to the literal argument, and does
not pass --worktree to the underlying CLI.
-w contract (gen-12 weave E16): the path must be a pre-created absolute
worktree directory that already exists on disk. The launcher does NOT resolve
bare names, create worktrees, or fall back to the main checkout.
WRONG: golemsCodex -s -w weave-edits-a
→ _golem_launch_codex:cd:22: no such file or directory: weave-edits-a
→ 120s boot-timeout waiting for a pane that never started (ea8514a2:[643])
RIGHT: git worktree add … then golemsCodex -s -w $HOME/Gits/golems/.worktrees/weave-edits-a
An absolute path that does not exist yet dies the same way, one step earlier: when the
repo has a .mcp.json, the launcher copies it into the worktree before the cd
(golem-dispatch.zsh:486), so a missing directory aborts at the cp and drops you back at
the shell. The pane looks like it simply never booted — silent lane death (2026-08-09).
-w never creates — spawn_agent does. Use spawn_agent({repo, cli, worktree:true})
(or worktree:{name|path|branch|base}) to create/reuse the worktree at launch; -w is
launch-in-an-already-existing-worktree only.
Alternative fix (not shipped here): teach the launcher to resolve/create worktree paths from bare names — until then, briefs must inline absolute verified paths.
Scripted one-shot (NOT agent sessions; scope under review)
brainlayerCursor -s -p "Audit all .py files for stubs"
# → runs cursor agent --yolo --approve-mcps --print --output-format text "prompt"Do not use this form for workers, leads, or verification gates. Those are interactive repoGolem launcher sessions (brainlayerCursor -s, then send the prompt). Whether -p should remain for non-agent scripted one-shots is an open scope question for Etan; keep the flag documented, but do not apply it to agent sessions.
Model policy
orcClaude -s # Default: current top Opus at 1M
brainlayerClaude -s -m claude-opus-4-8 # Explicit non-Sonnet full pane
brainlayerClaude -s -S # Refused: Sonnet is headless/subagent-only
brainlayerClaude -s -p "one shot" -S # Allowed headless Sonnet run
brainlayerCodex -s # Default: current top Sol
brainlayerCodex -s -m gpt-5.6-luna -E max # Explicit Codex model + effortLauncher enforcement is defined by canon #5. Claude refuses Sonnet-tier models for full panes but accepts explicit non-Sonnet models. Codex passes explicit model and effort values through; its own runtime validates the requested model. -p remains scripted one-shot mode, not a worker/lead session or verification gate.
Via cmux (spawning from orchestrator)
spawn_agent({ repo: "brainlayer", cli: "codex", model: "gpt-5.6-luna", effort: "high", prompt: "Fix the FTS5 sync issue in search.py" })
→ returns agent_id
wait_for({ agent_id, target_state: "ready", timeout_ms: 120000 })
send_to_agent({ agent_id, text: "Keep the fix narrow and cite the changed file", press_enter: true })cmuxlayer PR #396 is merged: an explicit Codex model is checked against codex debug models --bundled before a pane is created, then model and effort are passed to the repoGolem launcher
as -m and -E. Omit model to use the launcher's bare top-Sol pin; include it when the mission
requires a specific supported model. Unsupported models fail before surface creation; if cmuxlayer
prepared a new worktree first, it rolls that worktree back. At read time spawn_agent.effort accepts
medium, high, xhigh, and ultra; use the launcher directly for supported low or max.
NEVER do this:
# WRONG — raw CLI, no launcher
send_input(surface, "source ~/.zshrc && cd ~/Gits/brainlayer && codex --dangerously-bypass-approvals-and-sandbox")WHAT LAUNCHERS HANDLE (so you don't have to)
- cd to repo — changes to the correct directory
- MCP wiring — builds
.mcp.jsonfrom registry, merges with repo's.mcp.json - Secrets — sets up 1Password-backed env vars via
ralph-secrets.zsh - iTerm profile — switches to "Golems" profile with correct font
- Tab title + badge — sets emoji + project name (e.g., "🌔 golemsClaude")
- BrainLayer project tag — worktree path becomes the project tag automatically (e.g.,
brainlayer-p0-hybrid→project:"brainlayer-p0-hybrid")
HOW TO ADD A NEW PROJECT
- Edit
~/.config/ralphtools/registry.json:
"myproject": {
"path": "$HOME/Gits/myproject",
"displayName": "My Project",
"mcps": [],
"secrets": {},
"created": "2026-04-05T00:00:00Z",
"clis": ["claude", "codex", "cursor"]
}- Regenerate launchers:
_ralph_generate_launchers_from_registry
source ~/.config/ralphtools/launchers.zsh- Verify:
which myprojectClaudeshould resolve.
HOW TO ADD A NEW CLI TO ALL PROJECTS
Example: adding cursor to all 27 projects (done April 4, 2026):
- Edit registry.json — add
"cursor"to each project'sclisarray - Regenerate:
_ralph_generate_launchers_from_registry - Source:
source ~/.config/ralphtools/launchers.zsh - Verify:
which brainlayerCursorfor a few projects
CRITICAL GOTCHAS
-s is a LAUNCHER flag, not a Claude CLI flag
-s only works with repoGolem launchers (brainlayerClaude -s). When using raw claude --agent, you MUST spell out --dangerously-skip-permissions. Evidence: claude --agent skill-creator -s failed; had to use claude --agent skill-creator --dangerously-skip-permissions.
Codex: bare pins Sol; explicit selections are first-class
Canon #5 owns the choice. Use the bare launcher when the current top Sol is intended; use -m/-E
when the mission names a supported model or effort. cmux spawn_agent.model is equivalent for model
selection, while its current effort enum is the four-value subset documented above. Verify effective
values from Codex session metadata rather than the agent's self-description.
Cursor model: expect default/Auto
User complained when Cursor defaulted to a specific model instead of Auto. Don't override with --model for Cursor data-gathering tasks.
-p is NOT for agent sessions
For interactive agents (monitored via cmux), launch WITHOUT -p: brainlayerCursor -s. Then send prompt separately. This includes verification gates. -p remains documented only for possible non-agent scripted one-shots; that scope needs Etan confirmation before automation depends on it.
TROUBLESHOOTING
| Problem | Fix |
|---|---|
command not found: brainlayerClaude | source ~/.config/ralphtools/launchers.zsh |
| Launcher doesn't cd to repo | Check path in registry.json |
| MCP not available in session | Check mcps array in registry.json, regenerate |
| Wrong iTerm badge | Check emoji field in registry.json |
| No launcher for a repo | Add to registry.json, regenerate (see above) |
--agent flag with -s | -s is a launcher flag, NOT a Claude flag. Use --dangerously-skip-permissions explicitly |
-force error on Cursor | Use --force (double dash), not -force |
INTEGRATION
| Skill | How repoGolem Integrates |
|---|---|
/agent-routing | Routing says WHO (Cursor/Codex/Claude). repoGolem says HOW to launch them. |
/cmux-agents | spawn_agent is the default visible-worker path; repoGolem still defines the launcher names underneath (R10) |
/orc | R10 iron rule: "Use repoGolem launcher functions. ALWAYS. NEVER raw CLI." |
/session-handoff | Agent resume table includes launcher commands for crash recovery |
REGISTRY LOCATION
~/.config/ralphtools/registry.json — project definitions, MCP configs, CLI lists
~/.config/ralphtools/lib/ralph-registry.zsh — generator (creates launcher functions)
~/.config/ralphtools/launchers.zsh — auto-generated launcher functions (source this)
Changelog entries are derived from eval runs and skill version updates. Full cascading changelog (Phase 4D) coming soon.
- +Initial release to Golems skill library
- +0 assertions across 9 eval scenarios