Skip to main content

Watchlight

Watchlight — Developer Edition

Govern an AI agent in five minutes. One install, zero infrastructure, same API as production.

PyPI Python versions License: Apache-2.0 Docs

Watchlight is an Agent Runtime Governance Control Plane — it puts a policy decision point in front of every action your AI agents take, authorizing tool calls and recording a tamper-evident, value-free audit trail.

The Developer Edition is the free, open front door to it. It runs the real authorization engine in-process, so you can add a governed ALLOW / DENY to your agent on your own laptop — no server, no database, no signup. It's for evaluating the model and shipping governed agents; the code you write here is the code you run in production — going to production is pointing the same code at the running control plane, not a rewrite.

For enterprises, Watchlight provides the wider Agent Runtime Governance Control Plane: signed, tamper-evident lineage; multi-tenant isolation; drift & anomaly detection → automatic quarantine; and fleet-wide revocation across every agent and environment. → watchlight.ai

How the pieces fit together

             your code · agents · tools
  ┌─────────────┬──────────────────┬──────────────┬─────────────┐
  │ @govern.tool│  LangGraph /     │  MCP client  │  custom app │
  │ (decorator) │  Pydantic AI /   │  (any tool)  │             │
  │             │  Claude Agent    │              │             │
  └──────┬──────┴────────┬─────────┴──────┬───────┴──────┬──────┘
         │               │                │              │
     watchlight   watchlight.<fw>   watchlight-mcp    watchlight
      (govern)   .governed_plugin   (PEP · MCP spec)     SDK
         └───────────────┴───────┬────────┴──────────────┘
                                 ▼
                 ┌───────────────────────────────┐
                 │  Watchlight engine · Cedar     │   the REAL engine,
                 │  in-process · zero infra       │   a compiled wheel
                 └───────────────┬───────────────┘
                PERMIT ─ forward │ ─ DENY  (blocked before execution)
                                 ▼
              value-free audit → .watchlight/audit.jsonl
                                 ▼
                 watchlight dev  ·  http://localhost:7000

  Production = the SAME code, pointed at the governed control plane
  (signed audit · multi-tenant · drift→quarantine · fleet revocation).
Package You use it for
watchlight the govern decorator + the watchlight dev dashboard
watchlight[langgraph|pydantic-ai|claude-agent] govern an existing framework agent
watchlight-mcp govern an MCP server (a policy enforcement point)
watchlight-engine the compiled in-process engine (pulled in automatically)

Runnable, self-contained examples for every one of these are in examples/ — start with examples/governed_research_agent.py.


Quickstart

The govern decorator, watchlight dev, and the framework + MCP integrations below all work today. Full guide: Developer Edition docs.

pip install watchlight
from watchlight import govern

@govern.tool(intent="research")
def web_search(query: str) -> str:
    ...

@govern.tool(intent="transfer")           # governed, but no policy permits it
def transfer_funds(to: str, amount: int) -> str:
    ...
$ python agent.py
watchlight: governing 'my-agent' (dev mode, in-process engine)
watchlight: ALLOW  read     tool/web_search
watchlight: DENY   execute  tool/transfer_funds     no matching policy

That DENY line — in your own terminal, in under five minutes, with no account — is the product.


Already using a framework? Govern it in-process

Bring your existing LangGraph, Pydantic AI, or Claude Agent SDK agent under governance with zero infrastructure — the same plugin you ship to production, wired to the in-process engine:

pip install 'watchlight[langgraph]'   # or [pydantic-ai], [claude-agent]
from watchlight.langgraph import governed_plugin   # .pydantic_ai / .claude_agent

plugin = governed_plugin("watchlight.policy.json")   # in-process, zero infra

async with await plugin.start_run("research-agent") as handle:
    if not await handle.authorize_action("read", "tool/web_search"):
        raise PermissionError("denied before it executed")
    ...  # your tool runs, every action governed + recorded to .watchlight/audit.jsonl

Going to production is one environment variable, not a rewrite — set WATCHLIGHT_APDP_URL and the identical code authorizes against a running policy service. Runnable examples for all three frameworks are in examples/.


Watch every decision live — watchlight dev

A zero-dependency local dashboard that tails your value-free audit trail and shows every governance decision as it happens — the ALLOWs, and the DENYs that stopped a tool before it ran.

watchlight dev            # → http://127.0.0.1:7000

Run your governed agent in another terminal and watch the decisions stream in. It shows only this process — fleet-wide lineage, signed audit, and drift→quarantine are the governed control plane (Enterprise).


Govern an MCP server

Put a policy decision point in front of any MCP server (spec 2026-07-28). Every tools/call is authorized in-process before it reaches the server — a denied call never executes.

pip install watchlight-mcp
import watchlight_mcp

watchlight_mcp.serve(
    listen_addr="127.0.0.1:9700",
    upstream_url="http://localhost:3000/mcp",   # the MCP server you're governing
    upstream_server="github",
    policy_files=["examples/mcp.policy.json"],
    audit_path=".watchlight/audit.jsonl",       # ← the file `watchlight dev` tails
)

Point your MCP client at http://127.0.0.1:9700/mcp instead of the server. A self-contained, self-demonstrating example (it fires an allowed and a denied call and proves the denied one never ran) is in examples/governed_mcp_server.py.

Watch the MCP decisions live

watchlight dev tails .watchlight/audit.jsonl — so give the PEP the same audit_path (above) and run the console beside it, from the same directory:

# terminal 1 — the governed MCP server, auditing to the file the console tails
python examples/governed_mcp_server.py

# terminal 2 — the live console
watchlight dev                # → http://127.0.0.1:7000

Every tools/call decision streams in — the tool, the upstream it fronts, and the reason a call was denied. (The example prints the exact watchlight dev --audit … command for its own audit file.)


What runs locally

Capability Developer Edition (free / open) Enterprise
Policy engine in-process Cedar, policies from a local .cedar file a running, scaled policy service
Sub-agent scope attenuation engine-side strict-subset validation same, server-side
Content / PII screening policy-based, in-process a running guardrails service
Audit local JSONL, greppable, value-free a signed, tamper-evident audit service
Dashboard watchlight devlocalhost:7000 (policies + execution lineage) the full operator console

Everything the Developer Edition removes is infrastructure, never a guarantee. Fail-closed semantics, engine-side attenuation, explicit scopes, and value-free audit are identical in every mode.


Progressive disclosure

Each level is one environment variable away from the next. Nothing is rewritten between levels.

  • Level 0pip install watchlight. In-process engine, audit to stdout.
  • Level 1watchlight dev. Adds a local dashboard (decisions, denials, scope tree, execution lineage).
  • Level 2docker compose up. Real policy service + database; policies still from your local file.
  • Level 3 — Production. The full governed platform.

Deploying to production? We're glad to help you get there — email sales@watchlight.ai and we'll help you plan the rollout.


Developer Edition vs Enterprise

The Developer Edition is the real engine — free, open, and running in-process so you can evaluate the entire authorization model on your laptop with zero infrastructure. Enterprise is the same code pointed at the governed control plane; it doesn't replace anything, it adds what a fleet in production needs:

  • Signed, tamper-evident lineage & audit — every decision and lineage event cryptographically signed (KMS-backed), so the trail is court-defensible.
  • Multi-tenant isolation + roll-up administration — tenant hierarchy, scoped admins, and a cross-tenant authorization matrix.
  • Drift & anomaly detection → automatic quarantine — behavioural, goal-drift, and argument-shape detectors that quarantine a misbehaving agent before the next action.
  • Full enforcement-effect taxonomy — beyond allow/deny: block, terminate, quarantine, sever-subtree, and revoke, enforced at runtime across the plane.
  • Fleet-wide revocation & cross-environment governance — revoke authority across every agent at once, and govern dev, staging, and prod under one authority model (including sovereign / air-gapped deployment).
  • Content / PII guardrails service and global execution-graph lineage with the full operator console.
  • SSO / RBAC / enterprise audit, high availability, support, and SLAs.

You've outgrown the Developer Edition when…

  • Compliance asks "prove who authorized this in production" → you need signed, tamper-evident lineage.
  • You're governing more than one agent, or more than one environment → central policy lifecycle + the global execution graph.
  • Security wants a misbehaving agent stopped before its next actiondrift/anomaly detection → automatic quarantine.
  • You need to revoke authority fleet-wide, not process-by-process.
  • Procurement needs SSO, RBAC, HA, SLAs, or sovereign/air-gapped deployment.

Each of these is a governance guarantee a single in-process engine structurally cannot provide — it needs the control plane.

Migrating is one environment variable — never a rewrite. The tools you decorate, the policies you write, and the guarantees you rely on (fail-closed, engine-side attenuation, explicit scopes, value-free audit) are identical in every mode. Enterprise simply points the same code at a running plane.

The engine ships as a compiled wheel and the Developer Edition is a deliberate subset of the platform — the governed control plane (signing, multi-tenant, guardrails, drift, execution-graph) is the enterprise product, never bundled here.

Talk to us about Enterprise when you're ready for production.


License

The Developer-Edition SDK, the framework plugins, this repository, and the watchlight dev dashboard are Apache-2.0 — use, fork, and ship them freely. The authorization engine (watchlight-engine) and the MCP runtime (watchlight-mcp) ship as compiled wheels under the Watchlight Developer Edition license; they are free to use, including in production.

Want the engine source, an air-gapped build, or to govern a fleet in production? That's the Enterprise plane — email sales@watchlight.ai.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

watchlight-0.2.0.tar.gz (30.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

watchlight-0.2.0-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

File details

Details for the file watchlight-0.2.0.tar.gz.

File metadata

  • Download URL: watchlight-0.2.0.tar.gz
  • Upload date:
  • Size: 30.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for watchlight-0.2.0.tar.gz
Algorithm Hash digest
SHA256 76837d04be51b69406c0b676b54808a531f5cb887fd8f5f8ad7da286cc0f8782
MD5 9acf8f9e908801afda47efd971531c1c
BLAKE2b-256 ad7cf89d19d324d2c643ec6aa87e9ec24b08a294ad7d04aa13c4854c71e1dee6

See more details on using hashes here.

Provenance

The following attestation bundles were made for watchlight-0.2.0.tar.gz:

Publisher: publish.yml on watchlight-ai-beacon/watchlight-de

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file watchlight-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: watchlight-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 29.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for watchlight-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d06448b9ac842a589f1ae0b4b9fc4f9865c0297f452ab1fa9b892ce87a9b8eb0
MD5 9ede9fc50c715c045c153a067a23286e
BLAKE2b-256 6e34127c0d029b56276f033a64a1421b3eb86d8f8d3f1e9f6cfa8cf5227abd89

See more details on using hashes here.

Provenance

The following attestation bundles were made for watchlight-0.2.0-py3-none-any.whl:

Publisher: publish.yml on watchlight-ai-beacon/watchlight-de

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.11.0

2 files

0.10.0

2 files

0.9.1

2 files

0.9.0

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

This release

0.2.0 This release

2 files

0.1.0

2 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