Files
multi-agent-mux/skills/tmux-agent-orchestrate-delete/SKILL.md
T
Godopu e9fc763d31 refactor(skills): rename multi-agent-* + agent-sessions-monitor + delegate-job to tmux-agent-orchestrate-*
Renamed 6 skills directories to tmux-agent-orchestrate-* prefix:
- multi-agent-create → tmux-agent-orchestrate-create
- multi-agent-resume → tmux-agent-orchestrate-resume
- multi-agent-delete → tmux-agent-orchestrate-delete
- multi-agent-status → tmux-agent-orchestrate-status
- agent-sessions-monitor → tmux-agent-orchestrate-monitor
- delegate-job → tmux-agent-orchestrate-delegate-job

Updated:
- skills/lib.sh internal paths (delegate_submit_job etc.)
- skills/tmux-agent-orchestrate-status/scripts/status.sh (monitor path)
- skills/tmux-agent-orchestrate-monitor/scripts/reconcile.sh
- .gitignore (HTML ignore patterns)
- 6 SKILL.md frontmatter (name, related_skills, prereq_skills) and body
- All script headers and Korean comments

Notes:
- tmux session naming convention unchanged (<slug>-creator-<agent>) — workspace identifier based, kept for backward compatibility
- Existing 2 sessions in -L multi-agent-canary untouched
- YAML delegate_job_id / agent-session (tmux:canary-...) preserved for log history compatibility

Verified on isolated server -L agy-rename-test (kill-server after).
2026-06-19 23:27:27 +00:00

7.4 KiB

name, description, version, author, license, platforms, environments, metadata
name description version author license platforms environments metadata
tmux-agent-orchestrate-delete Terminate an agent tmux session (claude, antigravity/agy) and update ~/PuKi/lab/agent_sessions/agent-sessions.yaml to mark it terminated with timestamp. Does NOT delete on-disk conversation artifacts (jsonl/db) — those are preserved for future resume. Use when ending a work session, switching to a different one, or cleaning up before a fresh start. 1.0.0 godopu MIT
linux
macos
terminal
tmux
hermes
tags related_skills prereq_skills
agent
tmux
claude
antigravity
agy
multi-agent
delete
terminate
cleanup
tmux-agent-orchestrate-create
tmux-agent-orchestrate-resume
tmux-agent-orchestrate-monitor
tmux-agent-orchestrate-create
tmux-agent-orchestrate-resume

Multi-Agent Delete — Terminate an Agent tmux Session

Companion skills: tmux-agent-orchestrate-create (start), tmux-agent-orchestrate-resume (re-attach), tmux-agent-orchestrate-monitor (live status). Tmux Isolation: delete 명령은 YAML의 tmux_server 필드를 자동으로 파싱하여 해당 격리 서버의 세션을 안전하게 종료(kill)하므로, TMUX_SERVER_NAME 환경변수를 수동으로 지정할 필요가 없습니다. Single source of truth: ~/PuKi/lab/agent_sessions/agent-sessions.yaml.

What this skill does

Stop an agent's tmux session and mark the YAML entry as terminated. Preserves:

  • The tmux session's recorded pane.pid / cmd / cwd / mcp_attachments for audit
  • The agent's on-disk conversation (claude *.jsonl, agy conversations/*.db) — so the user can tmux-agent-orchestrate-resume later
  • The start_command so a future tmux-agent-orchestrate-create --session <name> reproduces the same tmux spec

The user explicitly chooses:

  • soft delete (default): update YAML only; leave tmux running. Useful when "delete" really means "I'm done with this card".
  • hard delete: tmux kill-session + update YAML. The default when the user says "kill it" or "end the session".

Pre-flight

SESSION_NAME=<workspace>-creator-<agent>  # convention
AGENT_SESSIONS_YAML=~/PuKi/lab/agent_sessions/agent-sessions.yaml

# 1) Session is registered?
python3 -c "
import yaml
d = yaml.safe_load(open('$AGENT_SESSIONS_YAML'))
names = [s['name'] for s in d.get('tmux_sessions', [])]
if '$SESSION_NAME' not in names:
    print('NOT in YAML — refusing to delete (no audit trail). Use tmux-agent-orchestrate-create first, or pass --force-no-yaml.')
    raise SystemExit(1)
"

# 2) Already terminated?
ALREADY=$(python3 -c "
import yaml
d = yaml.safe_load(open('$AGENT_SESSIONS_YAML'))
s = [x for x in d['tmux_sessions'] if x['name']=='$SESSION_NAME'][0]
print(s.get('status', 'unknown'))
")
if [ "$ALREADY" = "terminated" ]; then
  echo "Already terminated at $(python3 -c "import yaml; d=yaml.safe_load(open('$AGENT_SESSIONS_YAML')); print([x for x in d['tmux_sessions'] if x['name']=='$SESSION_NAME'][0].get('terminated_at',''))")"
  echo "Re-running will just refresh the timestamp. Continue? (--yes to skip)"
fi

Workflow

# 1. soft delete (YAML only — tmux left running)
bash ~/PuKi/lab/agent_sessions/skills/tmux-agent-orchestrate-delete/scripts/delete_session.sh \
  --session "$SESSION_NAME" --mode soft

# 2. hard delete (default — kill tmux + update YAML)
bash ~/PuKi/lab/agent_sessions/skills/tmux-agent-orchestrate-delete/scripts/delete_session.sh \
  --session "$SESSION_NAME" --mode hard

# 3. hard delete + clean up on-disk conversation (DANGEROUS)
#    — this prevents any future resume. Use only when user is certain.
bash ~/PuKi/lab/agent_sessions/skills/tmux-agent-orchestrate-delete/scripts/delete_session.sh \
  --session "$SESSION_NAME" --mode hard --purge-conversation

The script:

  1. Verifies the session is in agent-sessions.yaml
  2. If delegate_job_id is set, automatically publishes a progress --detail "terminating" event to the tmux-agent-orchestrate-delegate-job registry
  3. Captures the last_visible_status from tmux capture-pane (so we have a final TUI snapshot for audit)
  4. For hard mode: tmux kill-session -t <name> (which auto-SIGTERMs children including the agent)
  5. For purge-conversation: deletes ~/.claude/projects/.../jsonl (claude) or ~/.gemini/antigravity-cli/conversations/...db + brain/... (agy)
  6. Updates the YAML entry
  7. If delegate_job_id is set, publishes a completed event to the tmux-agent-orchestrate-delegate-job registry
  8. Updates the YAML entry:
    - name: <SESSION_NAME>
      status: terminated
      terminated_at: 2026-06-17T...Z
      terminated_at_epoch: ...
      # all original fields preserved
    

Pitfalls

  • tmux kill-session doesn't just kill the session — it sends SIGHUP to the pane's child processes too. This is usually what you want (the agent process dies, no zombie reparenting to init). But if you wanted to keep the agent running outside tmux for some reason, use soft mode.
  • Don't delete on-disk artifacts by default — the agent's *.jsonl / conversations/*.db is the data that tmux-agent-orchestrate-resume needs. --purge-conversation is for when the user is genuinely done with the conversation and wants zero recovery chance.
  • YAML is append-only until you write a delete — if a previous run left the entry as running but tmux is actually dead (crash, host reboot), the YAML is stale. Running tmux-agent-orchestrate-delete --mode hard will detect "tmux already dead, just update YAML" and proceed.
  • Don't delete the claude_session_id_own: null placeholder — when the user creates a fresh session with tmux-agent-orchestrate-create and never sent a message, the entry has claude_session_id_own: null. Deletion must preserve that field (it's the audit trail showing "this tmux session never produced a session id of its own").
  • Monitor skill may still be tracking — if tmux-agent-orchestrate-monitor is running a heartbeat loop, deleting a session while it watches will trigger its tmux ls != yaml reconciliation. That's expected — let the monitor run, it will mark the entry as terminated on its own. Don't fight it.

Verification

# 1. tmux gone
tmux has-session -t "$SESSION_NAME" 2>/dev/null && echo "STILL ALIVE" || echo "OK: tmux gone"

# 2. YAML has terminated entry
python3 -c "
import yaml
d = yaml.safe_load(open('$AGENT_SESSIONS_YAML'))
s = [x for x in d['tmux_sessions'] if x['name']=='$SESSION_NAME'][0]
assert s['status'] == 'terminated', f'expected terminated, got {s[\"status\"]}'
assert s.get('terminated_at'), 'missing terminated_at'
print(f'OK: terminated at {s[\"terminated_at\"]}')
print(f'  preserved: pane.pid={s[\"pane\"][\"pid\"]}, cmd={s[\"pane\"][\"cmd\"]}, cwd={s[\"pane\"][\"cwd\"]}')
"

# 3. (if --purge-conversation) disk artifacts gone
[ -f "$HOME/.claude/projects/<projkey>/<uuid>.jsonl" ] && echo "WARN: jsonl still exists" || echo "OK: jsonl purged"

When NOT to use this skill

  • Just detachingtmux detach (Ctrl-B d) or just close the terminal. The tmux session keeps running.
  • Stopping the agent inside but keeping tmux → send Ctrl-C or /exit (claude) / Ctrl-D (agy) via tmux send-keys. The tmux session stays but the agent process is gone; you can then tmux-agent-orchestrate-create again to spawn a fresh agent in the same tmux session.
  • Replacing an existing session with a new onetmux-agent-orchestrate-delete --mode hard first, then tmux-agent-orchestrate-create.