Catalog PyPI
Back to packageRELEASE DETAILS

1.1

PyPI

agobs

AgentObserve: local-first diagnostics & observability for AI agents. Answers 'Why did my agent behave this way?' with one line and a single SQLite file.

agentdiagnosticsllmmcpobservabilitytoolstracing
Published6 Jul 2026
Direct dependencies15
Transitive dependenciesNot calculated

README

Version 1.1 documentation

Agobs

Local-first diagnostics & observability for AI agents. One line to integrate, a single SQLite file, a built-in dashboard. AgentLens answers the question other tools don't:

Why did my agent behave this way?

Not a prompt tracker. Not a token dashboard. A diagnostics platform for agent behavior — tool usage, memory access, workflow paths, decisions, failures, retries, latency, and cost.

pip install  agobs             # core: store + dashboard + manual API + auto-patch
pip install "agobs[langchain]"  # framework adapters as extras (langgraph, crewai, …)
pip install "agobs[all]"        # every adapter

Package name on PyPI is agobs; the import name is agentlens.

from agentlens import monitor
monitor.start()          # auto-patches installed LLM SDKs — that's it

Full docs: see Guide.md — in-depth reference for humans and AI coding agents (when-to-use-what tables, every API signature, per-framework snippets, troubleshooting, and an agent cheat sheet).

agentlens ui             # dashboard at http://127.0.0.1:7180

No server to deploy. No cloud. No external services. Data lives in a hidden ./.agentlens/agentlens.db (SQLite, WAL).


Three ways to instrument (mix freely)

1. Zero-config auto-patch

monitor.start() detects and patches whatever is installed — OpenAI, Anthropic, Google Gemini, Groq, LiteLLM — so every LLM call becomes an llm span with tokens and cost, with no code changes.

2. Manual (framework-agnostic, always available)

import agentlens
agentlens.init(project="research-bot")

with agentlens.trace_session("chat"):
    with agentlens.trace_agent("planner", role="lead"):
        agentlens.log_decision(options=["search", "answer"], chosen="search", reason="needs fresh info")
        agentlens.log_memory("read", "user_prefs", hit=True)
        agentlens.log_tool("web_search", args={"q": "ai news"}, result=[...], retry_count=1)
        agentlens.log_llm(model="gpt-4o", input_tokens=1200, output_tokens=400)

A tool/LLM logged with an error= (or a trace_* block that raises) is automatically recorded as a failure.

3. Framework adapters

FrameworkImportMaturity
LangChainagentlens.adapters.langchain.AgentLensCallbackHandlerfull
LangGraphagentlens.adapters.langgraph.AgentLensCallbackHandlerfull (LangChain callbacks)
LlamaIndexagentlens.adapters.llamaindex.AgentLensLlamaHandlerfull
CrewAIagentlens.adapters.crewai (step_callback, instrument_tools)best-effort
AutoGenagentlens.adapters.autogen.instrument_agentbest-effort
PydanticAIagentlens.adapters.pydanticai.instrument_agentbest-effort
OpenAI Agents SDKagentlens.adapters.openai_agents.installbest-effort
Strands Agentsagentlens.adapters.strands.callback_handlerbest-effort
Anthropic Agent SDKagentlens.adapters.anthropic_agents.traced_async_tooltool-level
MCPagentlens.adapters.mcp.instrument_server / traced_tooltool-level
FastMCPagentlens.adapters.fastmcp.instrument_servertool-level

Plus a universal agentlens.adapters.wrap_tool(fn) / @traced_tool() that works with any framework or none.


The dashboard

  • Overview — runs, success/failure rate, cost, p50/p95 latency.
  • Runs → Run detail — the workflow execution graph (span tree: session → workflow → agent → tool/memory/llm/decision), click any node to inspect.
  • Agent Explorer — runs, failures, latency, and attributed cost per agent.
  • Tool Explorer — most used / slowest / most failed tools, retries.
  • Memory Explorer — reads/writes/updates/deletes and read hit-rate.
  • Failure Explorer — exceptions, messages, retries, jump to the failing run.
  • Cost Explorer — token usage, cost by day, by model, most expensive agents.

Try it now (no keys needed)

pip install -e .
python examples/demo_agent.py
agentlens ui

Design

Local-first, zero-config, framework-agnostic, async-safe. Observability code never crashes your app (emit failures are swallowed). One Span model covers every event; kind-specific data lives in attributes. Cost is computed from an editable price book (agentlens/server/pricing.py).

CLI: agentlens ui [--port 7180] [--host] [--backend-store-uri PATH], agentlens providers, agentlens version. Override the port with AGENTLENS_PORT.

Single process writes straight to local SQLite. For multiple processes/workers sharing one dashboard, run agentlens ui once and point each worker at it: agentlens.init(project=..., tracking_uri="http://127.0.0.1:7180").

See Guide.md for the complete reference.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 21

Native requirements
15 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
fastapi
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
fastapi>=0.100runtime
uvicorn
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
uvicorn>=0.23runtime
jinja2
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
jinja2>=3.1runtime
pydantic
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pydantic>=2.0runtime
httpx
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
httpx>=0.24runtime
langchain-core
Environment
{
  "extras": "",
  "marker": "extra == \"langchain\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
langchain-core>=0.1; extra == "langchain"runtime
langgraph
Environment
{
  "extras": "",
  "marker": "extra == \"langgraph\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
langgraph>=0.1; extra == "langgraph"runtime
llama-index-core
Environment
{
  "extras": "",
  "marker": "extra == \"llamaindex\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
llama-index-core>=0.10; extra == "llamaindex"runtime
crewai
Environment
{
  "extras": "",
  "marker": "extra == \"crewai\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
crewai>=0.1; extra == "crewai"runtime
pyautogen
Environment
{
  "extras": "",
  "marker": "extra == \"autogen\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pyautogen>=0.2; extra == "autogen"runtime
pydantic-ai
Environment
{
  "extras": "",
  "marker": "extra == \"pydanticai\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pydantic-ai>=0.0.1; extra == "pydanticai"runtime
openai-agents
Environment
{
  "extras": "",
  "marker": "extra == \"openai-agents\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
openai-agents>=0.0.1; extra == "openai-agents"runtime
mcp
Environment
{
  "extras": "",
  "marker": "extra == \"mcp\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
mcp>=1.0; extra == "mcp"runtime
fastmcp
Environment
{
  "extras": "",
  "marker": "extra == \"fastmcp\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
fastmcp>=0.1; extra == "fastmcp"runtime
langchain-core
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
langchain-core>=0.1; extra == "all"runtime
langgraph
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
langgraph>=0.1; extra == "all"runtime
llama-index-core
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
llama-index-core>=0.10; extra == "all"runtime
crewai
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
crewai>=0.1; extra == "all"runtime
pyautogen
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pyautogen>=0.2; extra == "all"runtime
mcp
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
mcp>=1.0; extra == "all"runtime
pytest
Environment
{
  "extras": "",
  "marker": "extra == \"dev\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pytest>=7.0; extra == "dev"runtime

Distribution files

2 collected
agobs-1.1-py3-none-any.whl

bdist_wheel · 63.24 KB · Python py3

Source file
agobs-1.1.tar.gz

sdist · 54.74 KB · Python source

Source file

Repository

PENDING
tharanika-r-git/agentlens

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 09:19 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:1c1f877ce40ce53b63342a2ddfcd6b8e10e37940539f13df7d4dedd367e3dc19

Other collected versions

View all collected versions →