Approvals
Hold risky calls for a person to approve, in the console or in Slack.
When a policy says Require approval, the agent's call waits while a person decides.

What approvers see
Each request shows who asked, which agent they used, the tool, the exact arguments (with secrets redacted), the policy that required approval, and how long is left. Approvers can add a note, which the agent receives with the result.
Who can approve
- Members of the policy's approver group, or any admin or owner if the policy names no group.
- Nobody can approve their own request. This holds in the console, Slack and the API.
If nobody decides before the timeout, the call fails with "expired". The default timeout is 5 minutes. Change it with GATEHOUSE_APPROVAL_TIMEOUT_MS.
For a one-person trial you can allow self-approval with GATEHOUSE_ALLOW_SELF_APPROVAL=true. Don't use it in production.
Approve in the console
Open Approvals. Pending requests are at the top, and the count shows in the sidebar. Click Approve or Deny.
Approve in Slack
Gatehouse posts each request to a Slack channel with Approve and Deny buttons, and updates the message when someone decides. It uses Socket Mode, so Gatehouse doesn't need a public URL.
- Go to api.slack.com/apps, click Create New App → From an app manifest, and paste the contents of
slack/manifest.jsonfrom the Gatehouse repository. - Install the app to your workspace and copy the Bot User OAuth Token (
xoxb-…). - Under Basic Information → App-Level Tokens, create a token with the
connections:writescope (xapp-…). - Invite the app to your approvals channel and copy the channel ID.
- Set these and restart Gatehouse:
SLACK_BOT_TOKEN=xoxb-…
SLACK_APP_TOKEN=xapp-…
SLACK_CHANNEL=C0123456789
Gatehouse matches the Slack user to a Gatehouse person by email address. Someone without a matching account, or without permission to approve, gets a private message saying so and nothing changes.
Approve over the API
curl -X POST -H "Authorization: Bearer $GATEHOUSE_TOKEN" -H "Content-Type: application/json" \
-d '{"approve": true, "note": "Looks right"}' \
https://gatehouse.yourcompany.com/api/approvals/<id>/decide