coding-agent: switch to native background mode, drop tmux requirement

- Use bash background:true instead of tmux
- Full programmatic control: log/poll/write/kill
- Simpler, no shell escaping issues
- workdir still critical for 'little box' pattern
This commit is contained in:
Peter Steinberger
2026-01-03 00:00:37 +00:00
parent e37c147ea9
commit b313250638

View File

@@ -1,26 +1,31 @@
--- ---
name: coding-agent name: coding-agent
description: Run Claude Code, Codex CLI, or OpenCode via tmux for resilient coding sessions. description: Run Claude Code, Codex CLI, or OpenCode via background process for programmatic control.
metadata: {"clawdis":{"emoji":"🧩","requires":{"bins":["tmux"],"anyBins":["claude","codex","opencode"]}}} metadata: {"clawdis":{"emoji":"🧩","requires":{"anyBins":["claude","codex","opencode"]}}}
--- ---
# Coding Agent (tmux-first) # Coding Agent (background-first)
Use **tmux** for all coding-agent CLIs. Keep sessions resumable and logs visible. Use **bash background mode** for all coding-agent CLIs. Full programmatic control, no tmux needed.
## The Pattern: workdir + tmux ## The Pattern: workdir + background
**All coding agents need this pattern:**
```bash ```bash
# Start agent in target directory ("little box" - only sees relevant files) # Start agent in target directory ("little box" - only sees relevant files)
bash workdir:~/project/folder command:"tmux new -d -s task-name '<agent command>'" bash workdir:~/project/folder background:true command:"<agent command>"
# Returns sessionId for tracking
# Monitor progress # Monitor progress
tmux capture-pane -t task-name -p | tail -20 process action:log sessionId:XXX
# Attach to watch live # Check if done
tmux attach -t task-name process action:poll sessionId:XXX
# Send input (if agent asks a question)
process action:write sessionId:XXX data:"y"
# Kill if needed
process action:kill sessionId:XXX
``` ```
Why workdir matters: Agent wakes up in a focused directory, doesn't wander off reading unrelated files. Why workdir matters: Agent wakes up in a focused directory, doesn't wander off reading unrelated files.
@@ -29,17 +34,14 @@ Why workdir matters: Agent wakes up in a focused directory, doesn't wander off r
## Codex CLI ## Codex CLI
**Model:** `gpt-5.2-codex` with reasoning effort (choose based on task): **Model:** `gpt-5.2-codex` — choose reasoning effort based on task:
- `medium` — most tasks - `medium` — most tasks
- `high` — complex/architectural tasks - `high` — complex/architectural tasks
```bash ```bash
bash workdir:~/project command:"tmux new -d -s codex-task 'codex exec --model gpt-5.2-codex -c reasoning_effort=\"medium\" -s workspace-write \"Your task\"'" bash workdir:~/project background:true command:"codex exec --model gpt-5.2-codex -c reasoning_effort=\"medium\" -s workspace-write \"Your task\""
``` ```
**Interactive:**
- `codex "prompt"` / `codex resume` / `codex resume --last`
**Flags:** `-s workspace-write`, `--full-auto`, `--skip-git-repo-check` **Flags:** `-s workspace-write`, `--full-auto`, `--skip-git-repo-check`
--- ---
@@ -47,29 +49,21 @@ bash workdir:~/project command:"tmux new -d -s codex-task 'codex exec --model gp
## Claude Code ## Claude Code
```bash ```bash
bash workdir:~/project command:"tmux new -d -s claude-task 'claude \"Your task\"'" bash workdir:~/project background:true command:"claude \"Your task\""
``` ```
**Interactive:**
- `claude` — start session
- `claude -c` — continue most recent
- `claude -r ""` — picker
--- ---
## OpenCode ## OpenCode
```bash ```bash
bash workdir:~/project command:"tmux new -d -s opencode-task 'opencode run \"Your task\"'" bash workdir:~/project background:true command:"opencode run \"Your task\""
``` ```
**Interactive:**
- `opencode` / `opencode -c` / `opencode -s <session-id>`
--- ---
## ⚠️ Rules ## ⚠️ Rules
1. **Respect tool choice** — if user asks for Codex, use Codex. Don't offer to build it yourself! 1. **Respect tool choice** — if user asks for Codex, use Codex. Don't offer to build it yourself!
2. **Be patient** — don't kill sessions because they're "slow" 2. **Be patient** — don't kill sessions because they're "slow"
3. **Monitor, don't interfere** — use `tmux capture-pane` to watch progress 3. **Monitor with process:log** — check progress without interfering