Hermes Handbook
A living, bilingual field guide for running Hermes as a reliable personal AI system.
Hermes is documented here as it is installed, used, tested, and improved. English is the default language at hermes.skywirex.com; the Vietnamese edition is available from the language switcher.
What This Handbook Covers
- Provisioning a small Linux server and securing remote access.
- Installing Hermes, connecting models, and choosing the right interface.
- Designing safe gateways, context files, tools, memory, and reusable skills.
- Automating research, development, content, business, and monitoring workflows.
- Recording decisions and turning repeated work into better procedures.
How To Read It
Start with VPS and Installation, then configure Security and Context. The remaining sections are reference material: read them when a workflow requires them and update them with verified notes.
Each topic should eventually contain four things: the purpose, a tested procedure, failure modes, and the date or source of the latest verification. Unverified assumptions belong in notes, not in operational commands.
Documentation Status
This is a working handbook, not a finished product. Empty or short topics are intentional starting points for the learning journey. The Improvement Loop records how knowledge becomes reusable practice.
Contents
π HERMES
β
β£ π VPS
β β£ π Small Linux Server
β β£ π Dedicated User
β β£ π SSH Access
β β£ π Firewall
β β£ π Tailscale
β β π Backups
β
β£ π Installation
β β£ π Official Installer
β β£ π Python and Dependencies
β β£ π Hermes Doctor
β β£ π Updates
β β π Systemd Service
β
β£ π Models
β β£ π Nous Portal
β β£ π OpenAI Codex
β β£ π Anthropic
β β£ π OpenRouter
β β£ π Local Models
β β π On-the-Fly Switching
β
β£ π Interfaces
β β£ π Terminal
β β£ π TUI
β β£ π Desktop Application
β β£ π Web Dashboard
β β£ π IDE via ACP
β β π OpenAI-Compatible API
β
β£ π Gateway
β β£ π Discord
β β£ π Telegram
β β£ π Slack
β β£ π WhatsApp
β β£ π Email
β β π 20+ Platforms
β
β£ π Security
β β£ π Authorized Users
β β£ π DM / Code Pairing
β β£ π Validation of Dangerous Commands
β β£ π Protection of Sensitive Files
β β£ π Docker or SSH Isolation
β β π Blocking of Irreversible Commands
β
β£ π Context
β β£ π SOUL.md
β β£ π AGENTS.md
β β£ π Project Rules
β β π Channel-Specific Context
β
β£ π Tools
β β£ π Terminal
β β£ π File Reading and Writing
β β£ π Web Search
β β£ π Web Browsing
β β£ π Vision
β β£ π Image Generation
β β π Speech Synthesis
β
β£ π Memory
β β£ π User Profile (USER.md)
β β£ π Work Conventions (MEMORY.md)
β β£ π Technical Environment
β β£ π Inter-Session Reminders
β β π Search in Past Conversations (session_search)
β
β£ π Skills
β β£ π Reusable Procedures
β β£ π Community Catalog
β β£ π Slash Commands
β β£ π Custom Skills
β β£ π Improvement During Use
β β π Auto-Archiving (Curator)
β
β£ π Integrations
β β£ π MCP Servers
β β£ π GitHub
β β£ π Databases
β β£ π SaaS Tools
β β£ π Home Assistant
β β π Custom Plugins
β
β£ π Automation
β β£ π Scheduled Tasks
β β£ π Crons with Skills
β β£ π Webhooks
β β£ π Scripts without LLM
β β£ π Multiplatform Delivery
β β π Alerts Only If Necessary
β
β£ π Delegation
β β£ π Isolated Sub-Agents
β β£ π Parallel Work
β β£ π Multi-Agent Board (Kanban)
β β£ π Background Sessions
β β£ π Multi-Step Pipelines
β β π Automatic Result Feedback
β
β£ π Research
β β£ π Automatic Monitoring
β β£ π Multi-Source Search
β β£ π Competitor Analysis
β β£ π Document Synthesis
β β π Sourced Reports
β
β£ π Development
β β£ π Repository Inspection
β β£ π Feature Creation
β β£ π Bug Fixes
β β£ π Tests and Lint
β β£ π Pull Requests
β β π Code Review
β
β£ π Content
β β£ π Idea Research
β β£ π Writing
β β£ π Newsletters
β β£ π Social Networks
β β£ π Images
β β π Audio
β
β£ π Business
β β£ π Email Sorting
β β£ π Meeting Minutes
β β£ π CRM Updates
β β£ π KPI Reports
β β£ π Data Analysis
β β π Document Preparation
β
β£ π Monitoring
β β£ π Server Status
β β£ π Site Changes
β β£ π News
β β£ π Prices
β β£ π Logs
β β π Alerts in Discord
β
β£ π Daily Use
β β£ π Messages from Phone
β β£ π Work While PC Is Off
β β£ π Session Resumption
β β£ π Multiple Profiles (Bots/Personas)
β β£ π Corrections in Progress
β β£ π Results Delivered to the Right Channel
β β π Human Validation Before Sensitive Actions
β
β π Improvement Loop
β£ π Memorize What Matters
β£ π Retrieve Past Decisions
β£ π Turn a Method into a Skill
β£ π Reuse the Skill
β£ π Improve It with Each Use
β π Learning Journey (/journey)
VPS
Hermes works best on a small Linux server that is easy to understand, easy to rebuild, and boring enough to trust.
Small Linux Server
- Pick a minimal Ubuntu or Debian install.
- Keep only the packages the stack actually needs.
- Separate the application layer from persistent data.
Dedicated User
- Run Hermes under a non-root user.
- Lock down sudo to the exact commands that need it.
- Keep shell history and dotfiles auditable.
SSH Access
- Prefer key-based login.
- Disable password login once keys are confirmed.
- Restrict SSH to trusted source networks when possible.
Firewall
- Allow only required inbound ports.
- Default deny for everything else.
- Log changes so the current state is reviewable later.
Tailscale
- Use it for private admin access across devices.
- Prefer it over exposing extra public ports.
Backups
- Back up config, prompts, credential references, and data.
- Test restore at least once before trusting the backup.
Current Notes
- Record provider, region, IP, access path, and restore date.
Small Linux Server
Dedicated User
SSH Access
Firewall
Tailscale
Backups
Installation
Hermes should install cleanly on a fresh machine and remain easy to update.
Official Installer
- Prefer the official install path first.
- Capture the exact command and version used.
- If the install changes, record the delta immediately.
Python and Dependencies
- Pin the Python version that is known good.
- Keep third-party packages minimal.
- Separate runtime dependencies from optional tools.
Hermes Doctor
- Run a local health check after install and after upgrades.
- Treat missing paths, permissions, and config drift as first-class failures.
Updates
- Update in small steps, not in a single blind jump.
- Verify release notes, then update, then rerun checks.
Systemd Service
- Run Hermes as a service when the host should recover after reboot.
- Keep service files simple and explicit.
Current Notes
- Keep one tested install path per environment and document the fallback.
Official Installer
Python and Dependencies
Hermes Doctor
Updates
Systemd Service
Models
Hermes can route requests to remote or local models. The important part is making that decision visible and reversible.
Nous Portal
- Use it as a managed starting point for experimentation.
- Track which prompts and tasks behave best there.
OpenAI Codex
- Use for code-heavy work, refactoring, and structured task completion.
- Record where its behavior is stronger or weaker than other providers.
Anthropic
- Use when long reasoning, careful prose, or safer instruction following matters.
OpenRouter
- Treat it as a routing layer when you want provider flexibility.
- Keep provider names and model names explicit in notes.
Local Models
- Use local models for privacy-sensitive, offline, or cheap tasks.
- Watch quality, latency, and hardware limits.
On-the-Fly Switching
- Switching should depend on task type, not habit.
- Keep the policy simple enough to explain to another operator.
Current Notes
- Write down the exact model used for each verified workflow.
Nous Portal
OpenAI Codex
Anthropic
OpenRouter
Local Models
On-the-Fly Switching
Interfaces
Hermes should feel reachable from the places where work already happens.
Terminal
- Best for automation, scripts, and direct troubleshooting.
- Keep commands short, explicit, and repeatable.
TUI
- Best for scanning state quickly and reducing context switching.
- Prioritize keyboard flow and readable status.
Desktop Application
- Best for long-running sessions and visual management.
- Make sure windows, logs, and actions stay clear.
Web Dashboard
- Best for remote access and broader visibility.
- Keep the dashboard focused on actions, not decoration.
IDE via ACP
- Use when Hermes should assist inside the editor.
- Prefer stable workflows over clever integrations.
OpenAI-Compatible API
- Expose a simple API boundary for external tools and automations.
- Document auth, rate limits, and failure responses.
Current Notes
- Track which interface is the primary one for each workflow.
Terminal
TUI
Desktop Application
Web Dashboard
IDE via ACP
OpenAI-Compatible API
Gateway
Gateway channels move Hermes work between people, devices, and external services.
Discord
- Good for quick alerts, approvals, and conversational ops.
Telegram
- Good for mobile-first control and lightweight task delivery.
Slack
- Good for team workflows and structured channels.
- Good for direct reach when speed matters.
- Good for durable, asynchronous summaries.
20+ Platforms
- Add more channels only when the workflow is stable enough to justify it.
- Prefer fewer integrations that are well maintained over many that are half-working.
Current Notes
- For each channel, document who can send, who can receive, and what triggers a message.
Discord
Telegram
Slack
20+ Platforms
Security
Hermes needs clear security rules before it is trusted with real work.
Authorized Users
- Define who may use the system.
- Separate read-only access from action-bearing access.
DM / Code Pairing
- Use a human verification step for sensitive actions.
- Keep the verification path short and auditable.
Validation of Dangerous Commands
- Stop commands that can delete data, rotate credentials, or break the host unless they are explicitly confirmed.
Protection of Sensitive Files
- Guard secrets, credentials, and private notes.
- Never assume a file is safe just because it is local.
Docker or SSH Isolation
- Use isolation to reduce blast radius.
- Prefer the simplest boundary that still protects the host.
Blocking of Irreversible Commands
- Detect irreversible actions before they run.
- Require a manual override when the risk is real.
Current Notes
- Write down the exact approval rule for each sensitive operation.
Authorized Users
DM / Code Pairing
Validation of Dangerous Commands
Protection of Sensitive Files
Docker or SSH Isolation
Blocking of Irreversible Commands
Context
Context files tell Hermes what to remember and how to behave for a project.
AGENTS.md and SOUL.md
AGENTS.md β when it is read
At session startup, Hermes scans the current working directory in priority order: .hermes.md β AGENTS.override.md β AGENTS.md β CLAUDE.md β .cursorrules β only the first matching file is loaded, and only in the current directory (no recursion up/down at startup).
During the session, when the agent moves into a subdirectory (via read_file, terminal, search_filesβ¦), it lazy-discovers AGENTS.md/CLAUDE.md/.cursorrules in those subdirectories and inserts them into the tool call result (not the original system prompt) β a βhint loadingβ mechanism based on the context being operated on.
Technical details:
- Content is scanned for prompt-injection before loading
- Startup file: configuration-limited, trimmed using head/tail (70% top, 20% bottom) if too long
- Subdirectory file (lazy): hard-capped at 8,000 characters/file
- If
AGENTS.override.mdexists next toAGENTS.mdβ the override is loaded instead (used for personal versions, usually gitignored)
SOUL.md β when it is read
Always loaded independently at the start of each session, going directly into slot #1 of the system prompt (the agent identity slot), independent of working directory:
- From current docs: βSOUL.md is now global to the Hermes instance and is loaded from
HERMES_HOMEonlyβ β meaning it only reads from~/.hermes/SOUL.md, not searched per project cwd like AGENTS.md. - No wrapper text around it β SOUL.md content goes straight into the prompt.
- If the file is empty, contains only whitespace, or cannot be read β fallback to default identity (βYou are Hermes Agent, an intelligent AI assistant created by Nous Researchβ¦β).
- This fallback also applies when
skip_context_filesis set β for example in subagent/delegation context, meaning child subagents do not automatically inherit the parent agentβs SOUL.md.
Quick summary: AGENTS.md = project-specific rules/context (changes based on which directory you run hermes in), SOUL.md = fixed personality/identity of the agent across the entire system, independent of the project being worked on.
Project Rules
- Record the boundaries that should not be broken.
- Keep examples near the rule they support.
Channel-Specific Context
- Give each channel the minimum context it needs.
- Avoid sending everything everywhere.
Current Notes
- Treat context as a maintenance surface, not as a dump file.
SOUL.md
AGENTS.md
Project Rules
Channel-Specific Context
Tools
Tools are the practical capabilities Hermes uses to do the work.
Terminal
- Use the terminal for direct execution and inspection.
File Reading and Writing
- Read only what is needed.
- Write only after confirming the target and the expected shape.
Web Search
- Use search when the answer depends on current public information.
Web Browsing
- Use browsing when the page itself matters.
Vision
- Use image understanding when text is not enough.
Image Generation
- Use generated visuals only when they add real value.
Speech Synthesis
- Use voice output when the task benefits from spoken delivery.
Current Notes
- Keep tool guidance operational, not aspirational.
Terminal
File Reading and Writing
Web Search
Web Browsing
Vision
Image Generation
Speech Synthesis
Memory
Memory keeps Hermes from relearning the same facts every session.
User Profile
- Store durable user preferences that matter later.
Work Conventions
- Record how the user likes tasks done.
Technical Environment
- Capture the current environment once it is verified.
Inter-Session Reminders
- Keep reminders short and actionable.
Search in Past Conversations
- Prefer retrieval over guessing when the information already exists.
Current Notes
- Write memory only when it improves the next decision.
Classification and Memory Management Principles
General Classification Rules
| File | What it contains | What it does not contain |
|---|---|---|
| MEMORY.md | Facts/conventions about the environment (path, IP, commands, storage conventions) β βwhatβ | Multi-step procedures (βhowβ) β put into Skill |
| USER.md | Who the user is, how they prefer to communicate/work (persona, pet peeves, communication style) | Domain-specific knowledge being learned |
| Skill (separate SKILL.md) | Reusable, multi-step repetitive procedures | Single-line static facts (should be in Memory) |
Short rule: Memory = what, User = who/how they like being talked to, Skill = how (procedure). If a task has β₯5 steps and will repeat β split into a separate Skill.
Technical Limits
- MEMORY.md: ~2,200 character limit (~800 tokens), entries separated by
Β§. - Each entry should be dense, specific (real paths/IPs/commands), avoid vague statements like βUser has a projectβ.
- Do not use extra markdown headings within Memory.
- When usage exceeds ~80% β merge duplicate entries on the same topic before hitting the write block.
- Merge rule: multiple entries about the same topic (βproject uses Xβ x3) β merge into one comprehensive entry.
Case Study β MEMORY.md (GBrain)
Original state: 1,517/2,200 characters (~69%), 7 entries, valid Β§ syntax.
What worked well:
- Entries are specific, with real addresses/commands/paths (e.g., MCP server IP, docker exec commands).
- No raw data dumps, no ephemeral info from a single session.
Problems:
- 5/7 entries all talk about βGBrain ingestionβ, occupying most of the capacity β need merging, saving ~30β40%.
- Some entries describe detailed processing procedures (βhowβ) instead of just stating facts β detailed procedures should go into SKILL.md of the relevant skill (e.g.,
gbrain-resolver), Memory only needs one line pointing to that skill. - One entry describes user behavioral/communication expectations (βreport blocker directly instead of stopping silentlyβ) β this belongs in USER.md, not MEMORY.md.
Condensed sample version (reduces old capacity to ~55%):
GBrain: MCP server http://10.10.38.1:7333/mcp. CLI in Docker container `gbrain`; run `docker exec gbrain gbrain extract --stale` (or `docker compose exec -T gbrain ...`) when Docker daemon is accessible.
Β§
GBrain ingestion convention: save user-uploaded files under `sources/` first (raw layer, immutable); derived pages reference `source_slug` in `sources/`, not just cache path `/opt/data/gbrain/...`. For generic filenames (README.md), set slug based on content/project name, keep original name.
Β§
GBrain ingestion trigger ("load knowledge/data into brain"): use mcp_gbrain_* + gbrain-resolver skill β skill handles routing, preserve Compiled Truth + Timeline-append, confirm slug/path saved.
Β§
Updating gbrain-resolver skill: read live `resolver` page via GBrain MCP first, patch skill from there, do not rely on local memory/assumptions.
β Entry about βreport blocker directlyβ moves to USER.md, e.g.:
User expects agent to proceed with GBrain ingestion even when MCP is down (using resolver rules/local fallback) and report blocker directly instead of silently stopping.
Case Study β USER.md
Original state: 502/1,375 characters (~37%), 2 entries, valid Β§ syntax.
USER.md should contain: name/role/timezone, communication preferences, pet peeves, workflow habits, technical skill level β i.e., βwho is the user / how they like being talked toβ, not domain knowledge being learned.
Entry 1 β correct place, good quality: persona βMΓtβ (sharp, blunt, concise, evidence-calibrated) + specific communication rules for Hermes/Buzz troubleshooting (separate transport vs agent/model/tool latency). Good example entry: packs multiple related facts, specific, actionable.
Entry 2 β wrong file: content about learning SMC trading, wants explanations based on stored SMC docs β this is domain-knowledge/task context, not βwho is the userβ. Correct handling:
- Fact about used resources (e.g., SMC book path/slug) β MEMORY.md.
- Reusable procedure (always answer SMC questions using entry/OB/FVG/BOS format based on original docs) β separate Skill (e.g.,
smc-explainer). - Only keep general style preference (likes based on original docs, dislikes generic theory) in USER.md.
Condensed sample version:
User wants Vietnamese replies in the MΓt persona: sharp, blunt, concise by default, evidence-calibrated, filler-free, brief in result reports. For Hermes/Buzz troubleshooting, prefers live gateway/log evidence with clear split between transport issues and agent/model/tool latency.
Β§
When explaining any technical/reference topic (e.g. trading), user prefers answers grounded in the stored reference material, not generic textbook theory.
Detailed SMC content split out:
- MEMORY.md: 1-line fact β βSMC reference book stored at [source]β (if specific path/slug exists).
- Separate Skill (
smc-explainer): procedure to always lookup original docs first when answering SMC questions, using entry/OB/FVG/BOS terminology.
Quick Checklist When Adding New Entry
- Is this a static fact about the environment (path/IP/command/convention)? β Memory
- Is this a β₯5-step procedure that will repeat? β Skill
- Is this a user expectation/communication style? β User
- Is the entry specific and dense with information, or vague?
- Are there entries on the same topic that can be merged?
- Has Memory usage exceeded ~80% β needs cleanup before adding more?
Tip: Check Contradictions with Claude
Use Claude to cross-check for contradictions between MEMORY.md, USER.md, AGENTS.md, and SOUL.md. Run this audit periodically to ensure consistency across Hermes configuration files.
Example prompt for Claude:
Review the files MEMORY.md, USER.md, AGENTS.md, and SOUL.md in the Hermes directory. Identify any contradictions, overlapping content, or inconsistencies between them. Report conflicting statements and suggest resolutions.
User Profile
Work Conventions
Technical Environment
Inter-Session Reminders
Search in Past Conversations
Skills
Skills are reusable procedures that turn repeated work into a reliable asset.
Reusable Procedures
- Break repeatable work into clear steps.
Community Catalog
- Reuse good public procedures when they fit.
Slash Commands
- Map common actions to short commands.
Custom Skills
- Build custom skills only when the pattern is real.
Improvement During Use
- Refine the skill after each verified use.
Auto-Archiving
- Archive stale material so the active set stays usable.
Current Notes
- Treat each skill like code: useful, documented, and testable.
Reusable Procedures
Community Catalog
Slash Commands
Custom Skills
Improvement During Use
Auto-Archiving
Integrations
MCP Servers
Manage model context and tooling through external servers when that helps Hermes fit the environment.
GitHub
Use GitHub for repository workflows, change tracking, and collaboration.
Databases
Keep persistence explicit and well documented.
SaaS Tools
Connect only the services that are actually useful.
Home Assistant
Use home automation when the action is genuinely operational.
Custom Plugins
Add custom plugins only when the integration boundary is clear.
Current Notes
- Log the reason each integration exists.
MCP Servers
GitHub
Databases
SaaS Tools
Home Assistant
Custom Plugins
Automation
Scheduled Tasks
Use scheduled tasks for predictable routines that do not need constant attention.
Crons with Skills
Attach skills to recurring work when the procedure is stable.
Webhooks
Use webhooks for event-driven delivery.
Scripts without LLM
Prefer non-LLM scripts when the job is mechanical.
Multiplatform Delivery
Send the same result to the right place on each platform.
Alerts Only If Necessary
Alert only when a human decision is needed.
Current Notes
- Keep automated actions narrow and reversible.
Scheduled Tasks
Crons with Skills
Webhooks
Scripts without LLM
Multiplatform Delivery
Alerts Only If Necessary
Delegation
Isolated Sub-Agents
Use isolated sub-agents when the task needs separation of concerns.
Parallel Work
Run work in parallel only when the pieces do not interfere.
Multi-Agent Board (Kanban)
Track multi-agent work on a visible board.
Background Sessions
Use background sessions for tasks that continue without attention.
Multi-Step Pipelines
Split long jobs into explicit stages.
Automatic Result Feedback
Feed results back automatically when the pipeline can verify them.
Current Notes
- Delegate only what can be checked later.
Isolated Sub-Agents
Parallel Work
Multi-Agent Board (Kanban)
Background Sessions
Multi-Step Pipelines
Automatic Result Feedback
Research
Automatic Monitoring
Watch sources continuously when changes matter more than manual checks.
Multi-Source Search
Cross-check more than one source before trusting a result.
Competitor Analysis
Compare how other systems solve the same problem.
Document Synthesis
Turn multiple sources into one usable note.
Sourced Reports
Write reports with clear source trails.
Current Notes
- Keep research artifacts traceable.
Automatic Monitoring
Multi-Source Search
Competitor Analysis
Document Synthesis
Sourced Reports
Development
Repository Inspection
Inspect the repository before changing it.
Feature Creation
Add features in the smallest shape that works.
Bug Fixes
Fix the bug at the narrowest useful boundary.
Tests and Lint
Use tests and lint to confirm behavior.
Pull Requests
Keep pull requests focused and reviewable.
Code Review
Review for risk, regression, and drift.
Current Notes
- Change only what the evidence supports.
Repository Inspection
Feature Creation
Bug Fixes
Tests and Lint
Pull Requests
Code Review
Content
Idea Research
Collect raw ideas before writing.
Writing
Write for clarity and reuse.
Newsletters
Package updates for periodic delivery.
Social Networks
Tailor short-form content to the channel.
Images
Use images when they add real explanatory value.
Audio
Use audio when spoken output is the right format.
Current Notes
- Keep content workflow grounded in actual output.
Idea Research
Writing
Newsletters
Social Networks
Images
Audio
Business
Email Sorting
Sort mail by priority and actionability.
Meeting Minutes
Capture decisions, not transcript noise.
CRM Updates
Keep CRM state accurate enough to trust.
KPI Reports
Make metrics easy to scan.
Data Analysis
Use analysis to answer concrete decisions.
Document Preparation
Prepare documents that can be handed off without extra interpretation.
Current Notes
- Prefer reusable reporting patterns.
Email Sorting
Meeting Minutes
CRM Updates
KPI Reports
Data Analysis
Document Preparation
Monitoring
Server Status
Track whether Hermes is up, reachable, and healthy.
Site Changes
Watch for external changes that matter.
News
Monitor news when it affects decisions.
Prices
Track prices only for signals that change action.
Logs
Use logs to explain observed behavior.
Alerts in Discord
Send alerts to Discord when the event is worth interrupting for.
Current Notes
- Monitoring should be selective, not noisy.
Server Status
Site Changes
News
Prices
Logs
Alerts in Discord
Daily Use
Messages from Phone
Accept messages from the phone when the workstation is unavailable.
Work While PC Is Off
Leave tasks that can continue without the main computer.
Session Resumption
Resume work with enough context to continue safely.
Multiple Profiles (Bots/Personas)
Separate profiles when the work context differs materially.
Corrections in Progress
Track corrections while they are still open.
Results Delivered to the Right Channel
Send results to the channel where they will be seen.
Human Validation Before Sensitive Actions
Require human approval before risky actions.
Current Notes
- Keep daily operations easy to resume.
Messages from Phone
Work While PC Is Off
Session Resumption
Multiple Profiles
Corrections in Progress
Results Delivered to the Right Channel
Human Validation Before Sensitive Actions
Metadata
Memorize What Matters
Store only the decisions that will matter again.
Retrieve Past Decisions
Find prior decisions before making new ones.
Turn a Method into a Skill
Convert repeated procedures into a stable skill.
Reuse the Skill
Reuse the skill when the pattern repeats.
Improve It with Each Use
Update the skill after real use.
Learning Journey
Keep the learning journey visible and current.
Current Notes
- Improvement is an operational habit, not a slogan.