🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

conduxt

by @xuezhouyang

Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux (fallback), composing OpenClaw native tools and community Skills. Handles any codi...

Versionv1.0.1
Downloads853
Stars⭐ 2
TERMINAL
clawhub install conduxt

πŸ“– About This Skill


name: conduxt description: > Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux (fallback), composing OpenClaw native tools and community Skills. Handles any coding task: requirements, bug fixes, refactoring, investigations. Use when: "implement feature X", "fix this bug", "refactor the API layer", "start agent", "open a session", "code this", "fix issue #N". user-invocable: true homepage: https://github.com/xuezhouyang/conduxt metadata: {"openclaw": {"emoji": "πŸŽ›οΈ", "requires": {"bins": ["git", "jq"], "anyBins": ["acpx", "tmux"]}, "os": ["darwin", "linux"]}}

CLI Coding Orchestrator

> You are the orchestrator. Drive coding agents via ACPX (protocol-level) or > tmux (terminal scraping), composing community Skills to complete end-to-end > coding tasks β€” feature implementation, bug fixes, investigations, refactoring.


1. Your Role

You are the OpenClaw Main model. You have a full toolchain β€” use it directly to orchestrate tasks, not by calling pre-made bash scripts. Scripts in the scripts/ directory exist only as optional helpers.

2. Dual-Backend Architecture: ACPX vs tmux

This Skill supports two agent communication backends. Prefer ACPX, use tmux as fallback.

Why ACPX First

| Dimension | ACPX (Protocol) | tmux (Terminal Scraping) | |-----------|-----------------|------------------------| | Communication | Full-duplex JSON-RPC over stdio | Half-duplex PTY scraping | | Output | Typed ndjson (tool_call/text/done) | Raw ANSI text (burns 30-40% Context) | | Mid-task instructions | Prompt queue: submit anytime, queued | send-keys: timing issues, may be treated as user input | | Completion detection | Native [done] signal | Regex matching or Callback injection | | Cancellation | Cooperative session/cancel (preserves state) | C-c (unreliable, may corrupt state) | | Crash recovery | Auto-restart + load serialized session | Session survives but agent death goes unnoticed | | Permissions | --approve-all / --deny-all policy-based | Interactive TTY popups (block unattended flows) | | Visual monitoring | ndjson pipe to external tools | tmux split-pane (advantage) |

ACPX is strictly superior for communication, observation, and mid-task instructions. tmux only wins on maturity and visual monitoring.

When to Use Which

| Scenario | Backend | |----------|---------| | Default / new tasks | ACPX | | ACPX unavailable or unstable | tmux (fallback) | | Need visual split-pane monitoring | tmux (or ACPX + external dashboard) | | Agent doesn't support ACP | tmux |


3. Toolbox

Native Tools

| Tool | Purpose | Key Usage | |------|---------|-----------| | exec | Run shell commands | acpx prompt, tmux send-keys, git worktree, gh | | exec pty:true | Interactive terminal | Simple one-off tasks (do NOT nest tmux inside PTY) | | process | Background processes | background:true for long tasks, process action:log limit:20 | | read/write/edit | File operations | MEMORY.md, active-tasks.json | | gh | GitHub CLI | gh issue view, gh pr create | | git | Version control | git worktree add/remove, git branch, git push |

ACPX Commands

| Command | Purpose | |---------|---------| | acpx prompt -s "" | Send prompt (creates session if new, appends if existing) | | acpx prompt -s --no-wait "" | Fire-and-forget (returns immediately) | | acpx prompt -s --format json "" | Structured ndjson output | | acpx sessions list | List all active sessions | | acpx sessions show -s | Show session details | | acpx cancel -s | Cooperative cancel of current task | | acpx prompt -s --approve-all "" | Auto-approve all permission requests |

Community Skills (Composable)

| Skill | When to Use | Core Capability | |-------|-------------|-----------------| | coding-agent | Agent lifecycle management (tmux backend) | tmux session + Callback wakeup + worktree | | tmux | Low-level tmux operations | Socket management, send-keys, wait-for-text | | tmux-agents | Multi-agent types (tmux backend) | Codex, Gemini, local models | | gemini | Gemini CLI coding | Long-context tasks | | resilient-coding-agent | Gateway restart recovery | tmux session persistence |

> Composition principle: Use Skills when available (they encapsulate best practices). > Fall back to native tools when Skills don't cover your needs. > coding-agent / tmux-agents use tmux backend β€” if using ACPX backend, use acpx commands directly.


4. Full-Duplex Communication Model

ACPX Path (Preferred)

User ←→ You (Main) ←→ acpx ←→ ACP Adapter ←→ Coding Agent
          ↕              ↕
       MEMORY.md    ndjson stream (typed events: thinking/tool_call/text/done)
                    prompt queue (submit anytime, protocol-level isolation)
                    session persistence (~/.acpx/sessions/*.json)

  • User β†’ Agent: acpx prompt -s "" enters the prompt queue
  • Agent β†’ User: [done] event in ndjson stream β†’ you are woken up β†’ notify user
  • True full-duplex: Submit new instructions while previous task is running, queued without timing issues
  • tmux Path (Fallback)

    User ←→ You (Main) ←→ tmux session ←→ Coding Agent
              ↕                ↕
           MEMORY.md      send-keys (inject instructions)
                          capture-pane (read output)
                          Callback event (completion notification)
    

  • User β†’ Agent: tmux send-keys -t "" Enter
  • Agent β†’ User: Callback JSON or capture-pane polling
  • Timing caveat: When agent is busy, send-keys may be treated as user input. Send Escape first and wait for idle.

  • 5. Scenario Playbook

    Each scenario provides both ACPX (preferred) and tmux (fallback) paths.

    Scenario A: Execute Coding Task

    Triggers (task source is flexible):

  • "Implement pagination for the users API"
  • "Investigate this performance issue"
  • "Refactor the API layer to RESTful"
  • "Fix issue #78" (optional, low priority)
  • 1. Understand the Task
       Task sources are diverse β€” handle flexibly:
       β€’ User describes requirement β†’ use description text as prompt directly
       β€’ Link to external doc/wiki β†’ fetch content and extract requirements
       β€’ GitHub issue β†’ exec: gh issue view  --json title,body
       β€’ Code review comments β†’ extract action items

    2. Generate task_id and branch name Create semantic IDs from task content, e.g.: β€’ "add pagination" β†’ task_id: add-pagination, branch: feat/add-pagination β€’ "perf issue" β†’ task_id: perf-analysis, branch: fix/perf-analysis β€’ issue #78 β†’ task_id: issue-78, branch: fix/issue-78

    3. Create isolated workspace β†’ exec: git worktree add ../worktrees/ -b main

    4. Start Coding Agent

    β”Œβ”€ ACPX path (preferred) ────────────────────────────────────┐ β”‚ exec: cd ../worktrees/ && acpx prompt \ β”‚ β”‚ -s \ β”‚ β”‚ --approve-all \ β”‚ β”‚ --no-wait \ β”‚ β”‚ "" β”‚ β”‚ β”‚ β”‚ β€’ --no-wait: returns immediately, doesn't block you β”‚ β”‚ β€’ --approve-all: auto-approve permissions for unattended β”‚ β”‚ β€’ session auto-persisted to ~/.acpx/sessions/.jsonβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    β”Œβ”€ tmux path (fallback) ─────────────────────────────────────┐ β”‚ a) Use coding-agent Skill (recommended) β”‚ β”‚ b) Use tmux-agents Skill (for Gemini/Codex) β”‚ β”‚ c) Direct exec: β”‚ β”‚ tmux new-session -d -s -c ../worktrees/ β”‚ β”‚ tmux send-keys -t "claude" Enter β”‚ β”‚ tmux send-keys -t "" Enter β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    5. Write MEMORY.md task entry (see Β§7)

    6. Inform user β†’ "Session started, agent is working. Will notify on completion."

    7. Wait for completion ACPX: [done] in ndjson stream β†’ read result β†’ route tmux: Callback arrives or 30min timeout β†’ capture-pane β†’ notify

    Parallel tasks: Repeat the above for each task. ACPX natively supports named parallel sessions. Before creating PRs, check for file conflicts between branches with git diff --name-only.

    Scenario B: Interactive Session (Human-in-the-Loop)

    Trigger: "Start a session for API refactoring"

    ACPX:
      exec: acpx prompt -s api-refactor "You are my coding assistant, await instructions."
      β†’ Creates named session, agent enters wait state

    tmux: exec: tmux new-session -d -s api-refactor -c /path/to/repo exec: tmux send-keys -t api-refactor "claude" Enter

    Report to user: "Session api-refactor started. You can: β€’ 'Tell api-refactor to start with interface definitions' β€’ 'How is api-refactor doing?' β€’ 'Stop api-refactor'"

    Scenario C: Mid-Task Intervention (Full-Duplex Core)

    Trigger: "Tell to do Y" / "Change 's direction"

    ACPX (no timing issues, protocol-level isolation):
      Append instruction:  acpx prompt -s  --no-wait "Focus on interface definitions, skip DB layer"
      Cancel current:      acpx cancel -s 

    tmux (watch for timing): Append instruction: tmux send-keys -t "Focus on interface definitions" Enter Interrupt current: tmux send-keys -t Escape Force stop: tmux send-keys -t C-c

    Scenario D: Check Progress

    Trigger: "How is doing?" / "status"

    ACPX:
      exec: acpx sessions show -s 
      β†’ Structured session state, no ANSI stripping needed
      β†’ Or use --format json for recent ndjson events

    tmux: exec: tmux capture-pane -p -t -S -20 β†’ Strip ANSI: sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' β†’ Summarize for user (don't paste raw terminal output)

    List all sessions: ACPX: acpx sessions list tmux: tmux list-sessions

    Scenario E: Agent Selection

    | Condition | Recommended Agent | ACPX Launch | tmux Launch | |-----------|------------------|-------------|-------------| | Default / best coding | Claude Code | acpx prompt -s X --agent claude | coding-agent Skill | | Long context needed | Gemini CLI | acpx prompt -s X --agent gemini | gemini Skill | | Need Codex | Codex CLI | acpx prompt -s X --agent codex | tmux-agents Skill | | Simple one-off | Direct exec | No session needed | exec pty:true |

    ACPX-supported agent adapters:

  • Claude Code: npx @zed-industries/claude-agent-acp (adapter)
  • Codex CLI: npx @zed-industries/codex-acp (adapter)
  • Gemini CLI: gemini --experimental-acp (native support)
  • Scenario F: PR Creation

    Trigger: [done] signal or Callback shows completed + tests pass

    1. Independently verify tests (don't trust agent's self-report)
       β†’ cd  && 

    2. Push branch β†’ git push -u origin

    3. Create PR β†’ gh pr create --title "fix: " --body "..." --base main --head <branch></p><p style="margin:8px 0">4. Update MEMORY.md: status=completed, add PR link</p><p style="margin:8px 0">5. Notify user </code></pre></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Scenario G: Cleanup</h4></p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">ACPX: End session (history preserved in ~/.acpx/sessions/) β†’ No need to kill processes, ACPX manages lifecycle</p><p style="margin:8px 0">tmux: tmux kill-session -t <session></p><p style="margin:8px 0">Common: git worktree remove <dir> --force git branch -d <branch> (optional) Edit MEMORY.md: status β†’ abandoned or completed </code></pre></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">6. Structured Callback Protocol</h3></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">ACPX Path</h4></p><p style="margin:8px 0">ACPX ndjson stream natively provides <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">[done]</code> signals, but we still inject the Callback JSON instruction for unified processing logic. The JSON can be extracted directly from the ndjson stream β€” <strong style="color:#e5e7eb">no regex matching against terminal output</strong>.</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">tmux Path</h4></p><p style="margin:8px 0">Requires injection and detection of <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">callback-json</code> keyword via capture-pane.</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Injection Content (Shared by Both Paths)</h4></p><p style="margin:8px 0">Append to the end of the agent prompt:</p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">When you complete this task, you MUST output the following JSON block wrapped in triple backticks with language tag "callback-json":</p><p style="margin:8px 0">{ "task_id": "<task_id>", "status": "completed|failed|need_clarification", "branch": "<branch>", "files_changed": ["file1.go", "file2_test.go"], "test_results": { "passed": 42, "failed": 0, "skipped": 1 }, "duration_minutes": 12, "summary": "Brief description of what was done" }</p><p style="margin:8px 0">Commit your code and run tests BEFORE outputting this JSON. This is mandatory. </code></pre></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Routing Rules</h4></p><p style="margin:8px 0">| Condition | Your Action | |-----------|-------------| | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">completed</code> + <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">failed=0</code> | Independently verify tests β†’ create PR β†’ notify user | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">completed</code> + <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">failed>0</code> | Append instruction: "N tests failing, please fix and re-output callback" | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">failed</code> | Update MEMORY.md β†’ notify user of failure reason | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">need_clarification</code> | Forward <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">summary</code> to user, wait for reply, then send to agent |</p><p style="margin:8px 0">Pure if/else β€” no LLM interpretation of natural language needed.</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Completion Detection Comparison</h4></p><p style="margin:8px 0">| Method | ACPX | tmux | |--------|------|------| | Primary | ndjson <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">[done]</code> signal | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">coding-agent</code> Skill built-in Callback | | Fallback | Extract callback-json from ndjson | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">capture-pane</code> regex matching | | Background | N/A (stream is continuous) | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/watchdog.sh</code> |</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">7. State Persistence</h3></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">MEMORY.md Task Entry</h4></p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">## In-Flight Tasks</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">add-pagination: Implement pagination for /api/users</h4> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Status</strong>: in-progress</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Branch</strong>: feat/add-pagination</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Session</strong>: add-pagination</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Backend</strong>: ACPX | tmux</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Agent</strong>: Claude Code | Gemini CLI</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Started</strong>: 2026-03-10T14:30:00Z</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Latest Milestone</strong>: 14:42 - Running tests</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">Callback</strong>: pending</li> </code></pre></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">When to Write</h4></p><p style="margin:8px 0">| Event | Action | |-------|--------| | Task created | Add entry, status=pending | | Agent started | status β†’ in-progress, record backend type | | User asks for progress | Update Latest Milestone | | Completion signal received | status β†’ completed/failed | | PR created | Add PR link | | Cleanup | status β†’ completed/abandoned |</p><p style="margin:8px 0">> <strong style="color:#e5e7eb">MEMORY.md must be written under any backend</strong> β€” it is the only shared state > across sessions and agents. ACPX session history is per-agent and does not > share across sessions.</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">8. Crash Detection</h3></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">ACPX Path</h4></p><p style="margin:8px 0">ACPX has built-in crash recovery β€” auto-restarts agent and loads serialized session. You only need to check if the session is still active:</p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">acpx sessions list # check if session exists acpx sessions show -s <session> # check detailed status </code></pre></p><p style="margin:8px 0">If session disappeared (ACPX itself crashed), recover context from MEMORY.md and recreate.</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">tmux Path</h4></p><p style="margin:8px 0">tmux session survives but agent may have died:</p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">tmux has-session -t <session> 2>/dev/null # is session alive tmux capture-pane -p -t <session> -S -1 # any output </code></pre></p><p style="margin:8px 0">Optional: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/watchdog.sh</code> background loop (zero token).</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">9. Optional Helper Scripts</h3></p><p style="margin:8px 0">Three scripts in <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">scripts/</code> with dual-backend support. You <strong style="color:#e5e7eb">can use them but don't have to</strong>:</p><p style="margin:8px 0">| Script | Purpose | |--------|---------| | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">setup.sh <task_id> <branch> <worktree_dir> [task_desc] [backend]</code> | Create branch + worktree + initialize MEMORY.md | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">launch.sh <task_id> <worktree_dir> <prompt_file> [backend] [agent]</code> | ACPX-first agent launch with auto tmux fallback | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">watchdog.sh [task_id]</code> | Background zero-token monitoring (ACPX/tmux aware) |</p><p style="margin:8px 0">Parameters: <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">backend</code>: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx</code> (default if available) | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux</code> | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">auto</code></li> <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">agent</code>: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">claude</code> | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">gemini</code> | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">codex</code> | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">aider</code> | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">auto</code></li></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">10. Command Reference</h3></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">ACPX Commands</h4></p><p style="margin:8px 0">| Action | Command | |--------|---------| | Send prompt | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx prompt -s <name> "<text>"</code> | | Fire-and-forget | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx prompt -s <name> --no-wait "<text>"</code> | | Structured output | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx prompt -s <name> --format json "<text>"</code> | | Auto-approve perms | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx prompt -s <name> --approve-all "<text>"</code> | | List sessions | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx sessions list</code> | | Show session | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx sessions show -s <name></code> | | Cancel task | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx cancel -s <name></code> |</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">tmux Commands</h4></p><p style="margin:8px 0">| Action | Command | |--------|---------| | Create session | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux new-session -d -s <name> -c <dir></code> | | Send instruction | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux send-keys -t <name> "<text>" Enter</code> | | Read output | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux capture-pane -p -t <name> -S -30</code> | | List sessions | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux list-sessions</code> | | Send interrupt | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux send-keys -t <name> C-c</code> | | Kill session | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux kill-session -t <name></code> |</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Common Commands</h4></p><p style="margin:8px 0">| Action | Command | |--------|---------| | Fetch issue | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">gh issue view <N> --json title,body,labels</code> | | Create worktree | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">git worktree add <dir> -b <branch> main</code> | | Remove worktree | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">git worktree remove <dir></code> | | Push branch | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">git push -u origin <branch></code> | | Create PR | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">gh pr create --title "..." --body "..." --base main --head <branch></code> |</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">11. Relationship with Existing Skills</h3></p><p style="margin:8px 0">| Skill | Backend | Your Usage | |-------|---------|------------| | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">coding-agent</code> | tmux | Preferred agent launch for tmux fallback | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux</code> | tmux | Low-level operations (custom socket, wait-for-text) | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">tmux-agents</code> | tmux | Multi-agent types (Codex, Gemini, local models) | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">gemini</code> | tmux | Gemini CLI for long-context tasks | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">resilient-coding-agent</code> | tmux | Gateway restart recovery |</p><p style="margin:8px 0">> When using ACPX backend, these tmux-based Skills don't apply. Use <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">acpx</code> commands directly. > When ACPX is unavailable, fall back to these Skills.</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">12. Evolution Roadmap</h3></p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">Phase 1 (Current): ACPX and tmux in parallel β€’ New tasks prefer ACPX β€’ ACPX instability β†’ tmux fallback β€’ Validate ACPX session persistence and crash recovery</p><p style="margin:8px 0">Phase 2: High-value migration β€’ Migrate half-duplex and context-pollution-heavy scenarios to ACPX β€’ tmux demoted to visual monitoring only</p><p style="margin:8px 0">Phase 3 (End state): ACPX as primary path β€’ tmux optional (visual only) β€’ ACPX becomes the standard interface for all agent communication </code></pre></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">13. Important Notes</h3></p><p style="margin:8px 0">1. <strong style="color:#e5e7eb">ACPX stability</strong>: ACPX is still early-stage and may have breaking changes. Fall back to tmux immediately on issues. 2. <strong style="color:#e5e7eb">No PTY nesting</strong>: Do NOT start tmux inside <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">exec pty:true</code> (double PTY allocation) 3. <strong style="color:#e5e7eb">tmux send-keys timing</strong>: When agent is busy, send <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">Escape</code> first and wait for idle before appending 4. <strong style="color:#e5e7eb">Don't pull full logs</strong>: Use capture-pane <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">-S -20</code>, ACPX use <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--format json</code> pipe 5. <strong style="color:#e5e7eb">Security</strong>: Never pass API keys or secrets via send-keys or acpx prompt 6. <strong style="color:#e5e7eb">ACPX permissions</strong>: Use <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--approve-all</code> for unattended; <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--approve-reads</code> when security matters 7. <strong style="color:#e5e7eb">Context pollution</strong>: ACPX ndjson can pipe to external monitoring without entering Context; tmux capture-pane is zero-token</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">14. User Command Mapping</h3></p><p style="margin:8px 0">| User Says | What You Do | |-----------|-------------| | "Implement feature X for project Y" | Scenario A: understand requirement β†’ create task β†’ start agent | | "Investigate this performance issue" | Scenario A: analyze problem β†’ create investigation task | | "Do these three tasks in parallel" | Scenario A Γ— N (parallel named sessions) | | "Fix issue #78" (optional) | Scenario A: fetch issue description | | "Start a session for X" | Scenario B: interactive | | "Tell <session> to do Y" | Scenario C: acpx prompt / tmux send-keys | | "How is <session> doing?" | Scenario D: acpx sessions show / capture-pane | | "Use Gemini for this task" | Scenario E: acpx --agent gemini / gemini Skill | | "Create PR" | Scenario F | | "Stop <session>" / "cleanup" | Scenario G | | "status" | List all sessions + MEMORY.md in-flight tasks | | "retry <task>" | Scenario G cleanup + Scenario A restart | </p></div></section></div><div class="two-col-side"></div></div></div><script> document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn => { btn.addEventListener('click', () => { const cmd = btn.getAttribute('data-cmd'); if (!cmd) return; navigator.clipboard.writeText(cmd).then(() => { const orig = btn.textContent; btn.textContent = 'Copied!'; setTimeout(() => btn.textContent = orig, 1500); }).catch(() => {}); }); }); </script><!--$--><!--/$--></main><footer style="background:var(--bg-primary);border-top:1px solid var(--border-secondary);margin-top:60px"><div style="border-top:1px solid var(--border-light);max-width:1200px;margin:0 auto;padding:24px 20px"><div style="display:flex;justify-content:space-between;flex-wrap:wrap;gap:24px;margin-bottom:24px"><div><div style="font-weight:700;color:var(--text-muted);margin-bottom:8px">BytesAgain</div><div style="color:var(--text-muted3);font-size:.82em;max-width:200px">Discover the best AI agent skills for your workflow.</div></div><div><div style="color:var(--text-muted);font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Explore</div><div style="margin-bottom:6px"><a href="/skills" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Skills</a></div><div style="margin-bottom:6px"><a href="/articles" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Articles</a></div><div style="margin-bottom:6px"><a href="/use-case" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Cases</a></div></div><div><div style="color:var(--text-muted);font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Company</div><div style="margin-bottom:6px"><a href="/about" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">About</a></div><div style="margin-bottom:6px"><a href="/contact" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Contact</a></div><div style="margin-bottom:6px"><a href="/privacy-policy" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Privacy Policy</a></div><div style="margin-bottom:6px"><a href="/terms" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Terms</a></div><div style="margin-bottom:6px"><a href="/feedback" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Feedback</a></div></div></div><div style="border-top:1px solid var(--border-light);padding-top:16px"><div style="color:var(--text-muted4);font-size:.8em;margin-bottom:8px">Β© <!-- -->2026<!-- --> BytesAgain. All rights reserved.</div><div style="color:var(--text-muted5);font-size:.75em;line-height:1.6;max-width:720px">BytesAgain is an independent skill directory. We index and link to third-party content (ClawHub, GitHub, LobeHub, Dify, etc.) for informational purposes only. All trademarks, skill names, and content are the property of their respective owners. BytesAgain does not claim ownership of any indexed content.</div></div></div></footer><button style="position:fixed;bottom:28px;right:28px;z-index:1000;width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;background:linear-gradient(135deg,#667eea,#00d4ff);color:#fff;font-size:1.3em;box-shadow:0 4px 20px #667eea66;display:flex;align-items:center;justify-content:center;transition:transform .2s">πŸ’¬</button><script src="/_next/static/chunks/0ze4gu236oq96.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[62894,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"LangProvider\"]\n3:I[89220,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"ThemeProvider\"]\n4:I[16988,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\ne:I[68027,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\",1]\n:HL[\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"style\"]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n5:Td5e,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"description\":\"Search 60,000+ verified AI agent skills via MCP API or REST. Supports 7 languages. Free, no auth required.\",\"inLanguage\":[\"en\",\"zh\",\"es\",\"fr\",\"de\",\"ja\",\"ko\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://bytesagain.com/skills?q={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}},{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://bytesagain.com/og-image.png\"},\"description\":\"AI agent skill directory. Search 60,000+ skills, 1,000+ use cases, and community requests.\",\"foundingDate\":\"2026\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"Global\"},\"sameAs\":[\"https://x.com/bytesagain\",\"https://github.com/bytesagain/ai-skills\",\"https://clawhub.ai/profile/bytesagain\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"email\":\"hello@bytesagain.com\",\"contactType\":\"customer support\"},\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"value\":1}},{\"@context\":\"https://schema.org\",\"@type\":\"WebApplication\",\"name\":\"BytesAgain AI Skills Search\",\"url\":\"https://bytesagain.com\",\"applicationCategory\":\"DeveloperApplication\",\"operatingSystem\":\"Web\",\"description\":\"Search engine and MCP API for 60,000+ AI agent skills. Semantic search, role recommendations, and use case packs.\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"featureList\":[\"Search 60,000+ AI agent skills\",\"Role-based recommendations for developers, creators, and traders\",\"1,000+ curated use case packs\",\"Free MCP API and REST API\",\"Multi-language search (EN, ZH, ES, FR, DE, JA, KO)\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":\"https://bytesagain.com/skills?q={search_term_string}\",\"query-input\":\"required name=search_term_string\"},\"dateModified\":\"2026-07-23\"},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"BytesAgain is a curated directory of 60,000+ AI agent skills from ClawHub, GitHub, LobeHub, and Dify. Search skills by keyword in 7 languages, browse by role (developer, creator, trader, marketer) or by use case.\"}},{\"@type\":\"Question\",\"name\":\"How do I find AI skills on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use the search bar on BytesAgain.com to search by keyword in 7 languages. You can also browse by role (developer, creator, trader, marketer) or by use case. Each skill shows install instructions for Claude, Cursor, OpenClaw, Continue, and more.\"}},{\"@type\":\"Question\",\"name\":\"Is BytesAgain free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, BytesAgain is completely free. No registration required for searching skills. The MCP API is also free with rate limits.\"}},{\"@type\":\"Question\",\"name\":\"Does BytesAgain have an API for AI agents?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! BytesAgain provides a free MCP SSE endpoint at /api/mcp/sse for AI agents, plus a REST API at /api/mcp?action=search\u0026q=\u003cquery\u003e. No authentication needed.\"}},{\"@type\":\"Question\",\"name\":\"Can I request a new AI skill on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! Visit the Requests page on BytesAgain.com to submit a skill request. Your request will be visible to the community and notified to the site admin.\"}}]}]"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"skill\",\"conduxt\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skill\",{\"children\":[[\"slug\",\"conduxt\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"llms\",\"href\":\"/llms.txt\"}],[\"$\",\"link\",null,{\"rel\":\"llms-full\",\"href\":\"/llms-full.txt\"}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-3C1MM9FWYF\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag(){dataLayer.push(arguments);}\\n gtag('js', new Date());\\n gtag('config', 'G-3C1MM9FWYF');\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"geist_9e050971-module__05dp7a__className\",\"style\":{\"margin\":0},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":\"100%\",\"background\":\"var(--bg-subscribe)\",\"borderBottom\":\"1px solid var(--border-primary)\",\"padding\":\"8px 20px\",\"textAlign\":\"center\",\"fontSize\":\".82em\",\"color\":\"#818cf8\"},\"children\":[\"🎁 \",[\"$\",\"strong\",null,{\"style\":{\"color\":\"var(--text-primary)\"},\"children\":\"Get the FREE AI Skills Starter Guide\"}],\" β€” \",[\"$\",\"a\",null,{\"href\":\"/register\",\"style\":{\"color\":\"#00d4ff\",\"textDecoration\":\"underline\"},\"children\":\"Subscribe β†’\"}]]}],[\"$\",\"$L4\",null,{}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$5\"}}],\"$L6\",\"$L7\",\"$L8\"]}]}]}]]}]]}],{\"children\":[\"$L9\",{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,\"$@c\"]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[\"$Lf\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:I[39756,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n11:I[37457,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n12:I[22016,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0ka051yepewro.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"\"]\n13:I[90940,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n14:I[16397,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n16:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"OutletBoundary\"]\n17:\"$Sreact.suspense\"\n1a:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"ViewportBoundary\"]\n1c:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"MetadataBoundary\"]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"main\",null,{\"children\":[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"main\",null,{\"style\":{\"minHeight\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"background\":\"#050611\",\"color\":\"#e5e7eb\"},\"children\":[[\"$\",\"style\",null,{\"children\":\"\\n .nf-box { text-align: center; padding: 60px 32px; }\\n .nf-code { font-size: 6rem; font-weight: 900; color: #22d3ee; line-height: 1; margin: 0; }\\n .nf-title { font-size: 1.8rem; font-weight: 800; margin: 12px 0 8px; }\\n .nf-desc { color: var(--text-muted2); font-size: 1rem; margin-bottom: 32px; max-width: 440px; }\\n .nf-link { display: inline-block; padding: 12px 28px; background: linear-gradient(135deg,#34d399,#22d3ee); color: #000; font-weight: 900; border-radius: 12px; text-decoration: none; }\\n \"}],[\"$\",\"div\",null,{\"className\":\"nf-box\",\"children\":[[\"$\",\"p\",null,{\"className\":\"nf-code\",\"children\":\"404\"}],[\"$\",\"h1\",null,{\"className\":\"nf-title\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"nf-desc\",\"children\":\"The skill or page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"$L12\",null,{\"className\":\"nf-link\",\"href\":\"/\",\"children\":\"Back to BytesAgain\"}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script><script>self.__next_f.push([1,"7:[\"$\",\"$L13\",null,{}]\n8:[\"$\",\"$L14\",null,{}]\n9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$L15\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@18\"}]}]]}]\n19:[]\nc:\"$W19\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L1a\",null,{\"children\":\"$L1b\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1c\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1d\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\nf:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"1b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1e:I[27201,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"IconMark\"]\n18:null\n"])</script><script>self.__next_f.push([1,"1d:[[\"$\",\"title\",\"0\",{\"children\":\"conduxt β€” AI Agent Skill | BytesAgain | BytesAgain\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux (fallback), composing OpenClaw native tools and community Skills. Handles any codi...\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"4\",{\"name\":\"llms-txt\",\"content\":\"https://bytesagain.com/llms.txt\"}],[\"$\",\"meta\",\"5\",{\"name\":\"llms-full-txt\",\"content\":\"https://bytesagain.com/llms-full.txt\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://bytesagain.com/skill/conduxt\"}],[\"$\",\"meta\",\"7\",{\"name\":\"baidu-site-verification\",\"content\":\"codeva-0evUqX1TFs\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"conduxt β€” AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux (fallback), composing OpenClaw native tools and community Skills. Handles any codi...\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://bytesagain.com/skill/conduxt\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"BytesAgain\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"conduxt β€” AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux (fallback), composing OpenClaw native tools and community Skills. Handles any codi...\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1e\",\"23\",{}]]\n"])</script><script>self.__next_f.push([1,"1f:T1562,"])</script><script>self.__next_f.push([1,"\n .skill-page { max-width: 1100px; margin: 0 auto; padding: 32px 20px 80px; }\n .two-col { display: flex; gap: 32px; align-items: flex-start; }\n .two-col-main { flex: 1; min-width: 0; }\n .two-col-side { width: 300px; flex-shrink: 0; }\n @media (max-width: 860px) {\n .two-col { flex-direction: column; }\n .two-col-side { width: 100%; }\n }\n .breadcrumb { font-size: .82em; color: var(--text-muted2); margin-bottom: 28px; }\n .breadcrumb a { color: #818cf8; text-decoration: none; }\n .breadcrumb a:hover { text-decoration: underline; }\n .skill-card { background: var(--bg-card); border: 1px solid var(--border-card); border-radius: 20px; padding: 28px; margin-bottom: 24px; }\n .skill-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }\n .skill-badges { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n .skill-top-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; }\n .badge { display: inline-flex; align-items: center; gap: 5px; font-size: .75em; font-weight: 600; padding: 4px 12px; border-radius: 999px; border: 1px solid transparent; }\n .skill-title { font-size: 1.6em; font-weight: 800; color: var(--text-primary); margin: 0 0 4px; line-height: 1.2; }\n .skill-owner { font-size: .82em; color: var(--text-muted2); margin: 0 0 14px; }\n .skill-owner span { color: #818cf8; }\n .skill-desc { font-size: .92em; color: var(--text-secondary); line-height: 1.65; margin: 0 0 16px; }\n .skill-meta { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px solid var(--border-card); }\n .meta-item { display: flex; flex-direction: column; gap: 2px; }\n .meta-label { font-size: .7em; color: var(--text-muted5); text-transform: uppercase; letter-spacing: 1px; font-weight: 600; }\n .meta-value { font-size: .92em; color: var(--text-muted2); font-weight: 600; }\n .tags-row { display: flex; gap: 6px; flex-wrap: wrap; }\n .tag { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 3px 10px; text-decoration: none; }\n .tag:hover { background: #6366f125; }\n .install-box { background: var(--bg-deep); border: 1px solid var(--border-card); border-radius: 12px; overflow: hidden; margin-bottom: 24px; }\n .install-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; border-bottom: 1px solid var(--border-card); }\n .install-dots { display: flex; gap: 6px; }\n .dot { width: 10px; height: 10px; border-radius: 50%; }\n .install-label { font-size: .72em; color: var(--text-muted5); font-family: monospace; letter-spacing: 1px; }\n .install-body { padding: 16px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .install-cmd { color: var(--text-code);\n font-family: 'Courier New', monospace; font-size: 1em; }\n .copy-btn { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 5px 12px; cursor: pointer; white-space: nowrap; transition: all .15s; }\n .copy-btn:hover { background: #6366f125; }\n .btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 13px 24px; background: transparent; border: 1px solid var(--border-card); border-radius: 10px; color: #6b7280; text-decoration: none; font-weight: 600; font-size: .95em; transition: all .15s; }\n .btn-secondary:hover { border-color: #818cf8; color: #818cf8; }\n .ours-badge { display: inline-flex; align-items: center; gap: 6px; font-size: .72em; font-weight: 700; color: #22d3ee; background: #22d3ee10; border: 1px solid #22d3ee30; border-radius: 999px; padding: 4px 14px; }\n .section-card { background: var(--bg-card); border: 1px solid var(--border-card); border-radius: 16px; padding: 22px 24px; margin-bottom: 20px; }\n .section-title { color: var(--text-primary); font-size: 1.08em; font-weight: 800; margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }\n /* Script box */\n .script-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; background: var(--bg-input); border-bottom: 1px solid var(--border-card); }\n .script-filename { font-size: .72em; color: var(--text-muted2); font-family: 'Courier New', monospace; }\n .script-copy-btn { font-size: .72em; color: #6366f1; background: none; border: 1px solid #6366f130; border-radius: 4px; padding: 2px 10px; cursor: pointer; }\n .script-copy-btn:hover { background: #6366f115; }\n .script-body { padding: 14px 16px; font-family: 'Courier New', monospace; font-size: .82em; line-height: 1.6; color: var(--text-code); overflow-x: auto; max-height: 420px; overflow-y: auto; white-space: pre; }\n /* Articles */\n .article-card { display: block; background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 10px; padding: 14px 16px; text-decoration: none; transition: border-color .15s; }\n .article-card:hover { border-color: #6366f1; }\n @media (max-width: 600px) {\n .skill-card { padding: 20px; }\n .skill-title { font-size: 1.5em; }\n }\n "])</script><script>self.__next_f.push([1,"15:[[\"$\",\"style\",null,{\"children\":\"$1f\"}],\"$L20\",\"$L21\"]\n"])</script><script>self.__next_f.push([1,"22:I[78297,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n23:Taa72,"])</script><script>self.__next_f.push([1,"\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\nname: conduxt\ndescription: \u003e\n Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux\n (fallback), composing OpenClaw native tools and community Skills.\n Handles any coding task: requirements, bug fixes, refactoring, investigations.\n Use when: \"implement feature X\", \"fix this bug\", \"refactor the API layer\",\n \"start agent\", \"open a session\", \"code this\", \"fix issue #N\".\nuser-invocable: true\nhomepage: https://github.com/xuezhouyang/conduxt\nmetadata: {\"openclaw\": {\"emoji\": \"πŸŽ›οΈ\", \"requires\": {\"bins\": [\"git\", \"jq\"], \"anyBins\": [\"acpx\", \"tmux\"]}, \"os\": [\"darwin\", \"linux\"]}}\n\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eCLI Coding Orchestrator\u003c/h2\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003e You are the orchestrator. Drive coding agents via ACPX (protocol-level) or\n\u003e tmux (terminal scraping), composing community Skills to complete end-to-end\n\u003e coding tasks β€” feature implementation, bug fixes, investigations, refactoring.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e1. Your Role\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eYou are the OpenClaw Main model. You have a full toolchain β€” use it directly\nto orchestrate tasks, not by calling pre-made bash scripts. Scripts in the\n\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/\u003c/code\u003e directory exist only as optional helpers.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e2. Dual-Backend Architecture: ACPX vs tmux\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThis Skill supports two agent communication backends. \u003cstrong style=\"color:#e5e7eb\"\u003ePrefer ACPX\u003c/strong\u003e, use tmux as fallback.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eWhy ACPX First\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Dimension | ACPX (Protocol) | tmux (Terminal Scraping) |\n|-----------|-----------------|------------------------|\n| Communication | Full-duplex JSON-RPC over stdio | Half-duplex PTY scraping |\n| Output | Typed ndjson (tool_call/text/done) | Raw ANSI text (burns 30-40% Context) |\n| Mid-task instructions | Prompt queue: submit anytime, queued | send-keys: timing issues, may be treated as user input |\n| Completion detection | Native \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e[done]\u003c/code\u003e signal | Regex matching or Callback injection |\n| Cancellation | Cooperative \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esession/cancel\u003c/code\u003e (preserves state) | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eC-c\u003c/code\u003e (unreliable, may corrupt state) |\n| Crash recovery | Auto-restart + load serialized session | Session survives but agent death goes unnoticed |\n| Permissions | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--approve-all\u003c/code\u003e / \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--deny-all\u003c/code\u003e policy-based | Interactive TTY popups (block unattended flows) |\n| Visual monitoring | ndjson pipe to external tools | tmux split-pane (advantage) |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eACPX is strictly superior for communication, observation, and mid-task instructions. tmux only wins on maturity and visual monitoring.\u003c/strong\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eWhen to Use Which\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Scenario | Backend |\n|----------|---------|\n| Default / new tasks | \u003cstrong style=\"color:#e5e7eb\"\u003eACPX\u003c/strong\u003e |\n| ACPX unavailable or unstable | tmux (fallback) |\n| Need visual split-pane monitoring | tmux (or ACPX + external dashboard) |\n| Agent doesn't support ACP | tmux |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e3. Toolbox\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eNative Tools\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Tool | Purpose | Key Usage |\n|------|---------|-----------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eexec\u003c/code\u003e | Run shell commands | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux send-keys\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit worktree\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh\u003c/code\u003e |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eexec pty:true\u003c/code\u003e | Interactive terminal | Simple one-off tasks (do NOT nest tmux inside PTY) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eprocess\u003c/code\u003e | Background processes | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebackground:true\u003c/code\u003e for long tasks, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eprocess action:log limit:20\u003c/code\u003e |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eread\u003c/code\u003e/\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewrite\u003c/code\u003e/\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eedit\u003c/code\u003e | File operations | MEMORY.md, active-tasks.json |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh\u003c/code\u003e | GitHub CLI | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh issue view\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh pr create\u003c/code\u003e |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit\u003c/code\u003e | Version control | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit worktree add/remove\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit branch\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit push\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eACPX Commands\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Command | Purpose |\n|---------|---------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003csession\u003e \"\u003cinstruction\u003e\"\u003c/code\u003e | Send prompt (creates session if new, appends if existing) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003csession\u003e --no-wait \"\u003cmsg\u003e\"\u003c/code\u003e | Fire-and-forget (returns immediately) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003csession\u003e --format json \"\u003cmsg\u003e\"\u003c/code\u003e | Structured ndjson output |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx sessions list\u003c/code\u003e | List all active sessions |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx sessions show -s \u003csession\u003e\u003c/code\u003e | Show session details |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx cancel -s \u003csession\u003e\u003c/code\u003e | Cooperative cancel of current task |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003csession\u003e --approve-all \"\u003cmsg\u003e\"\u003c/code\u003e | Auto-approve all permission requests |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eCommunity Skills (Composable)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Skill | When to Use | Core Capability |\n|-------|-------------|-----------------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecoding-agent\u003c/code\u003e | Agent lifecycle management (tmux backend) | tmux session + Callback wakeup + worktree |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux\u003c/code\u003e | Low-level tmux operations | Socket management, send-keys, wait-for-text |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux-agents\u003c/code\u003e | Multi-agent types (tmux backend) | Codex, Gemini, local models |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egemini\u003c/code\u003e | Gemini CLI coding | Long-context tasks |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eresilient-coding-agent\u003c/code\u003e | Gateway restart recovery | tmux session persistence |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003e \u003cstrong style=\"color:#e5e7eb\"\u003eComposition principle\u003c/strong\u003e: Use Skills when available (they encapsulate best practices).\n\u003e Fall back to native tools when Skills don't cover your needs.\n\u003e coding-agent / tmux-agents use tmux backend β€” if using ACPX backend, use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx\u003c/code\u003e commands directly.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e4. Full-Duplex Communication Model\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eACPX Path (Preferred)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eUser ←→ You (Main) ←→ acpx ←→ ACP Adapter ←→ Coding Agent\n ↕ ↕\n MEMORY.md ndjson stream (typed events: thinking/tool_call/text/done)\n prompt queue (submit anytime, protocol-level isolation)\n session persistence (~/.acpx/sessions/*.json)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eUser β†’ Agent\u003c/strong\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003csession\u003e \"\u003cinstruction\u003e\"\u003c/code\u003e enters the prompt queue\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAgent β†’ User\u003c/strong\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e[done]\u003c/code\u003e event in ndjson stream β†’ you are woken up β†’ notify user\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTrue full-duplex\u003c/strong\u003e: Submit new instructions while previous task is running, queued without timing issues\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003etmux Path (Fallback)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eUser ←→ You (Main) ←→ tmux session ←→ Coding Agent\n ↕ ↕\n MEMORY.md send-keys (inject instructions)\n capture-pane (read output)\n Callback event (completion notification)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eUser β†’ Agent\u003c/strong\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux send-keys -t \u003csession\u003e \"\u003ctext\u003e\" Enter\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAgent β†’ User\u003c/strong\u003e: Callback JSON or capture-pane polling\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTiming caveat\u003c/strong\u003e: When agent is busy, send-keys may be treated as user input. Send \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eEscape\u003c/code\u003e first and wait for idle.\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e5. Scenario Playbook\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eEach scenario provides both ACPX (preferred) and tmux (fallback) paths.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eScenario A: Execute Coding Task\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTriggers\u003c/strong\u003e (task source is flexible):\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\"Implement pagination for the users API\"\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\"Investigate this performance issue\"\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\"Refactor the API layer to RESTful\"\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\"Fix issue #78\" (optional, low priority)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e1. Understand the Task\n Task sources are diverse β€” handle flexibly:\n β€’ User describes requirement β†’ use description text as prompt directly\n β€’ Link to external doc/wiki β†’ fetch content and extract requirements\n β€’ GitHub issue β†’ exec: gh issue view \u003cN\u003e --json title,body\n β€’ Code review comments β†’ extract action items\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e2. Generate task_id and branch name\n Create semantic IDs from task content, e.g.:\n β€’ \"add pagination\" β†’ task_id: add-pagination, branch: feat/add-pagination\n β€’ \"perf issue\" β†’ task_id: perf-analysis, branch: fix/perf-analysis\n β€’ issue #78 β†’ task_id: issue-78, branch: fix/issue-78\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e3. Create isolated workspace\n β†’ exec: git worktree add ../worktrees/\u003ctask_id\u003e -b \u003cbranch\u003e main\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e4. Start Coding Agent\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e β”Œβ”€ ACPX path (preferred) ────────────────────────────────────┐\n β”‚ exec: cd ../worktrees/\u003ctask_id\u003e \u0026\u0026 acpx prompt \\ β”‚\n β”‚ -s \u003ctask_id\u003e \\ β”‚\n β”‚ --approve-all \\ β”‚\n β”‚ --no-wait \\ β”‚\n β”‚ \"\u003ctask description + callback instructions (see Β§6)\u003e\" β”‚\n β”‚ β”‚\n β”‚ β€’ --no-wait: returns immediately, doesn't block you β”‚\n β”‚ β€’ --approve-all: auto-approve permissions for unattended β”‚\n β”‚ β€’ session auto-persisted to ~/.acpx/sessions/\u003ctask_id\u003e.jsonβ”‚\n β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e β”Œβ”€ tmux path (fallback) ─────────────────────────────────────┐\n β”‚ a) Use coding-agent Skill (recommended) β”‚\n β”‚ b) Use tmux-agents Skill (for Gemini/Codex) β”‚\n β”‚ c) Direct exec: β”‚\n β”‚ tmux new-session -d -s \u003ctask_id\u003e -c ../worktrees/\u003cid\u003e β”‚\n β”‚ tmux send-keys -t \u003ctask_id\u003e \"claude\" Enter β”‚\n β”‚ tmux send-keys -t \u003ctask_id\u003e \"\u003cprompt + callback\u003e\" Enter β”‚\n β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e5. Write MEMORY.md task entry (see Β§7)\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e6. Inform user\n β†’ \"Session \u003ctask_id\u003e started, agent is working. Will notify on completion.\"\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e7. Wait for completion\n ACPX: [done] in ndjson stream β†’ read result β†’ route\n tmux: Callback arrives or 30min timeout β†’ capture-pane β†’ notify\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eParallel tasks\u003c/strong\u003e: Repeat the above for each task. ACPX natively supports named parallel sessions.\nBefore creating PRs, check for file conflicts between branches with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit diff --name-only\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eScenario B: Interactive Session (Human-in-the-Loop)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTrigger\u003c/strong\u003e: \"Start a session for API refactoring\"\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eACPX:\n exec: acpx prompt -s api-refactor \"You are my coding assistant, await instructions.\"\n β†’ Creates named session, agent enters wait state\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003etmux:\n exec: tmux new-session -d -s api-refactor -c /path/to/repo\n exec: tmux send-keys -t api-refactor \"claude\" Enter\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eReport to user:\n \"Session api-refactor started. You can:\n β€’ 'Tell api-refactor to start with interface definitions'\n β€’ 'How is api-refactor doing?'\n β€’ 'Stop api-refactor'\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eScenario C: Mid-Task Intervention (Full-Duplex Core)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTrigger\u003c/strong\u003e: \"Tell \u003csession\u003e to do Y\" / \"Change \u003csession\u003e's direction\"\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eACPX (no timing issues, protocol-level isolation):\n Append instruction: acpx prompt -s \u003csession\u003e --no-wait \"Focus on interface definitions, skip DB layer\"\n Cancel current: acpx cancel -s \u003csession\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003etmux (watch for timing):\n Append instruction: tmux send-keys -t \u003csession\u003e \"Focus on interface definitions\" Enter\n Interrupt current: tmux send-keys -t \u003csession\u003e Escape\n Force stop: tmux send-keys -t \u003csession\u003e C-c\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eScenario D: Check Progress\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTrigger\u003c/strong\u003e: \"How is \u003csession\u003e doing?\" / \"status\"\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eACPX:\n exec: acpx sessions show -s \u003csession\u003e\n β†’ Structured session state, no ANSI stripping needed\n β†’ Or use --format json for recent ndjson events\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003etmux:\n exec: tmux capture-pane -p -t \u003csession\u003e -S -20\n β†’ Strip ANSI: sed 's/\\x1b\\[[0-9;]*[a-zA-Z]//g'\n β†’ Summarize for user (don't paste raw terminal output)\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eList all sessions:\n ACPX: acpx sessions list\n tmux: tmux list-sessions\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eScenario E: Agent Selection\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Condition | Recommended Agent | ACPX Launch | tmux Launch |\n|-----------|------------------|-------------|-------------|\n| Default / best coding | Claude Code | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s X --agent claude\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecoding-agent\u003c/code\u003e Skill |\n| Long context needed | Gemini CLI | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s X --agent gemini\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egemini\u003c/code\u003e Skill |\n| Need Codex | Codex CLI | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s X --agent codex\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux-agents\u003c/code\u003e Skill |\n| Simple one-off | Direct exec | No session needed | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eexec pty:true\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eACPX-supported agent adapters:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eClaude Code: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpx @zed-industries/claude-agent-acp\u003c/code\u003e (adapter)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCodex CLI: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpx @zed-industries/codex-acp\u003c/code\u003e (adapter)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eGemini CLI: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egemini --experimental-acp\u003c/code\u003e (native support)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eScenario F: PR Creation\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTrigger\u003c/strong\u003e: [done] signal or Callback shows completed + tests pass\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e1. Independently verify tests (don't trust agent's self-report)\n β†’ cd \u003cworktree\u003e \u0026\u0026 \u003cauto-detect test runner\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e2. Push branch\n β†’ git push -u origin \u003cbranch\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e3. Create PR\n β†’ gh pr create --title \"fix: \u003ctitle\u003e\" --body \"...\" --base main --head \u003cbranch\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e4. Update MEMORY.md: status=completed, add PR link\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e5. Notify user\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eScenario G: Cleanup\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eACPX:\n End session (history preserved in ~/.acpx/sessions/)\n β†’ No need to kill processes, ACPX manages lifecycle\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003etmux:\n tmux kill-session -t \u003csession\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCommon:\n git worktree remove \u003cdir\u003e --force\n git branch -d \u003cbranch\u003e (optional)\n Edit MEMORY.md: status β†’ abandoned or completed\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e6. Structured Callback Protocol\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eACPX Path\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eACPX ndjson stream natively provides \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e[done]\u003c/code\u003e signals, but we still inject the\nCallback JSON instruction for unified processing logic. The JSON can be extracted\ndirectly from the ndjson stream β€” \u003cstrong style=\"color:#e5e7eb\"\u003eno regex matching against terminal output\u003c/strong\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003etmux Path\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eRequires injection and detection of \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecallback-json\u003c/code\u003e keyword via capture-pane.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eInjection Content (Shared by Both Paths)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eAppend to the end of the agent prompt:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eWhen you complete this task, you MUST output the following JSON block\nwrapped in triple backticks with language tag \"callback-json\":\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e{\n \"task_id\": \"\u003ctask_id\u003e\",\n \"status\": \"completed|failed|need_clarification\",\n \"branch\": \"\u003cbranch\u003e\",\n \"files_changed\": [\"file1.go\", \"file2_test.go\"],\n \"test_results\": { \"passed\": 42, \"failed\": 0, \"skipped\": 1 },\n \"duration_minutes\": 12,\n \"summary\": \"Brief description of what was done\"\n}\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCommit your code and run tests BEFORE outputting this JSON. This is mandatory.\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eRouting Rules\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Condition | Your Action |\n|-----------|-------------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecompleted\u003c/code\u003e + \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efailed=0\u003c/code\u003e | Independently verify tests β†’ create PR β†’ notify user |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecompleted\u003c/code\u003e + \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efailed\u003e0\u003c/code\u003e | Append instruction: \"N tests failing, please fix and re-output callback\" |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efailed\u003c/code\u003e | Update MEMORY.md β†’ notify user of failure reason |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eneed_clarification\u003c/code\u003e | Forward \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esummary\u003c/code\u003e to user, wait for reply, then send to agent |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003ePure if/else β€” no LLM interpretation of natural language needed.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eCompletion Detection Comparison\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Method | ACPX | tmux |\n|--------|------|------|\n| Primary | ndjson \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e[done]\u003c/code\u003e signal | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecoding-agent\u003c/code\u003e Skill built-in Callback |\n| Fallback | Extract callback-json from ndjson | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecapture-pane\u003c/code\u003e regex matching |\n| Background | N/A (stream is continuous) | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/watchdog.sh\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e7. State Persistence\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eMEMORY.md Task Entry\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e## In-Flight Tasks\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eadd-pagination: Implement pagination for /api/users\u003c/h4\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eStatus\u003c/strong\u003e: in-progress\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eBranch\u003c/strong\u003e: feat/add-pagination\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eSession\u003c/strong\u003e: add-pagination\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eBackend\u003c/strong\u003e: ACPX | tmux\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAgent\u003c/strong\u003e: Claude Code | Gemini CLI\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eStarted\u003c/strong\u003e: 2026-03-10T14:30:00Z\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eLatest Milestone\u003c/strong\u003e: 14:42 - Running tests\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCallback\u003c/strong\u003e: pending\u003c/li\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eWhen to Write\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Event | Action |\n|-------|--------|\n| Task created | Add entry, status=pending |\n| Agent started | status β†’ in-progress, record backend type |\n| User asks for progress | Update Latest Milestone |\n| Completion signal received | status β†’ completed/failed |\n| PR created | Add PR link |\n| Cleanup | status β†’ completed/abandoned |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003e \u003cstrong style=\"color:#e5e7eb\"\u003eMEMORY.md must be written under any backend\u003c/strong\u003e β€” it is the only shared state\n\u003e across sessions and agents. ACPX session history is per-agent and does not\n\u003e share across sessions.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e8. Crash Detection\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eACPX Path\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eACPX has built-in crash recovery β€” auto-restarts agent and loads serialized session.\nYou only need to check if the session is still active:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eacpx sessions list # check if session exists\nacpx sessions show -s \u003csession\u003e # check detailed status\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eIf session disappeared (ACPX itself crashed), recover context from MEMORY.md and recreate.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003etmux Path\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003etmux session survives but agent may have died:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003etmux has-session -t \u003csession\u003e 2\u003e/dev/null # is session alive\ntmux capture-pane -p -t \u003csession\u003e -S -1 # any output\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eOptional: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/watchdog.sh\u003c/code\u003e background loop (zero token).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e9. Optional Helper Scripts\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThree scripts in \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escripts/\u003c/code\u003e with dual-backend support. You \u003cstrong style=\"color:#e5e7eb\"\u003ecan use them but don't have to\u003c/strong\u003e:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Script | Purpose |\n|--------|---------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esetup.sh \u003ctask_id\u003e \u003cbranch\u003e \u003cworktree_dir\u003e [task_desc] [backend]\u003c/code\u003e | Create branch + worktree + initialize MEMORY.md |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003elaunch.sh \u003ctask_id\u003e \u003cworktree_dir\u003e \u003cprompt_file\u003e [backend] [agent]\u003c/code\u003e | ACPX-first agent launch with auto tmux fallback |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewatchdog.sh [task_id]\u003c/code\u003e | Background zero-token monitoring (ACPX/tmux aware) |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eParameters:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebackend\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx\u003c/code\u003e (default if available) | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eauto\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eagent\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eclaude\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egemini\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecodex\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eaider\u003c/code\u003e | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eauto\u003c/code\u003e\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e10. Command Reference\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eACPX Commands\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Action | Command |\n|--------|---------|\n| Send prompt | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003cname\u003e \"\u003ctext\u003e\"\u003c/code\u003e |\n| Fire-and-forget | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003cname\u003e --no-wait \"\u003ctext\u003e\"\u003c/code\u003e |\n| Structured output | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003cname\u003e --format json \"\u003ctext\u003e\"\u003c/code\u003e |\n| Auto-approve perms | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx prompt -s \u003cname\u003e --approve-all \"\u003ctext\u003e\"\u003c/code\u003e |\n| List sessions | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx sessions list\u003c/code\u003e |\n| Show session | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx sessions show -s \u003cname\u003e\u003c/code\u003e |\n| Cancel task | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx cancel -s \u003cname\u003e\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003etmux Commands\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Action | Command |\n|--------|---------|\n| Create session | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux new-session -d -s \u003cname\u003e -c \u003cdir\u003e\u003c/code\u003e |\n| Send instruction | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux send-keys -t \u003cname\u003e \"\u003ctext\u003e\" Enter\u003c/code\u003e |\n| Read output | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux capture-pane -p -t \u003cname\u003e -S -30\u003c/code\u003e |\n| List sessions | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux list-sessions\u003c/code\u003e |\n| Send interrupt | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux send-keys -t \u003cname\u003e C-c\u003c/code\u003e |\n| Kill session | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux kill-session -t \u003cname\u003e\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eCommon Commands\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Action | Command |\n|--------|---------|\n| Fetch issue | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh issue view \u003cN\u003e --json title,body,labels\u003c/code\u003e |\n| Create worktree | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit worktree add \u003cdir\u003e -b \u003cbranch\u003e main\u003c/code\u003e |\n| Remove worktree | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit worktree remove \u003cdir\u003e\u003c/code\u003e |\n| Push branch | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit push -u origin \u003cbranch\u003e\u003c/code\u003e |\n| Create PR | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh pr create --title \"...\" --body \"...\" --base main --head \u003cbranch\u003e\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e11. Relationship with Existing Skills\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Skill | Backend | Your Usage |\n|-------|---------|------------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecoding-agent\u003c/code\u003e | tmux | Preferred agent launch for tmux fallback |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux\u003c/code\u003e | tmux | Low-level operations (custom socket, wait-for-text) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etmux-agents\u003c/code\u003e | tmux | Multi-agent types (Codex, Gemini, local models) |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egemini\u003c/code\u003e | tmux | Gemini CLI for long-context tasks |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eresilient-coding-agent\u003c/code\u003e | tmux | Gateway restart recovery |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003e When using ACPX backend, these tmux-based Skills don't apply. Use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eacpx\u003c/code\u003e commands directly.\n\u003e When ACPX is unavailable, fall back to these Skills.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e12. Evolution Roadmap\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003ePhase 1 (Current): ACPX and tmux in parallel\n β€’ New tasks prefer ACPX\n β€’ ACPX instability β†’ tmux fallback\n β€’ Validate ACPX session persistence and crash recovery\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003ePhase 2: High-value migration\n β€’ Migrate half-duplex and context-pollution-heavy scenarios to ACPX\n β€’ tmux demoted to visual monitoring only\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003ePhase 3 (End state): ACPX as primary path\n β€’ tmux optional (visual only)\n β€’ ACPX becomes the standard interface for all agent communication\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e13. Important Notes\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e1. \u003cstrong style=\"color:#e5e7eb\"\u003eACPX stability\u003c/strong\u003e: ACPX is still early-stage and may have breaking changes. Fall back to tmux immediately on issues.\n2. \u003cstrong style=\"color:#e5e7eb\"\u003eNo PTY nesting\u003c/strong\u003e: Do NOT start tmux inside \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eexec pty:true\u003c/code\u003e (double PTY allocation)\n3. \u003cstrong style=\"color:#e5e7eb\"\u003etmux send-keys timing\u003c/strong\u003e: When agent is busy, send \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eEscape\u003c/code\u003e first and wait for idle before appending\n4. \u003cstrong style=\"color:#e5e7eb\"\u003eDon't pull full logs\u003c/strong\u003e: Use capture-pane \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e-S -20\u003c/code\u003e, ACPX use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--format json\u003c/code\u003e pipe\n5. \u003cstrong style=\"color:#e5e7eb\"\u003eSecurity\u003c/strong\u003e: Never pass API keys or secrets via send-keys or acpx prompt\n6. \u003cstrong style=\"color:#e5e7eb\"\u003eACPX permissions\u003c/strong\u003e: Use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--approve-all\u003c/code\u003e for unattended; \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--approve-reads\u003c/code\u003e when security matters\n7. \u003cstrong style=\"color:#e5e7eb\"\u003eContext pollution\u003c/strong\u003e: ACPX ndjson can pipe to external monitoring without entering Context; tmux capture-pane is zero-token\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e14. User Command Mapping\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| User Says | What You Do |\n|-----------|-------------|\n| \"Implement feature X for project Y\" | Scenario A: understand requirement β†’ create task β†’ start agent |\n| \"Investigate this performance issue\" | Scenario A: analyze problem β†’ create investigation task |\n| \"Do these three tasks in parallel\" | Scenario A Γ— N (parallel named sessions) |\n| \"Fix issue #78\" (optional) | Scenario A: fetch issue description |\n| \"Start a session for X\" | Scenario B: interactive |\n| \"Tell \u003csession\u003e to do Y\" | Scenario C: acpx prompt / tmux send-keys |\n| \"How is \u003csession\u003e doing?\" | Scenario D: acpx sessions show / capture-pane |\n| \"Use Gemini for this task\" | Scenario E: acpx --agent gemini / gemini Skill |\n| \"Create PR\" | Scenario F |\n| \"Stop \u003csession\u003e\" / \"cleanup\" | Scenario G |\n| \"status\" | List all sessions + MEMORY.md in-flight tasks |\n| \"retry \u003ctask\u003e\" | Scenario G cleanup + Scenario A restart |\n\u003c/p\u003e"])</script><script>self.__next_f.push([1,"20:[\"$\",\"div\",null,{\"className\":\"skill-page\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"conduxt\\\",\\\"description\\\":\\\"Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux (fallback), composing OpenClaw native tools and community Skills. Handles any codi...\\\",\\\"url\\\":\\\"https://bytesagain.com/skill/conduxt\\\",\\\"applicationCategory\\\":\\\"clawhub\\\",\\\"operatingSystem\\\":\\\"Any\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"USD\\\"},\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"BytesAgain\\\",\\\"url\\\":\\\"https://bytesagain.com\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"breadcrumb\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"children\":\"BytesAgain\"}],\" β€Ί \",[\"$\",\"a\",null,{\"href\":\"/skills\",\"children\":\"Skills\"}],\" β€Ί \",\"conduxt\"]}],[\"$\",\"div\",null,{\"className\":\"two-col\",\"children\":[[\"$\",\"div\",null,{\"className\":\"two-col-main\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-badges\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge\",\"style\":{\"color\":\"#818cf8\",\"background\":\"#818cf822\",\"borderColor\":\"#818cf844\"},\"children\":[\"πŸ¦€\",\" \",\"ClawHub\"]}],false]}],[\"$\",\"div\",null,{\"className\":\"skill-top-actions\",\"children\":[\"$\",\"$L22\",null,{\"slug\":\"conduxt\"}]}]]}],[\"$\",\"h1\",null,{\"className\":\"skill-title\",\"children\":\"conduxt\"}],[\"$\",\"p\",null,{\"className\":\"skill-owner\",\"children\":[\"by \",[\"$\",\"span\",null,{\"children\":[\"@\",\"xuezhouyang\"]}]]}],[\"$\",\"p\",null,{\"className\":\"skill-desc\",\"children\":\"Orchestrate full-duplex coding agent sessions via ACPX (preferred) or tmux (fallback), composing OpenClaw native tools and community Skills. Handles any codi...\"}],[\"$\",\"div\",null,{\"className\":\"skill-meta\",\"children\":[[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Version\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"v\",\"1.0.1\"]}]]}],[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Downloads\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":\"853\"}]]}],false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Stars\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"⭐ \",\"2\"]}]]}],false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"style\":{\"flexDirection\":\"row\",\"gap\":6,\"alignItems\":\"center\"},\"children\":[[\"$\",\"a\",\"legal\",{\"href\":\"/?q=legal\",\"className\":\"tag\",\"children\":[\"#\",\"legal\"]}],[\"$\",\"a\",\"gaming\",{\"href\":\"/?q=gaming\",\"className\":\"tag\",\"children\":[\"#\",\"gaming\"]}]]}]]}],[\"$\",\"div\",null,{\"style\":{\"marginTop\":6},\"children\":[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/xuezhouyang/conduxt\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"btn-secondary\",\"style\":{\"padding\":\"6px 12px\",\"fontSize\":\".82em\",\"borderRadius\":8,\"background\":\"transparent\",\"border\":\"1px solid var(--border-card)\",\"color\":\"var(--text-muted2)\",\"textDecoration\":\"none\",\"whiteSpace\":\"nowrap\"},\"children\":[\"View on \",\"ClawHub\",\" β†’\"]}]}]]}],[\"$\",\"div\",null,{\"className\":\"install-box\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-dots\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#ef4444\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#eab308\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#22c55e\"}}]]}],[\"$\",\"span\",null,{\"className\":\"install-label\",\"children\":\"TERMINAL\"}]]}],[\"$\",\"div\",null,{\"className\":\"install-body\",\"style\":{\"flexWrap\":\"wrap\"},\"children\":[[\"$\",\"code\",null,{\"className\":\"install-cmd\",\"children\":\"clawhub install conduxt\"}],[\"$\",\"button\",null,{\"className\":\"copy-btn\",\"data-cmd\":\"clawhub install conduxt\",\"style\":{\"fontWeight\":700},\"children\":\"Copy\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"πŸ“– About This Skill\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"$23\"}}]]}],null,null,null,null,null,null,null,false,false]}],\"$L24\"]}]]}]\n"])</script><script>self.__next_f.push([1,"21:[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn =\u003e {\\n btn.addEventListener('click', () =\u003e {\\n const cmd = btn.getAttribute('data-cmd');\\n if (!cmd) return;\\n navigator.clipboard.writeText(cmd).then(() =\u003e {\\n const orig = btn.textContent;\\n btn.textContent = 'Copied!';\\n setTimeout(() =\u003e btn.textContent = orig, 1500);\\n }).catch(() =\u003e {});\\n });\\n });\\n \"}}]\n"])</script><script>self.__next_f.push([1,"25:I[71521,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n24:[\"$\",\"div\",null,{\"className\":\"two-col-side\",\"children\":[\"$\",\"$L25\",null,{\"category\":\"clawhub\",\"currentSlug\":\"conduxt\",\"name\":\"conduxt\",\"tags\":[\"legal\",\"gaming\"]}]}]\n"])</script></body></html>