Stack: Cloudflare Tunnel → Caddy (TLS) → VONDER (Python HTTP proxy on :10276) → 30+ backends on localhost. DNS: graphlab.info → 177.7.52.251. Tailscale mesh for private access.
Ingress channels:
| Channel | Endpoint | Scope |
|---|---|---|
| Cloudflare Tunnel | graphlab.info :443 | Public HTTPS |
| Tailscale | 100.67.155.37 | Private mesh |
| Direct SSH | :22, :4422 | Public (fail2ban protected) |
| Cloudflare WARP | warp-svc | Zero Trust client |
| Tor | :9050 | SOCKS5 proxy |
| Port | Bind | Process | Purpose |
|---|---|---|---|
| 22 | 0.0.0.0 | sshd | SSH primary |
| 4422 | 0.0.0.0 | sshd | SSH secondary |
| 25 | 127.0.0.1 | postfix | SMTP (local only) |
| 80,443 | * | caddy | HTTP/HTTPS |
| 445 | 0.0.0.0 | smbd | ⚠ Samba |
| 631 | 0.0.0.0 | cupsd | ⚠ CUPS |
| 2019 | 127.0.0.1 | caddy | Caddy admin API |
| 3001 | 127.0.0.1 | node (kuma) | Uptime Kuma |
| 3210 | 127.0.0.1 | node | Hermes Dashboard WS |
| 3978 | 0.0.0.0 | hermes | Teams messaging |
| 8642 | 127.0.0.1 | hermes (mirror) | Mirror gateway API |
| 8643 | 0.0.0.0 | hermes (omega) | Omega gateway |
| 8644 | 0.0.0.0 | hermes (mirror) | Mirror gateway |
| 8765 | 127.0.0.1 | python3 | Signs365 Pricing |
| 8777 | 0.0.0.0 | python | WeatherBet Dashboard |
| 8787 | 127.0.0.1 | python | Hermes WebUI |
| 8795 | 127.0.0.1 | uvicorn | Sentinel Backend |
| 8888 | 127.0.0.1 | docker-proxy | SearXNG |
| 9050 | 127.0.0.1 | tor | Tor SOCKS5 |
| 9119 | 0.0.0.0 | hermes | Dashboard (exposed) |
| 9300 | 127.0.0.1 | python3 | Trading Dashboard |
| 10272 | 127.0.0.1 | node | Hermes Control (HCI) |
| 10273 | 127.0.0.1 | docker-proxy | Vaultwarden |
| 10276 | 127.0.0.1 | python3 | VONDER API |
| 10278 | 127.0.0.1 | python3 | Vectorizer V3 |
| 10281 | 127.0.0.1 | python3 | Print Broker |
| 10282 | 127.0.0.1 | python3 | Aether Engine |
| 10284 | 127.0.0.1 | node | UA Dashboard |
| 10285 | 127.0.0.1 | ttyd | Web Terminal |
| 10286 | 100.67.155.37 | filebrowser | ⚠ Tailscale only |
| 10289 | 127.0.0.1 | uvicorn | TIB3 |
| 10290 | 127.0.0.1 | vibe-trading | Vibe Trading API |
| 10291 | 127.0.0.1 | uvicorn | TIB4 |
| 10292 | 127.0.0.1 | python3 | Zak Quote |
| 10293 | 127.0.0.1 | python3 | Aether CLI |
| 10294 | 127.0.0.1 | python3 | Options Finder |
| 10295 | 127.0.0.1 | python3 | Options Tracker |
| 10296 | 127.0.0.1 | python | Mind Atlas |
| 10297 | 0.0.0.0 | python | AI Investment Firm |
| 10299 | 127.0.0.1 | python3 | Sibylle VP Webhook |
| 10300 | 127.0.0.1 | uvicorn | Argus Scanner |
| Service | Port | Type | Status |
|---|---|---|---|
| caddy | 80,443 | Edge | Active |
| vonder-api | 10276 | Proxy | Active |
| aether | 10282 | Trading | Active |
| aether-cli | 10293 | Trading | Active |
| weatherbot | — | Trading | Active |
| weatherbet-api | 8777 | Trading | Active |
| tib3 | 10289 | Trading | Active |
| tib4 | 10291 | Trading | Active |
| vibe-trading | 10290 | Trading | Active |
| options-finder | 10294 | Trading | Active |
| options-tracker | 10295 | Trading | Active |
| argus | 10300 | Trading | Active |
| ai-investment-firm | 10297 | Trading | Active |
| dashboard | 9300 | Trading | Active |
| sentinel-backend | 8795 | Intel | Active |
| vectorizer-v3 | 10278 | Tool | Active |
| print-broker-quote | 10281 | Business | Active |
| zak-quote | 10292 | Business | Active |
| signs365-pricing | 8765 | Business | Active |
| hermes-control | 10272 | Hermes | Active |
| hermes-dashboard | 9119 | Hermes | Active |
| hermes-webui | 8787 | Hermes | Active |
| hermes-mod | — | Hermes | Active |
| ua-dashboard | 10284 | Tool | Active |
| ttyd | 10285 | Tool | Active |
| filebrowser | 10286 | Tool | Tailscale only |
| sibylle-vp-webhook | 10299 | Tool | Active |
| Container | Image | Port | Status |
|---|---|---|---|
| searxng | searxng/searxng:latest | 127.0.0.1:8888→8080 | Up 4w |
| uptime-kuma | louislam/uptime-kuma:1 | host network | Up 4w healthy |
| vaultwarden | vaultwarden/server:latest | 127.0.0.1:10273→80 | Up 4w healthy |
| discovery-dashboard-api-1 | discovery-dashboard-api | — | Up 4w healthy |
| ID | Name | Schedule | Last Run | Status |
|---|---|---|---|---|
| 3b48f1ee54e4 | GBrain Daily Digest | 1:00 AM daily | Jul 5 01:04 | ok |
| ec1c08faae7f | Weekly Review | Sun 6 PM | Jul 5 18:06 | ok |
| 8b2e2a8360e2 | Topic News Digest | 8:00 AM daily | Jul 5 08:03 | ok |
| c48eee3706a5 | Daily Paper Trading | 6:00 AM daily | Jul 5 06:01 | ok |
| 24ab38f15a6b | Morning Selfie | 6:00 AM daily | Jul 5 06:01 | ok |
| af58486841b0 | Vault Brain Pipeline | 2:00 AM daily | Jul 5 02:01 | ok |
| 14feb8a1dd33 | Mind Atlas Insights | 3:00 AM daily | Jul 5 03:00 | error |
| c51ffcd037a9 | Mind Atlas Auto-Feed | 2:30 AM daily | Jul 5 02:30 | error |
| 5d820b47ae24 | Vault Content Ingest | Hourly | Jul 5 23:00 | ok |
| 685a615b7d50 | Argus OHLC Snapshot | 4:30 PM weekdays | Jul 3 16:30 | ok |
| c1fb956bc718 | Morning Brief Pipeline | 9:00 AM weekdays | Jul 3 10:26 | ok |
| Schedule | Job |
|---|---|
| 0 1 * * * | GBrain Dream (gbrain-dream-wrapper.sh) |
| 0 9 * * 0 | GBrain Doctor (weekly) |
| 0 * * * * | Hermes Sentinel hourly check |
| 5 1 * * * | Hermes Veritas |
| */5 * * * * | DuckDNS update |
| 0 4 * * * | Restic backup |
| 30 16 * * 1-5 | Argus OHLC snapshot |
| 0 9 * * 1-5 | Argus brief |
| 0 10 * * 1-5 | Argus resolve |
| Domain | Target | Notes |
|---|---|---|
| graphlab.info | → :10276 (VONDER) | Primary, all VONDER routes below |
| graphlab.info/terminal/* | → :10285 (ttyd) | Web terminal |
| graphlab.info/signworks/* | → static /root/signworks.html | Static page |
| graphlab.info/argus/* | → :10300 (Argus) | Scanner API |
| graphlab.info/files/* | 403 Forbidden | Blocked by Caddy |
| vault.graphlab.info | → :10273 (Vaultwarden) | DNS: ❌ no A record |
| Path Prefix | Target | Backend | Health |
|---|---|---|---|
| /socket.io, /dashboard, /api/badge/*, etc. | :3001 | Uptime Kuma | ✓ |
| /weatherbet/api/* | :8777 | WeatherBet | ✓ |
| /files | :10286 | File Browser | ✗ Tailscale-only bind |
| /sentinel/* | :8795 | Sentinel | ✓ |
| /mind-atlas/* | :10296 | Mind Atlas | ✓ |
| /vault | static | Vault Brain | ✓ static |
| /webhooks | :8644 | Mirror Gateway | ✓ |
| /api/plugins/*, /api/* | :9119 | Hermes Dashboard | ✓ |
| /vectorize, /static/, /output/* | :10278 | Vectorizer V3 | ✓ |
| /vibe | :10290 | Vibe Trading | ✓ |
| /firm | :10297 | AI Investment Firm | ✓ |
| /uptime | :3001 | Uptime Kuma | ✓ |
| /quote | :10281 | Print Broker | ✓ |
| /zak | :10292 | Zak Quote | ✓ |
| /signs365 | :8765 | Signs365 | ✓ |
| /webui | :8787 | Hermes WebUI | ✓ |
| /options2 | :10294 | Options Finder | ✓ |
| /brief/accuracy | :10295 | Options Tracker | ✓ |
| /trading-dash | :9300 | Trading Dashboard | ✓ |
| /trading | :10282 | Aether | ✓ |
| /cli | :10293 | Aether CLI | ✓ |
| /dashboard | :9119 | Hermes Dashboard | ✓ |
| /tib3 | :10289 | TIB3 | ✓ |
| /tib4 | :10291 | TIB4 | ✓ |
| /understand | :10284 | UA Dashboard | ✓ |
| /hci/* | :10272 | HCI | ✓ |
| /sibylle/vp-webhook | :10299 | VP Webhook | ✓ |
UFW is not active. This VPS has no firewall. Ports 22, 4422, 445, 631, 3978, 8643, 8644, 8777, 9119, and 10297 are all bound to 0.0.0.0 with no iptables protection. fail2ban is running for SSH but that's it.
vibe-trading.service (lines 14-15) and weatherbot.service (lines 11-12) have API keys, proxy credentials, and private keys hardcoded in Environment= directives. These are visible to anyone with systemctl cat or /proc/PID/environ access.
The Cloudflare tunnel JWT is visible in systemctl cat cloudflared as a command-line argument. Should be in an environment file.
166 MB free, 681 MB available of 7.8 GB. 7.1 GB in use. The box is running at the edge. Six MCP server processes (3x mem0, 3x weatherbot) consuming ~175 MB each. A memory spike from any service could trigger OOM kills.
78 GB used of 96 GB. Journal is 1 GB. Docker build cache is 2.74 GB reclaimable. 14 Docker volumes, only 3 active (28 MB reclaimable). GBrain models, research vault, and multiple venvs are the likely space hogs.
Three pairs of mem0 + weatherbot MCP servers are running (6 processes total). PIDs: 1380463/69 (Jul 4), 1549230/34 (Jul 5), 1961912/16 (Jul 5). This is classic dashboard+gateway duplication — each restart spawns new MCP children without killing old ones. Causes Chroma SQLite lock contention and wastes ~500 MB RAM.
mind-atlas-insights.sh and mind-atlas-auto-feed.py are referenced by cron jobs (14feb8a1dd33 and c51ffcd037a9) but the script files don't exist at the expected paths. These have been failing since at least Jul 3.
Samba (:445) and CUPS (:631) are bound to 0.0.0.0 on a headless VPS with no firewall. Neither service has any business being on a public server. CUPS is from a snap package (snap.cups.cupsd).
Hermes Agent v0.18.0 (2026.7.1) is 169 commits behind upstream. Bug fixes, new features, and security patches are missing.
VONDER proxies /files to 127.0.0.1:10286, but FileBrowser is only bound to 100.67.155.37:10286 (Tailscale IP). Requests through VONDER will fail — the service works on Tailscale directly but not through the public proxy. Caddy also blocks /files with 403 anyway.
Both the system crontab (30 16 * * 1-5) and a Hermes cron job (685a615b7d50) run the Argus snapshot at 4:30 PM weekdays. Redundant execution.
/root/.hermes/profiles/omega/sessions.db is 0 bytes — last modified June 25. Session history is not being persisted. session_search may return incomplete results.
/opt/argus/data/scout-catalyst.json last updated July 3 at 08:35. Two days stale. Catalyst data feeds into the morning brief scoring.
All 7 artifact checks returned MISSING today. This is expected for Sunday — no trading day, no brief, no scan, no resolutions. The morning brief cron (c1fb956bc718) last ran Friday Jul 3 (ok). Verify on Monday.
Reclaimable with docker builder prune. Low risk, easy win for disk space.
Vacuum with journalctl --vacuum-size=500M. Standard hygiene.
Key changes from current state:
EnvironmentFile=apt purge samba cups or at minimum bind to 127.0.0.1hermes update for 169 commits of fixesEnvironment= to /etc/hermes/secrets.env (chmod 600)systemctl disable --now smbd; apt purge sambasnap remove cupsps aux | grep mcp_server | wc -l should be 2 or 4 (not 6)docker builder prune -af — reclaims ~2.74 GBjournalctl --vacuum-size=500M — reclaims ~500 MBdocker volume prunehermes update — catch up 169 commitscurl -I https://graphlab.info/ → 200curl -I https://graphlab.info/trading/ → 200 (Aether)curl -I https://graphlab.info/dashboard/ → 200 (Hermes Dash)ufw status verbose
graph TD
INTERNET((INTERNET)) --> CF[Cloudflare Tunnel]
INTERNET --> TAIL[Tailscale Mesh]
INTERNET --> SSH[SSH :22/:4422]
CF --> CADDY[Caddy :80/:443]
CADDY --> VONDER[VONDER :10276]
CADDY --> TERM[ttyd :10285]
CADDY --> ARGUS[Argus :10300]
CADDY --> VW[Vaultwarden :10273]
TAIL --> FB[FileBrowser :10286]
TAIL --> ALL[All localhost services]
VONDER --> KUMA[Uptime Kuma :3001]
VONDER --> AETHER[Aether :10282]
VONDER --> AETHERCLI[Aether CLI :10293]
VONDER --> TIB3[TIB3 :10289]
VONDER --> TIB4[TIB4 :10291]
VONDER --> VIBE[Vibe Trading :10290]
VONDER --> OPTS[Options Finder :10294]
VONDER --> TRACK[Options Tracker :10295]
VONDER --> DASH[Trading Dash :9300]
VONDER --> SENTINEL[Sentinel :8795]
VONDER --> MATLAS[Mind Atlas :10296]
VONDER --> VEC[Vectorizer V3 :10278]
VONDER --> PRINT[Print Broker :10281]
VONDER --> ZAK[Zak Quote :10292]
VONDER --> S365[Signs365 :8765]
VONDER --> FIRM[AI Invest Firm :10297]
VONDER --> WB[WeatherBet :8777]
VONDER --> HCI[HCI :10272]
VONDER --> HDASH[Hermes Dash :9119]
VONDER --> HWEBUI[Hermes WebUI :8787]
VONDER --> UA[UA Dashboard :10284]
VONDER --> MIRROR[Mirror GW :8644]
VONDER --> VPWEB[VP Webhook :10299]
DOCKER[Docker] --> SEARX[SearXNG :8888]
DOCKER --> KUMA2[Uptime Kuma]
DOCKER --> VW2[Vaultwarden]
DOCKER --> DISC[Discovery Dashboard]
OMEGAGW[Omega Gateway :8643] --> MCP1[mem0 MCP x3⚠️]
OMEGAGW --> MCP2[weatherbot MCP x3⚠️]
MIRGW[Mirror Gateway :8644] --> MCP3[mem0 MCP]
style AETHER fill:#0d1525,stroke:#2ecc71
style KUMA fill:#0d1525,stroke:#3b6cf4
style VONDER fill:#0d1525,stroke:#d4af37
style MCP1 fill:#0d1525,stroke:#e74c3c
style MCP2 fill:#0d1525,stroke:#e74c3c
graph TD
INTERNET((INTERNET)) --> CF[Cloudflare Tunnel]
INTERNET --> TAIL[Private Tailscale Mesh]
CF --> CADDY[Caddy :80/:443]
CADDY --> VONDER[VONDER :10276]
TAIL --> HCI[HCI :10272]
TAIL --> HDASH[Hermes Dash :9119]
VONDER --> SERVICES[30+ Backend Services]
SERVICES --> AETHER[Aether :10282]
SERVICES --> TIB3[TIB3 :10289]
SERVICES --> TIB4[TIB4 :10291]
SERVICES --> VIBE[Vibe Trading :10290]
SERVICES --> DASH[Trading Dash :9300]
SERVICES --> OPTS[Options :10294/95]
SERVICES --> ARGUS[Argus :10300]
SERVICES --> PRINT[Print/Zak :10281/92]
SERVICES --> S365[Signs365 :8765]
SERVICES --> SENTINEL[Sentinel :8795]
SERVICES --> VEC[Vectorizer V3 :10278]
SERVICES --> MATLAS[Mind Atlas :10296]
SERVICES --> FIRM[AI Invest Firm :10297]
SERVICES --> UA[UA Dashboard :10284]
SERVICES --> WEBUI[Hermes WebUI :8787]
OMEGAGW[Omega Gateway :8643] --> MCP[MCP Servers x1 pair✅]
MIRGW[Mirror Gateway :8644] --> MCPM[Mirror MCP]
DOCKER[Docker] --> SEARX[SearXNG]
DOCKER --> KUMA[Uptime Kuma]
DOCKER --> VW[Vaultwarden]
FIREWALL[UFW Enabled] -.-> INTERNET
style FIREWALL fill:#0d1525,stroke:#2ecc71
style AETHER fill:#0d1525,stroke:#2ecc71
style MCP fill:#0d1525,stroke:#2ecc71
| Property | Value |
|---|---|
| Hostname | srv1632845 |
| Public IP | 177.7.52.251 |
| Tailscale IP | 100.67.155.37 |
| OS | Ubuntu (Linux 6.8.0-124-generic) |
| Uptime | 30 days |
| Load | 0.98 / 0.58 / 0.35 |
| Disk | 78 GB / 96 GB (81%) |
| Memory | 7.1 GB / 7.8 GB (166 MB free) |
| Hermes | v0.18.0 · 169 commits behind |
| Profiles | 12 (omega, trader, mirror, scout, coder, scribe, sentinel, curator, librarian, reviewer, architect, prompter) |
| Skills | 112 |
| Model | deepseek-v4-pro @ api.deepseek.com/v1 |
| Gateway | Omega :8643 (0.0.0.0), Mirror :8644 (0.0.0.0) |
| Domain | Record | Status |
|---|---|---|
| graphlab.info | A → 177.7.52.251 | ✓ |
| vault.graphlab.info | — no record — | ✗ Missing |
| Node | IP | OS | Status |
|---|---|---|---|
| srv1632845 (VPS) | 100.67.155.37 | linux | active |
| iphone172 | 100.95.151.47 | iOS | active |
| kyles-macbook-air | 100.101.43.38 | macOS | offline 28d |
| kyles-macbook-pro | 100.124.7.102 | macOS | idle, tx 600 rx 440 |
Ω Audit 2026-07-05 · Generated by Sibylle (deepseek-v4-pro) · graphlab.info/audit-2026-07-05.html