@scotthuang/agent-knock-knock 0.14.1 → 0.14.3

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 (150) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +233 -106
  3. package/dist/src/backend-callback-public-projection.d.ts +27 -0
  4. package/dist/src/backend-callback-public-projection.js +58 -0
  5. package/dist/src/backend-callback-public-projection.js.map +1 -0
  6. package/dist/src/backend-public-progress.d.ts +2 -0
  7. package/dist/src/backend-public-progress.js +4 -1
  8. package/dist/src/backend-public-progress.js.map +1 -1
  9. package/dist/src/backend-recovery-semantic.js +5 -4
  10. package/dist/src/backend-recovery-semantic.js.map +1 -1
  11. package/dist/src/callback-transport.d.ts +1 -1
  12. package/dist/src/callback-transport.js +2 -2
  13. package/dist/src/callback-transport.js.map +1 -1
  14. package/dist/src/claude-conversation-routing-cli-adapter.d.ts +2 -0
  15. package/dist/src/claude-conversation-routing-cli-adapter.js +127 -0
  16. package/dist/src/claude-conversation-routing-cli-adapter.js.map +1 -0
  17. package/dist/src/claude-conversation-routing-identity.d.ts +11 -0
  18. package/dist/src/claude-conversation-routing-identity.js +46 -0
  19. package/dist/src/claude-conversation-routing-identity.js.map +1 -0
  20. package/dist/src/claude-native-cli-adapter.d.ts +18 -0
  21. package/dist/src/claude-native-cli-adapter.js +159 -0
  22. package/dist/src/claude-native-cli-adapter.js.map +1 -0
  23. package/dist/src/claude-native-client.d.ts +57 -0
  24. package/dist/src/claude-native-client.js +197 -0
  25. package/dist/src/claude-native-client.js.map +1 -0
  26. package/dist/src/claude-native-discovery.d.ts +20 -0
  27. package/dist/src/claude-native-discovery.js +111 -0
  28. package/dist/src/claude-native-discovery.js.map +1 -0
  29. package/dist/src/claude-native-identity.d.ts +29 -0
  30. package/dist/src/claude-native-identity.js +54 -0
  31. package/dist/src/claude-native-identity.js.map +1 -0
  32. package/dist/src/claude-native-monitor.d.ts +13 -0
  33. package/dist/src/claude-native-monitor.js +123 -0
  34. package/dist/src/claude-native-monitor.js.map +1 -0
  35. package/dist/src/claude-native-observation.d.ts +54 -0
  36. package/dist/src/claude-native-observation.js +418 -0
  37. package/dist/src/claude-native-observation.js.map +1 -0
  38. package/dist/src/claude-native-outbox.d.ts +16 -0
  39. package/dist/src/claude-native-outbox.js +122 -0
  40. package/dist/src/claude-native-outbox.js.map +1 -0
  41. package/dist/src/claude-native-peer-helper.d.ts +2 -0
  42. package/dist/src/claude-native-peer-helper.js +121 -0
  43. package/dist/src/claude-native-peer-helper.js.map +1 -0
  44. package/dist/src/claude-native-public-projection.d.ts +605 -0
  45. package/dist/src/claude-native-public-projection.js +98 -0
  46. package/dist/src/claude-native-public-projection.js.map +1 -0
  47. package/dist/src/claude-native-runtime.d.ts +25 -0
  48. package/dist/src/claude-native-runtime.js +74 -0
  49. package/dist/src/claude-native-runtime.js.map +1 -0
  50. package/dist/src/claude-native-state-store.d.ts +49 -0
  51. package/dist/src/claude-native-state-store.js +96 -0
  52. package/dist/src/claude-native-state-store.js.map +1 -0
  53. package/dist/src/claude-native-task-service.d.ts +70 -0
  54. package/dist/src/claude-native-task-service.js +327 -0
  55. package/dist/src/claude-native-task-service.js.map +1 -0
  56. package/dist/src/cli-core.js +2 -1
  57. package/dist/src/cli-core.js.map +1 -1
  58. package/dist/src/cli-runtime-context.d.ts +2 -0
  59. package/dist/src/cli-runtime-context.js.map +1 -1
  60. package/dist/src/codex-async-question-adapter.js +18 -9
  61. package/dist/src/codex-async-question-adapter.js.map +1 -1
  62. package/dist/src/codex-lifecycle-compatibility.d.ts +1 -1
  63. package/dist/src/codex-lifecycle-compatibility.js +5 -3
  64. package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
  65. package/dist/src/codex-native-cli-adapter.js +18 -2
  66. package/dist/src/codex-native-cli-adapter.js.map +1 -1
  67. package/dist/src/codex-native-client-rpc.js +5 -1
  68. package/dist/src/codex-native-client-rpc.js.map +1 -1
  69. package/dist/src/codex-native-client.js +8 -7
  70. package/dist/src/codex-native-client.js.map +1 -1
  71. package/dist/src/codex-native-outbox.js +7 -5
  72. package/dist/src/codex-native-outbox.js.map +1 -1
  73. package/dist/src/codex-native-public-projection.d.ts +19 -7
  74. package/dist/src/codex-native-public-projection.js +12 -8
  75. package/dist/src/codex-native-public-projection.js.map +1 -1
  76. package/dist/src/codex-native-semantic.js +15 -5
  77. package/dist/src/codex-native-semantic.js.map +1 -1
  78. package/dist/src/codex-native-types.d.ts +4 -2
  79. package/dist/src/codex-native-types.js.map +1 -1
  80. package/dist/src/codex-permission-surface.d.ts +2 -2
  81. package/dist/src/codex-permission-surface.js +62 -4
  82. package/dist/src/codex-permission-surface.js.map +1 -1
  83. package/dist/src/codex-status-history-navigation.js +2 -6
  84. package/dist/src/codex-status-history-navigation.js.map +1 -1
  85. package/dist/src/codex-terminal-agent-adapter.d.ts +1 -0
  86. package/dist/src/codex-terminal-agent-adapter.js +10 -5
  87. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  88. package/dist/src/conversation-list.js +8 -2
  89. package/dist/src/conversation-list.js.map +1 -1
  90. package/dist/src/conversation-routing-cli-adapter.d.ts +2 -7
  91. package/dist/src/conversation-routing-cli-adapter.js +4 -2
  92. package/dist/src/conversation-routing-cli-adapter.js.map +1 -1
  93. package/dist/src/conversation-routing-commands.d.ts +5 -0
  94. package/dist/src/conversation-routing-commands.js.map +1 -1
  95. package/dist/src/desktop-command-presentation.js +3 -1
  96. package/dist/src/desktop-command-presentation.js.map +1 -1
  97. package/dist/src/desktop-public-projection.js +3 -6
  98. package/dist/src/desktop-public-projection.js.map +1 -1
  99. package/dist/src/desktop-task-service.js +10 -3
  100. package/dist/src/desktop-task-service.js.map +1 -1
  101. package/dist/src/durable-notification-kernel.d.ts +10 -0
  102. package/dist/src/durable-notification-kernel.js +18 -1
  103. package/dist/src/durable-notification-kernel.js.map +1 -1
  104. package/dist/src/host-monitor-reconciliation.js +9 -1
  105. package/dist/src/host-monitor-reconciliation.js.map +1 -1
  106. package/dist/src/host-profile-runtime.js +3 -1
  107. package/dist/src/host-profile-runtime.js.map +1 -1
  108. package/dist/src/local-codex-cli-adapter.js +4 -3
  109. package/dist/src/local-codex-cli-adapter.js.map +1 -1
  110. package/dist/src/openclaw-callback-evidence.d.ts +17 -0
  111. package/dist/src/openclaw-callback-evidence.js +75 -0
  112. package/dist/src/openclaw-callback-evidence.js.map +1 -0
  113. package/dist/src/openclaw-callback-transport.js +90 -9
  114. package/dist/src/openclaw-callback-transport.js.map +1 -1
  115. package/dist/src/semantic-conversation-target.js +1 -1
  116. package/dist/src/semantic-conversation-target.js.map +1 -1
  117. package/dist/src/semantic-tool-command-helpers.d.ts +0 -1
  118. package/dist/src/semantic-tool-command-helpers.js +27 -17
  119. package/dist/src/semantic-tool-command-helpers.js.map +1 -1
  120. package/dist/src/semantic-tool-descriptions.js +3 -3
  121. package/dist/src/semantic-tool-descriptions.js.map +1 -1
  122. package/dist/src/semantic-tool-list-projection.js +11 -4
  123. package/dist/src/semantic-tool-list-projection.js.map +1 -1
  124. package/dist/src/semantic-tool-presentation.js +17 -3
  125. package/dist/src/semantic-tool-presentation.js.map +1 -1
  126. package/dist/src/semantic-tool-runtime.js +30 -3
  127. package/dist/src/semantic-tool-runtime.js.map +1 -1
  128. package/dist/src/semantic-tool-schemas.js +15 -15
  129. package/dist/src/semantic-tool-schemas.js.map +1 -1
  130. package/dist/src/terminal-list-cli-adapter.js +5 -1
  131. package/dist/src/terminal-list-cli-adapter.js.map +1 -1
  132. package/dist/src/terminal-list-ownership-service.js +1 -1
  133. package/dist/src/terminal-list-ownership-service.js.map +1 -1
  134. package/dist/src/terminal-model-control-profile.d.ts +2 -1
  135. package/dist/src/terminal-model-control-profile.js +5 -2
  136. package/dist/src/terminal-model-control-profile.js.map +1 -1
  137. package/dist/src/terminal-native-inspection-profile.js +2 -0
  138. package/dist/src/terminal-native-inspection-profile.js.map +1 -1
  139. package/dist/src/terminal-permission-control-bridge.js +1 -1
  140. package/dist/src/terminal-permission-control-bridge.js.map +1 -1
  141. package/dist/src/terminal-permission-control.js +1 -1
  142. package/dist/src/terminal-permission-control.js.map +1 -1
  143. package/dist/src/terminal-questionnaire-adapter.js +10 -5
  144. package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
  145. package/docs/backend-task-recovery.md +43 -0
  146. package/docs/claude-cli-direct.md +60 -0
  147. package/docs/codex-0.162.1-compatibility.md +198 -0
  148. package/docs/codex-cli-native-compatibility.md +9 -6
  149. package/package.json +2 -2
  150. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +16 -6
@@ -0,0 +1,198 @@
1
+ # Codex CLI 0.162.1 compatibility
2
+
3
+ AKK 0.14.2 adapts the Codex CLI 0.162.1 frontend and reviews its shared
4
+ app-server contract. This is an operation-specific compatibility review, not a
5
+ new numeric minimum or a promise that future Codex versions use the same UI.
6
+ The [CLI direct-control guide](codex-cli-native-compatibility.md) describes the
7
+ separate shared-backend route, which does not need tmux or Herdr.
8
+
9
+ ## Native status and error contract
10
+
11
+ Codex changed the `/status` informational usage link from
12
+ `https://chatgpt.com/codex/settings/usage` to
13
+ `https://chatgpt.com/settings/usage`. AKK previously accepted only the old
14
+ complete line. A real 0.162.1 inspection dispatched `/status` once and displayed
15
+ the correct native session, but AKK could not prove the fresh complete result
16
+ because its closed card parser rejected that new line.
17
+
18
+ The recorded error was that Enter had been dispatched exactly once without a
19
+ proven fresh exact result. The controller's later JSON parse error was
20
+ secondary: the semantic tool had thrown that failure and the Host presented a
21
+ plain-text error. It was not evidence of malformed app-server JSON.
22
+
23
+ Both complete-card parsing and bounded clipped-history recovery now accept
24
+ the two exact official informational lines. They still reject unknown prose,
25
+ duplicate or malformed identity fields, stale cards, changed versions and
26
+ unproven closing surfaces. The usage link is never identity evidence.
27
+
28
+ Native-inspection execution failures now retain JSON `content` and `details`
29
+ with `isError: true`, `error_code: "AKK_NATIVE_INSPECTION_FAILED"`, a sanitized
30
+ diagnostic, `do_not_retry: true` and `safe_to_retry: false`. A failure to parse
31
+ the result does not prove that terminal input never happened. Parameter
32
+ validation and abort semantics, CLI exit status and stderr remain unchanged.
33
+
34
+ ## Terminal interaction contracts
35
+
36
+ The 0.162.1 macOS asynchronous question surface uses `⇧←`/`⇧→` and `⌃]`
37
+ instead of the older textual Shift/Control hints. AKK uses a distinct exact
38
+ profile, including complete footer and question-identity checks. Older
39
+ frontends keep their own grammar; mixed, clipped or unknown keymaps never
40
+ authorize input. Native status may recognize closed queue hints as display
41
+ information without granting answer authority.
42
+
43
+ The model and built-in permission menus receive an exact 0.162.1 profile.
44
+ Model inspection retains the mandatory single current-model marker and exact
45
+ scope footer; a missing default badge does not invent a persisted default.
46
+ Permission selection retains same-thread, same-catalog and effective-result
47
+ checks, including the native Full Access confirmation. Backend per-thread
48
+ permissions and terminal menu actions remain separate capabilities.
49
+
50
+ The dedicated live check also found a second UI change: Full Access confirmation
51
+ moved from an inline picker to a centered 72-column overlay with transcript and
52
+ composer content still visible behind it. Its warning and choices did not
53
+ change. The old tail-only parser correctly stopped before confirming because
54
+ it could not prove that new surface. The 0.162.1 adapter now recognizes the
55
+ exact version-bound styled rectangle, full warning, both choices and selected
56
+ row, while retaining fresh-frame and terminal identity checks. Ambiguous
57
+ background column widths or control sequences still fail closed.
58
+
59
+ Blocking `request_user_input` has its own 0.162.1 v5 profile. Its multi-question
60
+ free-text footer uses the exact `⌃p / ⌃n change question` spelling; the
61
+ canonical Other option's notes description remains unchanged. The reviewed
62
+ ordinary option, free-text, notes and unanswered-confirmation upstream snapshots
63
+ are unchanged from 0.160.0. Regressions cover the new wrapped footer,
64
+ profile-bound interaction IDs and rejection of secrets, mixed keymaps and
65
+ changed submit instructions. This source/regression evidence is separate from
66
+ the live question paths listed below.
67
+
68
+ ## Backend protocol review
69
+
70
+ The retained official binaries generated 875 experimental TypeScript schema
71
+ files for 0.160.0 and 888 for 0.162.1: 13 added, 23 changed and none removed.
72
+ The complete schema sets are not identical. The reviewed core schemas for
73
+ initialization, thread identity/status, loaded-thread listing, thread reads,
74
+ paged turn/item reads, resume, settings updates, steering, command/file
75
+ approval, user input, model listing and interruption are byte-identical.
76
+ Schema or source agreement does not replace runtime response validation or
77
+ prove that a mutation succeeded.
78
+
79
+ The additive changes include `Turn.rootTurnId`, optional `parentTurnId` and
80
+ `rootTurnId` on turn start, `MessagePhase.partial_answer`, and model/effort
81
+ metadata on sub-agent activity. Existing parsers tolerate these additions
82
+ without treating them as new authority.
83
+
84
+ Regression coverage preserves the exact selected turn when sibling turns
85
+ share a `rootTurnId`. An `agentMessage` with `phase: "partial_answer"` is not a
86
+ completed task or a final answer. Native completion state, complete item reads
87
+ and the original turn ID remain necessary for final callbacks. Partial answers
88
+ also remain outside the commentary-only public progress projection. Multiline
89
+ asynchronous question titles, URLs and answers retain their complete native
90
+ question identity and are encoded through the existing structured answer
91
+ envelope, with no automatic duplicate response.
92
+
93
+ The upstream resume path in both reviewed versions requires persisted history.
94
+ A newly loaded, idle, empty thread may expose live metadata before any rollout
95
+ exists. AKK preserves that verified identity as
96
+ `history_state: "unmaterialized"`, but does not advertise Send or permission
97
+ actions that require a native subscription. Status and native inspection can
98
+ return the fresh idle metadata with
99
+ `subscription_state: "unavailable_unmaterialized_history"` and
100
+ `observation_error: "native_subscription_unmaterialized"`. Its
101
+ `interaction_requests_scanned: false` and null pending-interaction count mean
102
+ requests were not scanned, rather than proving that no question or approval
103
+ exists. This diagnostic fallback requires the exact missing-rollout condition
104
+ and a fresh same-thread idle/empty read; it does not accept unrelated failures.
105
+
106
+ ## Version and route boundaries
107
+
108
+ | Route | Compatibility rule |
109
+ | --- | --- |
110
+ | Direct shared-backend CLI | Live identity and method/response contracts govern availability; no exact-version allowlist or numeric minimum is introduced. |
111
+ | Terminal paginated interaction writes | Add only the audited **frontend 0.162.1 / app-server 0.162.1** pair. Existing older audited pairs remain; 0.162.1/0.162.0 and 0.162.1/0.162.2 are not admitted as write pairs. |
112
+ | Terminal native status and controls | The observed process version selects the appropriate profile; exact process, pane, native thread, composer and current UI checks still apply. |
113
+ | Desktop | No new Desktop profile. Native writes retain the exact macOS **26.1002.52244 / build 13536** requirement and verified live owner. |
114
+
115
+ A thread's stored `cliVersion` is creation metadata. It cannot prove the
116
+ version of a currently attached frontend. Same-directory history cannot
117
+ merge a terminal with a shared-backend thread; the route requires exact native
118
+ identity. Busy/blocked state or an uncertain dispatch never triggers a retry
119
+ through another transport.
120
+
121
+ ## Verification record
122
+
123
+ The dedicated live matrix is complete. The table distinguishes operations
124
+ actually executed from source/regression-only coverage and retained historical
125
+ evidence. The formal release gate also passed as recorded below.
126
+
127
+ | Evidence | Current scope |
128
+ | --- | --- |
129
+ | Earlier 0.14.1 targeted live proof | macOS CLI 0.162.1 + shared app-server 0.162.1: bounded public progress during an active task, 720-minute Send monitoring, one local completion acknowledgement and idempotent Send. |
130
+ | Dedicated frontend/backend pair | macOS CLI 0.162.1 + shared app-server 0.162.1, launched through the existing `mycodes --remote` wrapper in a dedicated test session. |
131
+ | Native status, exact identity and List | Passed: the closed native `/status` transaction proved the exact thread and enabled alias coalescing; subsequent materialized-thread backend Status read the same target. |
132
+ | Unmaterialized empty thread | Passed in a separate dedicated 0.162.1/0.162.1 CLI: List withheld Send/permission offers, Status/native inspection retained verified idle identity with unscanned requests and a null pending count, and an attempted semantic Send was rejected before a native turn, Watch or callback was created. The thread stayed empty and global configuration was unchanged. |
133
+ | Model discovery | Passed: the public model-options operation read seven native models and restored the composer. Model mutation was intentionally not exercised because the existing terminal setter persists defaults; its scope remains covered by source review and regressions. |
134
+ | Backend permissions | Passed: Default, Full Access and Read Only round trips retained the selected native thread. This is backend permission evidence, not a terminal menu round-trip claim. |
135
+ | Routed Send, Status, Watch and completion | Passed: Send through the terminal alias selected the native backend, proved acceptance and a 720-minute deadline; Status using the returned native conversation ID and Watch ID read the same active turn and bounded progress. The exact turn completed with one local callback acknowledgement; idempotent Send retained the original Watch and deadline. Reading the old Watch after later turns still returned its original task's progress without later-task text. |
136
+ | Backend command/file approvals | Passed: real requests in the selected test task were approved through their exact native interaction identities; the task completed with one local callback acknowledgement and idempotent repeat handling. |
137
+ | Backend blocking and asynchronous questions | Passed: both answers to a two-question blocking request were received, and an asynchronous free-text answer retained Chinese, emoji and a newline through the final result. Each completion acknowledged once; repeated handling did not duplicate the answer or callback. |
138
+ | Terminal question surface recognition | Real captured blocking-question UI was recognized as actionable under the v5 profile; the captured asynchronous `⇧←` queue hint was recognized as collapsed. Answers in this live matrix used the backend route. Terminal answer-key injection is covered by regressions, not a new live execution claim. |
139
+ | Recovery, Renew, Watch and Unwatch | Passed: after stopping only the isolated test monitor, Recover relaunched observation with its original deadline. No-argument backend Renew used about 720 minutes. A new explicit Watch bound the same active turn with 720 minutes; Unwatch stopped only that observation while the native task continued and the original Send Watch completed once. |
140
+ | Close and accepted callback retry | Passed: Close released AKK management while preserving the same idle native thread. Retrying an already accepted callback was rejected without another notification. |
141
+ | Terminal permission mutation | Passed through the production TerminalAgentBridge and real tmux capture/input: Read Only, Ask for approval, Approve for me and Full Access each changed successfully; the new centered Full Access dialog was confirmed and the final catalog restored the initial Full Access setting. Before every input, the harness rechecked process incarnation, pane, cwd, frontend version and the same idle backend thread. Global configuration remained unchanged. |
142
+ | Older frontend/backend combinations | Regression coverage retained; no new old-version live run is claimed without a separate recorded result. |
143
+ | Desktop live | Explicitly skipped. Relevant regressions remain part of the release gate. |
144
+ | Fast regressions | Final `npm run test:fast`: 2,836 passed, zero failures. |
145
+ | Static/build checks | Type checking, architecture validation and canonical/bundled Skill consistency passed. The Skill's reviewed-version lists include 0.162.1; independent connector package versions are unchanged. |
146
+ | Full regressions | Final release-gate full suite: 3,351 passed, zero failures, on Node.js 24.18.0. |
147
+ | Runtime provenance | All 1,050 compiled runtime files matched the immutable build used for the final live matrix by individual SHA-256 comparison. |
148
+ | Formal release gate | `npm run test:release` passed: full suite, isolated OpenClaw 2026.9.1 compatibility, ClawHub runtime validation and publication dry-run. |
149
+ | Isolated OpenClaw | Loaded all 25 tools; callback, doctor, bundled Skill, tmux fixture/diagnostics, update/reinstall and uninstall checks passed. The existing user Gateway was not restarted or upgraded. |
150
+ | ClawHub/package validation | Runtime Plugin Inspector passed with zero breakages and zero warnings. `npm pack --dry-run` and ClawHub publication dry-run passed with 1,094 files; the canonical bundled Skill and this compatibility report were included, while tests, node_modules, Git metadata and private proof artifacts were excluded. Registry/download verification remains a separate publication step. |
151
+
152
+ Callback acknowledgement at a local test receiver proves AKK callback
153
+ generation/delivery and deduplication at that receiver. It does not prove a
154
+ new OpenClaw-to-WeChat delivery. No user conversation, shared daemon or Gateway
155
+ needs to be restarted to run isolated compatibility checks.
156
+
157
+ The optional general native lifecycle live-smoke was not run: paginated
158
+ new/resume remains unsupported, and the dedicated matrix above covers the
159
+ actual routes changed in this release. Desktop live verification was skipped
160
+ by explicit choice; it is not reported as passing.
161
+
162
+ An old terminal alias without current native identity can still return terminal
163
+ activity while work is active; AKK does not type `/status` into that busy
164
+ terminal to force a merge. The Send-returned native conversation and Watch
165
+ identifiers retain the exact backend route. No identity guard was relaxed to
166
+ make the alias appear resolved.
167
+
168
+ For the stopped explicit Watch, its legacy task `status` can remain `watching`;
169
+ `observation_state: "stopped"` and `observation_active: false` describe the
170
+ monitoring state. Unwatch is not native cancellation or task completion.
171
+
172
+ ## Retained limits
173
+
174
+ - Direct CLI model control and cancellation still require an eligible verified
175
+ terminal capability. Native new/clear/resume remains unsupported for these
176
+ paginated versions; adding a version profile does not enable lifecycle work.
177
+ - A newly loaded CLI thread with no materialized history is not automatically
178
+ writable through the direct adapter: upstream `thread/resume` requires stored
179
+ history. Reading its live metadata is different from acquiring a task/response
180
+ channel. Such a thread must not be advertised as Send-ready solely because it
181
+ is loaded and idle.
182
+ - The Status public body remains bounded to 800 Unicode code points, with
183
+ redaction, grapheme-safe truncation and exact-turn freshness/error reporting.
184
+ List gains no progress body or pagination changes in this release.
185
+ - The shared 720-minute monitoring hard deadline, managed-terminal 60-minute
186
+ inactivity window, existing absolute deadlines and notification deduplication
187
+ remain unchanged. Recover does not replay a task or silently renew it.
188
+ - macOS terminal glyph evidence does not establish Linux/Windows UI validation.
189
+ Desktop live behavior and other Desktop builds are not newly certified.
190
+
191
+ ## Sources
192
+
193
+ - [Official 0.162.1 release](https://github.com/openai/codex/releases/tag/rust-v0.162.1)
194
+ - [Official 0.160.0 to 0.162.1 source comparison](https://github.com/openai/codex/compare/rust-v0.160.0...rust-v0.162.1)
195
+ - [Official 0.162.1 native status card source](https://github.com/openai/codex/blob/rust-v0.162.1/codex-rs/tui/src/status/card.rs)
196
+ - [Official 0.162.1 app-server API](https://github.com/openai/codex/tree/rust-v0.162.1/codex-rs/app-server-protocol)
197
+ - [Official loaded-thread read and resume implementation](https://github.com/openai/codex/blob/rust-v0.162.1/codex-rs/app-server/src/request_processors/thread_processor.rs)
198
+ - [Earlier 0.160.0 compatibility evidence](codex-0.160.0-compatibility.md)
@@ -167,6 +167,7 @@ permit automatic replay of `sent` or `uncertain` responses.
167
167
  | --- | --- |
168
168
  | Live-tested combination, 2026-10-09 | **macOS: Codex CLI 0.160.0 + shared app-server 0.162.0**; production-adapter operations and limits are recorded below. |
169
169
  | Additional targeted live proof, 2026-10-10 | **macOS: Codex CLI 0.162.1 + shared app-server 0.162.1**. Verified public Status progress while a task was in progress through the running OpenClaw plugin, an actual 720-minute Send deadline, one isolated local completion acknowledgement, and repeated Send retaining the original task/deadline. No new WeChat delivery or full native-operation matrix is claimed. |
170
+ | 0.14.2 compatibility review, 2026-10-10 | **macOS: Codex CLI 0.162.1 + shared app-server 0.162.1**. Expanded dedicated-session validation, native UI fixes and retained limits are recorded in the [operation matrix](codex-0.162.1-compatibility.md#verification-record). |
170
171
  | Runtime admission | A loaded main CLI thread, the selected local Codex home, valid stable `x.y.z` backend metadata, and the required live protocol shapes/methods. There is **no established numeric minimum** or exact version allowlist for direct control. |
171
172
  | Platform evidence | The live proof was on macOS. It does not establish a Linux/Windows direct-control validation matrix. |
172
173
 
@@ -178,12 +179,14 @@ not establish support. Unsupported methods or changed response shapes fail for
178
179
  that operation with a diagnostic; unknown state never becomes task completion.
179
180
  Prerelease version suffixes do not meet the stable version syntax check.
180
181
 
181
- The **0.162.1** installation is an observation, not a minimum requirement or a
182
- newly verified combination. No separate 0.162.1 end-to-end evidence was found in
183
- this audit. A thread's `cliVersion` is creation metadata, not proof of the
184
- currently attached frontend's executable version. The terminal TUI's
185
- [audited version pairs](codex-0.160.0-compatibility.md) govern a different
186
- adapter and must not be used as the direct-control version matrix.
182
+ The additional **0.162.1/0.162.1** proof above is limited to the stated
183
+ operations; the [0.14.2 compatibility review](codex-0.162.1-compatibility.md)
184
+ records the subsequent native UI/protocol review and its separate verification
185
+ matrix. Neither record establishes a numeric minimum. A thread's `cliVersion`
186
+ is creation metadata, not proof of the currently attached frontend's executable
187
+ version. The terminal TUI's [audited version pairs](codex-0.162.1-compatibility.md#version-and-route-boundaries)
188
+ govern a different adapter and must not be used as the direct-control version
189
+ matrix.
187
190
 
188
191
  The permission update API is experimental. Backends may evolve, so action-time
189
192
  contract checks and the actual effective settings remain necessary.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@scotthuang/agent-knock-knock",
3
- "version": "0.14.1",
4
- "description": "Control Codex CLI through its shared backend, Codex Desktop through native IPC, and Codex or Claude Code through terminals from OpenClaw or compatible controller Hosts.",
3
+ "version": "0.14.3",
4
+ "description": "Delegate to existing Codex CLI, Codex Desktop, and Claude Code sessions from OpenClaw or compatible controller Hosts, with native direct control and supported terminal fallbacks.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "homepage": "https://github.com/scotthuang/agent-knock-knock#readme",
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: agent-knock-knock
3
- description: Discover and control loaded Codex CLI threads, existing Codex Desktop conversations, or Codex and Claude Code tmux/Herdr terminals with Agent Knock Knock.
3
+ description: Use Agent Knock Knock to discover, send tasks to, and observe existing Codex CLI, Codex Desktop, or Claude Code conversations through their supported direct or terminal connections.
4
4
  ---
5
5
 
6
6
  # Agent Knock Knock
7
7
 
8
8
  Use this skill when the user explicitly invokes `AKK`, `akk`, or `Agent Knock Knock`, or asks a supported controller Host to inspect or control a coding-agent conversation listed by AKK.
9
9
 
10
- AKK supports loaded local Codex CLI threads through their shared backend, existing local Codex Desktop conversations, and Codex or Claude Code already running inside tmux or local Herdr `0.8.0`. It never launches a replacement coding agent. The controller Host, AKK, the coding agent, and its Desktop app or terminal host must run as the same OS user.
10
+ AKK supports loaded local Codex CLI threads through their shared backend, existing local Codex Desktop conversations, compatible already-open Claude Code CLIs through their native inbox, and Codex or Claude Code already running inside tmux or local Herdr `0.8.0`. It never launches a replacement coding agent. The controller Host, AKK, the coding agent, and its Desktop app or terminal host must run as the same OS user.
11
11
 
12
12
  Treat `AKK` and `akk` the same way.
13
13
 
@@ -19,9 +19,9 @@ Keep the user's requested scope and approval boundaries. Do not expand a task, a
19
19
 
20
20
  ## Choose a conversation
21
21
 
22
- Use `conversations[]` from List as the primary collection and select by title, project and current identity. Choose the row's exact conversation and advertised operation; AKK chooses the route, including Status, Send, Watch and permission controls. Callers do not select between a backend and a terminal. For a proven terminal/backend match, `terminal_controls[]` preserves that terminal’s managed Turns, recovery and capability-specific actions inside the conversation row; these are controls for the same conversation, not extra tasks. The raw CLI retains `terminals[]`, `codex_cli_sessions[]` and `desktop_sessions[]` for compatibility and private authority, but do not present these again as extra conversations when `conversations[]` exists.
22
+ Use `conversations[]` from List as the primary collection and select by title, project and current identity. Choose the row's exact conversation and advertised operation; AKK chooses the route, including Status, Send, Watch and permission controls. Callers do not select between a backend and a terminal. For a proven terminal/backend match, `terminal_controls[]` preserves that terminal’s managed Turns, recovery and capability-specific actions inside the conversation row; these are controls for the same conversation, not extra tasks. The raw CLI retains `terminals[]`, `codex_cli_sessions[]`, `claude_cli_sessions[]` and `desktop_sessions[]` for compatibility and private authority, but do not present these again as extra conversations when `conversations[]` exists.
23
23
 
24
- AKK prefers the reachable Codex backend only when it proves the exact current native thread. A terminal and backend row merge only with exact identity evidence, never matching cwd, title, newest history or version alone. Unresolved representations may remain separate; do not assume they are different tasks or send twice. The routing diagnostics describe available evidence, not authority to skip a guard. An unavailable backend may retain an eligible terminal path; a busy, blocked or mismatched native task is not an excuse to try terminal input. For a selected physical terminal without a proven native anchor, targeted conversation operations, including Status, may run an advertised idle-only `/status` identity inspection when backend candidates exist. This can display a native status card but submits no user task; a working or blocked terminal is not interrupted. List sends no terminal input. If a dispatch is uncertain, keep its receipt and inspect it instead of retrying another route.
24
+ AKK prefers a reachable direct connection only when it proves the exact current native session and process or thread. A terminal and backend row merge only with exact identity evidence, never matching cwd, title, newest history or version alone. Unresolved representations may remain separate; do not assume they are different tasks or send twice. The routing diagnostics describe available evidence, not authority to skip a guard. An unavailable backend may retain an eligible terminal path; a busy, blocked or mismatched native task is not an excuse to try terminal input. For a selected physical terminal without a proven native anchor, targeted conversation operations, including Status, may run an advertised idle-only `/status` identity inspection when backend candidates exist. This can display a native status card but submits no user task; a working or blocked terminal is not interrupted. List sends no terminal input. If a dispatch is uncertain, keep its receipt and inspect it instead of retrying another route.
25
25
 
26
26
  Use the returned `watch_id` or `turn_id` for that task's follow-up. Existing Watches and pending interactions keep their task and route. After a question or approval callback, refresh that exact Status and copy the current interaction action; do not translate its IDs to another transport. Permission operations prefer the verified backend. Backend task recovery retains the original task identity and provider. Terminal binding/menu recovery, model and lifecycle operations retain their separately advertised capability; the caller does not pick a transport. The route-specific guidance below explains those capabilities and result boundaries, not an additional route-selection step.
27
27
 
@@ -49,6 +49,16 @@ A `conversations[]` row with `source="codex_cli"` uses an exact `codex-cli:v1:..
49
49
 
50
50
  Use AKK's advertised actions and read the actual operation result after backend upgrades. A missing backend method fails that operation with an unsupported-capability diagnostic; it does not justify sending UI input to a guessed terminal. Existing terminal and Desktop capabilities retain their own limits. Model selection and native thread lifecycle operations are not added to this direct route.
51
51
 
52
+ ## Direct Claude Code
53
+
54
+ Rows with `source="claude_cli"` use `claude-cli:v1:...` IDs for an already-running native CLI. This path is live-tested on macOS with Claude Code `2.1.296` and peer protocol `1`; Python 3 is required on the AKK side. It needs no Claude plugin, hook, special launch arguments or replacement process. Use actual advertised capabilities after upgrades, not a version number alone.
55
+
56
+ - Send to a verified idle conversation. Keep its `claude-cli-watch:...` receipt: Send already creates completion monitoring with the shared 720-minute hard deadline. Do not add another Watch for that Send. Busy/blocked, held/refused or uncertain delivery must not be retried through terminal input.
57
+ - Status on the conversation reads its latest input; Status on the Watch reads its original exact `native_input_id`. This is an input UUID, not a native turn ID. Public progress and tool-action summaries are bounded to 800 code points; List has no progress body. `agent_acceptance: proven` requires exact native sender/message/input evidence, not merely a socket write.
58
+ - Watch a manually started active task using the conversation action. Keep the returned Watch through task changes. Idle is not success; `exited` means the original process ended without proof of completion. A new process resuming the same history is not silently substituted.
59
+ - Use the advertised Recover, Unwatch, Close and retry-callback actions on the original task. Explicit Renew requires that same input still active; settled or exited tasks cannot renew. Accepted or uncertain callbacks are not replayed. Callback acceptance proves delivery to the controller, not to a downstream chat channel.
60
+ - Direct approvals, question answers, models, permissions, cancellation and lifecycle commands are unavailable. Registry waiting hints may indicate manual attention, but `pending_interaction_count: null` means unknown and interaction notification is not guaranteed. Report `manual_required` and return to the original Claude terminal. If an exact eligible tmux/Herdr counterpart exists, AKK retains its advertised special controls automatically; their original version and safety limits still apply.
61
+
52
62
  ## Codex Desktop
53
63
 
54
64
  Desktop rows in `conversations[]` have `source="codex_desktop"` and a full `desktop:v1:...` conversation ID. Their owner identity is separate from terminal selectors, managed Sessions, and managed Turns. The terminal-specific instructions below do not grant Desktop input authority.
@@ -184,7 +194,7 @@ success; never retry an uncertain repair automatically.
184
194
  For native status inspection:
185
195
 
186
196
  1. Use only a current `available_actions.native_inspect({terminal_id,inspection:"status"})` entry. Those semantic arguments are complete; never add a command or authority field.
187
- 2. Regression-tested profiles are Codex 0.146.0/0.146.1/0.147.0/0.148.0/0.149.1/0.150.1/0.151.0/0.153.0/0.153.4/0.154.0/0.155.1/0.158.0/0.159.0/0.159.2/0.159.3/0.160.0 and Claude Code 2.1.218/2.1.226/2.1.237/2.1.251/2.1.259/2.1.263/2.1.266/2.1.267/2.1.285 `inspection="status"`. Other complete `x.y.z` versions remain callable through the generic runtime profile and add a compatibility warning; actual incompatible UI or schema evidence fails at runtime and is not automatically retried. Claude success includes parsing and safely dismissing the newly opened Status panel. The inspection tool does not accept `/status` text or any arbitrary command string. `/usage`, `/cost`, `/stats`, `/usage-credits`, raw `/model`, `/compact`, and arbitrary slash commands remain unavailable; model changes use only the typed model-control tools above. Never automate bare Codex `/usage`: it opens an interactive menu whose later Enter can select an account-side usage-limit reset.
197
+ 2. Regression-tested profiles are Codex 0.146.0/0.146.1/0.147.0/0.148.0/0.149.1/0.150.1/0.151.0/0.153.0/0.153.4/0.154.0/0.155.1/0.158.0/0.159.0/0.159.2/0.159.3/0.160.0/0.162.1 and Claude Code 2.1.218/2.1.226/2.1.237/2.1.251/2.1.259/2.1.263/2.1.266/2.1.267/2.1.285 `inspection="status"`. Other complete `x.y.z` versions remain callable through the generic runtime profile and add a compatibility warning; actual incompatible UI or schema evidence fails at runtime and is not automatically retried. Claude success includes parsing and safely dismissing the newly opened Status panel. The inspection tool does not accept `/status` text or any arbitrary command string. `/usage`, `/cost`, `/stats`, `/usage-credits`, raw `/model`, `/compact`, and arbitrary slash commands remain unavailable; model changes use only the typed model-control tools above. Never automate bare Codex `/usage`: it opens an interactive menu whose later Enter can select an account-side usage-limit reset.
188
198
  3. Treat this as terminal input even though the native command is read-only. AKK privately derives a fresh binding fence and requires an idle empty composer, exact PID/process/pane/cwd/version identity, and no conflicting Turn, transition, dispatch, approval, or owner.
189
199
  4. Codex `/status` requires an exact viewport of at least 80 columns so the full Session UUID can be proven. That pre-UUID gate applies to native inspection, lifecycle, and strict Session operations that must know the UUID before terminal input. Legacy terminal-scoped ordinary tasks may send once and bind from exact native acceptance afterward without running `/status` or failing merely because the pane is narrow. Codex paginated read-contract candidates attempt their separate closed `/status` binding before physical Send. If an exact callback Watch cannot be prepared safely, AKK may prepare terminal-activity observation; report the receipt's actual callback mode and limitation.
190
200
  5. The result is valid only when AKK proves one fresh bounded native status result and the pane returns to idle. On an uncertain or unproven submission, do not retry, send Enter, clear the composer, or bypass AKK with raw terminal input.
@@ -286,7 +296,7 @@ Action-name glossary:
286
296
 
287
297
  - `status`: inspect one terminal, Turn, or Watch; it sends no native slash command.
288
298
  - `send`: deliver a new request, or perform the separately advertised immutable `retry_submission` form.
289
- - `watch` / `unwatch`: create or stop durable terminal observation; Codex 0.158.0/0.159.0/0.159.2/0.159.3/0.160.0 exact creation performs the closed `/status` transaction, while subsequent observation is read-only.
299
+ - `watch` / `unwatch`: create or stop durable terminal observation; Codex 0.158.0/0.159.0/0.159.2/0.159.3/0.160.0/0.162.1 exact creation performs the closed `/status` transaction, while subsequent observation is read-only.
290
300
  - `list_resumable_threads`, `new_thread`, and `resume_thread`: inspect or change native thread context through their closed lifecycle protocols.
291
301
  - `native_inspect`: run only an advertised closed native inspection such as `status`.
292
302
  - `model_options`, `repair_model_control`, and `set_model`: discover the current native catalog, clear only a proven model-control residue, or consume one catalog offer.