Approvals and exception handling
In chat, I hold each Gatekeeper tool marked destructive until the signed-in user approves it, with expiry and a record. This path is in early access.
Try it
Ask for a change to a system. The agent proposes one action, and a policy check either blocks it or holds it for you to approve or reject, with every step in an audit trail. The demo is connected to no system, so nothing is ever executed.
Public demo on Cloudflare Workers AI. Inputs are screened by Llama Guard 3 before any other model runs, requests are rate limited, and nothing here connects to a Luca or customer system.
How it works
- Mark what changes systemsI register each Gatekeeper tool with the capability it requires, or with none for an open tool. I mark the tools that change a live system as destructive. That server-side flag, not the model, decides which calls need a person. The built-in chat file tools sit outside this flag, so file delete still depends on the model asking first.
- Gate the tool callsBefore a Gatekeeper tool runs, I check that the caller holds the capability it requires, and I log any refusal. A separate tool bridge checks permissions per tool, blocks reserved schemas, and refuses database writes when writes are turned off.
- Classify shell commandsI keep a pattern list that labels each shell command allow, confirm or block. DROP DATABASE and git push --force origin main are blocked, while kubectl delete and helm upgrade get confirm. The one command channel that uses this list today is off by default, and it refuses confirm commands rather than holding them.
- Hold for a personWhen an agent in chat calls a Gatekeeper tool marked destructive, the call stops and becomes a pending confirmation. The confirmation is tied to that tool, its code and its exact arguments. The chat stream sends it with the arguments and the expiry window, but no chat screen displays it yet. If the confirmation cannot be saved, the call fails instead of running.
Tools
| Tool | What it does here | Status |
|---|---|---|
| Platform tool bridgeAvailable | Exposes platform services to agents with a permission check per tool, blocks reserved schemas, and refuses database writes when writes are off. | Available |
| Command classifierEarly access | Labels each shell command allow, confirm or block. The one channel that uses it is off by default and refuses confirm commands. | Early access |
| Gatekeeper confirmations (GET /gatekeeper/api/pending)Early access | Holds Gatekeeper tool calls marked destructive for the requesting user to approve or deny, records who resolved each one, and expires them after five minutes by default. | Early access |
| Policy Hub exceptionsEarly access | Scores each exception as impact times likelihood, rejects the highest scores automatically, and requires one or more admin approval steps. | Early access |
| Public demo on Cloudflare Workers AIDemo only | Runs the approve-or-reject demo on this page. It is connected to no system, so approving records the decision and executes nothing. | Demo only |
Available means shipped and in use. Early access means built but not generally available. Roadmap means designed, not built. Demo only means it powers the public demo, not customer deployments.
The write-up has every step of how I deliver this at a customer, with the tools and their status.
Read the write-up on gusit.deThe other answers
Built by Gus Assuncao of Gus IT LLC for a Forward Deployed Engineer application. Luca is the AI platform Gus IT builds and operates. Contact gus@gusit.de. Claude is a product of Anthropic PBC. Cloudflare and Workers AI are trademarks of Cloudflare, Inc. Llama is a trademark of Meta Platforms, Inc. Other names are trademarks of their respective owners. Gus IT LLC is an independent engineering firm and is not affiliated with or endorsed by these companies.