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) — (103, 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).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_log_ai1-0.4.0.tar.gz.
File metadata
- Download URL: agent_log_ai1-0.4.0.tar.gz
- Upload date:
- Size: 41.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c7268090ddf3a39387fa22ca9970111e4a2885103486c3f93165c26382cf9df
|
|
| MD5 |
093f5bcb045c13fd8236a9cd0d726647
|
|
| BLAKE2b-256 |
0d623ecbbe7cb518b861a2b54f92655f1ef20016fddd84912139b20aa106da50
|
Provenance
The following attestation bundles were made for agent_log_ai1-0.4.0.tar.gz:
Publisher:
publish.yml on vartiainen1/agent-log-ai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_log_ai1-0.4.0.tar.gz -
Subject digest:
0c7268090ddf3a39387fa22ca9970111e4a2885103486c3f93165c26382cf9df - Sigstore transparency entry: 2414689200
- Sigstore integration time:
-
Permalink:
vartiainen1/agent-log-ai@e43827824a2b7342a2f00750541e771e851b86e4 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/vartiainen1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e43827824a2b7342a2f00750541e771e851b86e4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file agent_log_ai1-0.4.0-py3-none-any.whl.
File metadata
- Download URL: agent_log_ai1-0.4.0-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a7c6df0df34853c67b44c007bc68dcf2cdd85782aa7a0fdf2f61246493c90d9
|
|
| MD5 |
7699cdedd8cbcbfb18571ddd6bb28c3b
|
|
| BLAKE2b-256 |
4093e75086239832c80143a4ccfb58418929adaffd1dfcb3ddadf0f382715afa
|
Provenance
The following attestation bundles were made for agent_log_ai1-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on vartiainen1/agent-log-ai
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_log_ai1-0.4.0-py3-none-any.whl -
Subject digest:
2a7c6df0df34853c67b44c007bc68dcf2cdd85782aa7a0fdf2f61246493c90d9 - Sigstore transparency entry: 2414689206
- Sigstore integration time:
-
Permalink:
vartiainen1/agent-log-ai@e43827824a2b7342a2f00750541e771e851b86e4 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/vartiainen1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e43827824a2b7342a2f00750541e771e851b86e4 -
Trigger Event:
release
-
Statement type: