Skip to main content

Lightweight drop-in wrapper for the OpenAI Python client that logs telemetry and detects PII risks.

Project description

AgentWatch: Proactive LLM Governance Platform

AgentWatch is an ultra-low latency API proxy and SDK designed to solve the "runaway agent" problem for enterprise engineering teams. It intercepts, manages, and enforces budget constraints on LLM API requests at the edge, acting as a proactive governance layer between your application and upstream providers like OpenAI and Anthropic.

The Problem It Solves

As engineering teams adopt autonomous LLM agents (e.g., coding assistants, research bots, recursive planners), they face a critical financial vulnerability: the runaway loop.

If an agent gets stuck in a recursive error-correction loop, it can execute hundreds of API calls per minute. Because each iteration typically appends the previous output to the context window, the token size grows quadratically. This can result in a single stuck agent burning thousands of dollars in minutes—a scenario that passive monitoring tools will only report after the budget is already gone.

AgentWatch was rebuilt from the ground up to prevent this.

Core Features

1. Session-Aware Identity Tracking

Instead of treating API requests as isolated events, AgentWatch tracks iterative agent loops as Sessions.

  • Every request is tagged with a session_id and an iteration_index.
  • The cumulative token count for a session is securely computed and maintained server-side on Cloudflare KV. This ensures that even if a local agent process crashes, restarts, or runs in parallel, the session's financial state cannot be bypassed or reset.

2. Synchronous Pre-Call Budget Enforcement

AgentWatch acts as a strict financial gatekeeper for agent sessions.

  • Developers define a budget ceiling (e.g., $2.00) per session via the AgentWatch Python SDK.
  • Before any upstream LLM call is made, the SDK performs a sub-millisecond synchronous pre-flight check to the Edge Proxy (GET /v1/budget-check).
  • If the session's cumulative token cost exceeds the limit, the SDK instantly blocks the execution and raises an AgentBudgetExceeded exception.
  • Fail-Open Resilience: By default, if the AgentWatch proxy experiences downtime, the budget check silently fails open. This ensures our infrastructure never causes a hard outage for your production traffic.

3. Inline Anomaly Detection

AgentWatch heuristically detects runaway behavior before the budget is even exhausted.

  • The Cloudflare Edge Worker maintains a rolling window of the last 5 iterations for every active session inside Cloudflare KV.
  • It calculates the token growth ratio synchronously on the POST /v1/ingest handler.
  • If three consecutive iterations show a >1.4x prompt growth—a hallmark signature of a context-appending loop—it asynchronously fires a Slack webhook alert via ctx.waitUntil(), adding zero latency to the critical API path.

4. Zero-Latency Proxying & Resilient Telemetry

  • Ultra-Low Latency: The hot path of the proxy only handles authentication, routing, and credential rewriting.
  • Asynchronous Telemetry: Payload logging and risk scanning are offloaded to background execution. The client receives the provider's response immediately.
  • Cloudflare Queues: Telemetry data is pushed to a highly-available Cloudflare Queue before being batch-inserted into Supabase Postgres. This guarantees telemetry delivery even if the database goes down.

Routes

The proxy mirrors provider API paths under /v1/proxy/:provider/*.

POST /v1/proxy/openai/chat/completions
  -> https://api.openai.com/v1/chat/completions

POST /v1/proxy/anthropic/messages
  -> https://api.anthropic.com/v1/messages

Authentication

Clients authenticate to AgentWatch with a bearer token:

Authorization: Bearer aw_test_token

The Worker maps that token to a tenant ID with TENANT_TOKEN_MAP.

{
  "aw_test_token": "tenant_test"
}

The client token is never forwarded upstream. AgentWatch replaces it with the configured OpenAI or Anthropic provider key.

Required Secrets

Configure secrets before deploying:

wrangler secret put OPENAI_API_KEY
wrangler secret put ANTHROPIC_API_KEY
wrangler secret put SUPABASE_SERVICE_ROLE_KEY
wrangler secret put TENANT_TOKEN_MAP
wrangler secret put SLACK_WEBHOOK_URL

Configure non-secret values in wrangler.toml:

SUPABASE_URL = "https://YOUR_PROJECT.supabase.co"
ANTHROPIC_VERSION = "2023-06-01"

Supabase Setup

Run supabase/schema.sql and supabase/session_tracking.sql in the Supabase SQL editor. Enable the retention policy by running supabase/retention_cron.sql.

Python SDK Integration

AgentWatch integrates seamlessly via composition with standard OpenAI client wrappers:

from agentwatch import WatchedOpenAI

client = WatchedOpenAI(
    agentwatch_api_key="your_aw_key",
    agentwatch_project="checkout-service",
    agentwatch_team="payments-eng",
    agentwatch_session_id="ci-run-123",
    agentwatch_session_budget_usd=2.00,  # Strict $2 limit
    agentwatch_enforcement_mode=True
)

# Standard OpenAI API usage
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Refactor this module..."}]
)

Local Development

Install dependencies:

npm install

Run the Worker locally:

npm run dev

Typecheck:

npm run typecheck

Deploy:

npm run deploy

Project details


Download files

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

Source Distribution

aw_sdk-0.1.1.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

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

aw_sdk-0.1.1-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file aw_sdk-0.1.1.tar.gz.

File metadata

  • Download URL: aw_sdk-0.1.1.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for aw_sdk-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7a14624d4bc49ef67c0bf250e68988aec349a51c567900ed166aab9bb75ad105
MD5 4846b4c4a629f84663f7c1c077b49adf
BLAKE2b-256 61bec5c0ac36315085ff2556e038a1c6d18a8869234541c99b43669970ff1559

See more details on using hashes here.

File details

Details for the file aw_sdk-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: aw_sdk-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for aw_sdk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 74fa0b203520b087fce2be74cad4974ef2359008b372899ad767f6481ac27f03
MD5 302558e2bdfd1e7a714f9ea56e307be3
BLAKE2b-256 c648ed6dc02e975816256d7fe5c9fd24d5c0a88ea55edc06a67121bb269f8a57

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page