Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 26 additions & 89 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,17 @@
<div align="center">

![OpsCenter banner](docs/assets/banner.svg)

# OpsCenter

**A single-file, dependency-free operations dashboard for AI agent fleets — live agent state, a task board, session history, and system health in one dark-themed UI.**

<a href="https://github.com/OneByJorah/OpsCenter/stargazers"><img src="https://img.shields.io/github/stars/OneByJorah/OpsCenter?style=flat-square" alt="Stars"></a>
<a href="https://github.com/OneByJorah/OpsCenter/commits"><img src="https://img.shields.io/github/last-commit/OneByJorah/OpsCenter?style=flat-square" alt="Last commit"></a>
<img src="https://img.shields.io/github/license/OneByJorah/OpsCenter?style=flat-square" alt="License">
<img src="https://img.shields.io/badge/Python-3.11+-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
<img src="https://img.shields.io/badge/Dependencies-none-success?style=flat-square" alt="No dependencies">
<img src="https://img.shields.io/badge/Docker-Compose-2496ED?style=flat-square&logo=docker&logoColor=white" alt="Docker Compose">
> A single-file, dependency-free operations dashboard for AI agent fleets — live agent state, a task board, session history, and system health in one dark UI, for operators running Hermes agents.

</div>
[![License](https://img.shields.io/github/license/OneByJorah/OpsCenter?style=for-the-badge&color=FFB300&labelColor=0a0a09)](https://github.com/OneByJorah/OpsCenter)
[![Top Language](https://img.shields.io/github/languages/top/OneByJorah/OpsCenter?style=for-the-badge&color=FFB300&labelColor=0a0a09)](https://github.com/OneByJorah/OpsCenter)
[![Stars](https://img.shields.io/github/stars/OneByJorah/OpsCenter?style=for-the-badge&color=FFB300&labelColor=0a0a09)](https://github.com/OneByJorah/OpsCenter/stargazers)
[![Last Commit](https://img.shields.io/github/last-commit/OneByJorah/OpsCenter?style=for-the-badge&color=FFB300&labelColor=0a0a09)](https://github.com/OneByJorah/OpsCenter/commits)

![OpsCenter dashboard](docs/assets/screenshot.png)
![OpsCenter dashboard](docs/screenshots/dashboard.png)

## What This Is

OpsCenter gives you visibility into what your AI agents are doing right now. It reads the Hermes agent state directory (`gateway_state.json`, `state.db`, `agent-logs.db`, `kanban.db`) and renders agents, sessions, health, cron jobs, and a task board in a single real-time view.

It is deliberately minimal: one Python file using only the standard library, serving a vanilla HTML/JS frontend. There are no pip dependencies to install and no build step.
OpsCenter shows what your AI agents are doing right now. It reads the Hermes agent state directory (`gateway_state.json`, `state.db`, `agent-logs.db`, `kanban.db`) and renders agents, sessions, health, cron jobs, and a task board in one real-time view. It is deliberately minimal: one Python file on the standard library serving a vanilla HTML/JS frontend — no pip installs, no build step.

## Quick Start

Expand All @@ -31,92 +21,39 @@ cd OpsCenter
python3 server.py
```

Open **http://localhost:51763**. Or, for Docker:

```bash
cp .env.example .env
docker compose up -d
```

> [!NOTE]
> OpsCenter reads agent state from `HERMES_HOME` (defaults to `../.hermes`). If that directory is absent the dashboard still starts and reports empty state.
Open `http://localhost:51763`. For Docker: `cp .env.example .env && docker compose up -d`.

## Features

- **Live agent monitoring** — current subagent status and activity pulled from Hermes state.
- **Kanban task board** — create, update, and delete tasks persisted in `board.db`.
- **Session tracking** — historical log of agent sessions and outcomes.
- **Token analytics** — LLM usage and cost visibility from gateway state.
- **System health** — server resource monitoring and threshold alerts.
- **Server-Sent Events** — `/events` streams snapshot changes to the UI in real time.
- **Content editor** — list, read, and save markdown files under the content directory.
- **Fleet visualization** — 3D topology view of distributed agent nodes.
- Live agent monitoring from Hermes state — subagent status and activity
- Kanban task board persisted in SQLite (`board.db`)
- Historical session log of agent runs and outcomes
- Token analytics — LLM usage and cost visibility from gateway state
- Server-Sent Events stream (`/events`) pushes snapshots to the UI in real time
- Markdown content editor with list/read/save endpoints
- 3D topology view of distributed agent nodes
- Optional API-key guard on write endpoints

## Architecture

```mermaid
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#0a0a09','primaryTextColor':'#FFB300','lineColor':'#FFB300'}}}%%
graph LR
A[Browser - HTML/JS] -->|SSE / REST| B[Python stdlib server]
B --> C[(SQLite - board.db)]
B --> D[Hermes state - gateway_state.json, *.db]
```
Browser (HTML/JS) ──SSE / REST──▶ Python stdlib server ──▶ SQLite (board.db)
│
▼
Hermes state (gateway_state.json, *.db)
```

## Configuration

| Variable | Default | Description |
|----------|---------|-------------|
| `PORT` | `51763` | Dashboard server port |
| `BIND` | `127.0.0.1` | Server bind address |
| `HERMES_HOME` | `../.hermes` | Path to the Hermes agent home directory |
| `MISSION_CONTROL_API_KEY` | *(empty)* | API key protecting write endpoints (`X-API-Key` header) |
| `MISSION_CONTROL_CONTENT_DIR` | `./content` | Markdown content directory for the editor |
OpsCenter reads `HERMES_HOME` (default `../.hermes`) and starts with empty state if it is absent.

> [!WARNING]
> Set `MISSION_CONTROL_API_KEY` to protect the board and content write endpoints before exposing OpsCenter on a network. Keep `BIND` at `127.0.0.1` unless you intend remote access.
## Stack

## API Endpoints

| Endpoint | Method | Description |
|----------|--------|-------------|
| `/` | GET | Main dashboard UI |
| `/api/snapshot` | GET | Full snapshot (agents, sessions, health, cron, board) |
| `/events` | GET (SSE) | Live snapshot stream |
| `/api/health` | GET | Liveness probe |
| `/api/board` | GET/POST | List / create tasks |
| `/api/board/update?id=` | POST | Update a task |
| `/api/board/delete?id=` | POST | Delete a task |
| `/api/content` | GET | List markdown content files |
| `/api/content/get?path=` | GET | Read a markdown file |
| `/api/content/save` | POST | Save a markdown file |

## Use Cases

1. **Agent operators** — watch subagent activity and intervene from the task board.
2. **Homelab AI stacks** — pair with Hermes to track sessions and token usage.
3. **Ops on a budget** — run a zero-dependency dashboard in an Alpine container.

## Tech Stack

Python 3.11 (standard library), `http.server`/`socketserver`, SQLite, SSE, vanilla HTML/CSS/JS, Docker Compose.

## Screenshots

| Dashboard | Agents | Tasks |
|---|---|---|
| ![Dashboard](docs/screenshots/dashboard.png) | ![Agents](docs/screenshots/agents.png) | ![Tasks](docs/screenshots/tasks.png) |

A short `docs/assets/demo.gif` walkthrough is also included.
Python 3.11 standard library, http.server, SQLite, Server-Sent Events, vanilla HTML/CSS/JS, Docker Compose

## Contributing

Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). [Open an issue](https://github.com/OneByJorah/OpsCenter/issues) to report a bug or request a feature.
Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) and [open an issue](https://github.com/OneByJorah/OpsCenter/issues).

## License

MIT — see [LICENSE](LICENSE).

## Connect

- [jorahone.com](https://jorahone.com)
- [GitHub Org](https://github.com/OneByJorah)
- [info@jorahone.com](mailto:info@jorahone.com)
Loading