{
  "manifest_version": "1",
  "slug": "hermes-agent",
  "title": "Hermes Agent",
  "headline": "Self-host Hermes Agent",
  "description": "Run Nous Research's Hermes Agent on its own exe.dev VM: a private dashboard, Claude with no API key, scheduled jobs, and Telegram if you like.",
  "category": "ai-agents",
  "tags": [
    "hermes agent",
    "nous research",
    "ai agent",
    "personal ai assistant",
    "telegram bot",
    "self-hosted ai agent",
    "openclaw alternative"
  ],
  "url": "https://exe.dev/deploy/hermes-agent",
  "markdown_url": "https://exe-staging.dev/deploy/hermes-agent.md",
  "upstream": {
    "website": "https://hermes-agent.nousresearch.com",
    "source": "https://github.com/NousResearch/hermes-agent",
    "docs": "https://hermes-agent.nousresearch.com/docs/",
    "license": "MIT"
  },
  "example_vm_name": "my-hermes-agent",
  "time": "10 minutes",
  "stack": [
    {
      "name": "Hermes gateway",
      "detail": "Background service for chat apps and scheduled jobs, managed by systemd",
      "data": "~/.hermes"
    },
    {
      "name": "Hermes dashboard",
      "detail": "Browser chat and settings, behind its own password",
      "port": 9119
    },
    {
      "name": "nginx",
      "detail": "Private dashboard proxy",
      "port": 8000
    },
    {
      "name": "Claude",
      "detail": "Connected through exe.dev's LLM integration"
    }
  ],
  "access": [
    {
      "url": "https://my-hermes-agent.exe.xyz/",
      "who": "private",
      "what": "The Hermes dashboard, behind your exe.dev login and a Hermes password"
    }
  ],
  "inputs": [
    {
      "name": "TELEGRAM_BOT_TOKEN",
      "description": "optional; from @BotFather's `/newbot` in Telegram. Leave it as is to skip Telegram"
    },
    {
      "name": "TELEGRAM_USER_ID",
      "description": "optional; your numeric Telegram user ID (message @userinfobot), so the bot answers only you"
    }
  ],
  "delivers": [
    "A private dashboard at `https://\u003cvm\u003e.exe.xyz/` with browser chat, behind your exe.dev login and a generated Hermes password.",
    "Claude through exe.dev's LLM integration, with no API key to paste, and GPT and open models a `/model` away.",
    "A gateway and dashboard that stay on when you disconnect and start again after a reboot, so scheduled jobs keep running.",
    "Nightly backups of memory, skills, sessions, and settings in `~/backups/hermes`.",
    "If you gave a bot token, a Telegram bot that answers only your account."
  ],
  "deployable": true,
  "deploy": {
    "new_vm_url": "https://exe-staging.dev/new?prompt=TELEGRAM_BOT_TOKEN%3D%3Cfill-this-in%3E%0ATELEGRAM_USER_ID%3D%3Cfill-this-in%3E%0A%0ASet%20up%20Hermes%20Agent%20on%20this%20VM%20by%20following%20the%20exe.dev%20recipe%20at%20https%3A%2F%2Fexe-staging.dev%2Fdeploy%2Fhermes-agent.md%20from%20top%20to%20bottom.%0A%0AThe%20values%20at%20the%20top%20of%20this%20message%20are%20mine%3A%0A-%20TELEGRAM_BOT_TOKEN%3A%20optional%3B%20from%20%40BotFather%27s%20%60%2Fnewbot%60%20in%20Telegram.%20Leave%20it%20as%20is%20to%20skip%20Telegram%0A-%20TELEGRAM_USER_ID%3A%20optional%3B%20your%20numeric%20Telegram%20user%20ID%20%28message%20%40userinfobot%29%2C%20so%20the%20bot%20answers%20only%20you%0AAsk%20me%20for%20any%20that%20still%20say%20%3Cfill-this-in%3E%20before%20you%20need%20them.%0A%0AThe%20recipe%27s%20example%20VM%20name%20is%20my-hermes-agent.%20This%20VM%27s%20name%20is%20the%20output%20of%20%60hostname%60%3A%20use%20it%20wherever%20the%20recipe%20writes%20my-hermes-agent.%20Skip%20the%20step%20that%20creates%20the%20VM%3B%20you%20are%20on%20it.%0A%0AYou%20are%20done%20when%20all%20of%20these%20are%20true.%20Check%20each%20one%20yourself%3A%0A-%20A%20private%20dashboard%20at%20%60https%3A%2F%2F%3Cvm%3E.exe.xyz%2F%60%20with%20browser%20chat%2C%20behind%20your%20exe.dev%20login%20and%20a%20generated%20Hermes%20password.%0A-%20Claude%20through%20exe.dev%27s%20LLM%20integration%2C%20with%20no%20API%20key%20to%20paste%2C%20and%20GPT%20and%20open%20models%20a%20%60%2Fmodel%60%20away.%0A-%20A%20gateway%20and%20dashboard%20that%20stay%20on%20when%20you%20disconnect%20and%20start%20again%20after%20a%20reboot%2C%20so%20scheduled%20jobs%20keep%20running.%0A-%20Nightly%20backups%20of%20memory%2C%20skills%2C%20sessions%2C%20and%20settings%20in%20%60~%2Fbackups%2Fhermes%60.%0A-%20If%20you%20gave%20a%20bot%20token%2C%20a%20Telegram%20bot%20that%20answers%20only%20your%20account.%0A%0ARead%20the%20whole%20recipe%2C%20including%20the%20closed%20details.%20For%20initial%20setup%2C%0Afollow%20%22Install%20by%20hand%22%20first%2C%20skipping%20VM%20creation%20and%20SSH.%20The%0Aopening%20walkthrough%20is%20for%20the%20owner.%20Do%20not%20run%20the%20restore%20or%20update%0Ainstructions.%0ATelegram%20is%20optional.%20If%20TELEGRAM_BOT_TOKEN%20is%20empty%20or%20still%20says%0A%3Cfill-this-in%3E%2C%20skip%20Telegram%20and%20don%27t%20ask%20for%20it.%20Otherwise%20follow%0A%22Connect%20Telegram%20by%20hand%22%20with%20the%20supplied%20token%20and%20user%20ID%20instead%0Aof%20interactive%20reads.%20Ask%20for%20the%20user%20ID%20only%20if%20a%20token%20was%20given.%0AIf%20the%20gateway%20log%20says%20the%20token%20was%20rejected%2C%20unset%20both%20Telegram%0Asettings%2C%20restart%20the%20gateway%2C%20and%20tell%20the%20owner.%20Never%20echo%20the%20bot%0Atoken%20back.%0AKeep%20the%20VM%20private.%20Never%20run%20share%20set-public%2C%20bind%20the%20dashboard%20to%20a%0Anon-loopback%20address%2C%20or%20remove%20its%20password.%20On%20an%20existing%20VM%2C%20ask%0Abefore%20replacing%20configuration%20or%20a%20service%20on%20port%208000.%0AVerify%20a%20model%20reply%2C%20both%20services%20enabled%20and%20active%2C%20Linger%3Dyes%2C%0A%60auth_required%60%20true%20with%20%60basic%60%20through%20nginx%2C%20the%20backup%20timer%2C%20and%20a%0Atested%20archive.%20The%20Chat%20page%20is%20a%20terminal%20over%20a%20WebSocket%3A%20a%20sign-in%0Athrough%20nginx%20is%20check%20enough%3B%20don%27t%20script%20typing%20into%20it.%20Do%20not%0Areboot.%0AFinish%20with%20the%20dashboard%20URL%20and%20the%20Hermes%20username%20and%20password%20from%0A%22Open%20the%20dashboard%22%3B%20this%20conversation%20is%20private%20to%20the%20owner.%0A%0AFinish%20with%20the%20URLs%20I%20should%20open.%0A",
    "terminal": "curl -fsSL https://exe-staging.dev/deploy/hermes-agent/prompt.txt | ssh exe.dev new --prompt=/dev/stdin",
    "prompt": "TELEGRAM_BOT_TOKEN=\u003cfill-this-in\u003e\nTELEGRAM_USER_ID=\u003cfill-this-in\u003e\n\nSet up Hermes Agent on this VM by following the exe.dev recipe at https://exe-staging.dev/deploy/hermes-agent.md from top to bottom.\n\nThe values at the top of this message are mine:\n- TELEGRAM_BOT_TOKEN: optional; from @BotFather's `/newbot` in Telegram. Leave it as is to skip Telegram\n- TELEGRAM_USER_ID: optional; your numeric Telegram user ID (message @userinfobot), so the bot answers only you\nAsk me for any that still say \u003cfill-this-in\u003e before you need them.\n\nThe recipe's example VM name is my-hermes-agent. This VM's name is the output of `hostname`: use it wherever the recipe writes my-hermes-agent. Skip the step that creates the VM; you are on it.\n\nYou are done when all of these are true. Check each one yourself:\n- A private dashboard at `https://\u003cvm\u003e.exe.xyz/` with browser chat, behind your exe.dev login and a generated Hermes password.\n- Claude through exe.dev's LLM integration, with no API key to paste, and GPT and open models a `/model` away.\n- A gateway and dashboard that stay on when you disconnect and start again after a reboot, so scheduled jobs keep running.\n- Nightly backups of memory, skills, sessions, and settings in `~/backups/hermes`.\n- If you gave a bot token, a Telegram bot that answers only your account.\n\nRead the whole recipe, including the closed details. For initial setup,\nfollow \"Install by hand\" first, skipping VM creation and SSH. The\nopening walkthrough is for the owner. Do not run the restore or update\ninstructions.\nTelegram is optional. If TELEGRAM_BOT_TOKEN is empty or still says\n\u003cfill-this-in\u003e, skip Telegram and don't ask for it. Otherwise follow\n\"Connect Telegram by hand\" with the supplied token and user ID instead\nof interactive reads. Ask for the user ID only if a token was given.\nIf the gateway log says the token was rejected, unset both Telegram\nsettings, restart the gateway, and tell the owner. Never echo the bot\ntoken back.\nKeep the VM private. Never run share set-public, bind the dashboard to a\nnon-loopback address, or remove its password. On an existing VM, ask\nbefore replacing configuration or a service on port 8000.\nVerify a model reply, both services enabled and active, Linger=yes,\n`auth_required` true with `basic` through nginx, the backup timer, and a\ntested archive. The Chat page is a terminal over a WebSocket: a sign-in\nthrough nginx is check enough; don't script typing into it. Do not\nreboot.\nFinish with the dashboard URL and the Hermes username and password from\n\"Open the dashboard\"; this conversation is private to the owner.\n\nFinish with the URLs I should open.\n",
    "prompt_url": "https://exe-staging.dev/deploy/hermes-agent/prompt.txt"
  },
  "updated": "2026-10-17",
  "verified": "2026-10-17",
  "related": [
    "openclaw",
    "claude-code",
    "agents",
    "n8n",
    "pi-durable",
    "flue"
  ],
  "alternatives": [
    "OpenClaw"
  ]
}
