Skip to main content

gate-keeper

English · 中文 · 日本語 · 한국어 · Русский · Deutsch

Runtime governance for AI tool access. Filter which tools your agent can see based on a threat signal.

The Problem

Your AI agent has access to every tool at all times. During an incident, it can still deploy to production, send emails to customers, and delete database records. Telling the model "don't do dangerous things" is a guardrail. Removing the tool from its manifest is a gate.

The Solution

from gatekeeper import Gate, Tool

gate = Gate()
gate.add_tools([
    Tool("read_file", execution_class="read_only"),
    Tool("deploy",    execution_class="high_impact"),
])

gate.filter(mode=0.1).visible_names  # ['deploy', 'read_file']  -- calm
gate.filter(mode=0.5).visible_names  # ['read_file']            -- elevated
gate.filter(mode=0.8).visible_names  # ['read_file']            -- crisis

The model cannot request a tool it cannot see.

How It Works

Your signals --> mode (0.0-1.0) --> Gate.filter() --> visible tools --> LLM prompt
                                                  --> suppressed tools (logged, never shown)

The mode value comes from you. It could be a manual slider, an automated risk score, an incident management system, or a full governance pipeline. The gate does not compute threat -- it enforces the consequences.

Execution Classes

Every tool gets one execution class. The class determines when the tool disappears.

Class Suppressed When Use For
read_only Never File reads, API GETs, queries
advisory Never Analysis, summaries, scoring
external_action mode > 0.65 Emails, webhooks, Slack posts
state_mutation mode > 0.65 DB writes, file writes, config
high_impact mode > 0.35 Deploys, deletions, migrations

Unrecognized classes are treated as high_impact.

Install

pip install gate-keeper

Python 3.10+. Zero dependencies.

Quick Start

from gatekeeper import Gate, Tool

# Define your tools
gate = Gate()
gate.add_tools([
    Tool("read_file",  execution_class="read_only",       description="Read a file"),
    Tool("analyze",    execution_class="advisory",         description="Analyze data"),
    Tool("send_email", execution_class="external_action",  description="Send an email"),
    Tool("write_db",   execution_class="state_mutation",    description="Write to database"),
    Tool("deploy",     execution_class="high_impact",       description="Deploy to production"),
])

# Filter at current threat level
result = gate.filter(mode=0.5)

# Feed visible tools to your LLM
print(result.visible_names)     # ['analyze', 'read_file', 'send_email', 'write_db']
print(result.suppressed_names)  # ['deploy']
print(result.mode_zone)         # 'elevated'

# Export as a tool catalog for the system prompt
catalog = result.to_catalog()

Framework Examples

Working examples for common agent frameworks:

Authorization Envelopes

Signed permission sets that constrain tool execution. The envelope travels with the tool call and tells the executor what it is allowed to do.

from gatekeeper import build_envelope, verify_envelope, Tool

tool = Tool("read_file", execution_class="read_only")
envelope = build_envelope(tool, mode=0.5, context_id="session_1", signing_key="your-key")

envelope.budget_seconds   # 15  (reduced under elevated mode)
envelope.execution_mode   # "cautious"
envelope.max_tool_calls   # 10

verify_envelope(envelope, "your-key")   # True
verify_envelope(envelope, "wrong-key")  # False

Envelope parameters tighten automatically as mode increases. See SPEC.md Section 8 for the full adjustment table.

Ingress Validation

Validate tool requests from the model before execution. Never trust the model's tool choice -- verify it against the gate.

from gatekeeper import validate_proposal

result = validate_proposal("deploy", gate, mode=0.5)
result.accepted  # False
result.reason    # "execution_class_suppressed"

Custom Thresholds

Override default suppression thresholds per execution class:

gate = Gate(thresholds={"high_impact": 0.20})  # suppress deploys earlier
gate.add_tool(Tool("deploy", execution_class="high_impact"))

gate.filter(mode=0.25).suppressed_names  # ['deploy']

The Spec

SPEC.md defines the Gatekeeper standard in language-agnostic terms. It covers execution classes, suppression rules, thresholds, envelope schemas, and ingress validation. You can implement it in any language without reading the Python.

ARCHITECTURE.md documents the 18-package product suite, the canonical envelope serialization rules, and the bugs we caught while making Python and Go agree on byte-identical signatures. Read it before writing a new implementation.

JSON Schemas

Formal JSON Schema definitions for interoperability:

Implementations

gate-keeper is the Python reference implementation. The spec is language-agnostic and other implementations exist:

Implementation Language Repo Status
gate-keeper Python 3.10+ this repo reference
gate-server-go Go 1.22+ adam-scott-thomas/gate-server-go conformant — passes cross-language vectors; Python-built envelopes verify in Go

Cross-language conformance is enforced via shared test vectors (gate-test/vectors/envelope_signing.json). Any new implementation is compliant iff it passes those vectors and can verify an envelope built by this reference. See ARCHITECTURE.md §6.

The Suite

gate-keeper is one package in an 18-package product suite:

Layer 0 — Spec                gate-keeper, gate-server-go
Layer 1 — Dev interfaces      gate-sdk, gate-cli
Layer 2 — Domain              gate-policy, gate-schema
Layer 3 — Governance          gate-guard, gate-webhook, gate-compliance, gate-metrics
Layer 4 — Operations          gate-server, gate-dashboard, gate-dash, gatectl
Layer 5 — Agents              gate-agent, gate-pilot, gate-examples
Layer 6 — QA                  gate-test, gate-bench

Each layer imports only from the layer(s) below it. Every package (except the stdlib-only variants gate-dash, gatectl) lives as a sibling repo under adam-scott-thomas/gate-*. See ARCHITECTURE.md §2.

From Maelstrom

Extracted from Maelstrom, a deterministic cognitive architecture for governed AI autonomy. Maelstrom computes the mode signal through a 22-node pipeline with crisis classification, regret analysis, and personality calibration. The gate is the enforcement layer -- it works standalone or as part of the full runtime.

License

Apache 2.0 — see LICENSE.

Release files for gatekeeper-one 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gatekeeper-one 1.0.0
File Size Uploaded
gatekeeper_one-1.0.0.tar.gz 23.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gatekeeper-one 1.0.0
File Interpreter ABI Platform
gatekeeper_one-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 39.5 kB

Release files / gatekeeper_one-1.0.0.tar.gz

Download URL gatekeeper_one-1.0.0.tar.gz
Size 23.0 kB
Tags Source
SHA-256 checksum
How to use checksums
dae00df0c0d488ce4ffedd2fde2e7584db2172e2466841c1ebac080475b22426
BLAKE2b-256 checksum
How to use checksums
cf920f181be862c1a7f5482753e4fcd7edb4122eb8f6140761ba5013a6cc7c09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / gatekeeper_one-1.0.0-py3-none-any.whl

Download URL gatekeeper_one-1.0.0-py3-none-any.whl
Size 16.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f49a884bf696d38125fc7857197470e4b9564fb608a7ba8ed2374d2cbbbf5eb
BLAKE2b-256 checksum
How to use checksums
57e7a8b226c469519d3d86135c8e65206b776f42732c2be8f2fd36feceb77c4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page