INSTRUMENT AN APPLICATION
Start with one behavior-preserving wrapper.
No tool is automatically treated as safe to suppress. Ambient integrations keep the authoritative call and measure exact repetition locally first.
Install the published SeenRelay skill, then ask the coding agent to inspect the project, select a supported adapter, preserve the authoritative call, run existing tests and report repeated eligible workloads.
npx skills add https://seenrelay.com --skill seenrelay --yes
Inspect the skill →
Claude CodePersistent pluginInstall the validated repository-hosted SeenRelay plugin persistently. It provides the same measurement-first contract without automatically attaching the hosted MCP endpoint or enabling reuse.
claude plugin marketplace add ovladon/seenrelay
claude plugin install --scope user seenrelay@seenrelay
This self-hosted path is available now and does not imply Anthropic marketplace approval or listing.
Existing MCP clientJavaScript / TypeScriptOne wrapper line adds local shadow measurement. Existing callTool(...) usage stays unchanged.
import { ambientMcpClient } from 'seenrelay/ambient';
const client = ambientMcpClient(rawMcpClient);
// use client.callTool(...) normally
console.log(client.seenRelayAmbient.getReport());Only after a specific read-only tool is reviewed should seenrelay/mcp-auto be considered for the local-first bind-once path. Shared CHECK is off by default.
JavaScript / TypeScript guide →
Python MCPAmbient / shadowPython has the same one-wrapper measurement entry point and remains measurement-only.
from seenrelay_ambient import ambient_mcp_client
client = ambient_mcp_client(raw_mcp_client)
# await client.call_tool(...) normally
print(client.get_report())
Python guide →
OpenAI Agents / AI SDKAmbient adaptersWrap the framework-owned MCP surface rather than rewriting the agent.
// OpenAI Agents JS
const server = ambientOpenAIAgentsMcpServer(rawMcpServer);
// Vercel AI SDK
const { tools, seenRelayAmbient } =
ambientAiSdkMcpTools(await mcpClient.tools()); Integration quickstart →
OpenTelemetry / OTLPAgent-agnostic censusAnalyze explicitly annotated OTLP spans locally without integrating SeenRelay into a specific agent framework.
npx seenrelay otel-trace-census traces.otlp.json --json
Only opaque exact coordinates and explicit SeenRelay policy/economics attributes enter the census. Raw prompts, URLs and payloads are not copied into the report.
OTLP substrate guide →
LangfuseExport census · 0.2.23+Already have TOOL observations? Run a local exact-recurrence census before adding runtime coordination.
npx seenrelay langfuse-census observations.json --json
Raw tool input is hashed locally. Repeats remain NEEDS_POLICY_REVIEW; recorded TOOL cost is not automatically labeled savings.
Langfuse census →
Generic executionFunctions / dispatchersFor reviewed deterministic read-only work, the provider-independent wrappers can sit below an agent, service, CI worker or scheduled process.
const result = await edge.guard({
coordinate,
validate: expensiveReadOnlyWork
});Exact coordinate design and policy remain caller-owned; no tool name or HTTP method is automatically considered safe.
Execution substrate →
IoT / edgeMeasurement path todayUse generic wrappers or OTLP traces around residual read-only state/metadata validation. Device shadows, subscriptions, retained state and protocol-native mechanisms remain stronger controls when they answer the same question.
No generic actuation suppression is advertised. Control commands and fresh physical-world sensing stay outside automatic coordination.
IoT boundary →
LangChain / PydanticAIFramework adaptersClient 0.2.25 ships local-shadow integration helpers without adding a hosted operation or authorizing reuse.
// LangChain JS
ambientLangChainMcpHooks()
# LangChain / PydanticAI Python
ambient_langchain_mcp_client(client)
ambient_pydantic_ai_toolset(toolset)
Integration quickstart →
Plain read-only functionJavaScript / TypeScript + PythonUse Zero-State when the application directly controls the validation function and can define exact identity and a defensible freshness policy. Client 0.2.25 exposes this local-first path in both languages.
// JavaScript / TypeScript
import { SeenRelayZeroState } from 'seenrelay/zero-state';
// Python
from seenrelay_zero_state import SeenRelayZeroStateCaller-owned private L1 is optional. Python's built-in AES-256-GCM helper is available through seenrelay[crypto]; the base package remains dependency-free.
Zero-State guides →