Skip to content

permission-protocol/deploy-gate

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

29 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Deploy Gate blocked symbol

Deploy Gate

Block AI deploys until a human signs.

AI agents can open PRs. They should not deploy to production.
This GitHub Action enforces that boundary.

Tests


See it in action

Deploy Gate: PR blocked β†’ human signs β†’ merge unlocked

PR opened β†’ ❌ Deploy blocked β†’ Human authorizes β†’ βœ… Signed β†’ Merge unlocked

Quickstart

Add to your workflow:

# .github/workflows/deploy-gate.yml
name: Deploy Gate

on:
  pull_request:
    branches: [main]

jobs:
  gate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: permission-protocol/deploy-gate@v2
        with:
          pp-api-key: ${{ secrets.PP_API_KEY }}
  1. Get API key β†’ https://app.permissionprotocol.com
  2. Add secret:
gh secret set PP_API_KEY -b "pp_live_..."
  1. Open a PR β†’ watch it get blocked β†’ approve β†’ merge

Takes ~3 minutes. One secret.

πŸ‘‰ Full install guide β†’


What it does

  • Blocks risky PRs with a required status check
  • Posts a PR comment with a direct approval link
  • Sends the reviewer to Permission Protocol to approve and sign
  • Unblocks the PR instantly after approval
  • Produces a tamper-evident approval record

Why this exists

AI agents can write code, open PRs, and trigger workflows β€” but they should not have authority to deploy on their own.

Today:

  • approvals are mutable
  • logs are not proof
  • systems trust state, not intent

Deploy Gate enforces:

  • Explicit human signer (Ed25519)
  • Signature bound to exact action (commit, repo, environment)
  • Single-use receipt (replay fails)
  • Tamper-evident β€” mutation invalidates approval

It does not trust database state. Only signed receipts.


How it works

PR opened
   β”‚
   β–Ό
Deploy Gate checks for valid receipt
   β”‚
   β”œβ”€β”€ Receipt exists ───────────────► Merge allowed
   β”‚
   └── No receipt ───────────────────► Blocked
                                          β”‚
                                          β–Ό
                                   PR comment with approval link
                                          β”‚
                                          β–Ό
                                   Human approves + signs
                                          β”‚
                                          β–Ό
                                   Re-run CI β†’ Merge allowed

Try it live (30 seconds)

No install required:

  1. Open demo PR
    permission-protocol/pp-demo#32
  2. Click Authorize Deploy
  3. Approve β†’ see your signed receipt

License

MIT β€” see LICENSE