{
  "version": "2026-08-02",
  "status": "published",
  "publicationApproved": true,
  "canonicalSource": "index.md",
  "slug": "hermes-gbrain",
  "title": "Three doors into one local agent",
  "description": "How three separate Hermes conversation surfaces use one deliberately bounded local GBrain memory layer, with model routing, privacy boundaries, and a public-safe architecture.",
  "thesis": "The useful part of the setup is not three interfaces; it is one bounded memory layer shared across separate conversations while the runtime stays private.",
  "url": "https://tanveerriaz.me/blog/hermes-gbrain",
  "dateCaptured": "2026-08-02",
  "author": {
    "name": "Tanveer Riaz",
    "url": "https://tanveerriaz.me/"
  },
  "representations": {
    "html": "https://tanveerriaz.me/blog/hermes-gbrain",
    "markdown": "https://tanveerriaz.me/blog/hermes-gbrain/index.md",
    "json": "https://tanveerriaz.me/blog/hermes-gbrain/index.json"
  },
  "image": {
    "src": "https://tanveerriaz.me/assets/blog/hermes-gbrain-architecture.png",
    "width": 1672,
    "height": 941,
    "alt": "Public-safe architecture diagram showing Terminal, Telegram, and WhatsApp flowing into the Hermes runtime, which connects through bounded recall and capture to GBrain and a local knowledge store.",
    "provenance": "Generated architecture illustration based on Tanveer's supplied conceptual layout; original operational diagram excluded.",
    "disclosure": "Generated image; operational details removed; visible frame reviewed on 2 August 2026.",
    "animation": "A responsive cobalt dot overlay traces the channel-to-runtime and runtime-to-memory routes; hidden when reduced motion is preferred."
  },
  "architecture": {
    "interactionSurfaces": [
      {
        "name": "Terminal",
        "role": "Primary local working surface with private remote continuity through Ghostty, Herdr, and Tailscale."
      },
      {
        "name": "Telegram",
        "role": "Lightweight messaging session for asking, checking, or triggering work away from the laptop."
      },
      {
        "name": "WhatsApp",
        "role": "Dedicated messaging channel into the same agent harness."
      }
    ],
    "runtime": {
      "name": "Hermes",
      "role": "Owns the separate conversations, tool loop, model routing, permissions, and fallbacks."
    },
    "memory": {
      "name": "GBrain",
      "role": "Provides bounded pre-turn recall, completed-turn capture, deliberate search, page reading, graph traversal, and durable remembering.",
      "sourceOfTruth": "Local knowledge pages and graph relationships stored through PGLite.",
      "verifiedRetrieval": [
        "keyword",
        "graph-aware"
      ],
      "nextExperiment": "Vector retrieval after an embedding provider is explicitly configured and verified.",
      "failureBehavior": "Hermes continues without recalled context when GBrain is unavailable."
    }
  },
  "modelRouting": [
    {
      "route": "default",
      "model": "DeepSeek V4 Flash",
      "job": "Everyday text-and-tool loop",
      "statusAsOf": "2026-08-02"
    },
    {
      "route": "multimodal-and-fallback",
      "model": "Gemini 3.6 Flash",
      "job": "Images, documents, audio, video, PDFs, and fallback",
      "statusAsOf": "2026-08-02"
    },
    {
      "route": "escalation",
      "model": "DeepSeek V4 Pro",
      "job": "Hard reasoning after the default route struggles",
      "statusAsOf": "2026-08-02"
    }
  ],
  "sections": [
    {
      "id": "question",
      "title": "The question",
      "summary": "Can one local agent have several front doors while keeping context and sensitive parts on controlled hardware?"
    },
    {
      "id": "three-front-doors",
      "title": "Three front doors",
      "summary": "Terminal, Telegram, and WhatsApp are separate conversations connected through the same Hermes harness."
    },
    {
      "id": "memory-layer",
      "title": "The memory layer",
      "summary": "GBrain converts selected conversation context into durable, searchable knowledge and fails open when unavailable."
    },
    {
      "id": "architecture",
      "title": "The architecture, simplified",
      "summary": "The public explanation preserves system ownership and causality while removing operational coordinates."
    },
    {
      "id": "model-route",
      "title": "The model is a route, not the architecture",
      "summary": "DeepSeek V4 Flash is the default text/tool route, Gemini 3.6 Flash handles multimodal work and fallback, and V4 Pro is an escalation route."
    },
    {
      "id": "correction",
      "title": "The correction",
      "summary": "A private operational diagram and public conceptual diagram serve different purposes; transparency does not require publishing an access map."
    },
    {
      "id": "thinking",
      "title": "What changed in my thinking",
      "summary": "The important design problem is continuity with boundaries, not the number of available channels."
    },
    {
      "id": "start",
      "title": "Where you can begin",
      "summary": "Begin with one agent, two interfaces, one repeatable memory question, explicit capture rules, and evidence-backed recall."
    }
  ],
  "sources": [
    {
      "title": "Hermes Agent",
      "url": "https://github.com/NousResearch/hermes-agent"
    },
    {
      "title": "GBrain",
      "url": "https://github.com/garrytan/gbrain"
    },
    {
      "title": "DeepSeek models and pricing",
      "url": "https://api-docs.deepseek.com/quick_start/pricing/"
    },
    {
      "title": "Gemini 3.6 Flash",
      "url": "https://ai.google.dev/gemini-api/docs/models/gemini-3.6-flash"
    }
  ],
  "privacy": {
    "publicScope": "Personal experiment; not an employer deployment.",
    "keptPrivate": [
      "local paths",
      "ports",
      "hostnames",
      "service identifiers",
      "credential handling details",
      "operation allowlists",
      "database paths",
      "private conversations",
      "original operational diagram"
    ]
  },
  "agentGuidance": [
    "Use index.md as the canonical long-form article.",
    "Treat model choices as a dated 2 August 2026 working snapshot, not a permanent best-model claim.",
    "Do not infer private infrastructure details, credentials, memory contents, employer deployment, or current location.",
    "Publication is approved for the website."
  ]
}
