Self-hosted personal agent — open alternative to Claude Desktop stack
Prev: MCP & A2A. Next: Multi-agent & KG.
| Layer | Closed (Anthropic) | Open (self-host) |
|---|---|---|
| Model | Claude API | Hermes via Ollama/vLLM |
| Runtime | Claude Desktop / API app | OpenClaw agent OS |
| Tools | MCP servers | Skills + MCP compatible |
| Skills | Claude Skills | ClawHub marketplace |
| Channels | Web, API | Telegram, Discord, CLI, Web |
Open-weight models fine-tuned for function calling and agentic chat. Solves: base Llama/Mistral often emit invalid tool JSON.
| Model | Base | Use |
|---|---|---|
| Hermes 3 | Llama 3.1 | General agent + tools |
| Hermes 2 | Mistral / Yi | Lighter self-host |
# Ollama
ollama pull hermes3
ollama run hermes3
# OpenAI-compatible endpoint for OpenClaw / LangChain
# OPENAI_BASE_URL=http://localhost:11434/v1
# OPENAI_API_KEY=ollama
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
r = client.chat.completions.create(
model="hermes3",
messages=[{"role":"user","content":"What's 2+2?"}],
tools=[{"type":"function","function":{"name":"calc","parameters":{"type":"object","properties":{"x":{"type":"number"}}}}}],
)
print(r.choices[0].message)
Same 5 tool-calling prompts on Llama-3.1-base vs Hermes-3 — count valid JSON tool_calls. Hermes should win on schema adherence.
Always-on assistant runtime. Not a library you import — a daemon that connects channels to model + skills.
| Part | Function |
|---|---|
| Gateway | Receives messages from Telegram/Discord/etc. |
| Heartbeat | Scheduled wake (cron-like): daily briefings, reminders |
| Agent loop | Hermes (or other model) plans → tools → reply |
| Skill loader | Installs ClawHub packages (prompt + tools + config) |
| Memory | Session + optional vector memory |
# ~/.openclaw/config.yaml — field names vary by version; check docs
model:
provider: openai_compatible
base_url: http://127.0.0.1:11434/v1
api_key: ollama
name: hermes3
channels:
telegram:
enabled: true
bot_token: "${TELEGRAM_BOT_TOKEN}"
skills:
- name: calendar-assistant
source: clawhub
- name: web-search
source: clawhub
heartbeat:
- cron: "0 8 * * *"
prompt: "Summarize today's calendar and unread priority emails"
# Terminal 1 — model
ollama pull hermes3
ollama serve
# Terminal 2 — OpenClaw (example; use official install command)
# curl -fsSL https://openclaw.ai/install.sh | bash
openclaw init
openclaw skills search calendar
openclaw skills install calendar-assistant
openclaw channel add telegram
openclaw start
A Skill is a packaged capability — not just a prompt, not just a tool.
# Conceptual skill package structure
my-skill/
skill.yaml # name, description, triggers
system_prompt.md # behavior instructions
tools/ # optional scripts the agent can run
fetch_calendar.py
config.schema.json # user-configurable options
Same idea as Claude Skills: user installs "Calendar Assistant" — agent knows when and how to use it.
Community skill marketplace for OpenClaw. Browse, install, publish — like npm for agent behaviors.
| LangGraph | OpenClaw | |
|---|---|---|
| Build for | SaaS product backend | Personal / team assistant |
| Customize via | Python graph code | Skills + YAML config |
| Channels | You implement API | Built-in messengers |
| Model | Any via LangChain | Optimized for local Hermes |