{"id":143805,"date":"2026-04-24T13:47:27","date_gmt":"2026-04-24T13:47:27","guid":{"rendered":"\/ca\/tutorials\/how-to-set-up-hermes-agent"},"modified":"2026-04-24T13:47:27","modified_gmt":"2026-04-24T13:47:27","slug":"how-to-set-up-hermes-agent","status":"publish","type":"post","link":"\/ca\/tutorials\/how-to-set-up-hermes-agent","title":{"rendered":"How to set up Hermes Agent with Docker"},"content":{"rendered":"<p>Setting up Hermes Agent means deploying it as a Docker container on a virtual private server (VPS), running the setup wizard to choose an LLM provider, and confirming everything works with a quick chat session.<\/p><p>Hermes Agent is an always-on, self-improving AI agent. It learns from your interactions and builds reusable skills over time. Once it completes a task, it uses that experience to handle similar ones better next time.<\/p><p>You can install Hermes Agent directly on a server using the native curl installer, but Docker works better for VPS deployments. It keeps the agent isolated from your host system, and updating later is as simple as pulling a new image.<\/p><p>Here&rsquo;s how to set up Hermes Agent on a VPS using Docker:<\/p><ol class=\"wp-block-list\">\n<li><strong>Prepare your server<\/strong>. Get a VPS with at least 2 CPU cores and 8 GB of RAM. Use a Linux distribution like Ubuntu.<\/li>\n\n\n\n<li><strong>Deploy the container<\/strong>. Use Hostinger&rsquo;s application catalog for a one-click install, or pull the Docker image manually if you&rsquo;re using another VPS provider.<\/li>\n\n\n\n<li><strong>Configure your LLM provider<\/strong>. Run the setup wizard, select a provider, enter your API key, and choose a model.<\/li>\n\n\n\n<li><strong>Test a CLI conversation<\/strong>. Make sure the agent responds correctly and can use tools before you add anything else.<\/li>\n\n\n\n<li><strong>Add models, connect a gateway, and configure tools<\/strong>. Set up additional LLM providers, add Telegram, Discord, or other platforms, and enable the toolsets you need.<\/li>\n\n\n\n<li><strong>Harden your deployment<\/strong>. Set up Tirith command scanning, configure gateway allowlists, and add firewall rules to secure your setup.<\/li>\n<\/ol><h2 class=\"wp-block-heading\" id=\"h-1-prepare-your-vps-environment\">1. Prepare your VPS environment<\/h2><p>To run<a href=\"\/ca\/tutorials\/what-is-hermes-agent\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/ca\/tutorials\/what-is-hermes-agent\" data-wpel-link=\"internal\" rel=\"follow\">Hermes Agent<\/a>, you need a server with a Linux distribution (Ubuntu works best), plus root access and a stable internet connection.<\/p><p>Aim for a VPS plan with at least <strong>2 CPU cores<\/strong> and <strong>8 GB of RAM<\/strong>. This setup handles Docker isolation and the gateway process comfortably. The container itself uses around 1 GB of RAM, or 2&ndash;4 GB if you enable browser automation.<\/p><p>After purchasing your VPS, connect to it via SSH and update your system packages:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo apt update &amp;&amp; sudo apt upgrade -y<\/pre><p>This helps prevent dependency conflicts when installing Docker and Hermes Agent&rsquo;s components.<\/p><p>You should also secure and<a href=\"\/ca\/tutorials\/how-to-set-up-vps\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/ca\/tutorials\/how-to-set-up-vps\" data-wpel-link=\"internal\" rel=\"follow\">prepare your VPS<\/a>. Create a dedicated user, adjust permissions, and enable public key authentication for safer access.<\/p><h2 class=\"wp-block-heading\" id=\"h-2-deploy-hermes-agent-with-docker\">2. Deploy Hermes Agent with Docker<\/h2><p>Docker packages Hermes Agent and all its dependencies into a single container, so you don&rsquo;t need to install Python or Node.js or manually configure environment variables.<\/p><p>There are a few ways to get it running, depending on your setup.<\/p><p>If you don&rsquo;t have a VPS yet, the fastest and easiest option is to use<a href=\"\/ca\/vps\/docker\/hermes-agent\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/ca\/vps\/docker\/hermes-agent\" data-wpel-link=\"internal\" rel=\"follow\">Hostinger&rsquo;s Hermes Agent<\/a> template. Choose your preferred plan, complete the payment, and the system installs everything automatically.<\/p><p>During setup, you&rsquo;ll create a username and password to access the Hermes Agent web terminal.<\/p><p>Once the installation finishes, you&rsquo;ll land in the <strong>Docker Manager<\/strong>, where Hermes Agent appears as a Docker project. Click <strong>Open<\/strong> next to it, then log in using the credentials you created earlier.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c6ce8\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419372-0.png\" alt=\"The Open button to access the Hermes Agent web terminal via hPanel\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>If you already own a Hostinger VPS, you can deploy Hermes Agent from hPanel. Go to <strong>VPS &rarr; OS &amp; Panel &rarr; Operating System &rarr; Change OS<\/strong>, search for <strong>Hermes Agent<\/strong>, and select it to start the installation.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c6fbd\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419379-1.png\" alt=\"The Hermes Agent Docker application template in hPanel\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>When the installation finishes, go to <strong>Docker Manager &rarr; Projects<\/strong> and open the Hermes Agent web terminal the same way.<\/p><p>If you&rsquo;re using a different VPS provider,<a href=\"\/ca\/tutorials\/how-to-install-docker-on-ubuntu\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/ca\/tutorials\/how-to-install-docker-on-ubuntu\" data-wpel-link=\"internal\" rel=\"follow\">install Docker<\/a> first. Once it&rsquo;s ready, create a data directory for Hermes Agent and open it:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir -p ~\/.hermes\n\ncd ~\/.hermes\n\nThen deploy the Hermes Agent container:\n\ndocker run -it --rm \n\n   -v ~\/.hermes:\/opt\/data \n\n   nousresearch\/hermes-agent setup<\/pre><p>The <strong>-v ~\/.hermes:\/opt\/data<\/strong> flag mounts a host directory to the container&rsquo;s data path. Hermes Agent stores its configuration files, API keys, sessions, skills, and memory in this directory.<\/p><?xml encoding=\"utf-8\" ?><figure class=\"wp-block-image size-large\"><a class=\"hgr-tutorials-cta hgr-tutorials-cta-vps-hosting\" href=\"\/ca\/vps-hosting\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"300\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2023\/02\/VPS-hosting-banner-1024x300.png\" alt=\"\" class=\"wp-image-77934\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><h2 class=\"wp-block-heading\" id=\"h-3-run-the-setup-wizard\">3. Run the setup wizard<\/h2><p>After you access the web terminal or run the container, the Hermes Agent setup wizard launches automatically. It asks how you want to configure the agent.<\/p><p>It offers two paths:<\/p><ul class=\"wp-block-list\">\n<li><strong>Quick setup<\/strong>. Covers the provider, model, and messaging. This is the best option for most users.<\/li>\n\n\n\n<li><strong>Full setup<\/strong>. Adds terminal backend selection, agent behavior settings, tool toggles, and persona configuration.<\/li>\n<\/ul><p>We&rsquo;ll use <strong>Quick setup<\/strong> here. You can configure everything else later, so nothing is locked in. The wizard walks you through these steps:<\/p><ol class=\"wp-block-list\">\n<li><strong>Select an LLM provider<\/strong>. Choose from OpenRouter, Anthropic, OpenAI, Nous Portal, Ollama, or a custom endpoint.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c8dab\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419386-2.png\" alt=\"The Select provider step in the Hermes Agent setup wizard\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol class=\"wp-block-list\">\n<li><strong>Enter your API key<\/strong>. Paste the key for your chosen provider.<\/li>\n\n\n\n<li><strong>Choose a model<\/strong>. Select one from the available models for your chosen provider.<\/li>\n<\/ol><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c909a\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419394-3.png\" alt=\"The available models from DeepSeek in the Hermes Agent setup wizard\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><ol class=\"wp-block-list\">\n<li><strong>Connect a messaging platform<\/strong>. Choose Telegram, Discord, Slack, WhatsApp, or another platform. You can skip this for now and test the CLI chat first.<\/li>\n<\/ol><p>Hermes Agent stores sensitive data, such as API keys, in <strong>~\/.hermes\/.env<\/strong>, while non-sensitive data goes in <strong>~\/.hermes\/config.yaml<\/strong>.<\/p><h2 class=\"wp-block-heading\" id=\"h-4-verify-hermes-agent-is-running\">4. Verify Hermes Agent is running<\/h2><p>To verify that Hermes Agent is running correctly after the setup wizard, start a CLI session and check if the agent can communicate with your selected model:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">hermes<\/pre><p>You should see a welcome banner with the selected model, available tools, and loaded skills.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c93d1\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419402-4.png\" alt=\"The Hermes Agent CLI welcome banner\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Test it with a prompt that triggers a tool, like &ldquo;What&rsquo;s in my current directory?&rdquo; This confirms the agent can respond and execute commands.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c9604\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419407-5.png\" alt=\"The Hermes Agent CLI chat output\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>To exit the session, type <strong>\/exit<\/strong>. Use <strong>hermes <\/strong>to start a new session, or resume the last one with <strong>hermes &ndash;continue<\/strong>.<\/p><p>If the agent returns empty responses or connection errors, the most common cause is an incorrect API key or a misconfigured provider.<\/p><p>Run <strong>hermes setup<\/strong> again to reconfigure your provider and API key. Alternatively, use the <strong>hermes doctor<\/strong> command to scan your entire setup and identify the issue.<\/p><h2 class=\"wp-block-heading\" id=\"h-5-configure-other-models-gateway-and-tools\">5. Configure other models, gateway, and tools<\/h2><p>Once the CLI chat works, you can add another model, connect a messaging platform, and configure the tools your workflow needs.<\/p><p>To add a new LLM provider alongside the one you set up earlier, run <strong>hermes model<\/strong>. It walks you through provider selection and API key entry, just as the setup wizard does.<\/p><p>Once you have multiple providers configured, switch between them during a session with the <strong>\/model<\/strong> command inside the chat.<\/p><p>The messaging gateway lets you talk to Hermes Agent through platforms like Telegram, Discord, Slack, WhatsApp, Signal, or email instead of the CLI.<\/p><p>Use <strong>hermes gateway setup<\/strong> to connect your preferred platform, then follow the on-screen instructions.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c9a5a\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419421-6.png\" alt=\"The Select a platform configuration menu for Hermes Agent\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>After setup, run <strong>hermes gateway run<\/strong> to start the bot. Otherwise, it stays configured but inactive.<\/p><p>Hermes Agent also includes built-in tools like terminal execution, web search, file system access, and image generation. Open the tool list with <strong>hermes tools<\/strong>, then toggle each tool on or off based on your needs.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40c9cae\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419430-7.png\" alt=\"The tools for CLI menu for Hermes Agent\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Note that some tools, like web search and image generation, require their working API keys.<\/p><h2 class=\"wp-block-heading\" id=\"h-6-secure-your-hermes-agent-setup\">6. Secure your Hermes Agent setup<\/h2><p>Securing your Hermes Agent setup covers both the agent&rsquo;s built-in protections and server-level rules that limit outside access.<\/p><p>Hermes Agent comes with a security scanner called Tirith. It checks every terminal command before execution. It&rsquo;s enabled by default and looks for risks like prompt injection, credential exfiltration, and SSH backdoor patterns.<\/p><p>If Tirith flags a command, you&rsquo;ll see a summary of the issue. You can approve or deny it using <strong>\/approve<\/strong> or <strong>\/deny<\/strong>. To control how approvals work, edit <strong>~\/.hermes\/config.yaml<\/strong>:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">approvals:\n\n   mode: manual    # manual | smart | off\n\n   timeout: 60 # seconds to wait for user response (default: 60)<\/pre><ul class=\"wp-block-list\">\n<li><strong>manual<\/strong>. Asks for approval before every potentially risky command.<\/li>\n\n\n\n<li><strong>smart<\/strong>. Approves low-risk operations automatically and prompts only for dangerous ones.<\/li>\n\n\n\n<li><strong>off<\/strong>. Disables all approval checks.<\/li>\n<\/ul><p>The messaging gateway needs protection, too. In the same <strong>config.yaml<\/strong> file, add your user ID to the allowed list for each platform so only you can send commands to the bot.<\/p><p>Here&rsquo;s an example for Telegram:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">gateway:\n\n   telegram:\n\n      allowed_user_ids:\n\n         - 123456789<\/pre><p>Replace <strong>123456789<\/strong> with your actual Telegram user ID. You can get it by messaging <strong>@userinfobot<\/strong> on Telegram.<\/p><p>For other platforms like Slack or WhatsApp, replace <strong>telegram<\/strong> with the platform name and use the correct user ID format for that service.<\/p><p>On the network side, close ports <strong>8642<\/strong> (API server) and <strong>9119<\/strong> (dashboard) if you only use Hermes Agent through chat platforms. The gateway creates outbound connections, so it doesn&rsquo;t need inbound traffic:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sudo ufw deny 8642\n\nsudo ufw deny 9119<\/pre><p>To stay up to date, pull the latest image and replace the running container:<\/p><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker pull nousresearch\/hermes-agent:latest\n\ndocker rm -f hermes\n\ndocker run -d \n\n   --name hermes \n\n   --restart unless-stopped \n\n   -v ~\/.hermes:\/opt\/data \n\n   nousresearch\/hermes-agent gateway run<\/pre><p>All data lives in the mounted <strong>~\/.hermes<\/strong> volume, so nothing gets lost during updates.<\/p><p>For Hostinger VPS users, you can update the container directly from hPanel. In <strong>Docker Manager<\/strong>, find your Hermes Agent project, click the <strong>three-dot<\/strong> menu, and select <strong>Update<\/strong>.<\/p><div class=\"wp-block-image wp-block-image aligncenter size-large\"><figure data-wp-context='{\"imageId\":\"69ebad40ca018\"}' data-wp-interactive=\"core\/image\" class=\"wp-lightbox-container\"><img decoding=\"async\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/www.hostinger.com\/tutorials\/wp-content\/uploads\/sites\/2\/2026\/04\/1777037419439-8.png\" alt=\"The Update menu for the Hermes Agent Docker container in hPanel\"><button class=\"lightbox-trigger\" type=\"button\" aria-haspopup=\"dialog\" aria-label=\"Enlarge\" data-wp-init=\"callbacks.initTriggerButton\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-style--right=\"state.imageButtonRight\" data-wp-style--top=\"state.imageButtonTop\">\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\"><\/path>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure><\/div><p>Also,<a href=\"\/ca\/tutorials\/vps-security\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/ca\/tutorials\/vps-security\" data-wpel-link=\"internal\" rel=\"follow\">secure your VPS<\/a> by turning off root SSH login, configuring fail2ban to block repeated login attempts, and installing a malware scanner to detect threats.<\/p><h2 class=\"wp-block-heading\" id=\"h-common-mistakes-when-setting-up-hermes-agent\">Common mistakes when setting up Hermes Agent<\/h2><p>Most common Hermes Agent setup issues include adding features before verifying the CLI chat, not mounting the data volume, using incorrect API credentials, skipping the gateway allowlist, and running commands directly on the host.<\/p><ul class=\"wp-block-list\">\n<li><strong>Adding features before verifying the CLI chat<\/strong>. Connecting Telegram, enabling cron jobs, or integrating third-party services before confirming the CLI chat works makes troubleshooting harder. If something breaks, you won&rsquo;t know where the problem lies. Test the agent in the CLI first, confirm it responds and can use tools, then add other features.<\/li>\n\n\n\n<li><strong>Not mounting the data volume<\/strong>. If you run the container without <strong>-v ~\/.hermes:\/opt\/data<\/strong>, all data (memory, skills, and configuration) stays inside the container. When the container restarts, everything is lost. Always include the volume flag when running the container manually.<\/li>\n\n\n\n<li><strong>Using incorrect or expired API credentials<\/strong>. If the API key is wrong or expired, the agent can&rsquo;t communicate with the model. Double-check the key in your provider&rsquo;s dashboard or generate a new one. Then run <strong>hermes setup<\/strong> again to update it.<\/li>\n\n\n\n<li><strong>Skipping the gateway allowlist<\/strong>. If you set up a messaging bot without adding <strong>allowed_user_ids<\/strong> in <strong>config.yaml<\/strong>, anyone who finds your bot&rsquo;s username can interact with it. Add your user ID to the allowlist so only you can access it.<\/li>\n\n\n\n<li><strong>Leaving the default terminal backend on a VPS<\/strong>. By default, the agent runs terminal commands directly on your server. On a VPS, this can affect your entire system. Switch to a sandboxed container with <strong>hermes config set terminal.backend docker<\/strong> so commands run in an isolated environment.<\/li>\n<\/ul><h2 class=\"wp-block-heading\" id=\"h-how-to-manage-hermes-agent-after-setup\">How to manage Hermes Agent after setup<\/h2><p>Managing Hermes Agent after setup involves keeping the container and gateway healthy, scheduling recurring tasks with cron, and using the web dashboard to manage your installation.<\/p><ul class=\"wp-block-list\">\n<li><strong>Monitoring logs and gateway health<\/strong>. Container logs are the first place to check when something feels off. Run <strong>docker logs hermes<\/strong> to review recent output, or <strong>docker logs -f hermes<\/strong> to follow logs in real time. For the gateway, use <strong>hermes gateway status<\/strong> to see which platforms are connected, and <strong>hermes gateway restart<\/strong> to reconnect any that dropped.<\/li>\n\n\n\n<li><strong>Scheduling recurring tasks<\/strong>. The built-in cron scheduler runs jobs such as daily summaries, nightly backups, and weekly reports. It sends results to your connected messaging platforms. Set schedules with <strong>hermes cron<\/strong>, and the agent handles execution automatically.<\/li>\n\n\n\n<li><strong>Accessing the web dashboard<\/strong>. The web dashboard is a browser-based interface for managing your Hermes Agent installation. Instead of editing YAML files or running commands via the CLI, you can configure settings, manage API keys, monitor sessions, and schedule cron jobs from a visual interface. Start it with the command below, then open <strong>http:\/\/your-server-ip:9119<\/strong> in your browser:<\/li>\n<\/ul><pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run -d \n\n   --name hermes-dashboard \n\n   --restart unless-stopped \n\n   -v ~\/.hermes:\/opt\/data \n\n   -p 9119:9119 \n\n   nousresearch\/hermes-agent dashboard<\/pre><h2 class=\"wp-block-heading\" id=\"h-what-can-you-do-with-hermes-agent\">What can you do with Hermes Agent?<\/h2><p>With Hermes Agent running on your VPS, you get an always-on AI assistant you can access through your preferred communication channels at any time.<\/p><p>What you do with it depends on your needs &ndash; whether you&rsquo;re a developer, a sysadmin, or someone who wants a personal assistant running on your own server.<\/p><p>For development tasks, you can ask the agent to clone a repository, spin up a staging environment, and run tests, all from a Telegram message while you&rsquo;re away from your desk.<\/p><p>Sysadmins can set up cron jobs using natural language. For example, you can schedule a weekly disk usage report to be delivered to Slack every Monday morning, or have the agent monitor a service and send an alert when it goes down.<\/p><p>For personal use, you can have the agent send a morning briefing with your calendar, top news, and GitHub notifications before your day starts.<\/p><p>If you want more advanced examples, including content production pipelines, deployment automation, and research or data processing workflows, check out the most popular<a href=\"\/ca\/tutorials\/hermes-agent-use-cases\" data-wpel-link=\"internal\" rel=\"follow\"> <\/a><a href=\"\/ca\/tutorials\/hermes-agent-use-cases\" data-wpel-link=\"internal\" rel=\"follow\">Hermes Agent use cases<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Setting up Hermes Agent means deploying it as a Docker container on a virtual private server (VPS), running the setup wizard to choose an LLM provider, and confirming everything works with a quick chat session. Hermes Agent is an always-on, self-improving AI agent. It learns from your interactions and builds reusable skills over time. Once [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"\/ca\/tutorials\/how-to-set-up-hermes-agent\">Read More&#8230;<\/a><\/p>\n","protected":false},"author":411,"featured_media":143806,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"how to set up hermes agent","footnotes":""},"categories":[22699],"tags":[],"class_list":["post-143805","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-vps"],"hreflangs":[{"locale":"en-US","link":"https:\/\/www.hostinger.com\/tutorials\/how-to-set-up-hermes-agent","default":1},{"locale":"en-PH","link":"https:\/\/www.hostinger.com\/ph\/tutorials\/how-to-set-up-hermes-agent","default":0},{"locale":"en-MY","link":"https:\/\/www.hostinger.com\/my\/tutorials\/how-to-set-up-hermes-agent","default":0},{"locale":"en-UK","link":"https:\/\/www.hostinger.com\/uk\/tutorials\/how-to-set-up-hermes-agent","default":0},{"locale":"en-IN","link":"https:\/\/www.hostinger.com\/in\/tutorials\/how-to-set-up-hermes-agent","default":0},{"locale":"en-CA","link":"https:\/\/www.hostinger.com\/ca\/tutorials\/how-to-set-up-hermes-agent","default":0},{"locale":"en-AU","link":"https:\/\/www.hostinger.com\/au\/tutorials\/how-to-set-up-hermes-agent","default":0},{"locale":"en-NG","link":"https:\/\/www.hostinger.com\/ng\/tutorials\/how-to-set-up-hermes-agent","default":0}],"_links":{"self":[{"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/posts\/143805","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/users\/411"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/comments?post=143805"}],"version-history":[{"count":0,"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/posts\/143805\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/media\/143806"}],"wp:attachment":[{"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/media?parent=143805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/categories?post=143805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hostinger.com\/ca\/tutorials\/wp-json\/wp\/v2\/tags?post=143805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}