AI crash analyst. Wraps any terminal command and in case it fails appends to the native log diagnosed problem and suggested fix.
Project description
brytlog — AI logger
Brytlog replaces raw logs with AI summary, thus saving developers time, trouble and money.
In agentic workflows brytlog acts as a cheap, fast pre-processor to the chief agent.
For example, Claude Opus 4.8 (chief agent), might run brytlog python run.py, rather than the plain python run.py. This way, instead of having to process the entire raw output on its own (slow, expensive), it will only get a concise summary, generated by a cheaper, faster model, such as Gemini-3-flash.
Notes
- As a fail-safe, raw logs are saved so they can be accessed by the chief agent or developer if still needed (this is a toggleable feature in config).
- Even the cheaper model doesn't get the full raw dump, just the important parts, thus saving even more time and money.
In non-agentic, dev-driven workflows, brytlog simply saves the developer the time and trouble of analyzing raw output by himself, or copy pasting lines into a coding assistant.
Features
- free
- open source
- platform, language and llm vendor agnostic
- minimal setup (just bring your own key, or run locally)
- no need to change existing code (just add a couple of lines to AGENTS.md)
- lightweight (~50 KB, ~1,400 lines of code)
- customizable
- privacy minded (brytlog doesn't collect any data, and it redacts sensitive information before passing it to the LLM)
| Without brytlog (Raw) | With brytlog (AI Summary) |
|---|---|
|
|
|
How to use
Install
pip install brytlog
Configure
After installation either run a command using brytlog (e.g. brytlog node main.js), which will launch an on-boarding config process in the terminal, or run brytlog --config to open a json configuration file in your default editor.
Required fields
- LLM provider (e.g. Anthropic)
- Model (e.g. claude-haiku-4-5)
- API key (e.g. JQ.Ab9RN6W6QW7cmcnY92DIuoVtjCpKm_qfmO5T5oGzQmnwe5fjhw)
Notes
- Google Gemini: Use keys from Google AI Studio(https://aistudio.google.com/). Google Cloud Vertex AI is not natively supported yet.
- Custom Providers: Supports OpenAI-compatible endpoints (Ollama, vLLM, etc.) via standard
Authorization: Bearerheaders. Azure OpenAI is not natively supported yet.
Additional required field for custom model only (Optional override for Ollama/Enterprise endpoints)
- Base URL (e.g. http://localhost:11434/v1)
Use
Simply prefix any command with brytlog.
Syntax: brytlog [options] <command>.
Examples:
brytlog python run.py
brytlog --api-key xyz... node build.js
brytlog --model claude-haiku-4-5 ./deploy.sh
Chaining Multiple Commands
Wrap the entire string in quotes to run multiple commands together.
brytlog "pip install -r requirements.txt && python run.py"
brytlog "node main.js
npm run serve"
Use in agentic workflow
Either prompt inline at the beginning of a session or add this or similar to AGENTS.md:
brytlog replaces raw terminal output with a concise AI summary.
Use it for interpreters (e.g.`python`, `node`), compilers, build tools (e.g. `npm`, `make`), and test runners (e.g. `pytest`). Do not use it for standard OS utilities (e.g.`ls`, `cat`), version control (e.g.`git`), or interactive CLI tools (e.g.`htop`).
Syntax: `brytlog [options] <command>` (e.g., `brytlog --json python run.py`).
Outcome
Instead of raw log, a short report is output to the terminal.
Example output
View Example Output
────────────────────────────────────────────────────────────
🧠📜 brytlog crash report
Problem
The program crashed due to a TypeError when attempting to divide an integer by a string. The 'items' value from the configuration is a string and needs to be converted to an integer for arithmetic operations.
Fix
Convert payload['items'] to an integer before division in /var/folders/ys/zfg72rwd661dn0cnrsqth5sh0000gn/T/tmph1e0wuse.py, line 6:
average = payload['total'] / int(payload['items'])
Full report → /path/to/project/brytlog-reports/2026-06-15T14-11-51.log
Full raw log → /path/to/project/brytlog-raw/2026-06-15T14-11-51.txt
────────────────────────────────────────────────────────────
CLI Flags
| Flag | Description |
|---|---|
--version |
Show program's version number and exit |
--config |
Open the configuration file |
--reset |
Reset configuration to defaults |
--upgrade |
Upgrade brytlog to the latest version on PyPI |
--test |
Run a simulated crash to test the LLM configuration |
--logs |
List recent logs from the local brytlog-reports/ directory |
--provider |
LLM provider (google, openai, anthropic, grok, ollama, custom) |
--model |
LLM model to use (e.g., gpt-4o-mini) |
--api-key |
Pass API key inline |
--api-base-url |
Base URL for custom or ollama providers |
--json |
Output the report as JSON |
--no-log |
Disable writing AI reports to the local brytlog-reports/ directory |
--no-raw-log |
Disable writing raw logs to the local brytlog-raw/ directory |
--quiet |
Suppress the live stream of raw logs in the terminal (default) |
--no-quiet |
Display the live stream of raw logs in the terminal (override quiet default) |
Environment Variables
| Variable | Default | Description |
|---|---|---|
BRYTLOG_API_KEY |
— | Required for crash reports (unless using local llm) |
BRYTLOG_PROVIDER |
— | LLM provider |
BRYTLOG_MODEL |
— | LLM model |
BRYTLOG_API_BASE_URL |
— | Required for custom provider |
BRYTLOG_SAVE_REPORT |
true |
Set to false to disable AI report files |
BRYTLOG_SAVE_RAW_LOG |
true |
Set to false to disable raw log files |
BRYTLOG_QUIET |
true |
Set to true to mute live terminal output |
BRYTLOG_MAX_INPUT |
4000 |
Max tokens (approximate) of terminal output to keep |
BRYTLOG_SYSTEM_PROMPT |
(built-in) | Custom system prompt for the crash report |
BRYTLOG_TEMPERATURE |
0.2 |
Model temperature |
BRYTLOG_MAX_OUTPUT |
1000 |
Max tokens for the report. Note: API token limits are automatically padded (min 2048) to accommodate reasoning models. |
How It Works
brytlog runs a given command as a child process, diverts its stdout and stderr away from the terminal by default, and instead only outputs a concise AI summary of the run.
Possible scenarios:
- Clean success (exit
0, no warning-like keywords): reports success and sends nothing to the LLM. - Success with warnings (exit
0, keywords such aswarning,deprecated, orskippeddetected): sends a sampled head / warnings / tail excerpt to the chosen LLM for a short summary of the run. - Crash (non-zero exit): sends a token-bounded head-and-tail excerpt of the output to the LLM and prints a concise problem/fix report.
Because brytlog wraps the process rather than hooking into it, it works for any language or runtime with no changes to the program being run.
flowchart TD
A[Run command] --> B[Capture output and exit code]
B --> C{Success}
C -- Yes --> D{Warnings detected}
C -- No --> F[Build excerpt]
D -- No --> E[Print success]
D -- Yes --> F
F --> G[Send to LLM]
G --> H[Print AI report]
B -.-> I["Save raw log (optional)"]
H -.-> J["Save AI report (optional)"]
Notes
- cli flags take precedence over environment variables, which in turn take precedence over the config file.
- Configuration is saved globally to
~/.brytlog.json(C:\Users\Name\.brytlog.jsonon Windows). You can edit this file directly or runbrytlog --configto open it.- Logs are saved locally to
brytlog-reports/andbrytlog-raw/in the current working directory. You may want to addbrytlog-*/to your.gitignore.- To be clear: raw command output is muted (run in quiet mode) to humans and AI agents by default to save tokens and prevent context bloat. In quiet mode,
stdinis redirected to/dev/null, meaning any interactive prompt will instantly crash the program (e.g.EOFError) to generate a helpful AI report rather than hanging indefinitely. Brytlog only prints the concise AI report if a command fails. To display the live stream of raw logs in the terminal as usual and answer interactive prompts, use--no-quiet.- Reasoning Models (e.g., Gemini Flash-3-Preview): These models spend a large portion of their output budget on "thinking" tokens. Brytlog automatically enforces a 2048-token floor at the API level to ensure these models have room to think, while still instructing them to keep the visible report under your
MAX_OUTPUTlimit.- Enforcing agent use of brytlog, rather than relying on AGENTS.md or direct prompting, is also possible (e.g. via subprocess shim on PATH), but out of scope in this version.
License
MIT
Project details
Release history Release notifications | RSS feed
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 brytlog-0.1.1.tar.gz.
File metadata
- Download URL: brytlog-0.1.1.tar.gz
- Upload date:
- Size: 33.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
234300fe074fe38bd5f0b06bdbc7c59a891b318d155eabb11aa5c1e33981d4b5
|
|
| MD5 |
96ec584c4ab7c0dfa1076916c8f509e2
|
|
| BLAKE2b-256 |
1507f900111da5d22d4e09a91c2c56eb1dd78fe0512a0093bd1099afa333d349
|
Provenance
The following attestation bundles were made for brytlog-0.1.1.tar.gz:
Publisher:
release.yml on Guy-Sela/brytlog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brytlog-0.1.1.tar.gz -
Subject digest:
234300fe074fe38bd5f0b06bdbc7c59a891b318d155eabb11aa5c1e33981d4b5 - Sigstore transparency entry: 1910925919
- Sigstore integration time:
-
Permalink:
Guy-Sela/brytlog@2028d54da13390bc3577a6857d6c61d6790a7d63 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/Guy-Sela
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2028d54da13390bc3577a6857d6c61d6790a7d63 -
Trigger Event:
push
-
Statement type:
File details
Details for the file brytlog-0.1.1-py3-none-any.whl.
File metadata
- Download URL: brytlog-0.1.1-py3-none-any.whl
- Upload date:
- Size: 25.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85705f21df4524fa502e76e633158c5363e1cf6bfe6d431fef869a80734d5f3e
|
|
| MD5 |
1b2a08f35cf1b23670aef7eff8919e4d
|
|
| BLAKE2b-256 |
b29ecd9642f3382732335e64320da23237f11c81aaf536cb109f705d597e56bb
|
Provenance
The following attestation bundles were made for brytlog-0.1.1-py3-none-any.whl:
Publisher:
release.yml on Guy-Sela/brytlog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
brytlog-0.1.1-py3-none-any.whl -
Subject digest:
85705f21df4524fa502e76e633158c5363e1cf6bfe6d431fef869a80734d5f3e - Sigstore transparency entry: 1910925993
- Sigstore integration time:
-
Permalink:
Guy-Sela/brytlog@2028d54da13390bc3577a6857d6c61d6790a7d63 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/Guy-Sela
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2028d54da13390bc3577a6857d6c61d6790a7d63 -
Trigger Event:
push
-
Statement type: