From 310ac679dee8abd11a212a91c4e0998f80726b1b Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 20:54:28 -0400 Subject: [PATCH 1/9] fix: resolve NameError in _is_active/_is_idle/_is_dormant by passing now parameter The three agent status functions referenced an undefined 'now' variable from the enclosing scope. Added 'now' as a parameter and updated the callers in agent_status_counts() to pass the local 'now' value. Fixes CRITICAL finding C1 from Phase 1 AUDITOR. --- server.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/server.py b/server.py index a07fb2c..952f520 100755 --- a/server.py +++ b/server.py @@ -235,19 +235,19 @@ def _parse_dt(s): except Exception: return None -def _is_active(ts): +def _is_active(ts, now): dt = _parse_dt(ts) if not dt: return False return (now - dt).total_seconds() < _FIVE_MINUTES -def _is_idle(ts): +def _is_idle(ts, now): dt = _parse_dt(ts) if not dt: return False return (now - dt).total_seconds() < _ONE_HOUR -def _is_dormant(ts): +def _is_dormant(ts, now): dt = _parse_dt(ts) if not dt: return True @@ -629,9 +629,9 @@ def snapshot(self): def agent_status_counts(): act = safe(activity_data) or {} agents = act.get("agents", []) - active = sum(1 for a in agents if _is_active(a.get("last_seen"))) - idle = sum(1 for a in agents if _is_idle(a.get("last_seen"))) - dormant = sum(1 for a in agents if _is_dormant(a.get("last_seen"))) + active = sum(1 for a in agents if _is_active(a.get("last_seen"), now)) + idle = sum(1 for a in agents if _is_idle(a.get("last_seen"), now)) + dormant = sum(1 for a in agents if _is_dormant(a.get("last_seen"), now)) return {"active": active, "idle": idle, "dormant": dormant} return { "t": now, From 82c81b8f70c986a293331f781ba317bc9b3fd6dd Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 20:54:38 -0400 Subject: [PATCH 2/9] fix: remove duplicated serve_static method from Handler class The serve_static method was defined twice with identical code (lines 578 and 590). Removed the duplicate second definition. Fixes CRITICAL finding C2 from Phase 1 AUDITOR. --- server.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/server.py b/server.py index 952f520..e01ebeb 100755 --- a/server.py +++ b/server.py @@ -587,18 +587,6 @@ def serve_static(self, path, ctype): except Exception as e: self.send_error(404, str(e)) - def serve_static(self, path, ctype): - try: - with open(path, "rb") as f: - data = f.read() - self.send_response(200) - self.send_header("Content-Type", ctype) - self.send_header("Content-Length", str(len(data))) - self.end_headers() - self.wfile.write(data) - except Exception as e: - self.send_error(404, str(e)) - def do_POST(self): length = int(self.headers.get("Content-Length", 0)) body = self.rfile.read(length) if length else b"" From 24849483de69abf726a6ed52ac4cb065d7cd8ccb Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 20:55:00 -0400 Subject: [PATCH 3/9] docs: fix README port, remove requirements.txt reference, correct WebSocket to SSE, update API endpoints - Fixed port from 8080 to 51763 - Removed pip install -r requirements.txt (stdlib only) - Changed 'WebSocket Updates' to 'SSE Updates' - Fixed architecture diagram from WebSocket to SSE - Replaced non-existent API endpoints with actual ones Fixes CRITICAL findings C3, C4, C5, C6 from Phase 1 AUDITOR. --- README.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 16c6b41..ef5c4a9 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ - **Session Tracking** — Historical log of agent sessions and outcomes - **Token Analytics** — Usage tracking and cost monitoring for LLM calls - **System Health** — Server resource monitoring and alerting -- **WebSocket Updates** — Live streaming of agent state changes +- **SSE Updates** — Live streaming of agent state changes via Server-Sent Events - **Dark-Themed UI** — Professional, easy-on-the-eyes operations interface ## 🚀 Quick Start @@ -35,11 +35,12 @@ ```bash git clone https://github.com/OneByJorah/agent-mission-control.git cd agent-mission-control -pip install -r requirements.txt python3 server.py ``` -Open **http://localhost:8080** in your browser. +Open **http://localhost:51763** in your browser. + +> **Note:** The server uses only Python stdlib — no pip dependencies required. The `pip install -r requirements.txt` step is unnecessary. ### Using Start Script @@ -51,7 +52,7 @@ chmod +x start.sh ## 🏗️ Architecture ``` -Browser (HTML/JS) ──WebSocket──▶ Python Server ──▶ SQLite +Browser (HTML/JS) ──SSE──▶ Python Server ──▶ SQLite │ ▼ Hermes Gateway API @@ -78,10 +79,14 @@ agent-mission-control/ | Endpoint | Method | Description | |----------|--------|-------------| | `/` | GET | Main dashboard UI | -| `/api/agents` | GET | List active agents | -| `/api/tasks` | GET/POST | Task management | -| `/api/sessions` | GET | Session history | -| `/api/health` | GET | System health status | +| `/api/snapshot` | GET | Full system snapshot (gateway, activity, sessions, VPS, cron, board, DBs) | +| `/events` | GET | SSE stream — pushes snapshot every 5s | +| `/api/board` | GET/POST | Task board CRUD | +| `/api/board/update?id=` | POST | Update task status/fields | +| `/api/board/delete?id=` | POST | Delete a task | +| `/api/content` | GET | List content documents | +| `/api/content/get?path=` | GET | Get content document body | +| `/api/content/save` | POST | Save/update content document | ## 🔌 Integrations From abfea62cfce75153a1f505c161bf67dfe77bb7c2 Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 20:55:08 -0400 Subject: [PATCH 4/9] fix: remove npm and docker Dependabot template vestiges No package.json or Dockerfile exist in the repo. These were template vestiges from the initial repo setup. Fixes DEGRADED finding D4 from Phase 1 AUDITOR. --- .github/dependabot.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4f46c24..7fee8a1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,16 +5,6 @@ updates: schedule: interval: "weekly" open-pull-requests-limit: 10 - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 10 - - package-ecosystem: "docker" - directory: "/" - schedule: - interval: "weekly" - open-pull-requests-limit: 5 - package-ecosystem: "github-actions" directory: "/" schedule: From aaa6a7805721eef18e35128c27040af536657299 Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 20:55:14 -0400 Subject: [PATCH 5/9] fix: remove TypeScript from CodeQL language matrix No TypeScript files exist in the repo. This was a template vestige. Fixes DEGRADED finding D5 from Phase 1 AUDITOR. --- .github/workflows/codeql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 707e2e6..e6763d6 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false matrix: - language: ['python', 'javascript', 'typescript'] + language: ['python', 'javascript'] steps: - name: Checkout repository From 15565858001377d0b13c8e9a36c4887c86de5c75 Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 20:55:20 -0400 Subject: [PATCH 6/9] chore: add reports/ to .gitignore Pipeline-generated reports should not be tracked in version control. Fixes DEGRADED finding D8 from Phase 1 AUDITOR. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b91f767..bb4cb96 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ build/ *.so # Logs *.log +# Pipeline reports +reports/ From b6ca599cb7682076fad8028003d3c232657fe0c9 Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 21:37:03 -0400 Subject: [PATCH 7/9] chore: remove tracked __pycache__ artifact --- __pycache__/server.cpython-310.pyc | Bin 22579 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __pycache__/server.cpython-310.pyc diff --git a/__pycache__/server.cpython-310.pyc b/__pycache__/server.cpython-310.pyc deleted file mode 100644 index 3af657b5ab58f875febd0396730bb09fe7d755d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22579 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 Wc9iI`6a4Q_8efGK%g&j}5C1ox7l6b7 From ca40cc58c4e3e8c3da236f862101dfb085831e31 Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Sun, 5 Jul 2026 21:37:12 -0400 Subject: [PATCH 8/9] docs: add ORACLE intent analysis for agent-mission-control --- INTENT.md | 230 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 INTENT.md diff --git a/INTENT.md b/INTENT.md new file mode 100644 index 0000000..19828f4 --- /dev/null +++ b/INTENT.md @@ -0,0 +1,230 @@ +# INTENT.md — J1-PIPELINE Phase -1 (ORACLE) + +**Repository:** `OneByJorah/agent-mission-control` +**Analysis Date:** 2026-07-05 +**Analyst:** J1-PIPELINE ORACLE (read-only) +**Status:** Intent Reconstructed + +--- + +## What This System Does + +**Hermes Mission Control** is a real-time AI Agent Operations Dashboard — a web-based monitoring, task management, and observability interface for the Hermes AgentOS subagent fleet. It is the operational window into the J1-FLEET agent orchestration system. + +### Technical Role + +A single-file Python HTTP server (`server.py`, 661 lines, pure stdlib) serves a dark-themed single-page application (`app.js`, 1601 lines) with six operational tabs: + +| Tab | Function | +|-----|----------| +| **Overview** | Agent radar chart, current directive ticker, context window (agent load bars), VPS health (CPU/memory/disk), Hermes DB sizes, throughput sparkline, activity feed, and a footer strip (queue, sessions, errors, today's count, uptime) | +| **Agents** | Per-agent cards (orchestrator, analyst, writer, marketer, coder) showing task counts, success rates, last-seen model, last task, and a filterable agent log table | +| **Tasks** | Kanban board (pending / in-progress / completed) with CRUD operations, priority tagging, optimistic UI updates, and modal task creation | +| **Schedule** | Cron job viewer — reads `/etc/crontab`, `/etc/cron.d/`, and `/var/spool/cron/crontabs/root` with human-readable schedule translations | +| **Content** | Markdown document browser/editor for agent-generated content under `/root/.hermes/content/`, organized by agent, with inline editing and `marked` rendering | +| **Office** | Three.js 3D scene with agent avatars at desks (status orbs, screen glow, floating animation) and a fleet islands map (Homelab, VIDE STT, VIDE STX) with animated data pulse wires | + +### Operational Role + +The dashboard is consumed by **human operators** managing the Hermes AgentOS fleet. It replaces raw SQLite queries and SSH sessions with a real-time, visual operations interface. It is read-only toward Hermes internal databases (state.db, agent-logs.db, kanban.db) and read-write only to its own project-local task board (board.db). + +### Architecture + +``` +Browser (HTML/JS + Three.js) ──SSE──▶ Python HTTP Server ──▶ board.db (local SQLite) + │ + ▼ + Hermes Gateway API + (gateway_state.json, + agent-logs.db, + state.db, + kanban.db) +``` + +- **Backend:** Pure Python 3.10+ stdlib — `http.server.BaseHTTPRequestHandler` + `socketserver.ThreadingTCPServer`. No framework dependencies. +- **Frontend:** Vanilla JavaScript with modular components (`components.js`), CSS design tokens (`tokens.css`), Three.js (CDN) for 3D, `marked` (CDN) for markdown rendering. +- **Data:** Read-only SQLite connections via URI-mode `?mode=ro` + `PRAGMA query_only = 1` to Hermes internal DBs. Read-write to project-local `board.db`. +- **Port:** 51763, binds `0.0.0.0` (changed from `127.0.0.1` in v1.0 → `0.0.0.0` in v1.1). +- **Real-time:** Server-Sent Events at `/events` pushes full snapshot every 5 seconds. Polling fallback every 8 seconds. + +### API Surface + +| Endpoint | Method | Description | +|----------|--------|-------------| +| `/` | GET | Main dashboard UI (index.html) | +| `/api/snapshot` | GET | Full system snapshot (gateway, activity, sessions, VPS, cron, board, DBs) | +| `/events` | GET | SSE stream — pushes snapshot every 5s | +| `/api/board` | GET/POST | Task board CRUD | +| `/api/board/update?id=` | POST | Update task status/fields | +| `/api/board/delete?id=` | POST | Delete a task | +| `/api/content` | GET | List content documents | +| `/api/content/get?path=` | GET | Get content document body | +| `/api/content/save` | POST | Save/update content document | + +--- + +## Why This Was Built + +### Real Problem + +Hermes AgentOS is a multi-agent orchestration system that spawns and manages subagents (orchestrator, analyst, writer, marketer, coder) across platforms (Telegram, Discord). These agents operate autonomously — routing tasks, researching domains, drafting content, writing code, and managing deployments. **There was no operational visibility into what the agent fleet was doing.** + +Without Mission Control, operators had to: +- SSH into the server and query SQLite databases manually +- Parse raw `gateway_state.json` to check agent status +- Have no real-time view of task progress or agent health +- No centralized task management tied to agent operations +- No way to quickly assess system resource usage alongside agent activity + +### Why Existing Tools Were Insufficient + +- **Generic monitoring tools** (Grafana, Prometheus) require instrumentation, exporters, and configuration — overkill for a single-server agent orchestration system, and they don't understand Hermes-specific data models (agent logs, session tokens, gateway state). +- **SQLite CLI** is the raw interface but provides no visualization, no real-time updates, and no multi-user access. +- **Hermes CLI** is command-line only — no dashboard, no persistent task board, no 3D spatial representation of the agent fleet. +- **No existing tool** could read Hermes internal databases (`state.db`, `agent-logs.db`, `kanban.db`) and present them in a unified, real-time, dark-themed operations interface. + +### What Triggered Development + +Development began around **June 21, 2026** (earliest backup timestamps show v1.0 iterations). The initial git commit (`40e031f`, 2026-07-03) was already tagged **v1.1**, indicating ~2 weeks of pre-git iteration. The trigger was the operational gap created by deploying Hermes AgentOS in production — once agents were running autonomously, the need for a dashboard became immediate. + +The repo was built rapidly to fill this gap, with 9+ backup snapshots in the first 24 hours of development (June 21), followed by a security audit (July 5) that redacted a hardcoded Tailscale IP and sanitized paths. + +### Ecosystem Fit + +`agent-mission-control` is the **observability layer** of the J1-FLEET / Hermes AgentOS ecosystem: + +``` +J1-FLEET (orchestration infrastructure) + └── Hermes AgentOS (agent runtime, gateway, session management) + └── agent-mission-control (operations dashboard) + ├── gateway_state.json — Gateway process state + ├── agent-logs.db — Agent execution logs + ├── state.db — Session & token usage + ├── kanban.db — Kanban state (read-only) + └── /root/.hermes/content/ — Agent-generated docs +``` + +The 3D Office tab's fleet islands (Homelab in St. Thomas as primary, VIDE STT in St. Thomas as district, VIDE STX in St. Croix as district) with animated data pulse wires reflects the broader J1 infrastructure topology — connecting agent operations to physical site locations across the US Virgin Islands. + +Agent platform mapping (from code): +- **Orchestrator** → Telegram +- **Analyst, Writer, Marketer, Coder** → Discord + +--- + +## Operational Classification + +**Classification: PRODUCTION** + +Evidence: +- Live operations dashboard serving real-time data from a production Hermes AgentOS deployment +- Runs on port 51763, binds all interfaces (`0.0.0.0`) +- Started via `sudo` on boot (`start.sh`) +- Has a security audit in git history (commit `2f676a7` — redacted hardcoded Tailscale IP) +- Has CodeQL CI/CD workflow configured +- Has Dependabot configured for dependency updates +- Has issue templates, PR template, CODE_OF_CONDUCT, CONTRIBUTING, SECURITY policy +- MIT License with copyright assigned to Jhonattan L. Jimenez +- Version-labeled (v1.0 → v1.1) with structured backup history + +**Secondary classifications:** Observability (core purpose is monitoring), Automation (task board + content management) + +--- + +## Key Architectural Decisions + +1. **Zero external dependencies** — The Python backend uses only stdlib (`http.server`, `sqlite3`, `json`, `socketserver`). No pip install required beyond what the OS provides. This was intentional for deployment simplicity. + +2. **Read-only access to Hermes internals** — Uses SQLite URI-mode `?mode=ro` with `PRAGMA query_only = 1` to prevent accidental writes to Hermes databases. The only writable database is the project-local `board.db`. + +3. **SSE over WebSocket** — Uses Server-Sent Events (simpler, unidirectional) rather than WebSocket (bidirectional) since the dashboard is read-only from the server's perspective. SSE is natively supported by browsers and requires no special client library. + +4. **Design token system** — `tokens.css` provides a complete design system (colors, spacing, typography, radii, blur, transitions) enabling consistent theming without a CSS framework. Agent-specific colors are defined as CSS custom properties. + +5. **3D visualization** — Three.js for the Office tab provides spatial intuition about agent fleet topology, going beyond traditional flat dashboards. Includes interactive agent selection, WASD camera controls, auto-rotate, and fleet island pulse animations. + +6. **Path traversal protection** — Content file access validates paths against `CONTENT_DIR` to prevent directory traversal attacks (`_safe_content_path` function). + +7. **Optimistic UI** — The task board updates the UI immediately on user action, then reconciles with the server response. Failed operations roll back the optimistic update. + +8. **BIND change from 127.0.0.1 to 0.0.0.0** — v1.0 bound to localhost only; v1.1 changed to all interfaces. This was likely to allow access from other machines on the network/VPN but has security implications. + +--- + +## Repository Structure + +``` +agent-mission-control/ +├── server.py # Python backend (661 lines) — HTTP + SSE + API + DB +├── app.js # Frontend application (1601 lines) — UI logic + 3D +├── components.js # Reusable UI components (50 lines) +├── index.html # Main dashboard page (423 lines) — inline CSS + CDN scripts +├── tokens.css # Design token system (59 lines) +├── test.html # API diagnostic test page (basic connectivity check) +├── board.db # SQLite task database (auto-created, seeded with 8 tasks) +├── server.log # Runtime logs (currently empty) +├── start.sh # Quick-start script (sudo -n python3 server.py) +├── backups/ # Historical backups (v1.0 → v1.1 iterations, June 21 - July 3) +│ ├── server_v1.0_*.py # 9 backup versions of server.py +│ ├── app_v1.0_*.js # 2 backup versions of app.js +│ ├── app_v1.1_*.js # 2 backup versions of app.js (v1.1) +│ ├── index_v1.0_*.html # 8 backup versions of index.html +│ └── index_v1.1_*.html # 1 backup version of index.html (v1.1) +├── .github/ +│ ├── workflows/codeql.yml # CodeQL security analysis +│ ├── dependabot.yml # Dependency update config (pip, npm, docker, actions) +│ ├── ISSUE_TEMPLATE/bug_report.md +│ ├── ISSUE_TEMPLATE/feature_request.md +│ └── PULL_REQUEST_TEMPLATE.md +├── CODE_OF_CONDUCT.md # Contributor Covenant v2.1 +├── CONTRIBUTING.md # Standard JorahOne contributing guide +├── SECURITY.md # 90-day disclosure policy, report to j1admin@onebyjorah.com +├── LICENSE # MIT, Copyright (c) 2026 Jhonattan L. Jimenez +├── .gitignore # Standard Python/JS/IDE/OS ignores +└── README.md # Branded as "Hermes Mission Control" +``` + +--- + +## Commit History + +| Hash | Date | Message | +|------|------|---------| +| `5c77f83` | 2026-07-05 | audit(agent-mission-control): sanitize paths, emails, and gitignore | +| `2f676a7` | 2026-07-05 | security: redact hardcoded Tailscale IP | +| `ad3c460` | 2026-07-04 | Apply ruff auto-fixes and portfolio standardization | +| `ff0ca78` | 2026-07-04 | docs: align README to J1 brand standard | +| `40e031f` | 2026-07-03 | feat: initial mission control dashboard v1.1 | + +The initial commit was already v1.1, indicating pre-git development (backups show v1.0 iterations starting June 21). The security audit on July 5 redacted a hardcoded Tailscale IP — a positive maturity signal. + +--- + +## Notes + +### Documentation Gaps +- **No `requirements.txt`** — README says `pip install -r requirements.txt` but no such file exists. The server uses only stdlib so this is a documentation issue, not a runtime blocker. +- **No `docs/` directory** — No setup procedures, troubleshooting guides, or integration documentation beyond the README. +- **No test files** — No test framework, no test suite. `test.html` is a basic API connectivity check, not a proper test. + +### Config Drift +- **Dependabot ecosystem mismatch** — Configured for `npm` and `docker` ecosystems, but no `package.json` or `Dockerfile` exists in the repo. These are template vestiges. +- **CodeQL TypeScript target** — CodeQL workflow includes `typescript` in the language matrix, but no TypeScript files exist in the repo. + +### Code Quality Issues +- **Duplicated `serve_static` method** — Defined twice in `server.py` (lines 578 and 590), identical code. Copy-paste artifact. +- **Hardcoded paths** — `HERMES_HOME` defaults to `/home/j1admin/.hermes`, `CONTENT_DIR` to `/root/.hermes/content`. These are environment-specific and may not be portable across deployments. +- **`start.sh` uses `sudo -n`** — Requires passwordless sudo, which is a security consideration. + +### Security Observations +- **No authentication** — The dashboard has no login, auth, or access control. Anyone who can reach port 51763 can read Hermes operational data and modify the task board. +- **Binds `0.0.0.0`** — Exposed to all network interfaces (changed from `127.0.0.1` in v1.0). Relies on network-level security (firewall, VPN) for protection. +- **No HTTPS** — Plain HTTP. All data (including content edits) transmitted in cleartext. +- **Security audit present** — Commit `2f676a7` redacted a hardcoded Tailscale IP, indicating security-conscious development. + +### Backup Timeline +The `backups/` directory reveals the development cadence: +- **June 21, 2026** — 9 server.py + 8 index.html + 2 app.js backups in a single day (v1.0 rapid iteration) +- **June 21, 2026 (later)** — v1.1 snapshots (server, app, index) +- **July 3, 2026** — Pre-3D app.js backup (before Three.js Office tab was added) +- This suggests the dashboard was built in ~2 weeks with intense initial development followed by feature additions (3D Office, content management) From 8d90ecb328c545297facf3275141074f845d8396 Mon Sep 17 00:00:00 2001 From: J1-PIPELINE Date: Tue, 7 Jul 2026 19:25:01 -0400 Subject: [PATCH 9/9] =?UTF-8?q?rename:=20agent-mission-control=20=E2=86=92?= =?UTF-8?q?=20OpsCenter=20(remote=20URL,=20README,=20INTENT)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- INTENT.md | 16 ++++++++-------- README.md | 10 +++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/INTENT.md b/INTENT.md index 19828f4..9eb89e9 100644 --- a/INTENT.md +++ b/INTENT.md @@ -1,6 +1,6 @@ # INTENT.md — J1-PIPELINE Phase -1 (ORACLE) -**Repository:** `OneByJorah/agent-mission-control` +**Repository:** `OneByJorah/OpsCenter` **Analysis Date:** 2026-07-05 **Analyst:** J1-PIPELINE ORACLE (read-only) **Status:** Intent Reconstructed @@ -9,7 +9,7 @@ ## What This System Does -**Hermes Mission Control** is a real-time AI Agent Operations Dashboard — a web-based monitoring, task management, and observability interface for the Hermes AgentOS subagent fleet. It is the operational window into the J1-FLEET agent orchestration system. +**OpsCenter** is a real-time AI Agent Operations Dashboard — a web-based monitoring, task management, and observability interface for the Hermes AgentOS subagent fleet. It is the operational window into the J1-FLEET agent orchestration system. ### Technical Role @@ -69,7 +69,7 @@ Browser (HTML/JS + Three.js) ──SSE──▶ Python HTTP Server ──▶ boa Hermes AgentOS is a multi-agent orchestration system that spawns and manages subagents (orchestrator, analyst, writer, marketer, coder) across platforms (Telegram, Discord). These agents operate autonomously — routing tasks, researching domains, drafting content, writing code, and managing deployments. **There was no operational visibility into what the agent fleet was doing.** -Without Mission Control, operators had to: +Without OpsCenter, operators had to: - SSH into the server and query SQLite databases manually - Parse raw `gateway_state.json` to check agent status - Have no real-time view of task progress or agent health @@ -91,12 +91,12 @@ The repo was built rapidly to fill this gap, with 9+ backup snapshots in the fir ### Ecosystem Fit -`agent-mission-control` is the **observability layer** of the J1-FLEET / Hermes AgentOS ecosystem: +`OpsCenter` is the **observability layer** of the J1-FLEET / Hermes AgentOS ecosystem: ``` J1-FLEET (orchestration infrastructure) └── Hermes AgentOS (agent runtime, gateway, session management) - └── agent-mission-control (operations dashboard) + └── OpsCenter (operations dashboard) ├── gateway_state.json — Gateway process state ├── agent-logs.db — Agent execution logs ├── state.db — Session & token usage @@ -154,7 +154,7 @@ Evidence: ## Repository Structure ``` -agent-mission-control/ +OpsCenter/ ├── server.py # Python backend (661 lines) — HTTP + SSE + API + DB ├── app.js # Frontend application (1601 lines) — UI logic + 3D ├── components.js # Reusable UI components (50 lines) @@ -181,7 +181,7 @@ agent-mission-control/ ├── SECURITY.md # 90-day disclosure policy, report to j1admin@onebyjorah.com ├── LICENSE # MIT, Copyright (c) 2026 Jhonattan L. Jimenez ├── .gitignore # Standard Python/JS/IDE/OS ignores -└── README.md # Branded as "Hermes Mission Control" +└── README.md # Branded as "OpsCenter" ``` --- @@ -190,7 +190,7 @@ agent-mission-control/ | Hash | Date | Message | |------|------|---------| -| `5c77f83` | 2026-07-05 | audit(agent-mission-control): sanitize paths, emails, and gitignore | +| `5c77f83` | 2026-07-05 | audit(OpsCenter): sanitize paths, emails, and gitignore | | `2f676a7` | 2026-07-05 | security: redact hardcoded Tailscale IP | | `ad3c460` | 2026-07-04 | Apply ruff auto-fixes and portfolio standardization | | `ff0ca78` | 2026-07-04 | docs: align README to J1 brand standard | diff --git a/README.md b/README.md index ef5c4a9..5bf67eb 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-

🛸 Hermes Mission Control

+

🛸 OpsCenter

AI Agent Operations Dashboard

Real-time monitoring, task management, and operational visibility for Hermes AgentOS subagents

@@ -33,8 +33,8 @@ ## 🚀 Quick Start ```bash -git clone https://github.com/OneByJorah/agent-mission-control.git -cd agent-mission-control +git clone https://github.com/OneByJorah/OpsCenter.git +cd OpsCenter python3 server.py ``` @@ -61,7 +61,7 @@ Browser (HTML/JS) ──SSE──▶ Python Server ──▶ SQLite ## 📁 Project Structure ``` -agent-mission-control/ +OpsCenter/ ├── server.py # Python backend (WebSocket + API) ├── app.js # Frontend application logic ├── components.js # Reusable UI components @@ -103,6 +103,6 @@ MIT © Jhonattan L. Jimenez ---

-

🛸 Mission control for your AI agent fleet

+

🛸 Operations center for your AI agent fleet

@OneByJorah