Observed since 20 Oct, 23:18 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
agentsec-agentwatch
Execution traces for agent behavior - OpenTelemetry-style observability for AI agent workflows
Instrumentation SDK for AI agents — turn agent behavior into OpenTelemetry GenAI spans and validated, redacted execution records. Part of agentwatch.
pip install agentsec-agentwatch
Optional extras:
pip install "agentsec-agentwatch[langgraph]" # LangGraph adapter
pip install "agentsec-agentwatch[otlp]" # OTLP export
pip install "agentsec-agentwatch[signing]" # cryptographic signing helpers
Requires Python 3.10+.
Trace a plain Python agent — no framework required:
from agentwatch.raw import trace_agent
from agentwatch.spans import plan_span, execute_tool_span
@trace_agent("support-bot", agent_version="v0.1.0", model="gpt-4o", provider="openai")
def answer(request: str) -> str:
with plan_span("decide next action"):
...
with execute_tool_span("search", arguments={"q": request}):
...
return "done"
Or drive the run context explicitly:
from agentwatch.config import default_config
from agentwatch.tracer import configure_tracing
from agentwatch.context import RunContext
from agentwatch.instrument import invoke_agent
configure_tracing(default_config()) # once at startup
with invoke_agent(RunContext(agent_name="request-triage")):
...
LangGraph:
from agentwatch.langgraph import trace_graph
graph = trace_graph(compiled_graph, agent_name="planner")
Records are redacted by default. Four privacy modes are available per span/tool call:
| Mode | What is stored |
|---|---|
truncated (default) | Content-safe truncated values |
metadata-only | Names, timings, and counts; no content |
hashed | One-way digests of content |
full | Raw content (opt-in) |
The same package installs the CLI:
agentsec-agentwatch init # install Claude Code hooks + start the local daemon
agentsec-agentwatch sessions # list recorded sessions
agentsec-agentwatch replay <id> # reconstruct a session's action timeline
agentsec-agentwatch verify-store # verify the hash chain
Records are written to a local-first, hash-chained JSONL store; OTLP export is opt-in and gated on a redaction self-test.
Apache-2.0 — see LICENSE.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
opentelemetry-apiEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-api>=1.24 | runtime |
opentelemetry-sdkEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-sdk>=1.24 | runtime |
tomliEnvironment{
"extras": "",
"marker": "python_version < \"3.11\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | tomli>=2; python_version < "3.11" | runtime |
langgraphEnvironment{
"extras": "",
"marker": "extra == \"langgraph\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | langgraph>=1.0; extra == "langgraph" | runtime |
zstandardEnvironment{
"extras": "",
"marker": "python_version < \"3.14\" and extra == \"codex\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | zstandard>=0.22; python_version < "3.14" and extra == "codex" | runtime |
cryptographyEnvironment{
"extras": "",
"marker": "extra == \"signing\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | cryptography>=41; extra == "signing" | runtime |
opentelemetry-exporter-otlp-proto-grpcEnvironment{
"extras": "",
"marker": "extra == \"otlp\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-exporter-otlp-proto-grpc>=1.24; extra == "otlp" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8; extra == "dev" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=5; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | ruff>=0.9; extra == "dev" | runtime |
mypyEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | mypy>=1.13; extra == "dev" | runtime |
buildEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | build>=1.2; extra == "dev" | runtime |
jsonschemaEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | jsonschema>=4.20; extra == "dev" | runtime |
tomliEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | tomli>=2; extra == "dev" | runtime |
opentelemetry-exporter-otlp-proto-grpcEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | opentelemetry-exporter-otlp-proto-grpc>=1.24; extra == "dev" | runtime |
hypothesisEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | hypothesis>=6.100; extra == "dev" | runtime |
zstandardEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | zstandard>=0.22; extra == "dev" | runtime |
cosmic-rayEnvironment{
"extras": "",
"marker": "extra == \"mutation\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | cosmic-ray>=8.7; extra == "mutation" | runtime |
bdist_wheel · 522.3 KB · Python py3
sdist · 724.28 KB · Python source
Shared repository data · GitHub
Observed since 20 Oct, 23:18 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:ccfe77c79de1413666e2b101352f3daa189167cb6ea5f124d1796282ef90372c