Skip to main content
Working with an agent? Give them a link to this page as markdown.

SDK integration examples

The Watcher SDK source archive includes integration examples. Each one connects a tool that the Watcher client does not cover, such as a coding agent, agent framework, gateway, model library, compliance API or SIEM. The examples are source code to adapt and test in your own environment, not built-in connections. For Claude Code, Codex and GitHub Copilot CLI, use the Watcher client instead; see Integrations.

Recognized SDK agents appear by name in session views, alerts and agent filters. A name does not imply support for every feature; the coverage and limits below still apply.

Get the examples​

Download watcher_sdk-<version>-source.tar.gz from the Watcher release matching your server. Extract it with tar -xzf watcher_sdk-<version>-source.tar.gz, replacing <version> with the release number without its leading v. The examples are under sdk/examples/. Keep the whole sdk/ directory together: Python examples install the SDK from the adjacent source. The wheel installs the client library and optional CLI; examples ship in the source archive. Older source releases may not contain examples.

Integration names link to the upstream projects or their documentation. Each source folder links to the example's folder in the public SDK repository. Its README gives setup, usage, supported inputs, error behavior and test commands. The linked folders match the latest production release; use the copy in the archive that matches your server.

Choose the data flow​

Coding agents and general-purpose agents connect through native tool hooks or approval interfaces. Framework examples use the framework's scheduler or callbacks. A hook can stop a tool only when the host waits for the decision before dispatch. Read the example's timeout behavior and supported tool paths.

For unattended operation, a call that requires a human must remain withheld. Examples with a human approval callback can pass that decision to an authorized interface and record the choice. A local callback is not a built-in approval UI; each README states what the example implements.

Gateway examples install monitoring on the gateway server. Clients using a covered route need no Watcher library. Synchronous plugins can hold a model's tool proposals before the client receives them. Export-only connections import completed requests and cannot stop those requests. A gateway cannot prevent action outside its covered routes or tools that already ran at the provider.

The gateway hook accepts complete provider request/response pairs, converted transcripts, or a Claude Code or Codex transcript file. Its configured enforcement mode controls observation, enforcement and paused behavior through the same endpoint. A successful submission does not prove durable recording. Verify the stored conversation and decisions through the query API or Analyzer. Each gateway example starts every conversation ID it sends with its own prefix, such as litellm:, so its sessions show the Gateway session source there. The LiteLLM example requires an x-watcher-session-id header or native Claude/Codex UUID metadata and derives its litellm: conversation ID from either. A custom integration that sends other IDs shows Hooks API.

Compliance API ingestion imports activity that has already happened. It supports later review and cannot stop past tool calls.

Observability exports send stored decisions, selected session summaries and optional transcripts to other systems. Transcript content is excluded unless explicitly enabled. The public SDK does not expose a notification-delivery feed; these examples export records, not notification events. Bounded query windows are not a lossless stream of later changes.

Verification labels​

The Observe, Block tools and Export columns summarize recorded tests. Dates identify those runs; they do not establish compatibility with changes made since the test. Read the example's README for the tested environment, covered paths and limits. Last tested shows Not recorded when no test run is recorded.

LabelMeaning
Static testsAdapter tests with simulated Watcher responses; some also exercise installed upstream software.
End-to-end testingThe integration path was tested against the Watcher API and database, locally or deployed. Model output or hosted services may use fixtures; see the example's README.
Not verifiedThe example provides this feature, but no passing test is recorded for it. Read its README before relying on it.
Not availableThe example does not provide this feature.

These labels describe test coverage, not a guarantee about all tools or sessions. Read the example's limits before using it for blocking review. Some hooks can refuse a tool without recording a decision. Others may let tools run when a hook does not start, times out, or is not loaded.

Local exporter tests do not establish that a hosted destination indexed the records or generated an alert. Each example README names the tested receiver and the steps needed to verify your destination.

Examples by category​

Coding agents​

IntegrationSource folderObserveBlock toolsLast tested
Aideraider/End-to-end testingEnd-to-end testing2026-09-26
Ampamp/Static testsNot available2026-09-26
Clinecline/End-to-end testingEnd-to-end testing2026-09-26
Continue CLIcontinue/Static testsNot available2026-09-26
Cursorcursor/Static testsStatic tests2026-09-26
Gemini CLIgemini-cli/End-to-end testingEnd-to-end testing2026-09-26
Goosegoose/End-to-end testingEnd-to-end testing2026-09-26
Hermes Agenthermes/Not verifiedNot verifiedNot recorded
Kilo Codekilocode/End-to-end testingEnd-to-end testing2026-09-26
Mistral Vibemistral-vibe/End-to-end testingEnd-to-end testing2026-09-26
OpenCodeopencode/End-to-end testingEnd-to-end testing2026-09-26
OpenHandsopenhands/End-to-end testingEnd-to-end testing2026-09-26
Pipi/End-to-end testingEnd-to-end testing2026-09-26
Qwen Codeqwen-code/End-to-end testingEnd-to-end testing2026-09-26
Roo Coderoo-code/Static testsNot available2026-09-26
Windsurfwindsurf/Static testsStatic tests2026-09-26

General-purpose agents​

IntegrationSource folderObserveBlock toolsLast tested
OpenClawopenclaw/End-to-end testingEnd-to-end testing2026-09-26

Agent frameworks​

IntegrationSource folderObserveBlock toolsLast tested
Agnoagno/Static testsStatic tests2026-09-26
AutoGenautogen/Static testsStatic tests2026-09-26
CAMELcamel/Static testsStatic tests2026-09-26
CrewAIcrewai/Static testsStatic tests2026-09-26
DSPydspy/Static testsStatic tests2026-09-26
Google ADKgoogle-adk/Static testsStatic tests2026-09-26
Haystackhaystack/Static testsStatic tests2026-09-26
LangChainlangchain/Static testsStatic tests2026-09-26
LangChain4jlangchain4j/End-to-end testingEnd-to-end testing2026-09-26
LangGraphlanggraph/Static testsStatic tests2026-09-26
LlamaIndexllamaindex/Static testsStatic tests2026-09-26
Mastramastra/End-to-end testingEnd-to-end testing2026-09-26
OpenAI Agentsopenai-agents/Static testsStatic tests2026-09-26
Pydantic AIpydantic-ai/Static testsStatic tests2026-09-26
Semantic Kernelsemantic-kernel/Static testsStatic tests2026-09-26
smolagentssmolagents/Static testsStatic tests2026-09-26
Strands Agentsstrands/Static testsStatic tests2026-09-26
Vercel AI SDKvercel-ai/End-to-end testingEnd-to-end testing2026-09-26

Gateways​

IntegrationSource folderObserveBlock toolsLast tested
Agent Routeragent-router/End-to-end testingEnd-to-end testing2026-10-06
Bifrostbifrost/End-to-end testingEnd-to-end testing2026-09-26
Cloudflare AI Gatewaycloudflare-ai/Static testsNot available2026-09-26
Heliconehelicone/End-to-end testingNot available2026-09-26
Kong AI Proxykong-ai/End-to-end testingEnd-to-end testing2026-09-26
LiteLLM proxylitellm/End-to-end testingEnd-to-end testing2026-10-01
OpenRouteropenrouter/Static testsNot available2026-09-26
Portkeyportkey/End-to-end testingEnd-to-end testing2026-09-26

Model libraries​

IntegrationSource folderObserveBlock toolsLast tested
Anthropic Messagesanthropic/Static testsStatic tests2026-09-26
Cohere V2cohere/End-to-end testingEnd-to-end testing2026-09-26
Google Gen AIgoogle-genai/Static testsStatic tests2026-09-26
Groqgroq/Static testsStatic tests2026-09-26
Hugging Face Inferencehuggingface-inference/Static testsStatic tests2026-09-26
Mistral AImistralai/Static testsStatic tests2026-09-26
Ollamaollama/Static testsStatic tests2026-09-26
OpenAI Responses and Chat Completionsopenai/Static testsStatic tests2026-09-26

Compliance APIs​

IntegrationSource folderObserveBlock toolsLast tested
Claude Compliance APIclaude-compliance/Static testsNot available2026-09-26

Observability and SIEM​

IntegrationSource folderExportLast tested
Google Security Operationsgoogle-security-operations/Static tests2026-09-26
Microsoft Sentinelmicrosoft-sentinel/Static tests2026-09-26
OpenTelemetryopentelemetry/Static tests2026-09-26
Splunksplunk/Static tests2026-09-26

Export destinations​

Use these examples to send stored decisions, selected session summaries and optional transcripts to an observability or SIEM destination. Follow the README of the example's source folder. The OpenTelemetry example has a separate setup section for each destination.

DestinationSource folderTransport
Grafana / Lokiopentelemetry/OTLP logs through a Collector
Datadogopentelemetry/OTLP logs through a Collector
Splunksplunk/HTTP Event Collector
Microsoft Sentinelmicrosoft-sentinel/Azure Monitor Logs Ingestion into a custom table
Elastic Cloudopentelemetry/Managed OTLP endpoint through a Collector
New Relicopentelemetry/OTLP logs through a Collector
Dynatraceopentelemetry/OTLP logs through a Collector
AWS CloudWatch Logsopentelemetry/OTLP logs signed by the Collector
OpenSearchopentelemetry/OTLP through OpenSearch Ingestion or Data Prepper
Google Security Operationsgoogle-security-operations/Chronicle v1 structured-event import

An accepted request does not prove searchable records or an alert. The README provides a destination check and states which local tests were run. Reconcile late-arriving records and later decision changes before relying on scheduled exports; occurrence-time windows do not provide a complete change feed.