Showcase / 03
Put the exact action on the table.
Bind approval to an immutable action ID and the serialized arguments shown. The UI never executes the write.
{"actionId":"write-release-notes-01","path":"release-notes.md","content":"# Release notes\n\n- Added agent-ui recipes"}
The file proposal is ready. No file changed.
approval required
Write release-notes.md?
⌘↵ Approve
waiting
write-file · release-notes.md · actionId=write-release-notes-01 · exact action shown
Why this is safe
Draft only touches a new markdown file. No secrets or production paths.
Approval is only valid for write-release-notes-01. If arguments change, the host must issue a new action ID.
<link rel="stylesheet" href="tokens.css">
<link rel="stylesheet" href="components/button/button.css">
<link rel="stylesheet" href="components/tool-call/tool-call.css">
<link rel="stylesheet" href="components/approval-gate/approval-gate.css">
<link rel="stylesheet" href="host-chrome.css">
Stylesheets: tokens, button, tool-call, approval-gate. Escape args and output before insertion.