Operational analytics for your AI agent team
Project description
๐ OA โ Operational Analytics CLI
Operational analytics for your AI agent team โ from the command line.
OA gives you a live dashboard to track how your OpenClaw multi-agent system is actually performing. Cron reliability, agent activity, custom goals โ all from data your system already generates. Zero new infrastructure required.
Why OA?
You've got agents running cron jobs, writing to memory, processing tasks. But how do you know if things are actually working?
- "Job ran" โ "job succeeded"
- Agent sessions exist, but are agents actually active?
- Problems get logged to memory files, but nobody's tracking the trends
OA reads the data OpenClaw already writes and turns it into real metrics โ no new agents, no new integrations, no cloud services.
Features
- ๐ Built-in goals โ Cron Reliability and Team Health work instantly with zero config
- ๐ฏ Custom goals โ define your own metrics via simple Python pipelines
- ๐ญ OTel-compatible tracing โ see exactly how data flows through your system
- ๐ฅ๏ธ Live dashboard โ React UI served locally, auto-refreshes
- ๐ Zero dependencies โ pure Python core, reads from SQLite
- ๐ค Agent-friendly โ works as an OpenClaw skill for autonomous monitoring
Quick Start
pip install oa-cli
# Initialize โ auto-detects your OpenClaw setup
oa init
# Collect metrics
oa collect
# Open dashboard
oa serve
How It Works (Step by Step)
Step 0: What You Already Have
If you're running OpenClaw, your machine already has all the data we need:
~/.openclaw/
โโโ cron/
โ โโโ jobs.json โ cron job definitions
โ โโโ runs/
โ โโโ my-daily-job.jsonl โ run history per job
โ โโโ data-collector.jsonl
โโโ sessions/ โ agent session data
โโโ agents/ โ agent configs
OA doesn't create new data โ it reads what's already there.
Step 1: Install
pip install oa-cli
Pure Python, zero runtime dependencies. No Node, no npm, no venv required. Takes ~5 seconds.
Step 2: Initialize
cd ~/my-workspace
oa init
The CLI auto-detects your OpenClaw installation:
๐ Scanning OpenClaw installation...
OpenClaw: โ Found at ~/.openclaw
Agents: โ 4 agents detected
โข researcher (last active: 2h ago)
โข writer (last active: 1d ago)
โข reviewer (last active: 3h ago)
โข publisher (last active: 5h ago)
Cron: โ 6 jobs (5 enabled, 1 disabled)
๐ Setting up built-in goals:
โ G1 ยท Cron Reliability โ success rate across all cron jobs
โ G2 ยท Team Health โ daily agent activity
๐ Optional goal templates:
[1] Knowledge Sharing โ shared learnings growth
[2] Custom goal
[0] Skip โ just use built-ins
Your choice (0-2): 0
โ Created oa-project/
โโโ config.yaml โ your goals + agent list
โโโ data/
โ โโโ monitor.db โ SQLite database (schema ready)
โโโ pipelines/ โ data collection scripts
Next steps:
oa collect โ gather data now
oa serve โ open dashboard
What happens under the hood:
- Reads
~/.openclaw/cron/jobs.jsonโ discovers your agents and cron jobs - Scans
~/.openclaw/sessions/โ detects which agents exist and their activity - Creates
config.yamlwith detected agents + built-in goals (thresholds auto-calculated) - Creates SQLite database with schema ready to receive metrics
- Generates pipeline scripts with paths configured to your OpenClaw install
Step 3: Collect Data
oa collect
๐ Collecting data for 2026-03-15...
G1 ยท Cron Reliability
โ Read 6 cron jobs from ~/.openclaw/cron/jobs.json
โ Scanned 234 run entries from JSONL logs
โ Matched 18 slots today โ 15 success, 2 failed, 1 missed
โ Success rate: 83.3%
๐ญ Trace: a4f2c... (6 spans)
G2 ยท Team Health
โ Scanned 4 agents
โ 3 active today (researcher, reviewer, publisher)
โ Memory logged: 2/4 agents
๐ญ Trace: b7e1d... (4 spans)
โ Results written to data/monitor.db
The built-in pipelines read directly from OpenClaw's files โ the same cron/runs/*.jsonl and session directories that already exist. No new data collection agents needed.
Step 4: View Dashboard
oa serve
๐ฅ๏ธ Dashboard running at http://localhost:3456
Goals: 2 tracked (Cron Reliability, Team Health)
Agents: 4 configured
Data: 1 day collected
Press Ctrl+C to stop
Opens your browser โ live dashboard with goal cards, time-series charts, and health indicators. All from real data.
Step 5: Automate (Optional)
oa cron show
๐ Suggested cron schedule for OpenClaw:
# Collect metrics 3x daily (paste into your OpenClaw config):
{
"name": "oa-collect",
"schedule": {"kind": "cron", "expr": "0 7,12,19 * * *"},
"payload": {"kind": "systemEvent", "text": "Run: oa collect"}
}
Set it and forget it โ metrics collected automatically.
Built-in Goals
These work out of the box for any OpenClaw user. Zero configuration needed.
G1 ยท Cron Reliability
Tracks whether your cron jobs are actually succeeding, not just running.
| Metric | Description | Source |
|---|---|---|
success_rate |
% of scheduled slots that succeeded | ~/.openclaw/cron/runs/*.jsonl |
missed_triggers |
Jobs that never ran | ~/.openclaw/cron/jobs.json + runs |
Data flow:
OpenClaw Scheduler โ JSONL run logs โ oa pipeline โ SQLite โ Dashboard
G2 ยท Team Health
Tracks daily agent activity โ are your agents actually working?
| Metric | Description | Source |
|---|---|---|
active_agent_count |
Agents with sessions today | ~/.openclaw/sessions/ |
memory_discipline |
% of agents that logged to memory | Agent memory files |
Data flow:
Agent sessions + memory files โ oa pipeline โ SQLite โ Dashboard
Custom Goals
Define your own metrics by writing a simple Python pipeline:
# pipelines/content_quality.py
from oa import Pipeline, Metric
class ContentQuality(Pipeline):
goal_id = "content_quality"
def collect(self, date: str) -> list[Metric]:
# Your logic โ read files, APIs, whatever
approved = count_approved_posts(date)
total = count_total_posts(date)
rate = approved / total * 100 if total else 0
return [Metric("approval_rate", rate, unit="%")]
Register it in config.yaml:
goals:
# ... built-in goals auto-configured ...
- id: content_quality
name: "Content Quality"
pipeline: pipelines/content_quality.py
metrics:
- name: approval_rate
unit: "%"
healthy: 90
warning: 70
Run oa collect and your custom goal appears on the dashboard.
Using with AI Agents
As an OpenClaw Skill
Install the oa skill and your agents can:
- Run
oa collectautonomously via cron - Check system health before taking actions
- Detect issues and self-remediate
Agent Instructions Example
## Operational Monitoring
- Run `oa collect` at 7:30 AM, 12:30 PM, 7:00 PM
- If cron reliability drops below 80%, investigate and fix
- Log all fixes to memory for trend analysis
Configuration
The config.yaml is auto-generated by init and fully editable:
# Auto-generated by oa init
openclaw_home: ~/.openclaw
agents:
- id: researcher
name: Researcher
- id: writer
name: Writer
- id: reviewer
name: Reviewer
- id: publisher
name: Publisher
goals:
- id: cron_reliability
builtin: true
metrics:
- name: success_rate
unit: "%"
healthy: 95
warning: 80
- id: team_health
builtin: true
metrics:
- name: active_agent_count
unit: count
healthy: 3
warning: 2
CLI Reference
| Command | Description |
|---|---|
oa init |
Auto-detect OpenClaw setup, create project |
oa collect |
Run all data pipelines |
oa collect --goal G1 |
Run a specific pipeline |
oa serve |
Start dashboard on localhost:3456 |
oa status |
Show current goal health (terminal) |
oa cron show |
Show suggested cron schedule |
oa doctor |
Check system dependencies |
Architecture
OpenClaw writes: OA reads:
โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
cron/jobs.json โโโโโโโบ What jobs exist, their schedules
cron/runs/*.jsonl โโโโโโโบ Did each run succeed or fail?
sessions/ directory โโโโโโโบ Which agents were active today?
agent memory files โโโโโโโบ Did agents log their work?
โ
โผ
Python Pipelines (zero-dep)
โ
โผ
SQLite Database
โ
โผ
Dashboard (localhost:3456)
No servers to maintain. No cloud services. Everything runs on your machine.
Requirements
- Python 3.10+ (that's it for the core)
- OpenClaw installed and running
- A web browser to view the dashboard
Tracing
Every data collection run produces OTel-compatible traces stored in SQLite. View them in the dashboard's Mechanism tab to see exactly how data flows through your system.
# Built-in tracing โ automatically wraps every pipeline
from oa.tracing import Tracer
tracer = Tracer(service="my_pipeline")
with tracer.span("Data Collection") as span:
span.set_attribute("rows_processed", 42)
with tracer.span("DB Write") as child:
# nested spans for detailed flow tracking
...
Roadmap
- Pre-built dashboard (React static files bundled in pip package)
-
oa exportโ export metrics to CSV/JSON - More built-in goal templates (knowledge sharing, issue tracking)
- OTel SDK export (optional, for users with existing observability)
- OpenClaw skill package for autonomous monitoring
Contributing
git clone https://github.com/motusai/oa-cli
cd oa-cli
pip install -e ".[dev]"
pytest
License
MIT โ built by MotusAI
Project details
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 oa_cli-0.1.0.tar.gz.
File metadata
- Download URL: oa_cli-0.1.0.tar.gz
- Upload date:
- Size: 222.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7eef04923ffc0c2596e0406372845f75cca93930d2a8fd09387174f7dcd71bee
|
|
| MD5 |
55a6eec6d7dba7f46da1087c07cdec2e
|
|
| BLAKE2b-256 |
4d7912058005610237e29c6bdda79ef9c4a4f5d84801911aa7c771c05e20fba4
|
File details
Details for the file oa_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: oa_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 223.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bf243cf8f561ba54ec3b480b1cc472cacfcf942bbeb22aa0d863836f2abb5c7
|
|
| MD5 |
ba81442f7a22b645cc9f9711811585c8
|
|
| BLAKE2b-256 |
76e782f218eeea13fea99f218fac6c511b5d929887a1c109b74014db5aeff3b5
|