DigitalOcean
Droplet · hermes-conductor
2 vCPU · 7.8 GB RAM · +4 GB swap · 160 GB
Docker · private loopback
Hermes
brain / orchestrator
gateway
Ollama
embeddings + basic reasoning
:11434
Qdrant
vector memory
:6333
OpenRouter
Opus 4.8 / GPT-5.5 · frontier reasoning
off-box · paid · per-token
Private loopback / private network only — nothing exposed publicly
Usage & cost
OpenRouter spend and droplet efficiency at a glance. Panels render live once Hermes pushes a metrics snapshot — until then each is flagged no data connected.
OpenRouter usage API — needs a cron pull into a cost snapshot
DigitalOcean monitoring API or node_exporter — not yet wired
DigitalOcean monitoring API or node_exporter — not yet wired
Qdrant memory_stats MCP tool — pending semantic_recall rollout
| Service | Role | Port | Cost | Rollout | Status |
|---|---|---|---|---|---|
| Hermes | Brain / orchestrator — cron, remits, skills, drafts and routes work ~136 MB RAM (5 GB cap) | gateway | $0 · self-hosted | Live | Healthy |
| Ollama | Local inference — embeddings + basic reasoning (triage, classification) nomic-embed-text · 768-dim | 11434 | $0 · local CPU | Live | Healthy |
| Qdrant | Vector memory store — semantic recall with payload filters magnet_memory · int8 · on-disk · /qdrant/storage volume | 6333 | $0 · self-hosted | Live | Healthy |
| kb MCP | Memory read/write tools — semantic_recall, memory_upsert, memory_stats Wire semantic_recall into Hermes (rollout step 6) | — | $0 | Planned | Unknown |
| OpenRouter | Frontier reasoning only — Opus 4.8 / GPT-5.5 / Sonnet Only outbound paid dependency | — | Paid · per-token | Live | Healthy |
Name
hermes-conductor
Provider
DigitalOcean · nyc3
Compute
2 vCPU · 7.8 GB RAM · +4 GB swap
Disk
160 GB
DigitalOcean · nyc3
Docker · private loopback
Persisted volume
External
RAM
7.8 GB (~6 GB free)
Fine for all 3 containers with Qdrant quantization
vCPU
2
Real bottleneck — throttle embedding backfill, run overnight
Disk
160 GB
Ample — Qdrant volume + models are small
- ·Local-first, $0/token by default — only frontier reasoning is paid
- ·Nothing public — all local services bind to loopback / private network
- ·The box is the source of truth — this repo is a one-way backup
- ·Draft, never send — no autonomous client-facing actions
- ·Persistence is explicit — Qdrant on a mounted volume
Write path
- 01Source doc (email, transcript, Notion, deliverable)
- 02Chunk → SHA-256 dedup
- 03Ollama /api/embed (768-dim)
- 04Qdrant upsert (vector + account_id, source_type, date, hash)
Read path
- 01semantic_recall(query, account_id?, source_type?, since?)
- 02Ollama embeds query → 768-dim vector
- 03Qdrant search + payload pre-filter
- 04Top-k chunks into Hermes context
Payload pre-filtering scopes recall precisely — e.g. pricing objections from a specific client in the last 90 days. Write path runs throttled overnight; CPU is the constraint, not RAM.
- 1Repo repurposed as one-way backup + human docsLive
- 2Daily backup live — hermes_backup.sh → backup/In progress
- 3Add swap (4 GB) to the dropletPlanned
- 4Stand up Qdrant + Ollama containers (localhost, volume mounted)Live
- 5Backfill memory — throttled, overnight, SHA-256 dedupPlanned
- 6Wire semantic_recall MCP tool into HermesPlanned
- 7Webhook-driven incremental ingestionPlanned
- 8Reasoning router — basic to Ollama, frontier on OpenRouterPlanned
| Connector | Path | Role | Status |
|---|---|---|---|
| Notion | MCPOAuth | Workspace CRUD — accounts, delivery DBs, documentation | Unknown |
| Linear | OAuthOAuth 2.1 PKCE | Primary intake — issues, agent sessions, project tracking | Unknown |
| Slack | MCPUser token | Internal comms — search, read, post to allowed channels | Unknown |
| GitHub | MCPPAT | Org-wide repos — issues, PRs, code, Actions | Unknown |
| Google Workspace | MixedOAuth + service account | Gmail, Calendar, Drive, Docs, Sheets — gavin@ primary Multi-mailbox delegation stays API-direct | Unknown |
| Harvest | MCPAPI key | Time tracking, projects, estimates, AR/invoices | Unknown |
| Plaid | MCPApp creds + Link tokens | Bank balances, transactions, cash digest | Unknown |
| Apollo | APIAPI key | Prospecting — contacts, sequences, outreach | Unknown |
| Figma | MCPPAT | Design files, nodes, comments | Unknown |
| Google Analytics 4 | MCPService account | Property reports, realtime, funnel analysis | Unknown |
| Google Search Console | MCPService account | Search analytics, index inspection, sitemaps | Unknown |
| Google Tag Manager | MCPService account | Container audit — reads autonomous, writes draft-gated | Unknown |
| Vercel | OAuthOAuth 2.1 PKCE | Deployments, projects, runtime logs | Unknown |
| Webflow | OAuthOAuth 2.1 PKCE | CMS, pages, sites, assets, publish | Unknown |
| Perplexity | APIAPI key | Grounded web research — Sonar models | Unknown |
Skills catalog
109 skills Hermes can load, generated from backup/skills/**/SKILL.md frontmatter.
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Used by
Agent hierarchy
3 Heads (triage) · 6 Managers (orchestrators) · 17 specialists = 26 remits. Source: backup/org/AGENTS.md.
Operations
Acquisition
Delivery
| Job | Schedule | Last run | State | Status |
|---|---|---|---|---|
Apollo Reply Monitor — · agent · deliver: slack:C055VM59NBX | 0 9-17/2 * * 1-5 | Jul 6, 2026, 1:02 PM | paused | Healthy |
Apollo Sequences Daily Load — · agent · deliver: slack:C055VM59NBX | 0 9 * * 1-5 | Jul 6, 2026, 5:09 AM | paused | Healthy |
Daily Prospecting Engine Auto Prospector · agent · deliver: slack:C055VM59NBX | 0 8 * * 1-5 | Jul 6, 2026, 4:19 AM | paused | Healthy |
finance-ar-chase Finance Manager · agent · deliver: slack | 0 12 * * 1 | Jul 6, 2026, 8:04 AM | paused | Healthy |
finance-ar-sync Finance Manager · agent · deliver: slack | 0 12 * * 1 | Jul 6, 2026, 8:12 AM | paused | Healthy |
finance-client-ingest Finance Manager · agent · deliver: slack | 0 12 * * 1 | Jul 6, 2026, 8:08 AM | paused | Healthy |
finance-monthly-close Finance Manager · agent · deliver: slack | 0 12 * * 1 | Jul 6, 2026, 8:05 AM | paused | Healthy |
finance-payments-sweep Finance Manager · agent · deliver: slack | 0 12 * * 1 | Jul 6, 2026, 8:04 AM | paused | Healthy |
finance-plaid-sync Plaid_sync.sh · script · deliver: local | 0 10 * * 1,3,5 | Jul 6, 2026, 6:00 AM | paused | Healthy |
finance-weekly-sweep Finance Manager · agent · deliver: slack | 0 12 * * 1 | Jul 6, 2026, 8:03 AM | paused | Healthy |
linear-agent-session-gate Linear_agent_session.sh · script · deliver: local Script not found: /root/.hermes/scripts/linear_agent_session.sh | every 5m | Jul 6, 2026, 7:05 PM | paused | Down |
pm-full-run Project Manager · agent · deliver: slack | 0 11 * * 1-5 | Jul 3, 2026, 7:09 AM | paused | Healthy |
pm-intraday-pulse Project Manager · agent · deliver: slack | 0 18 * * 1-5 | Jun 30, 2026, 2:00 PM | paused | Healthy |
Sales Manager - Afternoon Pulse Sales Manager · agent · deliver: slack:C055VM59NBX | 0 18 * * 1-5 | Jul 2, 2026, 2:01 PM | paused | Healthy |
Sales Manager - Morning Sweep Sales Manager · agent · deliver: slack:C055VM59NBX | 30 11 * * 1-5 | Jul 3, 2026, 7:40 AM | paused | Healthy |
Touchpoint Cadence Engine Touchpoint Cadence · agent · deliver: slack:C055VM59NBX | 0 12 * * 1-5 | Jul 6, 2026, 8:06 AM | paused | Healthy |
Weekly Sequence Performance Review Auto Prospector · agent · deliver: slack:C055VM59NBX | 0 9 * * 1 | Jul 6, 2026, 5:18 AM | paused | Healthy |
01
Intake
Linear delegation (Slack later)
02
Triage
Head classifies the domain — assign only
03
Orchestrate
Domain Manager runs its Process
04
Specialise
Manager invokes specialists internally
05
Surface
Drafted Linear issue or email, human review
The hard gate
A human never invokes a specialist directly. Every request is triaged to a domain, handed to that domain's Manager, and only the Manager reaches for specialists.
Draft, never send
Every output is a reviewable artifact — a Linear issue assigned to a human, or a client email drafted to team@magnet.co. External send is never autonomous.