name: tmux-opencode description: "Control OpenCode sessions via tmux for background and parallel coding tasks." metadata: openclaw: emoji: "π₯οΈ"
tmux-opencode
tmuxλ‘ OpenCode μΈμ μ μ μ΄ν΄μ μ½λ μμ μ μν¨λ€.
μΈμ μ°λ
- μ½λ μμ (ꡬν, 리ν©ν λ§, λ²κ·Έ ν½μ€)
- λ©ν°μ€ν νμ€ν¬
- λ³λ ¬ μμ (μ¬λ¬ μΈμ λμ μ€ν)
- λ°±κ·ΈλΌμ΄λ μμ (μ±ν λΈλ‘ μ ν¨)
Quick Start
# μμΌ κ²½λ‘
SOCKET="${TMPDIR:-/tmp}/openclaw-tmux-sockets/openclaw.sock"
# μΈμ
μμ± + OpenCode μ€ν
tmux -S "$SOCKET" new -d -s "opencode-myproject" -c ~/myproject
tmux -S "$SOCKET" resize-window -t "opencode-myproject" -x 300 -y 80
tmux -S "$SOCKET" send-keys -t "opencode-myproject" 'opencode' Enter
# 3μ΄ λκΈ° ν ν둬ννΈ μ μ‘
sleep 3
tmux -S "$SOCKET" send-keys -t "opencode-myproject" -l 'ulw Fix bug in auth module. Commit and push when done.'
tmux -S "$SOCKET" send-keys -t "opencode-myproject" Enter
ν둬ννΈ κ·μΉ
- μμ΄λ‘ μμ± (OpenCode μ΅μ ν)
-lνλκ·Έ νμ (νΉμλ¬Έμ μ²λ¦¬)ulwλ‘ μμ (볡μ‘ν μμ )- λμ "Commit and push when done"
μν¬νλ‘μ°
1. μΈμ μμ±
tmux -S "$SOCKET" new -d -s "$SESSION" -c "$PROJECT_DIR"
tmux -S "$SOCKET" resize-window -t "$SESSION" -x 300 -y 80
tmux -S "$SOCKET" send-keys -t "$SESSION" 'opencode' Enter
2. ν둬ννΈ μ μ‘
tmux -S "$SOCKET" send-keys -t "$SESSION" -l 'ulw Your task here. Commit and push when done.'
tmux -S "$SOCKET" send-keys -t "$SESSION" Enter
3. μν νμΈ
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -100
μν νλ¨:
| μν | μ νΈ |
|---|---|
| thinking | νλ‘κ·Έλ μ€λ° μμ§μ, tool μ€ν μ€ |
| ready | μ
Έ ν둬ννΈ (β―), 체ν¬λ¦¬μ€νΈ μλ£ |
| error | μλ¬ λ©μμ§, rate limit |
| stuck | 15λΆ μ΄μ λ³ν μμ |
4. μλ£ νμΈ
- μ
Έ ν둬ννΈ λ³΅κ· (
β―λλβ) - "Committed and pushed" λ©μμ§
- 체ν¬λ¦¬μ€νΈ μ λΆ
[β]
λͺ¨λΈ λ³κ²½
# Ctrl+X MμΌλ‘ λͺ¨λΈ νΌμ»€ μ΄κΈ°
tmux -S "$SOCKET" send-keys -t "$SESSION" C-x m
sleep 0.5
tmux -S "$SOCKET" send-keys -t "$SESSION" -l 'opus'
tmux -S "$SOCKET" send-keys -t "$SESSION" Enter
μμ΄μ νΈ μ ν
Tab ν€λ‘ μν (@ λ©μ μ λ¨):
- Sisyphus β Hephaestus β Prometheus β Atlas β ...
| μμ΄μ νΈ | μ©λ |
|---|---|
| Sisyphus | νμμ μμ |
| Hephaestus | λͺ νν ꡬν μμ |
| Oracle | μν€ν μ², λλ²κΉ , 리뷰 |
| Librarian | λ¬Έμ κ²μ |
Rate Limit 볡ꡬ
# ESCλ‘ μ¬μλ μ·¨μ
tmux -S "$SOCKET" send-keys -t "$SESSION" Escape
tmux -S "$SOCKET" send-keys -t "$SESSION" Escape
sleep 1
# κ³μ μ§ν
tmux -S "$SOCKET" send-keys -t "$SESSION" -l 'continue'
tmux -S "$SOCKET" send-keys -t "$SESSION" Enter
Idle μΈμ μ±μ°μ§
# ESC + continue
tmux -S "$SOCKET" send-keys -t "$SESSION" Escape
tmux -S "$SOCKET" send-keys -t "$SESSION" -l 'continue'
tmux -S "$SOCKET" send-keys -t "$SESSION" Enter
λ³λ ¬ μ΄μ μμ
# μ΄μλ³ worktree
git worktree add ../project-issue-1 -b feature/issue-1
git worktree add ../project-issue-2 -b feature/issue-2
# μΈμ
λ³ μμ
tmux -S "$SOCKET" new -d -s "issue-1" -c ~/project-issue-1
tmux -S "$SOCKET" new -d -s "issue-2" -c ~/project-issue-2
μΈμ μΆμ
memory/tmux-sessions.json:
{
"sessions": {
"opencode-myproject": {
"project": "~/myproject",
"task": "Fix auth bug",
"status": "running"
}
}
}
status: running | completed | failed | stuck
μλ μλ£ μλ¦Ό
watch-session.sh λ‘ μΈμ
μλ£ μ Discord μλ¦Ό:
# λ°±κ·ΈλΌμ΄λ κ°μ
~/clawd/scripts/watch-session.sh "opencode-myproject" > /tmp/watch.log 2>&1 &
# 30μ΄λ§λ€ 체ν¬, μλ£λλ©΄ #internalμ μλ¦Ό
# μλ£ μ νΈ: β―, β, "Committed and pushed"
μΈμ μ’ λ£
tmux -S "$SOCKET" kill-session -t "$SESSION"