Deploy a Personal AI Assistant

Deploy a self-hosted AI agent on a VPS, connected to Telegram 24/7.

Introduction

30 Second Summary

Imagine having a personal assistant you can message at any hour. It never sleeps, it remembers your past conversations, and every morning it sends you a custom briefing before you even ask.

In this project, you will deploy Hermes, a personal AI agent framework, on a cloud server and connect it to Telegram. You will design its personality, give it persistent memory, and automate a daily morning briefing delivered straight to your phone.

What You'll Build

You message your AI assistant on Telegram from your phone, it responds with the personality you crafted, and every morning it proactively delivers a briefing to your chat without you asking.

By the end of this project, you'll have:

  • Message your assistant from your phone via Telegram and get back intelligent responses shaped by a custom personality you designed.
  • Close your laptop, leave the house, and still chat with your agent because it runs 24/7 on its own server and survives reboots.
  • Wake up to an automated morning briefing that lands in your Telegram at the time you choose, without you lifting a finger.
  • Secret Mission: Give your agent its own email address via AgentMail MCP, so it can send and receive emails on your behalf.

Are there any prerequisites?

You should be comfortable with basic terminal commands like cd and ssh. You'll also need a DigitalOcean account, a Nous Portal account (free tier is fine), and a Telegram account on your phone.

Provision Your VPS and Install Hermes

Provision Your VPS and Set Up Accounts

Your AI assistant needs a home that runs 24/7. A laptop shuts down when you close it, but a cloud server stays on indefinitely.

In this step, you will provision a VPS (Virtual Private Server) on DigitalOcean, create your Nous Portal account for AI model access, and prepare the server for the Hermes install.

In this step, get ready to:
  • Create a DigitalOcean Droplet running Ubuntu 24.04.
  • Create a Nous Portal account (free tier).
  • SSH into your server, create a non-root user, and configure the firewall.
Create a DigitalOcean Droplet

A Droplet is DigitalOcean's name for a virtual server. You will create one with enough resources to run the Hermes Agent loop, its gateway, and a lightweight database.

First, you need an SSH key on your local machine. This is how you will log in to the server securely without a password.

  • Check whether you already have an SSH key by running this command in your local terminal:
cat ~/.ssh/id_ed25519.pub

✔️ I see a long string starting with ssh-ed25519

Your SSH key is ready. Copy the full output. You will paste it into DigitalOcean in a moment.

ⓧ No such file or directory

You do not have an SSH key yet. Generate one now.

  • Generate a new SSH key by running this command:
ssh-keygen -t ed25519
  • Press Enter to accept the default file location.
  • Press Enter twice to skip setting a passphrase (or set one if you prefer).
  • Copy the public key by running:
cat ~/.ssh/id_ed25519.pub

Copy the full output that starts with ssh-ed25519. You will paste it into DigitalOcean next.

  • Open your browser and go to digitalocean.com.
  • Sign in to your DigitalOcean account.
  • Click the green Create button at the top of the Control Panel.
  • Select Droplets from the menu.

Just created a new DigitalOcean account?

If you just signed up, look for a banner on the home page asking you to confirm your account by entering credit card information. Complete this step before creating a Droplet. Without it, some Droplet creation options (like size and authentication method) won't appear.

On the Droplet creation page, configure the following settings:

  • In Choose Region, select the region closest to you.
  • In Choose an image, under the OS tab, select Ubuntu 24.04 (LTS).
  • In Choose Size, select Basic with Regular CPU.
  • Pick the $12/mo plan (2 GiB RAM / 1 vCPU / 50 GiB SSD).
  • In Choose Authentication Method, select SSH Key.
  • Click Add SSH Key and paste the public key you copied earlier.
  • Select the checkbox next to the SSH Key you just named.
  • Click Create Droplet.

A progress bar shows provisioning status. This takes about 30 seconds. While you wait, create your Nous Portal account in the next substep.

Why SSH keys instead of a password?

SSH keys use cryptographic key pairs to authenticate you. They cannot be brute-forced the way passwords can. DigitalOcean strongly recommends them for server access.

🙋‍♀️ SSH key not accepted?

Make sure you are on the Droplet creation page, not the project overview. The authentication method section appears below the size selector.

If the key fails to paste, ensure there are no extra line breaks in the copied text. The key should be a single unbroken line starting with ssh-ed25519.

ask me for help troubleshooting SSH key setup

Create your Nous Portal account

Nous Portal is the official backend for Hermes Agent. Instead of juggling API keys and credits, you sign in with one OAuth login and get access to 300+ AI models through a single account.

The free tier gives you access to free models with no payment required. If you want paid models like Claude, GPT, and Gemini later, you can upgrade to the Plus plan ($20/mo) which caps your spending with a predictable monthly bill.

  • Open your browser and go to portal.nousresearch.com.
  • Click Sign Up and create an account using your email or an OAuth provider (Google, GitHub).
  • Once signed in, you are on the free tier by default. No payment method or credits are needed to get started.

Why Nous Portal?

Nous Portal is Nous Research's unified subscription gateway. One OAuth login replaces separate API keys for each model provider. The setup command in the next step handles all the wiring for you.

The free tier includes access to free models for evaluation and learning. The Plus tier ($20/mo) includes $22 in monthly credits with rollover, 300+ models (Claude, GPT, Gemini, DeepSeek, and more), and the Tool Gateway (web search, image generation, TTS, browser automation). Your spending is capped at your subscription level.

SSH in, create a non-root user, and configure the firewall

Your Droplet should be ready by now. Head back to DigitalOcean and copy its public IP address from the dashboard.

  • Copy the Droplet's IP address from the DigitalOcean dashboard.
  • Connect to your Droplet by running this command in your local terminal:
ssh root@[[DROPLET_IP="your Droplet's public IP address"]]

What happens on first connection?

The first time you SSH into a new server, your terminal asks you to confirm the host key fingerprint. Type yes and press Enter to continue.

You should now see a terminal prompt like root@your-droplet-name:~#. This means you are logged in as the root user.

Running everything as root is risky because any mistake has full system access. Create a dedicated user instead.

  • Create a new user called hermes by running:
adduser hermes

What does adduser ask me?

You will be prompted to set a password and fill in optional profile fields (full name, room number, etc.). Set a password you can remember. Press Enter to skip the optional fields.

  • Grant the new user sudo privileges by running:
usermod -aG sudo hermes
  • Switch to the new user by running:
su - hermes

Your prompt changes to hermes@your-droplet-name:~$. You are now operating as the hermes user with sudo access.

  • Allow SSH connections through the firewall so you do not lock yourself out:
sudo ufw allow OpenSSH
  • Enable the firewall by running:
sudo ufw --force enable

Why no other ports?

Hermes connects to Telegram using outbound requests. The server does not need any inbound ports open besides SSH. This makes your setup more secure by default.

  • Confirm the firewall is active and the SSH rule is in place by running:
sudo ufw status

You should see output showing Status: active with OpenSSH listed as ALLOW from Anywhere.

Locked out after enabling UFW?

If your SSH session drops immediately after enabling the firewall, the OpenSSH allow rule did not register. Use the DigitalOcean web console (select your Droplet, click Access, then Launch Droplet Console) to log back in and run the commands again.

ask me for help recovering SSH access to my Droplet

Your server is secured and your Nous Portal account is ready. Next up, you will install Hermes and watch your assistant come to life.

Configure OpenRouter and Test the Agent

Install Hermes and Connect Nous Portal

Your Droplet is live, locked down, and your Nous Portal account is ready. Now it is time to install the Hermes Agent framework and connect it to your AI provider.

The Hermes install script handles all dependencies (Python, Node.js, ripgrep, ffmpeg). After installation, a single command connects Hermes to Nous Portal via OAuth — no API keys to copy or paste.

In this step, get ready to:
  • Install Hermes Agent on your Droplet.
  • Connect Hermes to Nous Portal with one command.
  • Test that the agent responds and can use tools.
Install Hermes and connect to Nous Portal

The install script downloads and configures everything Hermes needs to run. After it finishes, you will use the Portal setup command to log in and connect your account.

  • Make sure you are logged into your Droplet as the hermes user. If you disconnected, reconnect by running:
ssh root@[[DROPLET_IP="your Droplet's public IP address"]]
su - hermes
  • Install Hermes Agent using the official install script by running:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

What does the install script do?

The script installs Python 3.11+, Node.js v22, ripgrep, ffmpeg, and sets up a virtual environment. This takes a few minutes. Watch the terminal output scroll by until it finishes.

When dependency installation completes, the script launches an interactive setup wizard. Do not walk away. The next few prompts need your input.

Once the install script finishes, connect Hermes to Nous Portal. This single command opens your browser for OAuth login, sets Nous as your provider, picks a model, and enables the Tool Gateway.

  • Connect Hermes to Nous Portal by running:
hermes setup --portal

What does this command do?

The hermes setup --portal command opens your browser to portal.nousresearch.com for OAuth login. Once you sign in, it stores your credentials at ~/.hermes/auth.json, sets Nous as your provider, and turns on the Tool Gateway (web search, image generation, TTS, browser automation).

If your Droplet does not have a graphical browser, the command prints a URL you can copy and open on your local machine. After signing in, the token is transferred back to the Droplet automatically.

  • When prompted to pick a model, select Laguna S 2.1 from the list. It is a strong free model with good reasoning and tool-use capabilities.
  • Press Enter to confirm and finish the setup.

Which model should I pick?

You can swap your model anytime with /model during a session or by running hermes setup --portal again. Here are solid options:

  • Free tier: Laguna S 2.1 is the recommended default. Strong reasoning and tool-use at no cost.
  • Plus tier ($20/mo): unlocks 300+ models. Use anthropic/claude-sonnet-4.6 for code, google/gemini-3-flash-preview for long context, or openai/gpt-4o-mini for general tasks.

Hermes saves your OAuth credentials to ~/.hermes/auth.json and your configuration to ~/.hermes/config.yaml.

Need to change your settings later?

You can re-run hermes setup --portal anytime to switch models or re-authenticate. You can also type /model mid-session to swap models without leaving the chat.

Verify the installation

The wizard is done and Hermes is installed. Before testing, confirm everything is wired up correctly.

  • Reload your shell so the hermes command is available by running:
source ~/.bashrc
  • Verify the installation by running:
hermes doctor

You may see a warning about missing API keys for full tool access. This is expected. It refers to optional tools (like image generation) that you skipped during setup. Your core tools (AI, search, browser, terminal) are all configured and working.

  • Confirm the version number by running:
hermes --version

You should see a version number printed in your terminal.

hermes: command not found?

If hermes is not recognized after running source ~/.bashrc, try opening a fresh shell session:

exec bash

Then run hermes doctor again. If it still fails, confirm the install script finished without errors by scrolling up in your terminal output.

ask me for help debugging the Hermes install

Test the agent

Now that Hermes is installed and connected to Nous Portal, you can start a session and confirm it responds. You will also verify that Hermes can use its built-in tools to interact with the terminal.

  • Start an interactive Hermes session by running:
hermes
  • Type this prompt and press Enter:
What's in my current directory?

Hermes should use its terminal tool to run a command like ls and return the contents of your home directory. You will see tool usage indicators in the response showing it executed a command.

  • Ask a second question to confirm tool awareness:
What tools do you have available?

Hermes lists its built-in tools. You should see capabilities like web search, terminal, file editing, and more in the response.

  • Exit the session by typing:
/exit

Hermes not responding or showing an error?

If you see an authentication error, your Portal login may have expired. Run hermes setup --portal again to re-authenticate.

If Hermes responds but does not use tools (no terminal command execution), try being more explicit in your prompt. Say "List the files in my current directory using the terminal."

If you see a rate limit error on the free tier, you may have exceeded the free model limits. Check your usage at portal.nousresearch.com or upgrade to the Plus plan for higher rate limits.

help me debug why Hermes is not connecting to Nous Portal

Your agent is alive and connected to Nous Portal with access to 300+ AI models. Next up, you will give it a personality and teach it who you are so it can serve as a true personal assistant.

Define Your Assistant's Identity and Memory

Your agent can respond to prompts and run terminal commands. But right now it has no idea who it is or who you are.

In this step, you will give your assistant a personality and teach it about you. Hermes uses a file called SOUL.md to define its identity, and a persistent memory system to remember details across sessions. Together, these turn a generic chatbot into a personal assistant that knows your preferences and communicates the way you want.

In this step, get ready to:
  • Create a SOUL.md file that defines your assistant's personality.
  • Introduce yourself to Hermes and save key details to memory.
  • Verify that Hermes remembers you across sessions.
Create your SOUL.md

SOUL.md is the personality file that occupies slot 1 in the agent's system prompt. It loads before memory and skills, so everything your assistant says and does is filtered through this identity definition.

Not connected to your Droplet?

If you closed your terminal since the last step, reconnect from your local terminal and switch to your hermes user:

ssh root@[[DROPLET_IP="your Droplet's public IP address"]]
# Once connected, switch to your hermes user
su - hermes
  • Open your SOUL.md file for editing by running this command on your Droplet:
nano ~/.hermes/SOUL.md

See a default template already in the file?

The Hermes installer creates a default SOUL.md during setup. To clear it and start fresh, press Alt+A to start marking text, then Ctrl+End to jump to the end of the file, then Ctrl+K to cut all marked text. You now have a blank file ready for your custom personality definition below.

  • Write a personality definition using this structure as a starting point. Customize every section to match what you want from your assistant:
# Atlas

## Communication Style
- Direct and concise. No filler phrases.
- Use bullet points for lists over 2 items.
- Ask clarifying questions before acting on ambiguous requests.

## Priorities
- Speed and accuracy over politeness padding.
- Proactive suggestions when you notice patterns.
- Always explain trade-offs when presenting options.

## Avoid
- Generic motivational phrases.
- Repeating information I already know.
- Acting on assumptions without confirming first.

## How to Address Me
- Use my first name.
- Keep greetings short (one line max).

What does each section do?

The heading at the top is your assistant's name. Pick anything that feels right.

Communication Style controls how verbose or terse the responses are. Priorities tell the agent what to optimize for. Avoid sets hard boundaries. How to Address Me defines the relationship tone.

You can rename sections, add new ones, or remove any that do not apply. This is your file to shape however you like.

  • Save the file by pressing Ctrl+O, then Enter to confirm the filename.
  • Exit nano by pressing Ctrl+X.
  • Confirm the file was saved by running:
cat ~/.hermes/SOUL.md

You should see your personality definition printed to the terminal.

Seeing an empty file or file not found?

If cat shows nothing, you may have exited nano without saving. Re-run nano ~/.hermes/SOUL.md and make sure to press Ctrl+O before Ctrl+X.

If you see "No such file or directory", check that the ~/.hermes/ directory exists. Run ls ~/.hermes/ to verify. If the directory is missing, Hermes was not installed correctly in Step 1.

Why isn't my SOUL.md file saving in nano?

Tell Hermes about yourself

Your assistant now has a personality, but it does not know anything about you yet. Hermes stores personal details in structured memory files inside ~/.hermes/. Once saved, these persist across every future session.

  • Start a Hermes session by running:
hermes
  • Introduce yourself in natural language. Tell Hermes your name, what you do, your current goals, how you prefer to receive information, and what tools or apps you use daily.

Be specific with your introduction

The more concrete detail you give, the more useful Hermes becomes. Instead of "I like tech", try "I'm a cloud engineer learning Kubernetes, and I prefer bullet-point summaries over long paragraphs."

  • After your introduction, ask Hermes to save it by typing something like: "Save what I just told you to your memory so you remember it next time."
  • Hermes will confirm it has persisted the key details to its memory system.
  • Exit the session by typing /exit.

Where does memory live?

Hermes stores memory as structured files inside ~/.hermes/. Unlike a chat history that disappears when you close the window, this memory loads into every new session automatically. The more you interact, the more context Hermes carries forward.

Verify persistence across sessions

The real test of memory is whether it survives between sessions. A fresh session should recall everything you just shared without you repeating it.

  • Start a new session by running:
hermes
  • Ask: "What do you know about me?"

Hermes should recall your name and the key details you shared in the previous session. You should also notice it responding in the communication style you defined in SOUL.md.

  • Exit with /exit once you have confirmed the recall works.

Hermes doesn't remember you?

If Hermes does not recall your details, the memory save may not have completed. Start a new session, re-introduce yourself, and explicitly ask it to save. Watch for a confirmation message before exiting with /exit.

You can also check that memory files exist by running ls ~/.hermes/ and looking for files beyond config.yaml, .env, and SOUL.md.

Why isn't Hermes remembering what I told it between sessions?

Your assistant now has a distinct identity and knows who you are. Next up, you will connect it to Telegram so you can message it from your phone anytime.

Connect Telegram and Set Up the Gateway

Your assistant now has a personality and memory, but it is stuck in a terminal session on your Droplet. To make it useful in daily life, you need a way to reach it from your phone at any time.

In this step, you will connect Hermes to Telegram so you can message your assistant from anywhere. The Telegram gateway runs as a persistent background service on your Droplet, polling for new messages and responding through your bot.

In this step, get ready to:
  • Create a Telegram bot via @BotFather.
  • Connect Hermes to your bot using the gateway setup wizard.
  • Start the gateway as a persistent systemd service so it runs 24/7.
Create a Telegram bot via BotFather

Every Telegram bot needs an identity registered through @BotFather, Telegram's official bot-management tool. BotFather generates a unique authentication token that lets external services (like Hermes) send and receive messages through your bot.

  • Open Telegram on your phone.
  • Tap the search bar and search for @BotFather.
  • Open the chat with @BotFather (it has a blue verified checkmark).
  • Tap the blue Create a new bot button to start the bot creation flow.
  • When prompted for a name, enter a display name for your assistant (e.g. My Hermes Assistant).
  • When prompted for a username, enter a unique name ending in _bot (e.g. myhermes_bot). Usernames are 5-32 characters and can only include Latin letters, numbers, and underscores.
  • BotFather replies with a Bot Token. Copy this token and save it somewhere safe.

What is a Bot Token?

The Bot Token is a long string (like 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw) that authenticates your bot on the Telegram API. Anyone with this token has full control over the bot, so treat it like a password.

💡 Why can't I change the username later?

Unlike the display name, the bot username is permanent and cannot be changed after creation. Choose it carefully. The display name can be updated anytime through BotFather.

Next, you need your personal Telegram numeric user ID so Hermes knows which account is its owner.

  • In Telegram's search bar, search for @userinfobot.
  • Open the chat and tap Start (or send any message).
  • The bot replies with your numeric user ID (a number like 123456789). Copy this number.

What is a numeric user ID?

Your numeric user ID is a permanent identifier assigned to your Telegram account. It never changes, even if you update your display name or @username.

Hermes uses it to verify that incoming messages are from you (the owner) and not from random strangers who find your bot.

🙋‍♀️ Can't find @userinfobot?

Make sure you are searching with the exact spelling: userinfobot. Try adding the @ symbol before the name if the search does not return results.

Help me find my Telegram user ID

Connect Hermes to Telegram

Now that you have a Bot Token and your numeric user ID, you can link your Hermes agent to Telegram using the gateway setup wizard.

  • Switch back to your SSH session on the Droplet (logged in as the hermes user).
  • Run the gateway setup wizard:
hermes gateway setup

What does this command do?

The hermes gateway setup command launches an interactive wizard that configures which messaging platform Hermes connects to. It saves the gateway configuration into ~/.hermes/config.yaml.

The wizard will prompt you for several pieces of information.

  • When prompted for a messaging platform, select Telegram.
  • When asked how you'd like to create the bot, select 2 for Manual (since you already created your bot via @BotFather).
  • Paste your Bot Token when prompted.
  • Enter your Telegram numeric user ID when prompted (the number you copied from @userinfobot).
  • When asked to use your user ID as the home channel, enter y.
  • When asked to start the gateway now, enter y.
  • When asked to start the gateway automatically on boot as a systemd service, enter y. You will see a warning that the hermes user does not have sudo privileges. This is expected.

What is a home channel?

The home channel tells Hermes where to send proactive messages (like your morning briefing in the next step). Setting your personal account as the home channel means those automated messages come directly to your Telegram chat with the bot.

🙋‍♀️ Gateway setup failing?

Double-check that your Bot Token starts with a number followed by a colon (e.g. 110201543:AAH...). If you accidentally copied extra spaces or characters, go back to @BotFather and use the /token command to regenerate it.

Help me troubleshoot the gateway setup

Start the gateway as a persistent systemd service

The wizard printed two commands you need to run manually to install and start the gateway as a system service. Because the hermes user does not have sudo privileges, you need to run these commands yourself.

  • Install and start the Hermes gateway service by running these commands:
sudo $(which hermes) gateway install --system --run-as-user hermes
sudo $(which hermes) gateway start --system

What do these commands do?

The $(which hermes) part resolves the full path to the hermes binary (e.g. /home/hermes/.local/bin/hermes). This is needed because sudo uses root's PATH, which does not include the directory where Hermes is installed.

The first command installs a systemd service file so the gateway starts automatically on boot. The second command starts the gateway right now.

  • Open Telegram on your phone and find the bot you created (search for its username).
  • Send it a message like Hello, are you there?.
  • You should receive a response from Hermes within a few seconds.

Not getting a response from your bot?

Check the gateway logs to see what is going wrong:

sudo journalctl -u hermes-gateway --no-pager -n 20

Seeing Unauthorized user in the logs?

This means the numeric user ID you entered during setup does not match your actual Telegram account. The logs will show your real ID (e.g. Unauthorized user: 1234567890). Re-run hermes gateway setup and enter the correct ID shown in the logs, then restart the service with sudo $(which hermes) gateway start --system.

If systemd reports an error when you run the install command, use a tmux session as a fallback:

tmux new -s hermes

Inside the tmux session, start the gateway:

hermes gateway start

Then detach from tmux by pressing Ctrl+B followed by D. The gateway keeps running in the background.

If you still get no response, check that your firewall is not blocking outbound HTTPS connections. The Telegram gateway connects outbound to Telegram's servers. No inbound ports are needed.

Help me debug why my bot is not responding

Your personal AI assistant is now reachable from your phone at any time. Next up, you will teach it to deliver an automated daily briefing so it proactively works for you.

Create Your First Automated Cron Job

Your assistant is live on Telegram and remembers who you are. That is already useful for on-demand questions, but the real power of a 24/7 agent is proactive automation.

In this step, you will create a scheduled cron job that runs every morning, searches the web for top tech news and AI developments, and delivers a concise briefing directly to your Telegram. The gateway daemon checks for due jobs every 60 seconds, so once the job is scheduled, it fires without any manual intervention.

In this step, get ready to:
  • Design a morning briefing prompt for your agent.
  • Have Hermes create and schedule the cron job.
  • Verify the job is scheduled and test-run it to confirm Telegram delivery.
Design your morning briefing

Hermes has a built-in cron scheduler that runs inside the gateway process. You describe a task in natural language or use the /cron add command, and Hermes converts it into a scheduled job that fires automatically.

Cron jobs run in fresh agent sessions with no memory of your previous chat. That means the prompt must be completely self-contained.

  • Open a Hermes session. You can do this from your Telegram bot (just message it) or from the CLI on your Droplet by running:
  • Think about what you want in your morning briefing. The outline below covers top tech news and AI developments in 3-5 bullet points.
hermes

Why use the CLI here?

You can send the cron creation prompt from either Telegram or the CLI. The CLI is slightly easier for pasting long prompts, but both work identically. Hermes uses the same cronjob tool internally regardless of where you send the message.

Let Hermes create the cron job

You will now send Hermes a natural language prompt that describes what you want scheduled. Hermes parses your request, creates the cron job internally, and may also create a reusable skill file in ~/.hermes/skills/ to remember how to perform the task.

  • In your Hermes session (CLI or Telegram), send the following prompt:
Set up a cron job that runs every morning at 7:00 AM. It should search the web for top tech news, check if there are any interesting AI developments, and send me a summary on Telegram. Keep it concise, 3-5 bullet points max.

What happens when you send this?

Hermes interprets your request and calls its internal cronjob tool with action="create". It converts your schedule to a standard cron expression (0 7 * * * means minute 0, hour 7, every day).

Hermes stores the job in ~/.hermes/cron/jobs.json and sets telegram as the delivery target. It may also create a SKILL.md file in ~/.hermes/skills/ so it can refine the procedure over time.

  • Wait for Hermes to confirm the job is created. You should see a confirmation message with the job name, schedule, and next run time.

Hermes not creating the job?

If Hermes responds conversationally but does not actually create the job, try the explicit /cron add command instead:

/cron add "0 7 * * *" "Search the web for top tech news and AI developments from the past 24 hours. Summarize the top 3-5 stories in concise bullet points with links. Use a friendly, professional tone." --deliver telegram

This bypasses natural language parsing and creates the job directly. Ask for help: why isn't my Hermes cron job being created?

Verify the cron is scheduled

A scheduled job is only useful if you can confirm it exists and test that delivery works before waiting until tomorrow morning.

  • Ask Hermes to show your scheduled cron jobs by sending:
Show me my scheduled cron jobs
  • Hermes should list at least one job with a schedule of 0 7 * * * and a state of active.

What should I see?

Hermes will display the job ID, name, schedule, delivery target (telegram), and the next scheduled run time. If the state shows [active], the job is armed and ready.

  • Trigger a test run of your morning briefing now by sending:
Run my morning briefing now as a test
  • Switch to your Telegram app on your phone. Within a minute or two, you should receive a summary message from your bot with 3-5 bullet points of tech and AI news.

Why does it take up to a minute?

The gateway scheduler ticks every 60 seconds. When you trigger a test run, the job is queued for the next tick. The agent then searches the web, summarizes results, and delivers output to Telegram.

🙋‍♀️ Not receiving the briefing on Telegram?

Check that your gateway is still running. If you used systemd, verify the service status:

systemctl status hermes-gateway

The service should show active (running). If it stopped, restart it with systemctl start hermes-gateway. Also confirm your Telegram Bot Token is still valid and that your user ID is set as the home channel.

You can also check delivery status by running hermes cron list from the CLI and inspecting the last_status field for any errors.

Ask for help: my Hermes cron job ran but the briefing didn't arrive on Telegram.

  • Optionally, verify that Hermes created a skill file for the morning briefing task by running:
ls ~/.hermes/skills/
  • You should see a directory or file related to your morning briefing. Hermes creates skills from experience so it can refine the procedure over time.

Secret mission

Give Your Agent Its Own Email Address

Your assistant lives on Telegram, but what about email? In this mission, you'll give your agent a dedicated email address using AgentMail. Anyone you authorize can email your assistant and get a response back — no Gmail account or IMAP configuration needed.

Clean Up Your Resources

Clean Up Your Resources

Your Hermes Agent is currently running 24/7 on a DigitalOcean Droplet, and Nous Portal charges against your credit balance for each model call your assistant makes. Decide whether to keep your resources running, pause them to come back later, or delete them entirely.

Cost warning

Your DigitalOcean Droplet costs $12/mo regardless of whether Hermes is actively responding to messages. On the free Nous Portal tier, free models have no charge. On the Plus tier ($20/mo), your spending is capped at your subscription level with rollover credits.

Resources you used:

  • 1 DigitalOcean Droplet (2 GiB RAM / 1 vCPU / 50 GiB SSD): $12/mo.
  • Nous Portal account: free tier ($0/mo) or Plus tier ($20/mo).
  • Telegram Bot created via @BotFather.

Keep everything running

No action needed. Choose this if you are still actively using your Hermes assistant and want it available 24/7.

  • Your assistant stays on and reachable via Telegram at all times.
  • Monitor your spending in the DigitalOcean billing dashboard and the Nous Portal usage page at portal.nousresearch.com.
  • Your Telegram Bot remains active and connected.

Pause - I'll come back to this later

Power off the Droplet to stop Hermes from running. Your files, memory, and skills are preserved on disk so you can resume later.

Powered-off Droplets are still billed

DigitalOcean continues to charge the full $12/mo for your Droplet even when it is powered off, because the disk and reserved resources remain allocated. If you want to stop all charges, use the Delete tab instead.

  • In the DigitalOcean Control Panel, click your Droplet's name to open its detail page.
  • Click the ON/OFF toggle in the top right to power off the Droplet.
  • Hermes stops responding on Telegram immediately. All files in ~/.hermes/ (memory, skills, config) remain intact on disk.
  • To resume later, power the Droplet back on from the same page and Hermes will restart automatically via the systemd service.

Delete - I don't want to use this again

Remove all project resources permanently to stop all charges. Back up anything you want to keep before proceeding.

Back up your memory and skills first

If you want to preserve your assistant's memory and custom skills, SSH into the Droplet and copy ~/.hermes/ to your local machine before destroying it.

scp -r hermes@your-droplet-ip:~/.hermes/ ~/Desktop/hermes-backup/
  • Destroy the DigitalOcean Droplet:
  • In the DigitalOcean Control Panel, click your Droplet's name to open its detail page.
  • Click the Settings tab, then click Destroy.
  • Type the Droplet's name in the confirmation field, then click Destroy to confirm. This is permanent and irreversible.
  • Cancel your Nous Portal subscription (if on Plus tier):
  • Go to portal.nousresearch.com, open your account settings, and downgrade to the free tier or cancel your subscription.
  • Delete your Telegram Bot:
  • Open Telegram and message @BotFather.
  • Send /deletebot and select the bot you created for this project. This permanently deletes the bot and frees its username.

That's a Wrap!

That's a Wrap!

Nice work! You've deployed a personal AI assistant that runs 24/7 on your own cloud server, remembers who you are across sessions, and messages you proactively every morning.

You've learned how to:

  • Provisioned and secured a DigitalOcean Droplet running Ubuntu 24.04, installed Hermes Agent, and connected it to Nous Portal with access to 300+ AI models.
  • Defined a custom assistant identity via SOUL.md and established persistent memory so your agent learns about you over time.
  • Connected a Telegram gateway reachable from your phone and created an automated cron job that delivers a daily morning briefing.
  • Secret Mission: Gave your agent its own email address via AgentMail so you can reach it by email too.

Ready to quiz yourself?