Doorman
DocsGet StartedGitHub

© 2026 griffen.codes

DiscordIssuesGitHub
    Now supporting Fastly Next‑Gen WAF

    Where W▲F meets .config

    One config decides what gets through. Doorman enforces the same rules on Vercel Firewall, Cloudflare WAF, and Fastly Next‑Gen WAF.

    npm install -g @gfargo/doorman

    System status: ● Operational · Doorman v3.10.1

    Sample trafficdoorman‑managed
    GET/wp-admin✗ BlockUA: SemrushBot/7.1 · rule: Restrict Admin Routes
    GET/api/users✓ Allow203.0.113.42
    GET/✓ AllowUA: Googlebot/2.1
    GET/wp-login.php✗ BlockUA: MJ12bot · rule: Block Bad Bots
    POST/checkout✓ Allow198.51.100.7

    Illustrative requests, not a live feed. Real output is in the commands below.

    Supported providers

    One rule. Three providers.

    doorman is the source of truth. Vercel gets the rule as-is. Cloudflare gets a Wirefilter expression. Fastly gets a Next-Gen WAF rule.

    Vercel

    Firewall

    {
      "id": "rule_block_bad_bots",
      "conditionGroup": [{
        "conditions": [
          { "type": "user_agent", "op": "sub", "value": "bot" }
        ]
      }],
      "action": { "mitigate": { "action": "deny" } }
    }

    Cloudflare

    WAF

    {
      "expression":
        "http.user_agent
        contains \"bot\"",
      "action": "block"
    }

    Fastly

    Next‑Gen WAF

    // translated, no wildcard needed
    {
      "description": "Block Bad Bots",
      "conditions": [
        { "type": "single", "field": "user_agent",
          "operator": "contains", "value": "bot" }
      ],
      "actions": [{ "type": "block" }]
    }
    Commands

    What doorman does

    Every doorman command, explained. Copy any line straight into your terminal.

    Log 01

    Now shipping to Fastly

    The same status, diff, and sync workflow you already run for Vercel and Cloudflare, now pointed at Fastly Next‑Gen WAF. Same commands, same config format. Just a third provider.

    npx @gfargo/doorman sync --provider fastly
    Now shipping to Fastly demo
    Log 02

    Sync changes

    Synchronize rule packs to Vercel, Cloudflare, and Fastly from the same config. Catch drift with provider-aware diffs before anything ships.

    npx @gfargo/doorman sync
    Sync changes demo
    Log 03

    Download configs

    Export deployed rules from each provider into versioned config files. Keep Vercel, Cloudflare, and Fastly in lockstep with Git history.

    npx @gfargo/doorman download
    Download configs demo
    Log 04

    List rules & IPs

    Inspect deployed policies with human-friendly tables or JSON. Filter by provider, environment, and rule group in seconds.

    npx @gfargo/doorman list
    List rules & IPs demo
    Log 05

    Validate rules

    Validate rule syntax and provider-specific constraints before deployment. Every provider accepts the result before you deploy.

    npx @gfargo/doorman validate
    Validate rules demo
    Log 06

    Use templates

    Start new protections from templates tuned for Vercel, Cloudflare, and Fastly. Customize and extend policy packs as you add providers.

    npx @gfargo/doorman template
    Use templates demo
    Log 07

    Adopt existing rules

    Already have rules configured by hand in the Vercel dashboard? Download them into a versioned config, validate the result, and commit. No rework required.

    npx @gfargo/doorman download
    Adopt existing rules demo
    Getting started

    Set up your WAF in four steps.

    Install, initialize, connect your provider, ship. The steps don't change whether you're on Vercel, Cloudflare, or Fastly, only the credentials do.

    1

    Install

    One package, works with any of the three providers below.

    npm install -g @gfargo/doorman
    2

    Initialize

    Scaffolds a .doorman.json in your project.

    doorman init
    3

    Connect your provider

    The variable names change, the shape doesn't. A token plus one or two IDs, stored however you already manage secrets.

    export VERCEL_TOKEN="..."
    export VERCEL_PROJECT_ID="..."
    export VERCEL_TEAM_ID="..."  # optional

    Nothing set yet? Doorman prompts you for credentials the first time it needs them.

    4

    Ship it

    Same command, whichever provider you connected.

    doorman sync
    Agent skill

    One skill. Any coding agent.

    Doorman ships as an Agent Skill: a packaged set of instructions your coding agent reads before it touches a firewall rule. Install it once, then ask in plain English. Your agent runs the right doorman commands instead of guessing at flags.

    Works with Claude Code, Cursor, Codex, and other Agent Skills‑compatible tools.

    npx skills add gfargo/skills --skill doorman
    > Block bad bots hitting /wp-login.php
    
    Using skill: doorman
    $ doorman add --interactive
    $ doorman validate
    $ doorman sync
    
    ✓ Added rule "Block Bad Bots"
    ✓ Config valid
    ✓ Synced to Vercel Firewall

    Firewall rules are infrastructure. They belong in version control, reviewed in pull requests, and rolled back with git revert, not edited by hand in a dashboard nobody diffs.

    Rules enforced.

    Bring Vercel, Cloudflare, and Fastly WAF automation into the same review process you already use.

    Live from npm & GitHub
    2,887npm downloads / week
    6GitHub stars
    View docsGetting startedExample configs