@scotthuang/agent-knock-knock 0.3.2 → 0.5.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.
- package/CHANGELOG.md +17 -565
- package/README.md +100 -134
- package/dist/src/agent-session-provider.d.ts +1 -2
- package/dist/src/approval-policy.d.ts +1 -1
- package/dist/src/approval-policy.js +1 -1
- package/dist/src/approval-policy.js.map +1 -1
- package/dist/src/claude-terminal-agent-adapter.d.ts +2 -17
- package/dist/src/claude-terminal-agent-adapter.js +4 -489
- package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
- package/dist/src/cli.js +1736 -3893
- package/dist/src/cli.js.map +1 -1
- package/dist/src/codex-local-session-provider.d.ts +1 -2
- package/dist/src/codex-local-session-provider.js +1 -9
- package/dist/src/codex-local-session-provider.js.map +1 -1
- package/dist/src/codex-session-provider.d.ts +1 -8
- package/dist/src/codex-session-provider.js +0 -56
- package/dist/src/codex-session-provider.js.map +1 -1
- package/dist/src/codex-terminal-agent-adapter.d.ts +1 -1
- package/dist/src/doctor-capabilities.d.ts +5 -13
- package/dist/src/doctor-capabilities.js +15 -60
- package/dist/src/doctor-capabilities.js.map +1 -1
- package/dist/src/executors.d.ts +5 -51
- package/dist/src/executors.js +4 -68
- package/dist/src/executors.js.map +1 -1
- package/dist/src/openclaw-doctor.d.ts +0 -1
- package/dist/src/openclaw-doctor.js +0 -7
- package/dist/src/openclaw-doctor.js.map +1 -1
- package/dist/src/openclaw-plugin-helpers.d.ts +5 -13
- package/dist/src/openclaw-plugin-helpers.js +91 -82
- package/dist/src/openclaw-plugin-helpers.js.map +1 -1
- package/dist/src/openclaw-plugin.js +272 -481
- package/dist/src/openclaw-plugin.js.map +1 -1
- package/dist/src/protocol.d.ts +1 -5
- package/dist/src/protocol.js +1 -1
- package/dist/src/protocol.js.map +1 -1
- package/dist/src/session-selector.js +1 -1
- package/dist/src/session-selector.js.map +1 -1
- package/dist/src/terminal-agent-adapter.d.ts +3 -17
- package/dist/src/terminal-agent-adapter.js.map +1 -1
- package/dist/src/terminal-agent-bridge.d.ts +3 -3
- package/dist/src/terminal-agent-bridge.js +0 -75
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/transcript.js +2 -3
- package/dist/src/transcript.js.map +1 -1
- package/docs/quickstart-tmux.md +15 -11
- package/openclaw.plugin.json +4 -100
- package/package.json +7 -15
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +82 -149
- package/dist/src/acpx-output.d.ts +0 -18
- package/dist/src/acpx-output.js +0 -223
- package/dist/src/acpx-output.js.map +0 -1
- package/dist/src/bootstrap.d.ts +0 -8
- package/dist/src/bootstrap.js +0 -45
- package/dist/src/bootstrap.js.map +0 -1
- package/dist/src/claude-hook-installer.d.ts +0 -65
- package/dist/src/claude-hook-installer.js +0 -410
- package/dist/src/claude-hook-installer.js.map +0 -1
- package/dist/src/claude-hook-protocol.d.ts +0 -89
- package/dist/src/claude-hook-protocol.js +0 -243
- package/dist/src/claude-hook-protocol.js.map +0 -1
- package/dist/src/claude-hook-store.d.ts +0 -247
- package/dist/src/claude-hook-store.js +0 -1075
- package/dist/src/claude-hook-store.js.map +0 -1
- package/dist/src/session-takeover-planner.d.ts +0 -37
- package/dist/src/session-takeover-planner.js +0 -57
- package/dist/src/session-takeover-planner.js.map +0 -1
- package/docs/quickstart-managed-acpx.md +0 -43
- package/scripts/smoke-acpx.js +0 -139
- package/scripts/smoke-tmux.js +0 -140
|
@@ -1,209 +1,142 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-knock-knock
|
|
3
|
-
description:
|
|
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
|
|
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 listed by AKK.
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Default delegation target: plugin-configured `defaultAgent`. If `defaultAgent` is unset, Agent Knock Knock falls back to Codex.
|
|
10
|
+
AKK supports Codex and Claude Code that are already running inside tmux. It never launches a coding agent. OpenClaw, tmux, AKK, and the coding agent must run as the same OS user.
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
Treat `AKK` and `akk` the same way.
|
|
15
13
|
|
|
16
14
|
## Role
|
|
17
15
|
|
|
18
|
-
|
|
16
|
+
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.
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
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.
|
|
18
|
+
Keep the user's requested scope and approval boundaries. Do not expand a task, approve a permission, interrupt a process, or close a managed record unless the user request or an explicit trusted policy authorizes that action.
|
|
25
19
|
|
|
26
20
|
## Chat Routing
|
|
27
21
|
|
|
28
|
-
Use the
|
|
22
|
+
Use the `/akk` command for slash-command syntax. Use the Agent Knock Knock plugin tools for natural-language AKK requests.
|
|
29
23
|
|
|
30
|
-
|
|
24
|
+
Core slash-command forms:
|
|
31
25
|
|
|
32
|
-
- `/akk <task>`:
|
|
33
|
-
- `/akk
|
|
34
|
-
- `/akk
|
|
35
|
-
- `/akk
|
|
36
|
-
- `/akk
|
|
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.
|
|
26
|
+
- `/akk <task>`: send a new task only when exactly one eligible idle coding-agent pane exists in the configured workspace.
|
|
27
|
+
- `/akk <selector>: <message>`: send a task or follow-up to one exact eligible idle pane.
|
|
28
|
+
- `/akk list`: list eligible and managed coding-agent terminals.
|
|
29
|
+
- `/akk status [session-selector]`: inspect one managed terminal turn.
|
|
30
|
+
- `/akk cancel <session-selector>`: interrupt the current turn without closing its tmux pane.
|
|
44
31
|
|
|
45
|
-
|
|
32
|
+
For the targeted slash form, a selector may be `codex`, `claude`, `only`, `latest`, or an `@short-ref` returned by `AKK list`. The `agent_knock_knock_send` tool additionally accepts an authoritative full ID in its `selector` field. Selectors fail closed when the target is missing or ambiguous. For every send, the selected pane must be in the configured workspace, owned by the expected coding-agent process, and at a verified idle prompt.
|
|
46
33
|
|
|
47
|
-
|
|
34
|
+
Treat the configured workspace as a hard boundary for every AKK plugin tool. Do not try to list, inspect, send to, approve, cancel, or recover a terminal outside it, including through an authoritative full ID.
|
|
48
35
|
|
|
49
|
-
-
|
|
50
|
-
- `AKK Codex: <task>`: call `agent_knock_knock_delegate` with `agent="codex"`.
|
|
51
|
-
- `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
|
-
```
|
|
96
|
-
|
|
97
|
-
## Start A Conversation
|
|
98
|
-
|
|
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.
|
|
100
|
-
|
|
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.
|
|
102
|
-
|
|
103
|
-
## Communication Contract
|
|
36
|
+
Natural-language forms:
|
|
104
37
|
|
|
105
|
-
|
|
38
|
+
- `AKK: <task>`: call `agent_knock_knock_send` with `request=<task>` and no `selector`. This succeeds only when exactly one eligible idle pane exists.
|
|
39
|
+
- `AKK Codex: <task>`: call `agent_knock_knock_send` with `request=<task>` and `selector="codex"`.
|
|
40
|
+
- `AKK Claude: <task>`: call `agent_knock_knock_send` with `request=<task>` and `selector="claude"`.
|
|
41
|
+
- Requests to list AKK or local coding-agent work: call `agent_knock_knock_list`.
|
|
42
|
+
- Requests to inspect current output or ask what a task is doing: call `agent_knock_knock_status`.
|
|
43
|
+
- Follow-ups for an existing listed terminal: call `agent_knock_knock_send` with `request=<message>` and the selected terminal reference as `selector`.
|
|
44
|
+
- Requests to stop current work: call `agent_knock_knock_cancel`.
|
|
106
45
|
|
|
107
|
-
|
|
46
|
+
## Starting and Reusing Work
|
|
108
47
|
|
|
109
|
-
|
|
48
|
+
Use `agent_knock_knock_send` with `request` and no `selector` only for a new independent task whose target the user left unspecified. AKK must resolve exactly one eligible Codex or Claude Code pane and verify that it is idle immediately before writing the task. If no eligible pane exists, report AKK's setup guidance; do not substitute another execution path.
|
|
110
49
|
|
|
111
|
-
|
|
50
|
+
For a follow-up:
|
|
112
51
|
|
|
113
|
-
1.
|
|
114
|
-
2.
|
|
115
|
-
3.
|
|
116
|
-
4.
|
|
52
|
+
1. Reuse a terminal only when the user's reference uniquely identifies it.
|
|
53
|
+
2. If no ID is supplied and more than one eligible pane may exist, call `agent_knock_knock_list`.
|
|
54
|
+
3. If multiple rows match, show their `short_ref`, agent, and tmux target, then ask the user to choose.
|
|
55
|
+
4. Call `agent_knock_knock_send` with the follow-up as `request` and the selected authoritative ID as `selector`.
|
|
56
|
+
5. Never guess between multiple terminals or send to a pane that AKK has not verified as idle.
|
|
117
57
|
|
|
118
|
-
|
|
58
|
+
An idle pane is at a verified ready prompt, with no current work or unresolved permission request. A previously completed managed turn alone is not proof that the pane is still idle.
|
|
119
59
|
|
|
120
|
-
|
|
60
|
+
Useful examples:
|
|
121
61
|
|
|
122
|
-
|
|
62
|
+
```text
|
|
63
|
+
/akk review the current branch and propose a small fix
|
|
64
|
+
/akk codex: inspect the repository and summarize it
|
|
65
|
+
/akk @a1b2c3d4: run the focused tests
|
|
66
|
+
/akk list
|
|
67
|
+
/akk status only
|
|
68
|
+
/akk cancel only
|
|
69
|
+
```
|
|
123
70
|
|
|
124
|
-
|
|
71
|
+
## Terminal Communication Contract
|
|
125
72
|
|
|
126
|
-
-
|
|
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.
|
|
73
|
+
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.
|
|
130
74
|
|
|
131
|
-
|
|
75
|
+
AKK:
|
|
132
76
|
|
|
133
|
-
|
|
77
|
+
1. Resolves the selected Codex or Claude Code process and tmux pane.
|
|
78
|
+
2. Verifies the pane, process identity, workspace, and idle prompt.
|
|
79
|
+
3. Types only the user-facing task into the shared terminal.
|
|
80
|
+
4. Creates a managed turn bound to that terminal and message.
|
|
81
|
+
5. Monitors reliable local evidence and sends callbacks to the originating OpenClaw session.
|
|
134
82
|
|
|
135
|
-
|
|
83
|
+
The coding agent does not run an AKK callback command and does not require an AKK-specific hook or plugin.
|
|
136
84
|
|
|
137
|
-
|
|
85
|
+
After an asynchronous send operation is accepted, end the OpenClaw turn. Wait for AKK's callback unless the user explicitly requests status.
|
|
138
86
|
|
|
139
|
-
|
|
87
|
+
## Status
|
|
140
88
|
|
|
141
|
-
|
|
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.
|
|
89
|
+
For managed terminal 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.
|
|
144
90
|
|
|
145
|
-
|
|
91
|
+
## Cancellation and Recovery
|
|
146
92
|
|
|
147
|
-
|
|
93
|
+
`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.
|
|
148
94
|
|
|
149
|
-
|
|
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.
|
|
95
|
+
Use `agent_knock_knock_renew` only when AKK marked the same live terminal turn `stalled`, the process and task remain in the same pane, and the user wants monitoring to continue without terminal input. The contextual slash form is `/akk renew @a1b2c3d4 30`.
|
|
152
96
|
|
|
153
|
-
|
|
97
|
+
Use `agent_knock_knock_retry_callback` only for a `callback_failed` managed turn, for example `/akk retry-callback @a1b2c3d4`.
|
|
154
98
|
|
|
155
|
-
|
|
99
|
+
Use `agent_knock_knock_close` only when the user explicitly wants to close AKK's managed record. If `AKK list` 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. Closing a managed record does not close the coding agent or tmux pane.
|
|
156
100
|
|
|
157
|
-
|
|
101
|
+
Use `/akk doctor` only for installation checks or troubleshooting.
|
|
158
102
|
|
|
159
|
-
##
|
|
103
|
+
## Terminal Approval
|
|
160
104
|
|
|
161
|
-
|
|
105
|
+
Approval is a sensitive action.
|
|
162
106
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
|
107
|
+
1. Call `agent_knock_knock_status`.
|
|
108
|
+
2. Show the detected request details to the user.
|
|
109
|
+
3. Require explicit approval of that exact current request.
|
|
110
|
+
4. Call `agent_knock_knock_approve` with the returned `approval_state.fingerprint` as `expected_approval_fingerprint`.
|
|
171
111
|
|
|
172
|
-
|
|
112
|
+
The equivalent slash command must also include that fresh fingerprint:
|
|
173
113
|
|
|
174
|
-
|
|
114
|
+
```text
|
|
115
|
+
/akk approve @a1b2c3d4 --expected-approval-fingerprint <fresh-fingerprint>
|
|
116
|
+
```
|
|
175
117
|
|
|
176
|
-
|
|
118
|
+
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.
|
|
177
119
|
|
|
178
|
-
|
|
120
|
+
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.
|
|
179
121
|
|
|
180
|
-
|
|
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.
|
|
122
|
+
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.
|
|
185
123
|
|
|
186
|
-
|
|
124
|
+
## tmux Sessions
|
|
187
125
|
|
|
188
|
-
|
|
126
|
+
`agent_knock_knock_list` reports eligible already-running Codex and Claude Code panes together with AKK-managed turns. Use an authoritative full ID or returned `@short-ref` whenever more than one candidate exists.
|
|
189
127
|
|
|
190
|
-
|
|
128
|
+
AKK writes only to a pane that passes its current process, workspace, and idle checks. Humans can attach to the same tmux session and continue directly at any time.
|
|
191
129
|
|
|
192
|
-
|
|
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
|
|
130
|
+
Claude Code completion depends on a strictly correlated local transcript turn and fails closed for unknown schemas, background work, or ambiguous identity. Never report completion merely because the pane looks idle.
|
|
198
131
|
|
|
199
132
|
## Final User Reply
|
|
200
133
|
|
|
201
|
-
Do not replay
|
|
134
|
+
Do not replay internal terminal-monitor or callback details.
|
|
202
135
|
|
|
203
136
|
Return:
|
|
204
137
|
|
|
205
|
-
-
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
-
|
|
209
|
-
-
|
|
138
|
+
- what was delivered;
|
|
139
|
+
- important files or behavior changed;
|
|
140
|
+
- verification performed;
|
|
141
|
+
- remaining issues, if any; or
|
|
142
|
+
- 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
|
-
}
|
package/dist/src/acpx-output.js
DELETED
|
@@ -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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"}
|
package/dist/src/bootstrap.d.ts
DELETED
|
@@ -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;
|