Niobe
Runtime intelligence for AI agents — local-first runtime observation via MCP.
Niobe answers: "What is the system doing right now, and did my change make it worse?"
Take snapshot A → deploy → snapshot B → diff. That's it.
Install
pip install niobe
Quick Start
# Register a service
niobe register myapp --port 8080 --log /var/log/myapp.log
# Take a snapshot (captures metrics + ingests logs)
niobe snapshot myapp
# Make a change, then snapshot again
niobe snapshot myapp
# Compare before/after
niobe compare <snapshot-id-1> <snapshot-id-2>
# Search logs
niobe logs --query "connection refused"
# View recent errors
niobe errors --service myapp --since 10
CLI Reference
| Command | Description |
|---|---|
niobe register <name> [--pid N] [--port N] [--log PATH...] |
Register a service for observation |
niobe unregister <name> |
Remove a service |
niobe services |
List registered services |
niobe snapshot [service] |
Take health snapshot (one or all) |
niobe compare <id_a> <id_b> |
Diff two snapshots |
niobe logs [--query Q] [--service S] [--level L] |
Search log entries |
niobe errors [--service S] [--since N] |
Recent errors |
niobe ingest <service> [--follow] |
Ingest log files |
MCP Tools
Niobe exposes 5 tools via Model Context Protocol:
| Tool | Description |
|---|---|
niobe_register |
Register a service for observation |
niobe_snapshot |
Take health snapshot (one or all services) |
niobe_compare |
Compare two snapshots (before/after diff) |
niobe_errors |
Get recent errors from logs |
niobe_logs |
Full-text search across ingested logs |
Claude Code Integration
Add to ~/.claude/.mcp.json:
{
"mcpServers": {
"niobe": {
"command": "niobe-mcp",
"args": []
}
}
}
Then in Claude Code:
- "Register my web server on port 3000" →
niobe_register - "How's my app doing?" →
niobe_snapshot - "Did my last deploy break anything?" →
niobe_compare - "Show me recent errors" →
niobe_errors - "Search logs for timeout" →
niobe_logs
Log Format Support
Niobe auto-detects log formats:
- JSON —
{"level": "error", "message": "...", "timestamp": "..."} - CLF — Apache/NGINX common log format (HTTP status mapped to levels)
- Python —
2024-01-15 10:30:45,123 - myapp - ERROR - message - RAW — Everything else (stored as-is with level=unknown)
Configuration
Optional. Create .niobe/config.toml in your project root:
[store]
db_name = "niobe.db"
[ingestion]
tail_lines = 100
max_line_length = 8192
[snapshot]
error_window_minutes = 5
cpu_sample_interval = 0.5
[mcp]
default_error_since_minutes = 5
default_query_limit = 50
All values can be overridden with NIOBE_* environment variables.
Architecture
- SQLite + WAL — single-file store, concurrent-read safe
- FTS5 — full-text search across log messages with porter stemming
- psutil — process metrics (CPU, memory, threads, connections)
- Frozen dataclasses — immutable models, no Pydantic dependency
- Snapshot-based — no background monitoring, entirely on-demand
Part of the EvoIntel MCP Suite
Niobe solves AI Blindness #2: Runtime Behavior — CPU, memory, error rates, and log patterns that no model can observe from code alone.
Part of the EvoIntel MCP Suite by Evolving Intelligence AI: five tools for five blindnesses no model improvement will ever fix.
| Tool | Blindness | Install |
|---|---|---|
| Sentinel | Project History | pip install git-sentinel |
| Niobe | Runtime Behavior | pip install niobe |
| Merovingian | Cross-Service Dependencies | pip install merovingian |
| Seraph | Code Quality | pip install seraph-ai |
| Anno | Web Content | npm install -g @evointel/anno |
License
MIT
Metadata
Release files for niobe 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| niobe-0.2.1.tar.gz | 31.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| niobe-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 60.2 kB
Release files / niobe-0.2.1.tar.gz
| Download URL | niobe-0.2.1.tar.gz |
|---|---|
| Size | 31.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d62488cbc95995dbd58bfd18f1ba07abfd371ba5d8eb242d6759b0324c98c721
|
|
BLAKE2b-256 checksum How to use checksums |
b51edb7b5b07685f106005619793ddf5322b770ae431bf5090e07c1575cc2bed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / niobe-0.2.1-py3-none-any.whl
| Download URL | niobe-0.2.1-py3-none-any.whl |
|---|---|
| Size | 28.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fd9d165d0549228fddfd111d7652f80e8f7b421f2e1398cc50c561335b5129a6
|
|
BLAKE2b-256 checksum How to use checksums |
3beb56cf5e02a964b6ef54f8c7776dcc2e6fd5c54d306d2de4b9d58d1703d021
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for niobe 0.2.1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.