← Back

Connect, delegate, grow

Under the hood it's a simple loop that plans, uses tools, checks the result, and keeps going — then remembers what worked.

The agent loop

Every turn follows the same cycle. The agent reads the request and its memory, makes a plan, calls a tool, observes what came back, and repeats until the job is genuinely done — not just answered.

user ──▶ context + memory ──▶ plan │ ▼ pick a tool ──▶ run ──▶ observe │ │ └──── not done? ◀─────┘ │ ▼ reply ──▶ curate memory ──▶ maybe save a skill

Memory & skills

Nothing is thrown away that matters. The agent curates a lasting memory, and when it solves something non-trivial it writes a skill — a reusable procedure it can call next time instead of re-deriving the answer. The more you use it, the deeper both get.

One gateway, every channel

A single process dispatches the same agent across Telegram, Discord, Slack, WhatsApp, Signal, email and the terminal. Because memory is shared, a conversation is continuous no matter where you pick it up.

Get started

Bring a model key, connect a channel, and run. A typical setup looks like:

# 1 · install (UV, Python 3.11+) uv sync # 2 · configure a model + a channel cp .env.example .env # set MODEL_PROVIDER, MODEL_API_KEY, TELEGRAM_TOKEN … # 3 · run the gateway (all channels at once) uv run hermesansem # or just talk in the terminal uv run hermesansem chat

Prefer serverless? Deploy the same thing to Modal or Daytona for always-on persistence.

Chat with the agent Look inside