docs: propose plugin-owned external verification approvals#15
Conversation
636a8b2 to
49f2895
Compare
|
Codex review: needs real behavior proof before merge. Reviewed July 16, 2026, 9:35 PM ET / July 17, 2026, 01:35 UTC. Summary Reproducibility: not applicable. this is a design proposal for a new plugin and approval capability, not a report of broken existing behavior. Source and current documentation instead confirm that the proposed external-resolution seam is not implemented today. Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Next step before merge
Maintainer decision needed
Security Review detailsBest possible solution: Finalize a narrow core-owned approval contract after approval/security-owner review, then implement it against the open OpenClaw tracker with compatibility tests and a redacted end-to-end AgentKit demonstration covering verification, denial, expiry, replay, and resumed execution. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a design proposal for a new plugin and approval capability, not a report of broken existing behavior. Source and current documentation instead confirm that the proposed external-resolution seam is not implemented today. Is this the best way to solve the issue? Unclear pending maintainer approval. The core-owned ledger and registration-derived plugin identity are a maintainable direction, but the permanent authority contract, compatibility policy, and implementation proof require approval-boundary owner judgment. AGENTS.md: not found in the target repository. Codex review notes: model internal, reasoning high; reviewed against 2d213ae23462. Label changesLabel justifications:
Evidence reviewedSecurity concerns:
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (5 earlier review cycles)
|
kevinslin
left a comment
There was a problem hiding this comment.
rfcs should be high signal - please take a human pass through it and remove noise that doesn't need to be in here
| 6. AgentKit resolves its own pending approval. | ||
| 7. OpenClaw continues the original blocked tool call. | ||
|
|
||
| The first AgentKit attempt put World ID HITL directly in OpenClaw core: |
There was a problem hiding this comment.
we don't need this in the rfc - motivation should just be that certain plugins like worldcoin need ability to handle approvals
| approval flows. | ||
| - Letting auto review approve an external-proof-required approval without the | ||
| external proof. | ||
| - Designing durable chat status cards in this RFC. Those are useful but should |
There was a problem hiding this comment.
this is unrelated to plugin owning verification. we don't need it here. could we do a human pass and avoid slop in rfcs as much as possible?
| - it can classify whether the underlying command/tool call is risky | ||
| - it can explain why the action should be denied or escalated | ||
| - it can decline and fall back to the human operator | ||
| - it can include `externalVerificationRequired: true` in any bounded review |
There was a problem hiding this comment.
does this mean auto review can move an approval to the external verification lane? that would require a change to autoreview
There was a problem hiding this comment.
Clarified 👍 tl;dr no auto review change is required
| - channel-delivered approval prompts | ||
| - opt-in auto mode for lower-risk exec approval review | ||
|
|
||
| The safer-auto-mode blog frames the current direction well: |
There was a problem hiding this comment.
lets not reference a blog without any links. its also not necessary to call this out in the rfc since this is about plugin approval, not auto review
|
|
||
| ## Unresolved Questions | ||
|
|
||
| - Should verified resolution use the existing `operator.approvals` scope, or |
There was a problem hiding this comment.
we should answer these questions instead of leaving them open unless they are truly unresolvable rigth now
49f2895 to
9e953e4
Compare
|
hey @kevinslin, sorry for the delay, i was traveling and just caught up. rebased this on latest would you mind giving it another pass when you have a chance? also happy to move the discussion somewhere else if that would be better. |
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
this is coming together. lets tighten it and make sure important behavior is specified
|
9e953e4 to
ed4a450
Compare
|
Some callouts from codex: [P1] Bind cancellation to the originating run. The RFC promises run cancellation defeats late verification, but its immutable context omits runId and never defines the abort-to-approval cancellation path. Current plugin approval requests omit run identity, while Gateway abort handling targets only exec approvals (src/gateway/server-aux-handlers.ts:153). A late proof could therefore win and authorize a reusable grant after the originating run stopped. Add a host-derived run binding, atomic approval/attempt cancellation, and concurrent-run race tests. |
7adb5b7 to
4481068
Compare
|
ClawSweeper status: review started. I am starting a fresh review of this pull request: docs: propose plugin-owned external verification approvals This is item 1/1 in the current shard. Shard 0/1. This placeholder means the worker is alive and reading the current context. I will edit this same comment with the actual review when the claws are done clicking. Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted. |
|
Thanks for the follow-up @kevinlin-openai! Addressed all three callouts in 4481068, rebased on latest |
kevinlin-openai
left a comment
There was a problem hiding this comment.
Accepted as a design RFC. Runtime behavior proof remains an implementation requirement tracked in openclaw/openclaw#82336.
Superseded by the revised RFC and maintainer approval on head 4977cbf.
|
Implementation of the accepted contract is now ready for review:
The PRs implement the RFC’s deny-only generic resolution boundary, host-stamped plugin attempt ownership, verifier presentation/completion split, revision-bound retries, first-answer-wins resolution, durable proof-free audit state, lifecycle cancellation, exact session/tool grants, and signed one-use delegation over pinned TLS. Hosted final-SHA proof:
The real local Gateway scenarios covered the accepted human and delegation flows. The remaining caveat is that the human World transport was deterministic/mocked rather than a physical World App/manual scan; that limitation is recorded in both PRs and the tracker. |
What Problem This Solves
External plugins sometimes need a user to complete a verifier-specific ceremony before a protected tool can continue. OpenClaw should own approval state, denial, expiry, cancellation, and tool continuation, while the plugin owns the verifier and proof.
The first concrete user is the external AgentKit plugin:
Why This Change Was Made
This RFC proposes one narrow external-verification route on a plugin-owned approval:
requireApproval.externalResolutioncarries a verifier label and canonical allow decisions, defaulting toallow-onceAbortSignal, a text-only challenge sink, and an attempt-scoped completion helperThis does not add arbitrary plugin actions, a public plugin resolver RPC,
operator.adminauthority, World-specific core code, new auto-review authority, or fields on ordinaryapproval.resolvecalls.User Impact
If accepted and implemented, a user can choose Verify once, Verify and trust for session, or Deny from the normal OpenClaw approval flow. The plugin can show its QR/link and attest successful verification, but only OpenClaw can commit the terminal decision and resume the original tool call.
Evidence
openclaw/rfcsmainat13819efmainatc4f1661f70738c65cb05716d7a438e58090706degit diff --check origin/main...HEADThe RFC defines host contract tests, AgentKit integration tests, and a manual user-flow artifact as implementation acceptance criteria. Current OpenClaw
maindoes not implement this API, so runtime proof belongs to the implementation PR and updated AgentKit release rather than being claimed by this document-only proposal.Related implementation context: