Install
openclaw skills install permission-vending-machineMulti-channel approval system for AI agent permissions. GATES sensitive operations (file deletion, git force-push) behind human approval. Notifies via iMessage, Email, Discord, Telegram, Slack — and enforces time-limited grants before dangerous commands run. Use when an agent needs permission to delete files, force-push, or perform destructive operations.
openclaw skills install permission-vending-machineMulti-channel approval system for AI agent permissions.
Gates sensitive operations (file deletion, git force-push, etc.) behind a human approver. Notifies via iMessage/SMS, Email, Discord, Telegram, or Slack — and enforces grants before running dangerous commands.
Use when an AI agent needs to perform an operation that could be destructive:
# 1. Install
git clone https://github.com/tylerdotai/permission-vending-machine.git
cd permission-vending-machine
pip install -e .
# 2. Configure
cp config.example.yaml config.yaml
# Edit config.yaml with your API keys
# 3. Start the daemon (macOS)
launchctl load ~/Library/LaunchAgents/ai.flume.pvm.plist
# 4. Agent requests permission
pvm request --scope "/tmp/build" --reason "cleaning artifacts" --duration 5
# 5. Approver approves via iMessage, email, or Discord link
# 6. Agent runs guarded command
safe-rm -rf /tmp/build
Agent → pvm request → Vault (pending) → Notify all channels
↓
Approver approves via any channel
↓
Grant created → Agent unblocks → safe-* command executes
| Method | How to approve |
|---|---|
| iMessage | Reply APPROVE (no token needed) |
Reply APPROVE in the approval email | |
| Discord | Click "Click to approve" link |
| HTTP | curl http://host:7823/approve/<token> |
Key settings in config.yaml:
channels:
sendblue: # macOS only — iMessage via CLI
enabled: true
from_number: "+1..."
approver_numbers: ["+1..."]
email: # cross-platform
enabled: true
imap_host: "imap.example.com"
username: "user"
password: "pass"
discord: # cross-platform
enabled: true
webhook_url: "https://discord.com/api/webhooks/..."
http_approval_base: "http://your-server:7823"
pvm request --scope <path> --reason <text> --duration <min> # Request approval
pvm status --agent-id <id> # List active grants
pvm revoke --grant-id <id> # Revoke early
pvm log --limit 50 # Audit log
pvm serve --port 7823 # HTTP server
pvm approve-daemon --port 7823 # Full daemon
Prepend safe- to guarded commands:
safe-rm -rf /path — checks path scope grantsafe-git-push --force — checks repo scope grantsafe-trash /path — checks path scope grantSee docs/PLATFORMS.md for detailed setup per platform.