Run coding tasks by spawning a coding agent in a tmux session + git worktree. Every task gets its own isolated branch and persistent conversation.
Check memory first:
text
memory_search("preferred coding agent tool")
If found → use that tool, no need to ask
If not found → ask the user:
"Which coding agent should I use? (default: claude) Options: claude, codex, opencode, codebuddy, or any CLI tool name"
Then save the answer to memory: text
memory: preferred_coding_agent = <tool>
Write to MEMORY.md under a "Preferences" section.
Default if user doesn't answer: claude
bash
# Always use a worktree — one per task
git -C <project> worktree add -b <branch> <worktree-path> main
# Symlink env files
ln -sf <project>/.env <worktree-path>/.env
ln -sf <project>/.env.local <worktree-path>/.env.local # if exists
bash
tmux new-session -d -s <task-name> -c <worktree-path>
Then launch based on tool:
ToolCommandclaude``claude --dangerously-skip-permissions``codex``codex``opencode``opencode``codebuddy``codebuddy (or check its CLI name)otheruse the tool's interactive CLI commandbash
tmux send-keys -t <task-name> "nvm use 20 && <tool-command>" Enter
bash
tmux send-keys -t <task-name> -l -- "Your task here.
Before making any changes, show me a plan of what you intend to do and wait for my approval."
sleep 0.1
tmux send-keys -t <task-name> Enter
bash
# Poll for plan output
tmux capture-pane -t <task-name> -p | tail -30
When agent outputs a plan → relay it to the user, wait for their confirmation before proceeding.
Relay flow:
bash
# Send user's response
tmux send-keys -t <task-name> -l -- "<user response>"
sleep 0.1
tmux send-keys -t <task-name> Enter
# Check if waiting for input
tmux capture-pane -t <task-name> -p | tail -10 | grep -E "❯|Yes.*No|proceed|permission|plan|approve"
Same pattern, multiple sessions:
bash
tmux new-session -d -s task-a -c /tmp/task-a
tmux new-session -d -s task-b -c /tmp/task-b
Check all at once:
bash
for s in task-a task-b; do
echo "=== $s ==="
tmux capture-pane -t $s -p 2>/dev/null | tail -5
done
bash
git -C <project> worktree remove <worktree-path> # branch preserved
tmux kill-session -t <task-name>
# User can then test in main workspace:
# git switch <branch>
.env files — don't copyreferences/troubleshooting.md for common issues