agent-log-ai
An LLM that reads your agent's error and decision logs and drafts the root-cause lessons your keyword heuristics can't.
The third member of the agent-memory family. Where agent-error-log records what BROKE (reactive memory) and agent-decision-log records what was CHOSEN (proactive memory), this repo adds the REASONING layer: it sends the distilled clusters and reversal chains to an LLM-compatible endpoint and drafts the why — the root-cause lesson that keyword frequency and reversal counting can only point at.
Why
The two sibling tools turn an agent's history into mechanical memory:
--lessons groups failures by shared keywords, --review counts reversals
by topic. Both are deliberately heuristic — deterministic, testable, free.
But the reasoning is left to you: why did this cluster keep failing?
why did you flip-flop between regex and AST every time the file grew past
200 lines?
That gap is exactly what an LLM is good at. agent-log-ai keeps the
heuristics (they select what matters) and hands the explanation to a model —
so your memory stops being a list of symptoms and starts being a list of
causes.
Quick start
# 1. Point it at a log and draft lessons for the biggest failure cluster
python check_logs_ai.py --lessons --log errors.txt --dry-run # see the prompt first, costs nothing
# 2. Send it (local-first: no key needed for Ollama/vLLM)
python check_logs_ai.py --lessons --log errors.txt
# 3. Cloud option: any OpenAI-compatible endpoint
OPENAI_API_KEY=sk-... python check_logs_ai.py --lessons --log errors.txt --base-url https://api.openai.com/v1 --model gpt-4o
Commands
| Command | Reads | Writes | Notes |
|---|---|---|---|
--lessons |
errors.txt |
root-cause lesson drafts (→ rules.txt §7 with --apply) |
Heuristics pick the top clusters; the LLM explains each cluster's real root cause and proposes the rule |
--review |
decisions.txt |
reversal analysis (→ rules.txt §7 with --apply) |
Reversal chains with their REASONs; the LLM infers the deeper pattern |
--notes |
logs + notes.txt |
a SESSION NOTE draft (append with --append) |
The loop drafts its own closing memory |
--check |
— | API connectivity health check | Tiny ping — no real prompt |
--dry-run |
— | prints the exact prompt, sends nothing | Free preview |
--init [DIR] |
— | scaffolds errors.txt / decisions.txt / rules.txt / notes.txt |
One-command adoption — never overwrites existing files; runs the offline self-test |
Design
- Stdlib only, zero install. The LLM call is
urllib.request→POST {base}/chat/completions. No pip packages, same as the siblings. - Local-first, provider-agnostic. Default
--base-urlishttp://localhost:11434/v1(Ollama); vLLM and any OpenAI-compatible server work with--base-url. The cloud path (https://api.openai.com/v1) usesOPENAI_API_KEYfrom the environment — never committed. - Heuristics point, LLM reasons. The sibling clustering/reversal logic selects what matters; the model explains why. Deterministic pre-processing keeps the prompt small, cheap, and testable.
- Graceful failure. No key and no local server → a clear message, a
--dry-runsuggestion, and a pointer to the sibling heuristics. Never crashes, never blocks work. - Cost guard.
--max-entries N, line truncation, and a cheap token estimate (chars/4 — approximate by design) that warns before any send. - Retry manually. Local models load on the first request; if a call
times out, run it again (later calls are warm). No automatic backoff in
v0.2.0 —
--timeout Ncontrols how long a single call waits.
Companion tools
| Repo | What it remembers | How it works |
|---|---|---|
| agent-error-log | what BROKE | text log + linter + git gate |
| agent-decision-log | what was CHOSEN and why | append-only decisions + currency chain |
| agent-log-ai (this) | why it kept happening | heuristics select → LLM reasons |
FAQ
Do I need an API key? No — local-first. With Ollama running
(ollama serve), the default base-url works with no key. A key is only
needed for cloud endpoints.
Does this replace --lessons / --review? No — it uses them. This tool
is the reasoning layer on top of the existing heuristics.
Is my log sent somewhere? Only to the endpoint you point at. Local by
default; cloud only if you pass --base-url https://... and a key.
I copied the tool to a scratch folder — will it read my real logs? No —
the --errors / --decisions / --notes-file defaults resolve relative to
the script location (HERE), so a scratch copy reads next to itself. Point at
your real logs from anywhere with those flags.
Does it handle unicode (café, em-dash) on Windows? Yes — stdin is
reconfigured to UTF-8 like stdout, so piped unicode prompts are handled
without double-encoding.
Development
See CONTRIBUTING.md. Run python _test_logs_ai.py —
all tests are offline (the HTTP layer is mocked; the suite runs green with
no network and no API key) — (104, 100% pass expected).
python check_logs_ai.py must exit 0 on the repo's own log. README test
counts are enforced by a drift-guard CI job, so keep them in sync.
Installing with pip (optional)
The single-file adoption story is unchanged - copy check_logs_ai.py into
your project and you are done. The tool is also pip-installable with zero
runtime dependencies:
pip install agent-log-ai1
log-ai --help
- The package version is derived from the git tag (setuptools-scm), which the release workflow creates from CHANGELOG.md - there is no version to drift.
- Run from the installed package, default paths (
decisions.txt,errors.txt,rules.txt,notes.txt) resolve against your current directory; an in-place copy keeps resolving against the file's folder. --initworks identically from an installed copy (built-in templates).
Metadata
Release files for agent-log-ai1 0.5.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 | |
|---|---|---|---|
| agent_log_ai1-0.5.0.tar.gz | 42.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agent_log_ai1-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.2 kB
Release files / agent_log_ai1-0.5.0.tar.gz
| Download URL | agent_log_ai1-0.5.0.tar.gz |
|---|---|
| Size | 42.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
65e9c381d5fee4c2d99002f95c169979d3d097e6f34460310b1d71f2db79fd95
|
|
BLAKE2b-256 checksum How to use checksums |
4b6bb98eb26738e3be8a5cf833fa895d75a8fdaf3da152b0d3d6aaa69113dcaf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logRelease files / agent_log_ai1-0.5.0-py3-none-any.whl
| Download URL | agent_log_ai1-0.5.0-py3-none-any.whl |
|---|---|
| Size | 16.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5b018b495326accae0dac8a2817dffdf443177604f443920d2c62ff3e568f82a
|
|
BLAKE2b-256 checksum How to use checksums |
b9f022c678f68f3f961c88be8dbf3fbb89405159548c6fed9eafc282282c6622
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency log