OLAV 🐺
Online Analytical Vertex for Agentic Operations
AI-native platform for autonomous infrastructure operations.
Control your infrastructure with natural language. Connect any REST API in one command, query it instantly, generate environment-aware automation scripts — no MCP servers, no code generation, no runtime complexity.
pip install olav
olav # first run sets itself up — just paste your LLM key
olav registry register http://netbox:8000 # connect any API
olav "how many devices are in NetBox?" # query immediately
olav --agent netops "write a backup script" # generate real scripts
Quick Start | Docs | 中文
Why OLAV?
API-as-Service — Beyond MCP
MCP requires a server process per service, stdio/HTTP transport, and framework-specific adapters. OLAV takes a different approach:
MCP: Service → MCP server process → stdio/HTTP → adapter → agent
OLAV: Service → olav registry register → reference markdown → api_request → done
One command. No server processes. No generated code. No runtime overhead.
# Register once
olav registry register http://netbox:8000
# Query from any agent, forever
olav "how many devices are in NetBox?"
olav --agent netops "compare OLAV database vs NetBox — are they in sync?"
The api_request tool is schema-aware — it reads API reference docs generated at registration time, handles pagination (DRF/NetBox style), and manages auth (JWT/Bearer/API-key) automatically.
Three Agents — Strict Tool Isolation
olav "list all devices" → Core Agent (database + knowledge base)
olav --agent netops "simulate link failure" → Ops Agent (network operations + SSH)
olav --agent audit "run health check" → Audit Agent (compliance + learning)
Core agent uses a subagent architecture — the orchestrator sees only 5 tools:
core orchestrator (5 tools: execute_sql, olav_recall_memory, web_search, format_and_export, olav_delegate)
├── db_query — database queries, knowledge base, web search, export
├── api_query — API requests, health checks, web search, export
├── remote — SSH to servers, local shell commands
└── admin — platform management, deployment, cron
Each subagent has only the tools it needs. execute_sql and api_request are in different subagents — the LLM cannot confuse them. Principle of least authority, enforced by the harness.
7-Layer Write Security
AI agents that can write to production need more than HITL approval:
| Layer | Defense | Bypassable? |
|---|---|---|
--enable-api-write |
Write mode locked by default | No |
services.yaml readonly_only |
Per-service read/write control | Config only |
| Dry-run simulation | Must pass before approval offered | No |
| HITL approval | User sees diff, then confirms | Not skippable |
sandbox_guard hard_block |
HTTP writes in isolated sandbox | Not skippable |
unshare --net |
Kernel-level network isolation | Not skippable |
| Audit trail | Every api_request logged | — |
--dangerously-skip-permissions bypasses tool approval for testing — but cannot bypass API write approval. Network devices are always read-only.
Agent Harness — The OS for AI Agents
Every agent decision passes through a mandatory execution control layer:
Layer 0: AAA Token/LDAP/OIDC auth → RBAC → full audit trail
Layer 1: Middleware HITL interception + memory injection
Layer 2: Sandbox Pre-scan → DuckDB read-only → network namespace isolation
Layer 3: Output Credential redaction + SSE encoding
Self-Improving Loop
Use OLAV → audit log captures every tool call
→ failure patterns extracted → written to LanceDB memory
→ future runs recall constraints before acting
Export as SFT/trajectory training data: olav log export sft.
The Software Understands You — Not the Other Way Around
You should never need to read a manual before OLAV is useful, and never need to hand-edit JSON to recover from a mistake:
- Zero-ritual onboarding — the first bare
olavbuilds everything itself (directories, databases, agents, local embedding model) and asks for exactly one thing: your LLM API key. No separate init step, no config file editing. - A first screen that knows your state — instead of generic tips, the welcome screen tells you what's actually true: "embedding backend unavailable — memory features limited", "netops installed but no device data yet — import a snapshot", "welcome back — last time: 'why is R1's BGP flapping?'".
- Health checks anywhere —
olav doctorfrom the shell or/doctorinside the TUI: zero-LLM probes of scaffolding, LLM, and embedding, each failure paired with the fix. - Change config by talking — "switch my LLM to deepseek-chat" is validated against the live provider before it's saved; a bad key or model name is rejected with the real error and your working config untouched. Every change snapshots the previous one — "rollback my LLM config" undoes it.
- Undo for agent actions — file writes and cron changes are journaled; "undo that" reverts the most recent one.
- Failures tell you what to do next — a mid-session 401 or quota error prints the diagnosis path and the rollback phrase, not a stack trace.
Quick Start
# 1. Install
pip install olav
# 2. Run — first launch sets everything up and asks for your LLM API key
olav
# 3. Connect a service
olav registry register http://netbox:8000
# 4. Query
olav "how many devices are in NetBox?"
Scripted/CI setup:
olav initstill performs the same bootstrap non-interactively (setOPENAI_API_KEYor edit.olav/config/api.jsonfor the key). Check any installation's health witholav doctor.
Docker
cp .env.docker.example .env # endpoint + key
docker compose run --rm olav init # scaffolds /data/.olav
docker compose run --rm olav doctor # 11 checks, no model calls
docker compose run --rm olav --agent core "how many devices are there?"
run, not up. OLAV is an interactive terminal application, not a server, so
docker compose up olav would start a container that immediately exits. State
lives in one named volume; add the network domain with
docker compose --profile netops. See docs-docker.md.
Network Operations (optional)
olav agent install /path/to/olav-netops/ # adds netops + devops workspaces
# (legacy alias: `olav skill install`)
olav --agent netops "/netops_init" # collect device data via SSH
olav --agent netops "simulate R2 link failure" # What-If analysis
olav --agent netops "deploy digital twin" # ContainerLab validation
Other Interfaces
olav # interactive TUI
olav service start --all # web UI at localhost:2280
olav --agent core "run: df -h" # shell commands via Core Agent
Architecture
olav v0.18.0 (pip install olav)
├── core orchestrator (5 tools)
│ ├── db_query — execute_sql, olav_recall_memory, web_search, format_and_export
│ ├── api_query — api_request, service_health, web_search, format_and_export
│ ├── remote — remote_execute (SSH), run_shell
│ └── admin — workspace_health, bulk_ingest, deploy/stop_service, cron, ...
│
olav-netops v0.19.0 (olav agent install olav-netops/)
├── netops orchestrator
│ ├── probe — Parallel SSH with command whitelist (Nornir)
│ ├── analysis — Dijkstra + ECMP simulation (networkx)
│ ├── diff — Cross-snapshot drift detection
│ └── lab — ContainerLab digital twin + commit-validate
├── audit
│ ├── design — Compliance profiles + health reports
│ └── learn — TextFSM template learning
└── netops.* — DuckDB tables + TextFSM collection pipeline
Tech Stack: LangChain · LangGraph · DeepAgents · DuckDB · LanceDB · FastAPI · NetworkX
Documentation
Docs: docs.olavai.com · Website: olavai.com
License
BSL-1.1 — Business Source License 1.1
Metadata
Release files for olav 0.27.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 | Provenance | Actions |
|---|---|---|---|---|
| olav-0.27.0.tar.gz | 773.5 kB | Without provenance | Details for olav-0.27.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| olav-0.27.0-py3-none-any.whl | Python 3 | none | any | Details for olav-0.27.0-py3-none-any.whl |
Total release size: 1.7 MB
Release files / olav-0.27.0.tar.gz
| Download URL | olav-0.27.0.tar.gz |
|---|---|
| Size | 773.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4ef860fbbf82e8ca7572f7420b22ab0ecc5446c30a4bf0b376b8ede977250355
|
|
BLAKE2b-256 checksum How to use checksums |
81392b65bd00abd3753ea70030204a4627e019eb29cf11f5c156ea988c7be3f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Release files / olav-0.27.0-py3-none-any.whl
| Download URL | olav-0.27.0-py3-none-any.whl |
|---|---|
| Size | 951.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4a8b7c109132f440292217306902a1e2869a2703fc2710a5585107345c0ff4a2
|
|
BLAKE2b-256 checksum How to use checksums |
41b1e093f636c34951c4b68aae04b484f754fcbff29dae22cb3b0fafc4206427
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|
Security for olav 0.27.0
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.