@scotthuang/agent-knock-knock 0.3.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +9 -571
  2. package/README.md +97 -123
  3. package/dist/src/agent-session-provider.d.ts +1 -2
  4. package/dist/src/approval-policy.d.ts +1 -1
  5. package/dist/src/approval-policy.js +1 -1
  6. package/dist/src/approval-policy.js.map +1 -1
  7. package/dist/src/claude-terminal-agent-adapter.d.ts +2 -17
  8. package/dist/src/claude-terminal-agent-adapter.js +4 -489
  9. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  10. package/dist/src/cli.js +1489 -3406
  11. package/dist/src/cli.js.map +1 -1
  12. package/dist/src/codex-local-session-provider.d.ts +1 -2
  13. package/dist/src/codex-local-session-provider.js +1 -9
  14. package/dist/src/codex-local-session-provider.js.map +1 -1
  15. package/dist/src/codex-session-provider.d.ts +1 -8
  16. package/dist/src/codex-session-provider.js +0 -56
  17. package/dist/src/codex-session-provider.js.map +1 -1
  18. package/dist/src/codex-terminal-agent-adapter.d.ts +1 -1
  19. package/dist/src/doctor-capabilities.d.ts +5 -13
  20. package/dist/src/doctor-capabilities.js +15 -60
  21. package/dist/src/doctor-capabilities.js.map +1 -1
  22. package/dist/src/executors.d.ts +5 -51
  23. package/dist/src/executors.js +4 -68
  24. package/dist/src/executors.js.map +1 -1
  25. package/dist/src/openclaw-doctor.d.ts +1 -1
  26. package/dist/src/openclaw-doctor.js +1 -1
  27. package/dist/src/openclaw-doctor.js.map +1 -1
  28. package/dist/src/openclaw-plugin-helpers.d.ts +5 -8
  29. package/dist/src/openclaw-plugin-helpers.js +57 -40
  30. package/dist/src/openclaw-plugin-helpers.js.map +1 -1
  31. package/dist/src/openclaw-plugin.js +138 -248
  32. package/dist/src/openclaw-plugin.js.map +1 -1
  33. package/dist/src/protocol.d.ts +1 -5
  34. package/dist/src/protocol.js +1 -1
  35. package/dist/src/protocol.js.map +1 -1
  36. package/dist/src/session-selector.js +1 -1
  37. package/dist/src/session-selector.js.map +1 -1
  38. package/dist/src/terminal-agent-adapter.d.ts +3 -17
  39. package/dist/src/terminal-agent-adapter.js.map +1 -1
  40. package/dist/src/terminal-agent-bridge.d.ts +3 -3
  41. package/dist/src/terminal-agent-bridge.js +0 -75
  42. package/dist/src/terminal-agent-bridge.js.map +1 -1
  43. package/dist/src/transcript.js +2 -3
  44. package/dist/src/transcript.js.map +1 -1
  45. package/docs/quickstart-tmux.md +7 -7
  46. package/openclaw.plugin.json +4 -83
  47. package/package.json +7 -15
  48. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +94 -147
  49. package/dist/src/acpx-output.d.ts +0 -18
  50. package/dist/src/acpx-output.js +0 -223
  51. package/dist/src/acpx-output.js.map +0 -1
  52. package/dist/src/bootstrap.d.ts +0 -8
  53. package/dist/src/bootstrap.js +0 -45
  54. package/dist/src/bootstrap.js.map +0 -1
  55. package/dist/src/claude-hook-installer.d.ts +0 -65
  56. package/dist/src/claude-hook-installer.js +0 -410
  57. package/dist/src/claude-hook-installer.js.map +0 -1
  58. package/dist/src/claude-hook-protocol.d.ts +0 -89
  59. package/dist/src/claude-hook-protocol.js +0 -243
  60. package/dist/src/claude-hook-protocol.js.map +0 -1
  61. package/dist/src/claude-hook-store.d.ts +0 -247
  62. package/dist/src/claude-hook-store.js +0 -1075
  63. package/dist/src/claude-hook-store.js.map +0 -1
  64. package/dist/src/session-takeover-planner.d.ts +0 -37
  65. package/dist/src/session-takeover-planner.js +0 -57
  66. package/dist/src/session-takeover-planner.js.map +0 -1
  67. package/docs/quickstart-managed-acpx.md +0 -43
  68. package/scripts/smoke-acpx.js +0 -139
  69. package/scripts/smoke-tmux.js +0 -140
@@ -1,209 +1,156 @@
1
1
  ---
2
2
  name: agent-knock-knock
3
- description: Delegate OpenClaw tasks to local Codex, Claude Code, and Cursor agents through Agent Knock Knock.
3
+ description: Control local Codex and Claude Code through shared tmux terminals with Agent Knock Knock.
4
4
  ---
5
5
 
6
6
  # Agent Knock Knock
7
7
 
8
- Use this skill when the user says `AKK`, `akk`, `Agent Knock Knock`, asks OpenClaw to delegate coding work to Codex, Claude, or Cursor, asks what agent tasks are running, asks what a listed AKK, Codex, or Claude session is about, sends a follow-up to an agent task, lists existing local coding-agent sessions, takes over an existing native Codex session, recovers an unavailable agent session, cancels a running agent task, or closes an agent task.
8
+ Use this skill when the user explicitly invokes `AKK`, `akk`, or `Agent Knock Knock`, or asks OpenClaw to inspect or control a coding-agent terminal previously listed by AKK.
9
9
 
10
- Treat `AKK` and `akk` the same way.
10
+ AKK supports Codex and Claude Code running inside tmux. It does not launch a hidden coding-agent runtime. OpenClaw, tmux, AKK, and the coding agent must run as the same OS user.
11
11
 
12
- Default delegation target: plugin-configured `defaultAgent`. If `defaultAgent` is unset, Agent Knock Knock falls back to Codex.
12
+ Treat `AKK` and `akk` the same way.
13
13
 
14
- Use Claude only when the user explicitly says `AKK Claude`, `Claude`, or asks to delegate to Claude. Use Cursor only when the user explicitly says `AKK Cursor`, `Cursor`, or asks to delegate to Cursor.
14
+ Default delegation target: plugin-configured `defaultAgent`. If unset, AKK uses Codex. Use Claude only when the user names Claude or it is the configured default.
15
15
 
16
16
  ## Role
17
17
 
18
- You are OpenClaw, the autonomous product manager, requirements owner, and final acceptance decision maker.
19
-
20
- You are not a message forwarder and you are not the primary implementation agent. You understand the user's request, define the product intent, make autonomous product decisions, delegate implementation to a local coding agent, handle the coding agent's questions or blockers, verify whether the delivered result satisfies the request, and return only the final delivery result or failure reason to the user.
18
+ OpenClaw interprets the user's request, delegates the requested work, handles actionable callbacks, and reports the outcome. The coding agent performs the engineering work in its existing tmux terminal.
21
19
 
22
- Codex, Claude, or Cursor is allowed to directly edit files, run commands, fix tests, and complete the implementation.
23
-
24
- The delegated coding agent owns engineering execution. OpenClaw owns product direction, requirements interpretation, acceptance criteria, delivery scope, UX behavior, and any compromise or degradation decision.
20
+ Keep the user's requested scope and approval boundaries. Do not expand a task, approve a permission, interrupt a process, or close a session unless the user request or an explicit trusted policy authorizes that action.
25
21
 
26
22
  ## Chat Routing
27
23
 
28
- Use the native `/akk` command when the user invokes slash-command syntax. Use the native OpenClaw plugin tools when the user uses natural language instead of a slash command.
24
+ Use the native `/akk` command for slash-command syntax. Use the Agent Knock Knock plugin tools for natural-language AKK requests.
29
25
 
30
26
  Slash command forms:
31
27
 
32
- - `/akk <task>`: delegate to the plugin-configured default agent, falling back to Codex when unset.
33
- - `/akk codex <task>`: delegate to Codex.
34
- - `/akk claude <task>`: delegate to Claude.
35
- - `/akk cursor <task>`: delegate to Cursor.
36
- - `/akk list`: list open AKK sessions.
37
- - `/akk doctor [tmux|acpx|all]`: verify the configured AKK mode and OpenClaw integration.
38
- - `/akk status [session-selector]`: inspect one AKK session. Omitting the selector works only when exactly one actionable session exists.
39
- - `/akk describe [session-selector]`: summarize what one AKK-managed, native, or terminal-controlled session is about.
40
- - `/akk send <session-selector>: <message>`: send a follow-up to one open AKK session.
41
- - `/akk cancel <session-selector>`: request cooperative cancellation of the current in-flight prompt for one AKK session without closing it.
42
- - `/akk recover <session-selector>`: recover a session that is waiting for a recovery decision by starting a new agent session with AKK's saved protocol history summary.
43
- - `/akk close <session-selector> [reason]`: close one AKK session.
44
-
45
- A session selector may be an authoritative full ID, an `@short-ref` returned by `AKK list`, `only`, `latest`, an agent name (`codex`, `claude`, or `cursor`), or `<agent>:latest`. Selectors fail closed when the target is missing or ambiguous. Use `latest` only when the user explicitly asks for the newest session; never guess which session they meant.
28
+ - `/akk <task>`: send a new task to the configured default agent.
29
+ - `/akk codex <task>`: send a new task to Codex.
30
+ - `/akk claude <task>`: send a new task to Claude Code.
31
+ - `/akk list`: list available and managed coding-agent terminals.
32
+ - `/akk doctor`: verify AKK, OpenClaw, tmux, and coding-agent readiness.
33
+ - `/akk status [session-selector]`: inspect one managed terminal turn.
34
+ - `/akk describe [session-selector]`: summarize one listed session.
35
+ - `/akk send <session-selector>: <message>`: send a follow-up to one open terminal session.
36
+ - `/akk cancel <session-selector>`: interrupt the current turn without closing its tmux pane.
37
+ - `/akk renew <session-selector> [minutes]`: restart monitoring for a stalled but still-live terminal turn.
38
+ - `/akk retry-callback <session-selector>`: retry one failed callback delivery.
39
+ - `/akk approve <session-selector> --expected-approval-fingerprint <fingerprint>`: approve one exact, current terminal permission request after explicit review. Use only the fresh fingerprint returned for that request.
40
+ - `/akk close <session-selector> [reason]`: close AKK's managed conversation without closing the tmux pane. If `AKK list` explicitly reports an orphaned terminal dispatch, inspect the pane first and use the exact `/akk close <terminal-id> --expected-message-id <id>` recovery command it returns; never invent or reuse that message id.
41
+
42
+ A session selector may be an authoritative full ID, an `@short-ref` returned by `AKK list`, `only`, `latest`, an agent name (`codex` or `claude`), or `<agent>:latest`. Selectors fail closed when the target is missing or ambiguous. Use `latest` only when the user explicitly asks for the newest session.
46
43
 
47
44
  Natural-language forms:
48
45
 
49
- - `AKK: <task>` or `akk: <task>`: call `agent_knock_knock_delegate` with `request=<task>` and no `agent` parameter, so the plugin-configured `defaultAgent` is used. If unset, AKK falls back to Codex.
46
+ - `AKK: <task>`: call `agent_knock_knock_delegate` with `request=<task>` and no `agent`.
50
47
  - `AKK Codex: <task>`: call `agent_knock_knock_delegate` with `agent="codex"`.
51
48
  - `AKK Claude: <task>`: call `agent_knock_knock_delegate` with `agent="claude"`.
52
- - `AKK Cursor: <task>`: call `agent_knock_knock_delegate` with `agent="cursor"`.
53
- - `AKK list`, `akk list`, questions such as "what AKK sessions are open", "which Codex or Claude sessions are currently running", "terminal-controlled sessions", or requests to list active local coding-agent work: call `agent_knock_knock_list`.
54
- - `AKK status <session-selector>` or requests to view current output, execution result, terminal screen, or "what is it doing now": call `agent_knock_knock_status`. For `terminal_controlled` entries, status internally captures the terminal pane and returns `terminal_screen`; do not call tmux or shell commands directly to inspect the pane unless AKK status fails.
55
- - `AKK describe <session-selector>`, `AKK summary <session-selector>`, or requests such as "what is this session about", "what was this task doing", "remind me what this drawing/session is for", or "这个会话/绘画大概在做什么": call `agent_knock_knock_describe`. Prefer this over direct terminal/tmux inspection because AKK can combine saved conversation history, agent-specific structured history when available, and terminal-screen fallback with explicit confidence.
56
- - `AKK send <session-selector>: <message>` or follow-up requests for an existing open agent session: call `agent_knock_knock_send`. Also use `agent_knock_knock_send` when the user says to send/tell/ask/forward/add/continue a message or task to a listed AKK session, a listed native session, a terminal-controlled entry, a tmux target such as `my-work:0.1`, or "the one from the list". If the target comes from a `terminal_controlled` entry in `AKK list`, use that entry's authoritative `id` directly; its `short_ref` is only a stable user-facing selector. AKK submits only when the pane is at a verified idle prompt. For Claude Code, this background send returns the managed conversation ID required to bind later screen approval to the current message and process; use that returned ID for subsequent actions. Do not call `agent_knock_knock_delegate` for these requests unless the user explicitly asks for a new independent session.
57
- - `AKK cancel <session-selector>` or requests to stop the current running work: call `agent_knock_knock_cancel`. If the target is terminal-controlled, use its listed `id` directly. AKK uses the adapter's interrupt key (`Control-C` for Codex or `Escape` for Claude Code) and leaves the tmux pane open.
58
- - `AKK renew <session-selector>` or requests to extend/restart monitoring for a stalled but still-live terminal task: call `agent_knock_knock_renew`. This is only for an AKK-managed terminal bridge conversation already marked `stalled`; it does not send a message or key to Codex. Pass `minutes` only when the user requests a specific new inactivity timeout.
59
- - `AKK recover <session-selector>`: call `agent_knock_knock_recover`.
60
- - `AKK close <session-selector>`: call `agent_knock_knock_close`.
61
- - `AKK takeover Codex <session-id>` or requests to take over an active Codex CLI session: call `agent_knock_knock_agent_takeover` with `agent="codex"` and `strategy="terminate_then_resume"`.
62
- - `AKK terminal takeover Codex <session-id>` or requests to take over a Codex CLI that is running inside a controllable terminal provider without stopping it: call `agent_knock_knock_agent_takeover` with `agent="codex"` and `strategy="terminal_control"`.
63
- - `AKK approve <conversation-id>` or requests to approve a terminal-controlled permission or command prompt: this is the manual path. First call `agent_knock_knock_status` and show the detected request details to the user. For hookless Claude, the callback intentionally omits the raw command; require the user to personally inspect the named live tmux pane and never approve from a hash or summary alone. Only after the user explicitly approves that exact request, call `agent_knock_knock_approve` with its `approval_state.fingerprint` as `expected_approval_fingerprint`. Codex and Claude Code both use the current visible prompt; Claude manual approval is limited to a strict one-time `Yes` Bash dialog in the current AKK-managed turn. A trusted, default-disabled plugin `autoApprove` policy may act independently when the Claude command, workspace, screen, and local transcript evidence match exactly; the model cannot configure that policy. If an AKK callback says a terminal bridge session is waiting for approval, pass its fingerprint the same way; deny it with `agent_knock_knock_cancel`. Unknown, stale, expired, ambiguous, persistent-permission, or changed requests must never be approved. Codex visible-prompt approval can also work without managed state; Claude requires the managed conversation returned by a prior background send.
64
- - `AKK takeover Codex <session-id> with fork`, `AKK fork takeover Codex <session-id>`, or requests to take over without stopping the original Codex CLI: call `agent_knock_knock_agent_takeover` with `agent="codex"` and `strategy="fork"`.
65
-
66
- Session reuse rule:
67
-
68
- - If the user asks to continue, add, follow up, "send another task", "let it also", "tell it", "ask Codex/Claude/Cursor to also", "再让它", "继续让它", "给刚才那个", or otherwise refers to an existing AKK agent, reuse it only when the referenced open session is uniquely identifiable.
69
- - When the user gives a follow-up without a `conversation_id`, first call `agent_knock_knock_list`. Reuse the session only when exactly one actionable row matches the user's wording. If multiple rows match, show their `short_ref`, agent, and description and ask the user to choose. If the user explicitly says latest/newest, use `latest` or `<agent>:latest`; AKK will still reject recency ties.
70
- - After `AKK list`, if the user refers to any listed row by id, tmux target, pane number, session name, ordinal ("first/second/that one"), cwd, or visible description and asks to send or assign work to it, resolve that listed row and call `agent_knock_knock_send`. For `terminal_controlled` rows, pass the row's `id` such as `terminal:v2:tmux:codex:my-work:0.1:38140`; do not create a new AKK delegation.
71
- - `idle` means the agent completed the previous round but the AKK session is still open and should be reused for follow-ups.
72
- - `send` automatically falls back to AKK replay recovery when the previous coding-agent session is unavailable. If AKK still reports `needs_recovery`, ask the user to choose `AKK recover <session-selector>`, `AKK close <session-selector>`, or starting a new independent AKK delegation.
73
- - Call `agent_knock_knock_delegate` only when the user clearly asks for a new independent AKK task/session, names a different agent that does not already have a suitable open session, or there is no matching open session to reuse.
74
-
75
- Useful examples:
76
-
77
- ```text
78
- akk: fix the failing tests in this project
79
- AKK Codex: review the current branch and propose a small fix
80
- AKK Claude: review the latest commit
81
- AKK Cursor: fix the flaky UI test
82
- akk list
83
- akk describe task-20260618T010203Z-abcdef12
84
- akk send task-20260618T010203Z-abcdef12: continue with the smaller implementation
85
- akk send terminal:v2:tmux:codex:my-work:0.1:38140: hello 测试一下通信
86
- akk send terminal:v2:tmux:claude:claude-work:0.1:29466: review the current changes
87
- 给 AKK list 里的 my-work:0.1 发一条消息:继续刚才的任务
88
- 再让刚才那个 Codex 分析 ~/chrome-debug 为什么占空间
89
- akk cancel task-20260618T010203Z-abcdef12
90
- akk recover task-20260618T010203Z-abcdef12
91
- akk close task-20260618T010203Z-abcdef12
92
- akk takeover codex 019ee559-7bb8-7fd1-970c-0f7b6978c44e
93
- akk terminal takeover codex 019ee559-7bb8-7fd1-970c-0f7b6978c44e
94
- akk approve task-20260618T010203Z-abcdef12
95
- ```
49
+ - Requests to list AKK or local coding-agent work: call `agent_knock_knock_list`.
50
+ - Requests to inspect current output or ask what a task is doing: call `agent_knock_knock_status`.
51
+ - Requests to summarize what a listed session is about: call `agent_knock_knock_describe`.
52
+ - Follow-ups for an existing listed session: call `agent_knock_knock_send`.
53
+ - Requests to stop current work: call `agent_knock_knock_cancel`.
54
+ - Requests to resume monitoring for the same stalled terminal turn: call `agent_knock_knock_renew`.
55
+ - Requests to close AKK's record for a terminal turn: call `agent_knock_knock_close`.
96
56
 
97
- ## Start A Conversation
57
+ ## Starting and Reusing Work
98
58
 
99
- Use the OpenClaw plugin tool `agent_knock_knock_delegate`. It starts the selected coding agent in the background, creates durable conversation state, embeds a token-free OpenClaw callback command, and returns protocol metadata.
59
+ Use `agent_knock_knock_delegate` only for a new independent task. AKK must resolve an eligible Codex or Claude Code pane and verify that it is idle before writing the task. If no eligible pane exists, report AKK's setup guidance; do not substitute another execution path.
100
60
 
101
- If the plugin tool is unavailable, stop and report that Agent Knock Knock must be installed or repaired. Never request, print, or place an OpenClaw Gateway token in a delegated prompt or custom callback command.
61
+ For a follow-up:
102
62
 
103
- ## Communication Contract
63
+ 1. Reuse a session only when the user's reference uniquely identifies it.
64
+ 2. If no ID is supplied, call `agent_knock_knock_list`.
65
+ 3. If multiple rows match, show their `short_ref`, agent, tmux target, and description and ask the user to choose.
66
+ 4. If a `terminal_controlled` row was listed, pass its authoritative `id` to `agent_knock_knock_send`.
67
+ 5. Never guess between multiple terminals or send to a pane that AKK has not verified as idle.
104
68
 
105
- Do not use OpenClaw's internal session tools, such as `sessions_send`, to send the task or follow-up messages directly to Codex, Claude, or Cursor.
69
+ `idle` means the previous managed turn finished while its tmux pane remains open for follow-ups.
106
70
 
107
- All OpenClaw-to-agent task delivery must go through the Agent Knock Knock plugin tools. Standard ACPX delegation builds the required bootstrap prompt, embeds the OpenClaw callback command, creates durable conversation state, and records the initial task message. Terminal-control bridge conversations are different: AKK types only the user-facing message into the tmux agent pane, monitors local terminal state, and sends OpenClaw callbacks when it has reliable evidence.
108
-
109
- For standard ACPX delegation, the coding agent must communicate back to OpenClaw by executing the callback command included in its bootstrap prompt. For terminal-control bridge conversations, AKK owns callback delivery. The coding agent should not rely on OpenClaw's session tools, chat memory, or an out-of-band reply path.
110
-
111
- The required routing is:
112
-
113
- 1. OpenClaw starts delegation with `agent_knock_knock_delegate`.
114
- 2. Agent Knock Knock sends the bootstrap prompt and task to the selected Codex, Claude, or Cursor session through ACPX, or sends only the user-facing task text to a terminal-control bridge session.
115
- 3. The coding agent sends `question`, `progress`, `blocked`, `done`, or `error` messages back by running the provided callback command. For terminal-control bridge sessions, AKK reports approvals and sends completion callbacks only when that adapter has reliable completion evidence.
116
- 4. OpenClaw answers `question` or `blocked` messages with structured `answer` messages through the same protocol path.
117
-
118
- If the plugin tool is unavailable, stop and report that Agent Knock Knock is not available. Do not fall back to direct `sessions_send` delivery.
119
-
120
- ## Recovery Decisions
121
-
122
- `AKK send <session-selector>: <message>` automatically falls back to AKK replay recovery when the previous ACPX session is unavailable. This starts a fresh ACPX session, gives the coding agent AKK's saved protocol history summary, and includes the pending message.
71
+ Useful examples:
123
72
 
124
- When AKK still reports that a conversation is `needs_recovery`, do not automatically recover, start a replacement task, or close it. Explain the options and let the user choose:
73
+ ```text
74
+ AKK Codex: review the current branch and propose a small fix
75
+ AKK Claude: review the latest commit
76
+ AKK list
77
+ AKK status only
78
+ AKK send codex: continue with the smaller implementation
79
+ AKK send @a1b2c3d4: run the focused tests
80
+ AKK cancel only
81
+ AKK renew only 30
82
+ AKK approve @a1b2c3d4
83
+ ```
125
84
 
126
- - `AKK recover <session-selector>`: use `agent_knock_knock_recover` to start a new coding-agent session with AKK's saved protocol history summary plus the pending message.
127
- - `AKK close <session-selector>`: use `agent_knock_knock_close` to close the task.
128
- - `AKK renew <session-selector>`: use `agent_knock_knock_renew` when a live terminal bridge task was marked stalled and monitoring should resume without injecting another task.
129
- - Start a new independent `AKK <task>` delegation if the old task should not be recovered.
85
+ ## Terminal Communication Contract
130
86
 
131
- Make clear that `recover` is AKK replay recovery, not guaranteed native coding-agent session resume.
87
+ All OpenClaw-to-agent task delivery must go through Agent Knock Knock plugin tools. Do not use OpenClaw internal session tools, raw tmux commands, shell commands, or another messaging path to bypass AKK's terminal checks.
132
88
 
133
- Do not start a replacement task without the user's explicit choice.
89
+ AKK:
134
90
 
135
- ## Native and tmux Sessions
91
+ 1. Resolves the selected Codex or Claude Code process and tmux pane.
92
+ 2. Verifies the pane, process identity, workspace, and idle prompt.
93
+ 3. Types only the user-facing task into the shared terminal.
94
+ 4. Creates a managed turn bound to that terminal and message.
95
+ 5. Monitors reliable local evidence and sends callbacks to the originating OpenClaw session.
136
96
 
137
- Native stop/resume and fork takeover are for Codex sessions created outside AKK. tmux terminal control supports both Codex and Claude Code and is separate from AKK managed conversation recovery.
97
+ The coding agent does not run an AKK callback command and does not require an AKK-specific hook or plugin.
138
98
 
139
- Use `agent_knock_knock_list` when the user asks about current native Codex sessions, terminal-controlled Codex or Claude Code sessions, or which local coding-agent work is currently open. The list result separates:
99
+ After an asynchronous delegate or send operation is accepted, end the OpenClaw turn. Wait for AKK's callback unless the user explicitly requests status.
140
100
 
141
- - `delegated`: AKK-managed tasks.
142
- - `native`: discovered local native sessions that AKK cannot directly control.
143
- - `terminal_controlled`: discovered local native sessions in a controllable terminal provider. The current provider is tmux.
101
+ ## Status and Description
144
102
 
145
- Use `agent_knock_knock_describe` when the user asks what a listed session is about. AKK-managed sessions use durable AKK conversation history. Terminal adapters use agent-specific structured history when available and otherwise return visible terminal/process context with lower confidence. Do not use raw tmux, shell, or peek tools for this summary unless `agent_knock_knock_describe` is unavailable or fails.
103
+ For terminal-controlled entries, `agent_knock_knock_status` captures a bounded terminal screen and returns `terminal_screen`. Do not inspect the pane with raw tmux or shell commands unless AKK status is unavailable or fails.
146
104
 
147
- Use `agent_knock_knock_agent_takeover` when the user wants AKK to take over an existing native Codex session. By default this tool is side-effect-free and returns a plan. When the plan is ready and the user explicitly wants AKK to manage the session, call it with `createConversation=true` to create an AKK conversation bound to the native session:
105
+ Use `agent_knock_knock_describe` for requests about what a session is doing or why it exists. AKK combines saved conversation history, supported agent-local context, and a conservative terminal fallback with explicit confidence.
148
106
 
149
- - `terminate_then_resume`: use when the user wants to take over an active native Codex CLI. The first call is side-effect-free. If the result is `requires_confirmation`, explain the exact pid, cwd, and session that would be stopped. Only after explicit user confirmation, call `agent_knock_knock_agent_takeover` again with `strategy="terminate_then_resume"`, `createConversation=true`, `confirmTerminate=true`, and `expectedPid=<confirmed pid>`. AKK will re-scan before terminating and will only stop an exact session match. If Codex does not expose a session id and the user still explicitly confirms a specific pid in the target cwd, you may add `allowCwdOnly=true`; explain that this is higher risk because it relies on pid and cwd rather than a visible session id.
150
- - `terminal_control`: use when the target Codex CLI is running inside a controllable terminal provider and the user wants AKK to operate the existing TUI without stopping or resuming it. The first call is side-effect-free. If the result is `requires_confirmation`, show the exact terminal target, pid, cwd, and current terminal-control metadata. Only after explicit user confirmation, call again with `strategy="terminal_control"`, `createConversation=true`, `confirmTerminal=true`, and `terminalTarget=<confirmed target>`. Follow-up `AKK send` messages will be typed into the terminal pane as concise user-facing task text; AKK monitors the Codex rollout/terminal state and sends the callback to OpenClaw itself. `AKK cancel` sends Control-C to the controlled terminal pane. Terminal-controlled entries from `AKK list` can be sent to, cancelled, approved, and inspected directly with their `id`; use `agent_knock_knock_status` to inspect the current terminal screen or execution result. Before `agent_knock_knock_approve`, show the user the latest terminal excerpt and pass its fingerprint as `expected_approval_fingerprint`.
151
- - `fork`: use when the user wants to avoid stopping the original Codex CLI. First call returns a bounded context package plus `summaryPrompt` and `nextAction`; use that prompt to summarize as OpenClaw, ask the user to confirm, and do not inject raw full rollout history directly. After the user confirms the summary, call `agent_knock_knock_agent_takeover` again with `strategy="fork"`, `createConversation=true`, and `forkSummary=<approved summary>` to create the forked AKK-managed session. Then use the returned `conversation_id` with `AKK send` for follow-up work.
107
+ ## Cancellation, Stalls, and Close
152
108
 
153
- Claude Code terminal entries are controlled directly by their `terminal:v2:tmux:claude:...` ids; do not offer Codex-only stop/resume or fork strategies for them. AKK does not install or require Claude hooks. A background send creates a managed turn that can report a strictly recognized, one-time Bash approval prompt. On the manual path, require the user to inspect the named live tmux pane, pass the exact fingerprint, and explicitly confirm the request. A trusted, default-disabled plugin policy may automatically approve only an exact command/workspace match backed by the same current screen and local transcript evidence. Claude approval expires quickly; AKK re-evaluates policy, reserves the one-shot dispatch, recaptures the prompt and evidence, and revalidates pane/process identity before Enter. Hook-free completion comes from a strictly correlated local Claude transcript turn and may fail closed for unknown schemas, background work, or ambiguous identity. Never report completion merely because the pane looks idle; rely on the AKK callback or use `status` and inspect the terminal when monitoring becomes `stalled`.
109
+ `agent_knock_knock_cancel` uses the adapter's interrupt action—Control-C for Codex or Escape for Claude Code—and leaves the tmux pane open.
154
110
 
155
- Do not present `fork` as a standalone command or standalone feature. It is a takeover strategy.
111
+ Use `agent_knock_knock_renew` only when:
156
112
 
157
- Do not use `resume-anyway` or start a second live client on the same native Codex session while another Codex CLI is active. That can create mixed session history where multiple clients do not see each other's live context until a later resume.
113
+ - AKK marked a managed terminal turn `stalled`;
114
+ - the same process and task are still live in the same pane; and
115
+ - the user wants monitoring to continue without injecting another task.
158
116
 
159
- ## Message Rules
117
+ Closing an AKK conversation does not close the underlying tmux pane or coding-agent CLI.
160
118
 
161
- Use structured JSON messages with these types:
119
+ ## Terminal Approval
162
120
 
163
- - `task`: delegate work to Codex, Claude, or Cursor
164
- - `question`: the coding agent asks for a decision
165
- - `answer`: OpenClaw gives a decision
166
- - `progress`: the coding agent reports progress and does not require a response
167
- - `blocked`: the coding agent cannot continue without a decision
168
- - `done`: the coding agent reports the current round is complete; AKK marks the session `idle`, and OpenClaw may send later follow-ups until the session is closed or times out
169
- - `error`: runtime, tool, or protocol failure
170
- - `control`: budget warning or lifecycle control
121
+ Approval is a sensitive action.
171
122
 
172
- `cancel` is lifecycle control outside the agent message protocol. For delegated sessions, it asks ACPX to cooperatively cancel the current in-flight prompt. For terminal-controlled sessions, it uses the adapter's interrupt action, then marks that AKK task cancelled while leaving the tmux pane open.
123
+ 1. Call `agent_knock_knock_status`.
124
+ 2. Show the detected request details to the user.
125
+ 3. Require explicit approval of that exact current request.
126
+ 4. Call `agent_knock_knock_approve` with the returned `approval_state.fingerprint` as `expected_approval_fingerprint`.
173
127
 
174
- Only messages with `requires_response=true` consume response rounds.
128
+ For hookless Claude Code, the callback intentionally omits the raw command. Require the user to inspect the named live tmux pane personally; never approve from a hash or summary alone. Claude manual approval accepts only the strictly recognized one-time **Yes** Bash dialog for the current managed turn. Codex approval also requires the current visible prompt.
175
129
 
176
- ## Decision Rules
130
+ Unknown, stale, expired, ambiguous, persistent-permission, replayed, or changed requests must not be approved. Deny or interrupt them with `agent_knock_knock_cancel`, or tell the user to resolve them directly in the terminal.
177
131
 
178
- When the delegated coding agent asks a question or reports a blocker:
132
+ A trusted, default-disabled plugin `autoApprove` policy may independently approve only an exact configured agent, canonical workspace, and command vector backed by current terminal evidence. The model cannot create or modify that policy.
179
133
 
180
- 1. Decide directly.
181
- 2. Answer from the product and acceptance perspective: intended behavior, user-visible result, scope boundary, priority, or acceptable compromise.
182
- 3. Prefer keeping scope small and shippable when that still satisfies the user's intent.
183
- 4. Avoid asking the user unless the task is impossible to complete safely without new user input.
184
- 5. Reply with an `answer` message.
134
+ ## tmux Sessions
185
135
 
186
- Require the coding agent to ask before it changes product behavior, narrows scope, degrades quality, accepts a workaround, or changes acceptance criteria because of an engineering constraint.
136
+ `agent_knock_knock_list` separates:
187
137
 
188
- Do not take over implementation details unless they affect the product outcome. Let the coding agent choose local code structure, test mechanics, and ordinary engineering tactics.
138
+ - `delegated`: AKK-managed terminal turns;
139
+ - `native`: local sessions AKK can describe but cannot control;
140
+ - `terminal_controlled`: live Codex or Claude Code sessions in a controllable tmux pane.
189
141
 
190
- ## Budget Rules
142
+ When the user asks AKK to control a listed terminal entry, use the authoritative `terminal_controlled` ID. For a Codex process already discovered in tmux, `agent_knock_knock_agent_takeover` may attach a managed conversation only with `strategy="terminal_control"` and the exact terminal target confirmed by AKK. This is the only supported takeover strategy.
191
143
 
192
- - Default soft limit: 50 response rounds
193
- - Hard limit: 100 response rounds
194
- - At 30 response rounds, require the coding agent to converge and list remaining work
195
- - At 40 response rounds, warn the coding agent to finish, degrade, or fail within 10 response rounds
196
- - At 50 response rounds, end by default unless completion is clearly near
197
- - At 100 response rounds, force termination and summarize failure
144
+ Claude Code terminal entries are controlled directly through their listed IDs. AKK does not install or require Claude hooks. Hook-free completion depends on a strictly correlated local Claude transcript turn and fails closed for unknown schemas, background work, or ambiguous identity. Never report completion merely because the pane looks idle.
198
145
 
199
146
  ## Final User Reply
200
147
 
201
- Do not replay the internal conversation to the user.
148
+ Do not replay internal terminal-monitor or callback details.
202
149
 
203
150
  Return:
204
151
 
205
- - What was delivered
206
- - Important files changed
207
- - Verification performed
208
- - Remaining issues, if any
209
- - Failure reason, if the task failed
152
+ - what was delivered;
153
+ - important files or behavior changed;
154
+ - verification performed;
155
+ - remaining issues, if any; or
156
+ - the actionable failure reason.
@@ -1,18 +0,0 @@
1
- import type { Actor } from "./protocol.js";
2
- export declare function normalizeAcpxOutput({ conversationId, from, to, round, output, now }: {
3
- conversationId: string;
4
- from: Actor | string;
5
- to: Actor | string;
6
- round: number;
7
- output: string;
8
- now?: Date;
9
- }): NormalizedAcpxEvent[];
10
- export interface NormalizedAcpxEvent {
11
- ts: string;
12
- conversation_id: string;
13
- event: string;
14
- from?: string;
15
- to?: string;
16
- round?: number;
17
- [key: string]: unknown;
18
- }
@@ -1,223 +0,0 @@
1
- import { extractJsonObject } from "./protocol.js";
2
- export function normalizeAcpxOutput({ conversationId, from, to, round, output, now = new Date() }) {
3
- const events = [];
4
- const lines = String(output ?? "").split(/\r?\n/);
5
- for (const line of lines) {
6
- const text = line.trim();
7
- if (!text) {
8
- continue;
9
- }
10
- const jsonEvent = normalizeJsonLine({ conversationId, from, to, round, text, now });
11
- if (jsonEvent) {
12
- events.push(jsonEvent);
13
- continue;
14
- }
15
- const textEvent = normalizeTextLine({ conversationId, from, to, round, text, now });
16
- if (textEvent) {
17
- events.push(textEvent);
18
- }
19
- }
20
- return events;
21
- }
22
- function normalizeJsonLine({ conversationId, from, to, round, text, now }) {
23
- let parsed;
24
- try {
25
- parsed = extractJsonObject(text);
26
- }
27
- catch {
28
- return null;
29
- }
30
- if (parsed.type && parsed.from && parsed.to && "body" in parsed) {
31
- const event = {
32
- event: "message",
33
- conversationId,
34
- round,
35
- now,
36
- type: parsed.type,
37
- requires_response: parsed.requires_response,
38
- body: typeof parsed.body === "string" ? parsed.body : JSON.stringify(parsed.body),
39
- source: "normalized_acpx",
40
- raw: parsed
41
- };
42
- return baseEvent({
43
- ...event,
44
- ...optionalStringField("from", parsed.from),
45
- ...optionalStringField("to", parsed.to)
46
- });
47
- }
48
- const eventName = eventNameFromJson(parsed);
49
- if (!eventName) {
50
- return null;
51
- }
52
- return baseEvent({
53
- event: eventName,
54
- conversationId,
55
- from: stringOrUndefined(parsed.from) ?? from,
56
- to: stringOrUndefined(parsed.to) ?? to,
57
- round: numberOrUndefined(parsed.round) ?? round,
58
- now,
59
- status: parsed.status,
60
- tool_name: parsed.tool_name ?? parsed.tool ?? parsed.name,
61
- permission: parsed.permission ?? parsed.permission_name,
62
- body: parsed.body ?? parsed.message ?? parsed.text,
63
- source: "normalized_acpx",
64
- raw: parsed
65
- });
66
- }
67
- function normalizeTextLine({ conversationId, from, to, round, text, now }) {
68
- const lower = text.toLowerCase();
69
- if (isPermissionRequest(lower)) {
70
- return baseEvent({
71
- event: "permission_request",
72
- conversationId,
73
- from,
74
- to,
75
- round,
76
- now,
77
- source: "normalized_acpx",
78
- body: text
79
- });
80
- }
81
- const toolStarted = matchToolStarted(text);
82
- if (toolStarted) {
83
- return baseEvent({
84
- event: "tool_call_started",
85
- conversationId,
86
- from,
87
- to,
88
- round,
89
- now,
90
- tool_name: toolStarted,
91
- source: "normalized_acpx",
92
- body: text
93
- });
94
- }
95
- const toolFinished = matchToolFinished(text);
96
- if (toolFinished) {
97
- return baseEvent({
98
- event: "tool_call_finished",
99
- conversationId,
100
- from,
101
- to,
102
- round,
103
- now,
104
- tool_name: toolFinished,
105
- source: "normalized_acpx",
106
- body: text
107
- });
108
- }
109
- if (isAgentStatus(lower)) {
110
- return baseEvent({
111
- event: "agent_status",
112
- conversationId,
113
- from,
114
- to,
115
- round,
116
- now,
117
- status: statusFromText(lower),
118
- source: "normalized_acpx",
119
- body: text
120
- });
121
- }
122
- return null;
123
- }
124
- function eventNameFromJson(parsed) {
125
- const value = String(parsed.event ?? parsed.kind ?? "").toLowerCase();
126
- if (["tool_call_started", "tool_call_finished", "permission_request", "agent_status"].includes(value)) {
127
- return value;
128
- }
129
- if (value === "tool_call" && parsed.status === "started") {
130
- return "tool_call_started";
131
- }
132
- if (value === "tool_call" && ["finished", "completed", "done"].includes(String(parsed.status))) {
133
- return "tool_call_finished";
134
- }
135
- return null;
136
- }
137
- function isPermissionRequest(lower) {
138
- return lower.includes("permission") && (lower.includes("request") ||
139
- lower.includes("requires") ||
140
- lower.includes("approve") ||
141
- lower.includes("allow"));
142
- }
143
- function matchToolStarted(text) {
144
- const patterns = [
145
- /tool(?: call)? (?:started|starting):?\s*([A-Za-z0-9_.:-]+)/i,
146
- /(?:running|started|starting) tool:?\s*([A-Za-z0-9_.:-]+)/i,
147
- /tool_use(?:\.start)?:?\s*([A-Za-z0-9_.:-]+)/i
148
- ];
149
- return firstMatch(text, patterns);
150
- }
151
- function matchToolFinished(text) {
152
- const patterns = [
153
- /tool(?: call)? (?:finished|completed|succeeded|failed):?\s*([A-Za-z0-9_.:-]+)/i,
154
- /(?:finished|completed|succeeded|failed) tool:?\s*([A-Za-z0-9_.:-]+)/i,
155
- /tool_use(?:\.finish|\.end)?:?\s*([A-Za-z0-9_.:-]+)/i
156
- ];
157
- return firstMatch(text, patterns);
158
- }
159
- function firstMatch(text, patterns) {
160
- for (const pattern of patterns) {
161
- const match = text.match(pattern);
162
- if (match?.[1]) {
163
- return match[1];
164
- }
165
- }
166
- return null;
167
- }
168
- function isAgentStatus(lower) {
169
- return lower.includes("session") ||
170
- lower.includes("agent") ||
171
- lower.includes("thinking") ||
172
- lower.includes("queued") ||
173
- lower.includes("running") ||
174
- lower.includes("completed") ||
175
- lower.includes("failed") ||
176
- lower.includes("timed out") ||
177
- lower.includes("timeout");
178
- }
179
- function statusFromText(lower) {
180
- if (lower.includes("timed out") || lower.includes("timeout")) {
181
- return "timeout";
182
- }
183
- if (lower.includes("failed") || lower.includes("error")) {
184
- return "failed";
185
- }
186
- if (lower.includes("completed") || lower.includes("done") || lower.includes("finished")) {
187
- return "completed";
188
- }
189
- if (lower.includes("queued")) {
190
- return "queued";
191
- }
192
- if (lower.includes("thinking")) {
193
- return "thinking";
194
- }
195
- if (lower.includes("running")) {
196
- return "running";
197
- }
198
- return "status";
199
- }
200
- function baseEvent({ event, conversationId, from, to, round, now, ...rest }) {
201
- return dropUndefined({
202
- ts: now.toISOString(),
203
- conversation_id: conversationId,
204
- event,
205
- from,
206
- to,
207
- round,
208
- ...dropUndefined(rest)
209
- });
210
- }
211
- function dropUndefined(value) {
212
- return Object.fromEntries(Object.entries(value).filter(([, entryValue]) => entryValue !== undefined));
213
- }
214
- function stringOrUndefined(value) {
215
- return typeof value === "string" ? value : undefined;
216
- }
217
- function numberOrUndefined(value) {
218
- return typeof value === "number" ? value : undefined;
219
- }
220
- function optionalStringField(key, value) {
221
- return typeof value === "string" ? { [key]: value } : {};
222
- }
223
- //# sourceMappingURL=acpx-output.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acpx-output.js","sourceRoot":"","sources":["../../src/acpx-output.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- export interface BootstrapPromptOptions {
2
- callbackCommand: string;
3
- executorName?: string;
4
- softLimit?: number;
5
- hardLimit?: number;
6
- }
7
- export declare function claudeBootstrapPrompt(options: Omit<BootstrapPromptOptions, "executorName">): string;
8
- export declare function executorBootstrapPrompt({ callbackCommand, executorName, softLimit, hardLimit }: BootstrapPromptOptions): string;