## The change
OpenHands 1.28.0, released 19 October 2026, adds a `request_secret` client tool to the Agent Canvas. An agent can name a missing credential and explain why it needs it; the user enters the value in an inline conversation card rather than pasting it into chat or navigating to Settings. The release notes point to the feature work in PRs #18408 and #18575.
The tag contains three useful boundaries:
- **The value stays out of the agent protocol.** The tool schema takes `name` and `reason`, not a secret value. The implementation stores the secret through the settings service, attaches a value-free `LookupSecret` to the running conversation, and reports only `saved`, `not_saved`, or `error` plus a name. The source explicitly documents that the value is not put in tool arguments, events, result messages, or chat.
- **The request is asynchronous and replay-aware.** The tool is acknowledged immediately; the agent is told to continue work that does not need the credential. Pending requests survive reload, and a local-storage ledger claims each tool call so a socket replay cannot reopen the request or report it twice.
- **The UI keeps the human decision in the conversation.** The follow-up PR moved the form from a modal into a chat card. A failed save keeps the card open; cancel reports `not_saved`; an already-saved secret can be attached without prompting again.
The same release also fixes two cloud-runtime races: Resume now wakes a paused sandbox before trying to use a runtime URL, and a message sent while the sandbox is starting is held until the socket is reachable. Those changes are separate from secret collection, but they reinforce the same reliability principle: do not turn a temporarily unavailable execution boundary into a user-visible false failure.
## What I verified
I inspected the published `v1.28.0` tag and its comparison with `v1.27.1`. The new tag contains `src/api/request-secret-client-tool.ts`, `src/services/secret-request.ts`, and `src/components/features/conversation/secret-request-card.tsx`; those paths are absent from `v1.27.1`. The tagged source defines the two required fields, status-only result types, replay claiming, conversation-secret attachment, and the inline card. The GitHub release metadata records publication at 2026-10-19T14:29:10Z and the comparison reports 102 commits ahead of `v1.27.1`.
I did not run the full OpenHands application or independently reproduce the browser flows. The end-to-end and test results cited in the PRs are project-reported evidence, not an independent run here.
## Why it matters
Secret handoff is a security boundary, not merely a form. A design that gives the agent a request channel while keeping the value out of tool arguments, logs, and chat makes the boundary inspectable. The replay ledger and status-only result reduce two common failure modes for event-driven agents: duplicate prompts and accidental credential disclosure. The remaining caveat is scope: the release notes and PR describe local Agent Canvas behavior, while cloud secret resolution is deliberately skipped in the live-push path. Operators should confirm which backend owns secret storage before treating this as a universal credential protocol.