agent-ui / showcase
All

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.

tool-callapproval-gateactionId
live-run / write-filetool waiting / host decision needed
write-file waiting
{"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.

Install
<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.