@scotthuang/agent-knock-knock 0.14.16 → 0.15.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 -0
- package/CONTRIBUTING.md +2 -2
- package/README.md +10 -8
- package/connectors/deepseek-harness/README.md +25 -6
- package/connectors/pi/README.md +24 -5
- package/dist/src/claude-conversation-routing-cli-adapter.js +76 -6
- package/dist/src/claude-conversation-routing-cli-adapter.js.map +1 -1
- package/dist/src/claude-lifecycle-compatibility.js +3 -9
- package/dist/src/claude-lifecycle-compatibility.js.map +1 -1
- package/dist/src/claude-local-transcript-provider.d.ts +5 -15
- package/dist/src/claude-local-transcript-provider.js +38 -56
- package/dist/src/claude-local-transcript-provider.js.map +1 -1
- package/dist/src/claude-managed-send-route.d.ts +17 -0
- package/dist/src/claude-managed-send-route.js +51 -0
- package/dist/src/claude-managed-send-route.js.map +1 -0
- package/dist/src/claude-native-cli-adapter.js +11 -9
- package/dist/src/claude-native-cli-adapter.js.map +1 -1
- package/dist/src/claude-native-client.d.ts +2 -0
- package/dist/src/claude-native-client.js +6 -1
- package/dist/src/claude-native-client.js.map +1 -1
- package/dist/src/claude-native-discovery.js +14 -2
- package/dist/src/claude-native-discovery.js.map +1 -1
- package/dist/src/claude-native-observation.js +3 -1
- package/dist/src/claude-native-observation.js.map +1 -1
- package/dist/src/claude-native-outbox.js +15 -3
- package/dist/src/claude-native-outbox.js.map +1 -1
- package/dist/src/claude-native-peer-envelope.d.ts +3 -0
- package/dist/src/claude-native-peer-envelope.js +72 -0
- package/dist/src/claude-native-peer-envelope.js.map +1 -0
- package/dist/src/claude-native-public-projection.d.ts +635 -60
- package/dist/src/claude-native-public-projection.js +42 -11
- package/dist/src/claude-native-public-projection.js.map +1 -1
- package/dist/src/claude-native-runtime.d.ts +2 -0
- package/dist/src/claude-native-runtime.js +1 -1
- package/dist/src/claude-native-runtime.js.map +1 -1
- package/dist/src/claude-native-sender-policy.d.ts +3 -0
- package/dist/src/claude-native-sender-policy.js +14 -0
- package/dist/src/claude-native-sender-policy.js.map +1 -0
- package/dist/src/claude-native-state-store.d.ts +3 -0
- package/dist/src/claude-native-state-store.js +18 -6
- package/dist/src/claude-native-state-store.js.map +1 -1
- package/dist/src/claude-native-task-service.d.ts +2 -0
- package/dist/src/claude-native-task-service.js +37 -8
- package/dist/src/claude-native-task-service.js.map +1 -1
- package/dist/src/claude-reader-configuration.d.ts +14 -0
- package/dist/src/claude-reader-configuration.js +41 -0
- package/dist/src/claude-reader-configuration.js.map +1 -0
- package/dist/src/claude-terminal-agent-adapter.d.ts +4 -0
- package/dist/src/claude-terminal-agent-adapter.js +1 -1
- package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
- package/dist/src/claude-terminal-agent-observation.d.ts +14 -0
- package/dist/src/claude-terminal-agent-observation.js +147 -0
- package/dist/src/claude-terminal-agent-observation.js.map +1 -0
- package/dist/src/claude-terminal-registry-observation.d.ts +29 -0
- package/dist/src/claude-terminal-registry-observation.js +122 -0
- package/dist/src/claude-terminal-registry-observation.js.map +1 -0
- package/dist/src/claude-transcript-config.d.ts +25 -0
- package/dist/src/claude-transcript-config.js +61 -0
- package/dist/src/claude-transcript-config.js.map +1 -0
- package/dist/src/cli-core.js +37 -13
- package/dist/src/cli-core.js.map +1 -1
- package/dist/src/codex-async-question-adapter.d.ts +1 -1
- package/dist/src/codex-async-question-adapter.js +37 -7
- package/dist/src/codex-async-question-adapter.js.map +1 -1
- package/dist/src/codex-fullscreen-composer-proof.d.ts +2 -0
- package/dist/src/codex-fullscreen-composer-proof.js +9 -2
- package/dist/src/codex-fullscreen-composer-proof.js.map +1 -1
- package/dist/src/codex-lifecycle-compatibility.d.ts +1 -1
- package/dist/src/codex-lifecycle-compatibility.js +5 -3
- package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
- package/dist/src/codex-native-semantic.js +10 -2
- package/dist/src/codex-native-semantic.js.map +1 -1
- package/dist/src/codex-permission-surface.js +3 -3
- package/dist/src/codex-permission-surface.js.map +1 -1
- package/dist/src/codex-process-incarnation.js +3 -1
- package/dist/src/codex-process-incarnation.js.map +1 -1
- package/dist/src/codex-terminal-agent-adapter.js +1 -1
- package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
- package/dist/src/conversation-list.d.ts +6 -0
- package/dist/src/conversation-list.js +61 -14
- package/dist/src/conversation-list.js.map +1 -1
- package/dist/src/conversation-route-dispatch.js +4 -3
- package/dist/src/conversation-route-dispatch.js.map +1 -1
- package/dist/src/conversation-route-store.d.ts +6 -1
- package/dist/src/conversation-route-store.js +13 -5
- package/dist/src/conversation-route-store.js.map +1 -1
- package/dist/src/conversation-runtime-route-store.js +5 -3
- package/dist/src/conversation-runtime-route-store.js.map +1 -1
- package/dist/src/semantic-tool-descriptions.d.ts +1 -1
- package/dist/src/semantic-tool-descriptions.js +10 -8
- package/dist/src/semantic-tool-descriptions.js.map +1 -1
- package/dist/src/semantic-tool-list-projection.js +24 -5
- package/dist/src/semantic-tool-list-projection.js.map +1 -1
- package/dist/src/semantic-tool-schemas.js +7 -5
- package/dist/src/semantic-tool-schemas.js.map +1 -1
- package/dist/src/terminal-action-projection.d.ts +1 -1
- package/dist/src/terminal-action-projection.js.map +1 -1
- package/dist/src/terminal-command-dispatch-preparation.js +6 -3
- package/dist/src/terminal-command-dispatch-preparation.js.map +1 -1
- package/dist/src/terminal-human-explicit-send-cli-adapter.js +14 -6
- package/dist/src/terminal-human-explicit-send-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-cli-adapter.d.ts +2 -0
- package/dist/src/terminal-list-cli-adapter.js +18 -3
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-ownership-service.js +1 -1
- package/dist/src/terminal-list-ownership-service.js.map +1 -1
- package/dist/src/terminal-list-projection-service.js +5 -0
- package/dist/src/terminal-list-projection-service.js.map +1 -1
- package/dist/src/terminal-list-renderer.js +1 -1
- package/dist/src/terminal-list-renderer.js.map +1 -1
- package/dist/src/terminal-managed-interaction-list-action.d.ts +17 -0
- package/dist/src/terminal-managed-interaction-list-action.js +59 -0
- package/dist/src/terminal-managed-interaction-list-action.js.map +1 -0
- package/dist/src/terminal-managed-send-cli-adapter.js +8 -1
- package/dist/src/terminal-managed-send-cli-adapter.js.map +1 -1
- package/dist/src/terminal-model-control-profile.d.ts +5 -3
- package/dist/src/terminal-model-control-profile.js +37 -11
- package/dist/src/terminal-model-control-profile.js.map +1 -1
- package/dist/src/terminal-model-control-surface.js +1 -1
- package/dist/src/terminal-model-control-surface.js.map +1 -1
- package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
- package/dist/src/terminal-native-inspection-profile.js +2 -0
- package/dist/src/terminal-native-inspection-profile.js.map +1 -1
- package/dist/src/terminal-native-inspection-proof.js +1 -1
- package/dist/src/terminal-native-inspection-proof.js.map +1 -1
- package/dist/src/terminal-permission-control.js +1 -1
- package/dist/src/terminal-permission-control.js.map +1 -1
- package/dist/src/terminal-process-source.js +3 -1
- package/dist/src/terminal-process-source.js.map +1 -1
- package/dist/src/terminal-questionnaire-adapter.js +17 -11
- package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
- package/dist/src/terminal-runtime-cli-adapter.js +27 -72
- package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
- package/dist/src/terminal-watch-record.js +2 -0
- package/dist/src/terminal-watch-record.js.map +1 -1
- package/dist/src/terminal-watch-terminal-identity.js +1 -0
- package/dist/src/terminal-watch-terminal-identity.js.map +1 -1
- package/docs/claude-cli-direct.md +32 -13
- package/docs/codex-0.164.0-compatibility.md +122 -0
- package/docs/codex-cli-native-compatibility.md +1 -0
- package/docs/list-output.md +8 -0
- package/docs/operator-guide.md +23 -4
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +25 -13
|
@@ -25,9 +25,9 @@ Present `conversations[]` as **CLI** or **Desktop** using `surface`, and keep Co
|
|
|
25
25
|
|
|
26
26
|
Default CLI presentation prefers the verified backend entry for a one-to-one same-agent/project discovery pair without known identity conflicts. Use that returned conversation ID and its actions directly; do not search for or choose an alternative transport. Its title, state and actions belong to the selected backend. Presentation preference does not prove a terminal alias, copy terminal permissions, or redirect a previously selected terminal ID. Multiple candidates, conflicts and terminal attention/recovery records remain visible. Proven exact aliases still combine verified controls. Use `terminalDebug: true` (CLI `list --terminal-debug`) only when connection diagnostics are needed, not as a routine selection step. Unnamed, unstarted Codex candidates beside an established same-project conversation may be folded for display; `conversation_presentation.unstarted_candidates_omitted` reports their count and `diagnostic_query` expands them. This does not prove abandonment or an exact alias. If the requested new empty session is missing, use that query and its original exact ID; never substitute the established conversation. Sole or exactly associated new sessions remain visible, and a first task restores ordinary display.
|
|
27
27
|
|
|
28
|
-
AKK prefers a
|
|
28
|
+
For new Codex sends, AKK prefers the verified shared backend and retains an eligible terminal path when that backend is unavailable. For new Claude Code sends, AKK automatically prefers a managed terminal Turn when a unique controllable tmux/Herdr counterpart proves the same native session and process; without that terminal it uses the native inbox and returns a native Watch. The controller selects the conversation, not the transport or management mode. Busy/blocked state, identity conflict, ownership conflict or a Store error cannot authorize bypass to native delivery. Targeted reads can still use the exact backend; an idle terminal may use the advertised `/status` inspection to learn its identity, while working or blocked terminals are not interrupted. List itself sends no terminal input. Keep an uncertain dispatch receipt and inspect it instead of retrying through another connection.
|
|
29
29
|
|
|
30
|
-
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.
|
|
30
|
+
Use the returned `watch_id` or `turn_id` for that task's follow-up. Existing Watches, Turns, send receipts and pending interactions keep their task and route, including native Claude Watches created before a terminal became available. After a question or approval callback, refresh that exact Status and copy the current interaction action; do not translate its IDs to another transport. Claude managed approvals follow the returned `turn_id`. Codex 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.
|
|
31
31
|
|
|
32
32
|
## Recover a backend task
|
|
33
33
|
|
|
@@ -55,13 +55,23 @@ Use AKK's advertised actions and read the actual operation result after backend
|
|
|
55
55
|
|
|
56
56
|
## Direct Claude Code
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
Claude Code conversations use `claude-cli:v1:...` IDs for an already-running native CLI. Standard `claude` and configured wrappers such as `tclaude` share the same adapter; no wrapper is required. The default executable is `claude`, with the usual `~/.claude` home unless configured otherwise. Starting with AKK 0.15.0, an ordinary Send automatically uses a managed terminal Turn when an exact controllable tmux/Herdr counterpart exists; without that terminal, native inbox delivery remains available. Native live observations include macOS Claude Code `2.1.295` and `2.1.296` with peer protocol `1`; these are tested versions, not minimum versions. Python 3 is required on the AKK side. It needs no Claude plugin, hook, special launch arguments or replacement process. Use actual advertised capabilities and runtime evidence after upgrades, not a version number alone.
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
For native inbox delivery to Claude Code or tclaude, check `AKK_NATIVE_CLAUDE_SENDER_PERMISSION_CLASS` in the actual AKK/controller Host launch environment. It accepts `bypass` or `prompting` and declares the sender's permission class in the native `<cross-session-message from-mode="…">` envelope. AKK generates that envelope and escapes task text; send only the task in `request`, never construct a `from-mode` wrapper yourself. Managed terminal sends do not use that envelope. This declaration does not change Claude's permissions or approve a held message.
|
|
61
|
+
|
|
62
|
+
- Determine this class from the sender/controller's actual permission policy, explicitly configured by its operator, or verified evidence about the sender. Apply it only within an authorized setup task. The receiver's process flags and permission mode may explain a held message, but cannot establish the sender's class. Do not copy the receiver's mode or infer `bypass` from a headless controller. Leave the declaration unset if the sender's policy cannot be established.
|
|
63
|
+
- Configure the chosen value on the process that actually sends AKK requests, using its existing launch configuration. Setting it only in the target Claude process or another shell does not update a running Host. AKK itself never infers the class from the target command, target permissions, task text, or lack of an interactive UI; it uses the explicit sender configuration.
|
|
64
|
+
- Unset or empty means no declaration; an invalid value rejects a new Send before submission. The receipt reports `sender_permission_class` and `sender_permission_class_source` (`operator_configured` or `unspecified`). These describe the declaration, not acceptance. Keep held/refused/uncertain receipts and inspect the original Watch or terminal: changing the variable does not update or resend an old message, and it never authorizes automatic replay.
|
|
65
|
+
|
|
66
|
+
- Send to the selected verified idle conversation. With an exact eligible terminal, AKK creates the managed Turn and starts monitoring automatically; retain its `turn_id` for Status, supported approvals and question responses. No extra background flag or separate Watch is needed. When no exact terminal is available, native Send returns `claude-cli-watch:...` and monitors the exact input with the shared 720-minute hard deadline. Read the actual receipt; never claim managed approval support for a native Watch. Busy/blocked, held/refused or uncertain delivery must not be retried through another connection.
|
|
67
|
+
- Use `status({turn_id})` for a managed task and `status({watch_id})` for a native task. Conversation Status reads the latest native input and is not a replacement for the original task receipt. Native Watch Status reads its exact `native_input_id`, which 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. Native `agent_acceptance: proven` requires exact sender/message/input evidence, not merely a socket write.
|
|
68
|
+
- A successful `stop_hook_summary` does not prevent completion when the exact input's final message and durable completion record agree. Nonempty `hookErrors` or `preventedContinuation=true` still leave the task unproven; the summary alone is not proof of completion.
|
|
62
69
|
- 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.
|
|
63
|
-
- Use the advertised
|
|
64
|
-
-
|
|
70
|
+
- Use the advertised recovery and monitoring actions on the original Turn or Watch. For a native Watch, 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.
|
|
71
|
+
- Read the current `capabilities` and `available_actions` for cancellation, native inspection, model options and thread lifecycle controls. AKK exposes these existing terminal operations on the conversation only when one eligible tmux/Herdr counterpart matches its exact native session and process incarnation; it revalidates that counterpart at execution. Copy the advertised action and retain any model/lifecycle catalog result as required by the terminal guidance below. A missing counterpart or incompatible runtime contract/state does not grant input authority. An unlisted complete `x.y.z` version alone does not disable an otherwise eligible operation.
|
|
72
|
+
- Claude terminal model selection has regression profiles for `2.1.266` and `2.1.285`; other complete `x.y.z` versions may attempt the supported runtime contract through a profile bound to the actual version. Surface the unverified-profile explanation in `model_control.reason`. The live picker, choices and session-scope footer must match before a catalog can authorize selection; exact session/process, idle empty Composer, fresh catalog and postcondition checks still apply. Missing or malformed versions and unknown picker layouts remain unavailable. Thread `clear` uses the supported new-thread transition; Resume uses the exact UUID from a fresh resumable-thread catalog.
|
|
73
|
+
- An exact native Watch can notify the controller when its own task enters a registry waiting state; repeated observations of the same wait do not create duplicate notifications. These hints are notify-only (`requires_response=false`, `actionable=false`), and `pending_interaction_count: null` means the questions have not been exhaustively scanned. They do not supply response authority.
|
|
74
|
+
- AKK's current Claude native peer adapter does not implement approvals or question answers, and neither Claude route implements permission-mode switching. Existing terminal-managed approvals and supported questionnaires retain their exact Turn requirements. A current managed questionnaire can advertise `respond_interaction` on the associated conversation; refresh the action's original `turn_id` with Status in the owning controller conversation and use the resulting current question/answer IDs. Do not apply its identifiers to a native Watch. Unlisted complete Claude versions may use the same strict questionnaire parser, with fingerprints bound to the actual version. Only a fully recognized current question, choices and footer can authorize a single choice, a supported custom-text step or final-review decision; secret, multi-select, unknown or malformed dialogs remain manual. A generic profile allows runtime validation; it does not establish that every UI on that version has been tested. When no current response/approval action is advertised, report `manual_required` and return to the original Claude terminal. The sender permission declaration above does not add `set_permissions` or `permission_options`.
|
|
65
75
|
|
|
66
76
|
## Codex Desktop
|
|
67
77
|
|
|
@@ -110,7 +120,9 @@ Core slash-command forms:
|
|
|
110
120
|
- `/akk respond <turn-selector>: <answer>`: answer a coding-agent question inside a `waiting_for_openclaw` Turn.
|
|
111
121
|
- `/akk cancel <turn-selector>`: interrupt the exact Turn without closing its terminal pane.
|
|
112
122
|
|
|
113
|
-
|
|
123
|
+
The `terminal_user_explicit` physical-delivery rules below describe retained legacy routes/receipts and other explicitly advertised fallback paths. New ordinary Claude sends use managed terminal delivery; Store or ownership failure does not degrade them to unmanaged work.
|
|
124
|
+
|
|
125
|
+
For human-facing ordinary-send slash forms, a selector may be `codex`, `claude`, `only`, `latest`, or an `@short-ref` returned by `AKK list`. These selectors are only a resolution layer and fail closed when the target is missing or ambiguous. The v31 structured-tool contract never exposes a selector or opaque authority value: the model supplies semantic IDs only. The agent-neutral `terminal_user_explicit_composer_policy` advertises `replace_current_composer_and_submit`; the old Codex-named field is a v28 compatibility alias only. `send({session_id,request})` is strict `session_exact`; `send({terminal_id,request})` is either managed `terminal_follow_current` or user-priority `terminal_user_explicit`, exactly as advertised; the two target fields are mutually exclusive, and both may be omitted only when AKK must prove one unique send-ready pane. The following `terminal_user_explicit` rules apply to retained legacy receipts and other advertised physical fallback paths; new ordinary Claude Sends require a managed Turn and do not use Store or ownership failure to authorize unmanaged input. For those physical paths, Codex and Claude Code `terminal_user_explicit` depend on the exact live terminal/process, a scanned non-blocked approval state, and no proven input-owning questionnaire, editor, menu, history search, or read-only viewer—not ordinary main-Composer visibility, stability, exactness, parsed working activity, existing draft contents, or AKK Store, Turn, Session, transfer, transition, ledger, or ownership. An unreviewed Codex frontend is the narrower exception: physical Send requires a recognized styled Composer before clearing and a fresh empty styled Composer before task text. Profiled Codex 0.154.0/0.155.1 exact collapsed async-question summaries leaves the main Composer sendable; an expanded, clipped, or ambiguous async editor and an active-writer resume viewer remain zero-input boundaries. Both advertise `replace_current_composer_and_submit`: Codex physical fallback sends `C-u` once; Claude Code physical fallback uses a sentinel-backed native `C-s` stash-clear transaction that is independent of the cursor position and does not interrupt an active turn, then proves the main Composer empty. Each injects the request, waits through the paste window, and dispatches Enter exactly once. After text injection, Composer observation must never veto Enter. AKK tries managed delivery where its strict empty-Composer pre-input authority exists; after either agent's user-explicit text injection, that path follows the same no-Composer-veto Enter rule. A source-less Codex terminal with zero, one, or many pre-existing rollout roots freezes that full candidate set before input and binds only the unique rollout that later persists the exact request hash; a unique stale root is never assumed to be foreground. If managed preparation still fails before input, AKK sends once without a managed callback Turn, then best-effort attaches the prepared exact request-bound or clearly labeled terminal-activity Watch and releases stale management. Watch persistence failure is a warning and never revokes or retries a successful Send; an unsafe or uncertain native probe still stops before task text. Native inspection and native lifecycle input remain exact-empty-only. With runtime durability, an omitted target binds its `message_id` to the first selected physical terminal and existing or uncertain same-ID evidence rejects replay. If fresh durability is unavailable, user priority wins: AKK proceeds with a warning, and the degraded result must not be automatically retried. Once clear or request input may have occurred, an uncertain result must not be automatically retried. Read Send results as orthogonal facts: `terminal_input_dispatched`, `agent_acceptance`, `management_mode`, `observation_mode`, and `capabilities` distinguish physical dispatch from durable native acceptance and callback/interaction authority; do not infer one from another. If the result returns `observation_mode="terminal_watch"`, wait for that callback and retain `watch-status` as the recovery path. The only non-ordinary Send form is an exact `send({turn_id})` copied unchanged from a current `available_actions.retry_submission`; it accepts no request text or other target and requires explicit user confirmation. Native-thread actions use the full `terminal_id`, never an `@short-ref`. Other managed controls use `turn_id`; terminal-scoped approval uses `terminal_id` after explicit user confirmation. The trusted plugin/CLI derives terminal, binding, candidate, prompt, composer, handoff, and compare-and-swap fences privately. Never ask the user or model to copy draft text, a composer digest, a token, fingerprint, revision, binding ID/generation, or handoff-only live native UUID from an action; `native_thread_id` is the intentional semantic UUID for resume. For every side effect, AKK must revalidate the selected agent PID and provider-owned terminal identity and revalidate the relevant approval prompt; Composer revalidation remains action-specific; unreviewed Codex frontends require the styled-Composer checks above.
|
|
114
126
|
|
|
115
127
|
The human-priority Codex path may proceed when the pane/process and complete open-rollout candidate inventory are exact even though no single foreground UUID can be selected, including a supported manual `/clear` whose new logical thread appears before its rollout materializes. The complete exact inventory domain binds the provider terminal, PID and process birth, workspace and canonical endpoint, and every open rollout's UUID, descriptor, device, inode, canonical path, and pre-submit byte offset. A `/clear` resume hint is advisory only, never routing or acceptance authority. Under the terminal lock, AKK isolates the predecessor, creates a separate zero-UUID provisional Session and Turn, sends the real task once, and binds only the single candidate rollout that durably accepts that exact request. A rollout-backed Codex row therefore advertises `terminal_follow_current` with `terminal_id`, not `session_exact`; a cached strict Session attempt rejects before task text and never downgrades itself. Only released predecessor Turn history from a strictly earlier binding epoch is excluded from current-send authority; unresolved current-epoch state still blocks. Use only the freshly listed semantic-ID action. Until promotion commits, strict `session_id` send, `respond`, managed `approve`, `cancel`, native lifecycle, callback delivery, and `native_inspect` remain unavailable. If delivery or acceptance is uncertain, do not retry automatically. Terminal-scoped manual Codex approval likewise exposes only `terminal_id`, requires explicit confirmation, leaves managed identity unchanged, never participates in auto-approval, and must not be retried blindly after an uncertain result.
|
|
116
128
|
|
|
@@ -118,7 +130,7 @@ For an exact-empty idle Codex pane whose native identity is ambiguous, List may
|
|
|
118
130
|
|
|
119
131
|
The private approval fence remains prompt-scoped. It binds the adapter-isolated exact unredacted approval region plus terminal/process identity, decision keys and label, prompt kind, working directory, reason/detail, and request or policy evidence. The whole-screen digest and redacted excerpt are diagnostic only: output outside the approval region may continue scrolling without invalidating the same reviewed prompt. After explicit user confirmation, the plugin/CLI retains a private confirmation offer and recaptures the region under lock. Any change inside the exact region—including a command or otherwise identically redacted secret—rejects and sends zero approval keys. Never expose, persist as public action data, log, infer, or reconstruct the raw prompt evidence or its opaque fingerprint.
|
|
120
132
|
|
|
121
|
-
Coding-agent versions distinguish missing verification from known protocol incompatibility. A merely unverified complete Codex or Claude Code `x.y.z` version keeps otherwise eligible actions advertised;
|
|
133
|
+
Coding-agent versions distinguish missing verification from known protocol incompatibility. A merely unverified complete Codex or Claude Code `x.y.z` version keeps otherwise eligible actions advertised; surface any supplied compatibility warning or diagnostic reason, then let runtime structure and postcondition checks decide success. Never suppress an action solely because its exact version lacks a regression-tested AKK profile. Known incompatible protocols disable their affected actions before input. Codex 0.157.0/0.157.1 create new durable TUI sessions with paginated history and may use a shared background server; AKK cannot yet bind that history to an exact managed task. Managed completion callbacks, native thread lifecycle actions, and automated native status dispatch remain unavailable; visible status cards can still be parsed. Explicit terminal Send and warning-bearing `terminal_activity` Watch remain available subject to native UI safety checks; that Watch reports best-effort activity notifications without proving exact task completion or granting question-response authority. `--no-daemon` does not restore legacy JSONL history for new sessions. Use only currently advertised mutation actions, and if input may already have occurred and the result is unproven, report the uncertainty and never retry automatically.
|
|
122
134
|
|
|
123
135
|
Codex 0.158.0 and later stable semantic versions may attempt an exact paginated task Watch instead of a legacy managed Session/Turn, including versions outside AKK's regression matrix. Before Send, AKK attempts a closed `/status` transaction in the available main Composer and validates the actual app-server read contract, Codex home, native thread, and task boundaries. A new version alone does not reject read-only observation. An existing exact Watch may continue across a compatible backend upgrade while retaining its original thread, turn, and request identity. When a Watch attaches, retain its `watch_id` for Status and callbacks; do not invent a `turn_id`. Read compatibility grants no native response authority: unreviewed frontend/backend pairs are notify-only, and backend drift withdraws existing executable question offers. Use fresh Status and its advertised capabilities before any response. This adapter does not establish managed session-only dispatch or native new/resume for paginated threads. Supported async responses offer only `steer_current_turn`, never `queue_next_turn`. A first Watch requested while a blocking modal already owns input cannot establish this binding and falls back to activity observation with manual question handling.
|
|
124
136
|
|
|
@@ -126,7 +138,7 @@ AKK discovers eligible panes across workspaces. When more than one target matche
|
|
|
126
138
|
|
|
127
139
|
Natural-language forms:
|
|
128
140
|
|
|
129
|
-
- `AKK: <task>`: call `agent_knock_knock_send` with `request=<task>` and neither target ID. This succeeds only when exactly one send-ready pane exists. A scanned blocked approval or proven input-owning questionnaire, editor, menu, or read-only viewer vetoes physical Send; parsed working activity and an existing draft do not. Unreviewed Codex frontends require the styled-Composer checks above; reviewed physical Send paths do not require ordinary main-Composer visibility. Codex replaces the current Composer with `C-u`; Claude Code uses a sentinel-backed native `C-s` stash-clear transaction that is independent of the cursor position and does not interrupt an active turn, then proves the main Composer empty. Each injects the request and submits exactly once. Broken or stale AKK management activity records do not veto that independently verified live terminal/process.
|
|
141
|
+
- `AKK: <task>`: call `agent_knock_knock_send` with `request=<task>` and neither target ID. This succeeds only when exactly one send-ready pane exists. A selected Claude terminal uses the managed path and refuses busy, ownership or Store blockers. On eligible physical fallback paths, a scanned blocked approval or proven input-owning questionnaire, editor, menu, or read-only viewer vetoes physical Send; parsed working activity and an existing draft do not. Unreviewed Codex frontends require the styled-Composer checks above; reviewed physical Send paths do not require ordinary main-Composer visibility. Codex replaces the current Composer with `C-u`; Claude Code uses a sentinel-backed native `C-s` stash-clear transaction that is independent of the cursor position and does not interrupt an active turn, then proves the main Composer empty. Each injects the request and submits exactly once. Broken or stale AKK management activity records do not veto that independently verified live terminal/process.
|
|
130
142
|
- `AKK Codex: <task>`: list first and identify one exact eligible Codex conversation. For a direct CLI or Desktop row, copy its advertised Send with `conversation_id`; for a terminal row use its `terminal_id`. Send `request=<task>` once through that route. Do not count duplicate representations of the same proven thread as separate tasks.
|
|
131
143
|
- `AKK Claude: <task>`: list first, require one exact eligible Claude row, then call `agent_knock_knock_send` with that row's `terminal_id` and `request=<task>`.
|
|
132
144
|
- Requests to list AKK or local coding-agent work: call `agent_knock_knock_list`.
|
|
@@ -162,7 +174,7 @@ For ordinary send or an in-flight answer:
|
|
|
162
174
|
2. If no ID is supplied and more than one eligible pane may exist, call `agent_knock_knock_list`.
|
|
163
175
|
3. Treat `conversations[]` as the primary resource list; older raw CLI output may expose `terminals[]` instead. For a terminal-backed row, its managed context exposes `session_id`; `managed.current_turn` is the current AKK owner. Query `watches` for retained monitoring and managed Turn history, including unavailable-pane recovery.
|
|
164
176
|
4. Read the selected resource's `available_actions`. In the compact Host projection its keys are the exact current action names and each value is `true`; `action_inputs`, when present, carries only dynamic semantic arguments, `missing_required`, and scope. For every mutation, use only an advertised action, start with those semantic inputs, supply every `missing_required` field, and follow this skill's action rules. User-selected Watch is the exception: explicit user intent plus one complete exact `terminal_id` is sufficient even when `available_actions.watch` is absent. The only additional mutation sources are a terminal row's `handoff_decision.choices.take_over_current.action` and an exact `blocking_turns[].recovery_action`: use either only after explicit user confirmation and refresh the list immediately afterward.
|
|
165
|
-
5. If an existing managed Session advertises send with `session_id`, call `agent_knock_knock_send({session_id,request})`; it creates a new Turn strictly in that Session's native context and may require exact empty before input. For an ordinary selected conversation, call `agent_knock_knock_send({conversation_id,request})`; terminal-scoped rows also accept legacy `terminal_id`. The following physical-input rules
|
|
177
|
+
5. If an existing managed Session advertises send with `session_id`, call `agent_knock_knock_send({session_id,request})`; it creates a new Turn strictly in that Session's native context and may require exact empty before input. For an ordinary selected conversation, call `agent_knock_knock_send({conversation_id,request})`; terminal-scoped rows also accept legacy `terminal_id`. The following physical-input rules describe retained legacy routes/receipts and other explicitly advertised physical fallback paths; new ordinary Claude sends retain the managed path and do not fall back to unmanaged delivery after a Store or ownership failure. `terminal_follow_current` may adopt a safe human-driven handoff or send once within an exact, complete Codex rollout-candidate inventory before binding the uniquely accepting native thread. `terminal_user_explicit` instead preserves the user's Send when internal AKK state is broken: Codex replaces the current Composer with `C-u`; Claude Code uses a sentinel-backed native `C-s` stash-clear transaction that is independent of the cursor position and does not interrupt an active turn, then proves the main Composer empty. Each injects the new request and submits exactly once without a post-text Composer veto. For source-less Codex sends, zero exact acceptors remains pending for monitor recovery, one promotes the provisional Session/Turn, and multiple acceptors or identity drift becomes uncertain without replay. Managed delivery is attempted where eligible, but a proven zero-input failure falls back to one unmanaged delivery with no managed callback Turn. AKK prepares the strongest safe Watch before dispatch and best-effort attaches it after Enter; Watch persistence failure never changes the successful Send. Once clear or request input may have occurred, an uncertain result must not be retried automatically. Wait for an attached Watch callback or use its status as recovery. The status-card-only first-task path remains the zero-rollout special case. `send({turn_id})` is never an ordinary target: use it only for a fresh `retry_submission` action after explicit confirmation, with no other field. Never construct or pass an opaque fence or composer authority. Use `respond` with its `turn_id` only when that Turn is explicitly `waiting_for_openclaw`; the answer stays in the same Turn. Do not add timeout fields for ordinary use; `timeoutSeconds` is unsupported.
|
|
166
178
|
6. If multiple terminals match, show their `short_ref`, agent, provider, and terminal target, then ask the user to choose. If a human switch has an unresolved Turn, ambiguous ownership, or unverifiable identity and no follow-current send is advertised, report that blocker and ask the user which context to resolve; never guess, supersede active work, or bypass the fence.
|
|
167
179
|
|
|
168
180
|
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.
|
|
@@ -204,7 +216,7 @@ success; never retry an uncertain repair automatically.
|
|
|
204
216
|
For native status inspection:
|
|
205
217
|
|
|
206
218
|
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.
|
|
207
|
-
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.
|
|
219
|
+
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/0.164.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.
|
|
208
220
|
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.
|
|
209
221
|
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.
|
|
210
222
|
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.
|
|
@@ -314,7 +326,7 @@ Action-name glossary:
|
|
|
314
326
|
|
|
315
327
|
- `status`: inspect one terminal, Turn, or Watch; it sends no native slash command.
|
|
316
328
|
- `send`: deliver a new request, or perform the separately advertised immutable `retry_submission` form.
|
|
317
|
-
- `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.
|
|
329
|
+
- `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/0.164.0 exact creation performs the closed `/status` transaction, while subsequent observation is read-only.
|
|
318
330
|
- `list_resumable_threads`, `new_thread`, and `resume_thread`: inspect or change native thread context through their closed lifecycle protocols.
|
|
319
331
|
- `native_inspect`: run only an advertised closed native inspection such as `status`.
|
|
320
332
|
- `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.
|