aftersight
Observability infrastructure for self-improving agents.
An agent cannot improve on a run it cannot read. Aftersight writes every run into the repository as plain files, so the agent can read its own history with the tools it already has.
The problem
Coding agents already explore repositories with file search, shell commands and plain text. Agent telemetry usually lives somewhere else: behind a dashboard, an API or a remote MCP server.
Aftersight writes the evidence into the repository instead. A coding agent can use the tools it already knows to:
- diagnose why one run failed;
- find failures that recur across runs;
- inspect the exact inputs and outputs of models and tools.
Start in one command
pip install aftersight
aftersight run python my_agent.py
No account, API key, service or initialization step is required.
Ask your coding agent
Each telemetry root includes a NAVIGATE.md with verified rg and jq
recipes. Tell your coding agent:
Read
.runs/NAVIGATE.mdand find out why the latest run failed.
For Claude Code, the optional command below installs the bundled navigation skill:
aftersight skill
What gets recorded
.runs/
NAVIGATE.md
index.jsonl
latest -> runs/<run_id>
runs/<run_id>/
outline.md
agent.logs
trace.jsonl
analytics.json
meta.json
blobs/
artifacts/
outline.md is the short map. agent.logs is the complete readable
transcript. trace.jsonl, analytics.json and index.jsonl are stable
machine-readable views for scripts and frontends. The same #seq anchor
identifies an event in every projection.
Use it from Python
import aftersight
aftersight.start()
Add explicit detail only where it helps:
with aftersight.span("planner"):
with aftersight.span("web_search", kind="tool", args={"q": query}) as span:
span.output = search(query)
@aftersight.trace
def read_file(path): ...
aftersight.log("cache miss", key=key)
Works with OpenTelemetry
Aftersight attaches a span processor to the application's existing
OpenTelemetry setup and reads common gen_ai.*, OpenInference and generic
input/output attributes. Frameworks that already emit compatible spans need no
aftersight-specific adapter. An existing tracer provider and its exporters are
left in place.
How it compares
LangSmith, Langfuse, Phoenix and Braintrust provide mature observability with dashboards and programmatic access through APIs, exports or MCP.
Aftersight has a narrower default: ordinary files in the repository, with no hosted project, credentials or remote query round trips. Those platforms are a better fit when you need centralized durability, team dashboards or managed evaluation workflows. See Why aftersight exists for the fuller comparison.
Local by default
Aftersight itself makes no network requests and does not upload telemetry.
Payload redaction is enabled by default, and the run folder is added to
.gitignore when it is first created.
If the application already has an OpenTelemetry exporter, that exporter may still send its own spans. Aftersight can run in production, but local disk can disappear with an ephemeral, replaced or failed host, so it should not be the only durable production record.
Documentation
Full documentation: https://nebulaanish.github.io/aftersight/
Release files for aftersight 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aftersight-0.1.0.tar.gz | 85.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aftersight-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 121.0 kB
Release files / aftersight-0.1.0.tar.gz
| Download URL | aftersight-0.1.0.tar.gz |
|---|---|
| Size | 85.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e0955440eeaa09c741c6d928287863c5d924568eaa4ae3fb1c2236d9f003fbab
|
|
BLAKE2b-256 checksum How to use checksums |
ce603c67a37ac255f9dda13d46dcf54f84208c0ee6b7d63861d9c24ea8f9e34d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / aftersight-0.1.0-py3-none-any.whl
| Download URL | aftersight-0.1.0-py3-none-any.whl |
|---|---|
| Size | 36.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c1ad34b68e43fa43bc2095e13599c0baae896df196c7937c1d77261cb2a91bd
|
|
BLAKE2b-256 checksum How to use checksums |
ee91eb0e09960e797d468a6e27142c1a31142779ffb139f12a924f30bfc58d49
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|