{
  "source_file": "0930",
  "source_platform": "Ghost",
  "author": "Avi Chawla / Daily Dose of Data Science",
  "title_listed": "Hermes Agent Masterclass",
  "keywords": "",
  "domain": "大模型算法",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://www.dailydoseofds.com/p/hermes-agent-masterclass/",
  "publish_date": "2026-07-01",
  "corpus_stage": "",
  "notes": "",
  "id": "793e650d463e",
  "collected_at": "2026-10-02T13:46:51",
  "title": "Hermes Agent Masterclass",
  "body_markdown": "May 14, 2026\nAgents\nHermes Agent Masterclass\nEverything you need to understand and customize Hermes Agent.\nAvi Chawla\n👉\nHermes Agent crossed 90,000 GitHub stars in two months. Developers are quietly building personal AI agents that learn their workflow, remember their context, and run 24/7.\nHermes Agent takes a fundamentally different approach which makes it much more practically useful over OpenClaw. It ships with a learning loop that:\nRemembers across sessions\nWrites its own reusable skills\nPrunes them in the background\nAnd validates them offline through an evolutionary engine called GEPA\nNo other open-source agent combines all of them. Not even OpenClaw.\nThis guide covers how this learning loop works, what each memory layer does, and how to configure everything from scratch.\nBy the end, you’ll have three fully isolated agents running on your machine: a programmer (who uses your Claude code), a deep researcher, and a designer, each with its own personality, memory, skills, and Telegram bot.\nCheck this out:\nThe whole setup takes minutes, and everything here is reproducible on your own hardware.\nContinue reading to learn more or you can also watch this video:\nWhat Hermes is, and what makes it architecturally different\nThe one-line pitch: an agent that gets better the longer you use it.\nWhat makes that real is that three usually separate capabilities sit in one framework: runtime skill learning, persistent multi-layer memory, and an optional weight-training pipeline. No other open-source agent ships all three.\nThe closest comparison in the open ecosystem is OpenClaw. Both are persistent, messaging-friendly, but they make opposite architectural choices.\nA clean framing from the Kilo blog captures it: “Hermes packages a gateway around a learning agent. OpenClaw packages an agent around a messaging gateway.”\nHow it’s built\nBefore the learning loop makes sense, you need a basic picture of how Hermes is structured.\nEverything flows through a single AIAgent class in a\nrun_agent.py\nscript. CLI, messaging gateway, batch runner, IDE integration: they’re all entry points into the same core agent.\nThis is what makes the platform-agnostic story actually work.\nThe core loop is ReAct-style and synchronous. Build the system prompt, check if compression is needed, make an interruptible API call, execute any tool calls, and loop again.\nA few key details:\nThe agent can run commands in six different places. Local terminal, Docker, SSH, Modal, Daytona, or Singularity. Same code, just a config change. Move execution from your laptop to a cloud GPU server without touching anything else.\nIt works with almost any model. A translation layer routes any provider through one of three API formats. That’s why you can swap from Claude to GPT to Gemini to local Ollama with one command and nothing breaks.\nThe agent has a hard cap of 90 turns per task. Without it, an agent stuck in a loop (retrying a failing API, re-reading the same file) would silently burn through your credits. Subagents share the same budget, so a runaway delegation chain can’t sneak past either.\nBefore memory\nBefore we get to memory and self-evolving skills, there’s a layer that sits above both: identity.\nMemory is what the agent knows. Skills are how it does things. But neither tells you who it is when it shows up. Without an identity layer, every agent feels like the same agent wearing different hats.\nHermes solves this with a single file: SOUL.md.\nIt lives at\n~/.hermes/SOUL.md\nand occupies slot #1 in the system prompt, before anything else loads. It defines the agent’s personality, tone, communication style, and hard limits.\n# SOUL.md\n\nYou are a pragmatic senior engineer with strong taste.\nYou optimize for truth, clarity, and usefulness\nover politeness theater.\nSOUL.md\nis hand-authored and static. You write it once, tweak it over time, and it stays consistent across every project and every session. If the file is missing, Hermes falls back to a built-in default identity.\nWhy does this matter for the self-improving story? Because everything that follows (the memory the agent writes, the skills it creates, the way it consolidates knowledge) happens through the lens of this identity.\nSOUL.md\nis the fixed frame. Memory and skills are the moving parts inside it.\nThe memory system\nHermes doesn’t have a single “memory.” It has three layers, each designed for a different purpose.\nTier 1: Two tiny Markdown files.\nAt the core are two files stored on disk:\nMEMORY.md\n(2,200 chars max) holds the agent’s notes about your environment, project conventions, tool quirks, and lessons learned.\nUSER.md\n(1,375 chars max) holds your profile: name, communication preferences, skill level, and things to avoid.\nBoth are injected into the system prompt as a frozen snapshot when a session starts. If the agent writes a new memory entry mid-session, that change persists to disk immediately but won’t appear in the system prompt until the next session.\nWhen memory fills up (~80% capacity, shown as a percentage in the system prompt header), the agent has to consolidate.\nIt merges related entries into denser, more information-packed versions, so that only useful information survives.\nTier 2: Full-text session search.\nEvery conversation (CLI and messaging) is stored in SQLite with full-text search. The agent can search weeks of past conversations from this.\nThe tradeoff is clear: Tier 1 is always in context but tiny. Tier 2 has unlimited capacity but requires an active search plus LLM summarization.\nCritical facts live in memory. Everything else is searchable on demand.\nTier 3: External memory providers (8 plugins).\nFor deeper persistent memory, Hermes ships with\n8 pluggable providers\nthat run alongside built-in memory (never replacing it). Only one can be active at a time.\nWhen any external provider is active, Hermes automatically prefetches relevant memories before each turn, syncs conversation turns after each response, and extracts memories on session end.\nSelf-evolving skills\nMemory handles facts. Skills handle procedures.\nSkills are Markdown files with YAML frontmatter, and function as the agent’s procedural memory.\nHere’s the anatomy of a skill:\n---\nname: k8s-pod-debug\ndescription: >\n  Activate for crashing pods, CrashLoopBackOff,\n  \"why is my pod restarting\", container failures.\nversion: 1.2.0\nauthor: agent\nplatforms: [linux, macos]\n---\n\n## Procedure\n1. Get pod status → check events → pull logs\n2. Look for OOMKilled, ImagePullBackOff, config errors\n\n## Pitfalls\n- Forgetting --previous flag on restarted containers\n\n## Verification\n- Pod stays Running with 0 restarts for 5+ minutes\nTo keep token costs low, skills use progressive disclosure:\nLevel 0 → The agent sees names + descriptions only (~3k tokens for the full catalog)\nLevel 1 → It loads the full skill content when it actually needs one\nLevel 2 → It can drill into specific reference files within a skill\nThe self-improvement loop\nThis is the core differentiator. The agent creates its own skills autonomously using the\nskill_manage\ntool. Skill creation triggers when:\nThe agent completes a complex task (5+ tool calls)\nIt hits errors or dead ends and finds the working path\nThe user corrects its approach\nIt discovers a non-trivial workflow\nSo the loop works like as follows: the agent encounters a problem → solves it through trial and error → saves the successful approach as a\nSKILL.md\nfile → next time it encounters a similar problem, it loads the skill and follows the proven procedure instead of rediscovering the approach from scratch.\nThe tool supports six actions:\ncreate\n,\npatch\n(targeted fix, preferred because it’s token-efficient),\nedit\n(full rewrite),\ndelete\n,\nwrite_file\n, and\nremove_file\n.\nGarbage collection for skills\nWithout maintenance, agent-created skills pile up. You end up with dozens of narrow, overlapping playbooks that waste tokens and pollute the catalog.\nThe Curator is a background maintenance system that handles this.\nIt runs on an inactivity check (not a cron daemon). Of 7 days have passed since the last run and the agent has been idle for 2+ hours, a background fork of the agent spins up with its own prompt cache, never touching the active conversation.\nIt operates in two phases:\nAutomatic transitions (deterministic, no LLM): Skills unused for 30 days become stale. Skills unused for 90 days get archived.\nLLM review (up to 8 iterations): A forked agent surveys all agent-created skills and decides per-skill whether to keep, patch, consolidate, or archive.\nTwo important constraints:\nThe Curator never touches bundled or hub-installed skills. Only agent-authored ones.\nIt never auto-deletes. The worst outcome is archival to\n~/.hermes/skills/.archive/\n, which is recoverable with one command.\nBefore every Curator pass, Hermes takes a tar.gz snapshot of the entire skills directory. Rollback is one command, and rollbacks are themselves reversible.\nYou can also pin critical skills with hermes curator pin\n<skill>\nto protect them from archival and deletion. Patches and edits still go through, so the agent can improve a pinned skill without requiring you to unpin it first.\nGEPA: Evolving skills offline with execution traces\nHere’s where it gets interesting.\nThe in-agent learning loop (skill creation + Curator) has a known weakness:\nThe agent tends toward self-congratulation. It almost always thinks it performed well, even when it didn’t. Community feedback has confirmed this.\nThe same system that auto-generates skills can also overwrite manual customizations with worse versions.\nGEPA (Genetic-Pareto Prompt Evolution) solve this.\nIt is not built into the Hermes runtime. It lives in a companion repository (\nNousResearch/hermes-agent-self-evolution\n) and operates as an offline optimization pipeline.\nThe core idea is that instead of asking the agent “did you do well?”, GEPA reads execution traces to understand why things failed, then proposes targeted improvements through evolutionary search.\nThe pipeline:\nRead the current skill from the Hermes repo\nGenerate an evaluation dataset (synthetic test cases via Claude Opus, real session history from SQLite, or hand-curated golden sets)\nRun the GEPA optimizer: read execution traces → understand failure points → generate candidate variants\nEvaluate candidates using LLM-as-judge scoring with rubrics (not binary pass/fail)\nApply constraint gates: full test suite must pass 100%, skills stay under 15KB, caching compatibility is preserved, semantic purpose doesn’t drift\nBest variant goes out as a PR against the Hermes repo. Never a direct commit.\nNo GPU required. Everything runs through API calls. Cost: roughly $2-10 per optimization run.\nThis is something that can be skipped initially, but is highly effective when you hit a wall and don’t want to spend time and money on finetuning (RL/GRPO)\nMore details in this repo →\nWe recently wrote an article on GEPA →\nIt’s a great alternative to try before moving to full fine-tuning or RL-based fine-tuning.\nTo summarise:\nSOUL.md\nsets the identity. The runtime loop captures experience. The Curator keeps the library clean. GEPA makes sure what’s in the library actually works.\nThat’s the full theory. Now let’s get it running on your machine.\nGetting up and running\nLinux, macOS, or WSL2. Python 3.11+ comes with the installer. 8GB RAM is fine for API-based usage.\ncurl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash\nsource ~/.bashrc   # or ~/.zshrc\nRun the setup wizard. It walks through provider, API key, model, and tools:\nhermes setup\nThen start chatting in the terminal:\nhermes\nIf you want to talk to your agent from your phone instead of the terminal, point it at a Telegram bot.\nGet a bot token from\n@BotFather\n(run /newbot), then get your Telegram user ID from\n@userinfobot\n.\nThis gives you a working agent:\n0:00\n/\n0:28\n1×\nWhat’s inside ~/.hermes/\nRight after installation, your home directory gets a new folder.\nIt’s worth understanding the layout because everything you do with Hermes touches one of these paths.\n~/.hermes/\n├── config.yaml           # Main configuration\n├── .env                  # API keys and secrets\n├── auth.json             # OAuth provider credentials\n├── SOUL.md               # Agent identity (slot #1 in system prompt)\n│\n├── memories/\n│   ├── MEMORY.md         # Persistent agent facts\n│   └── USER.md           # User model\n│\n├── skills/               # All skills (bundled, hub, agent-created)\n│   ├── mlops/\n│   │   ├── axolotl/\n│   │   │   ├── SKILL.md\n│   │   │   ├── references/\n│   │   │   └── scripts/\n│   │   └── vllm/\n│   ├── devops/\n│   └── .hub/             # Skills Hub state\n│\n├── sessions/             # Per-platform session metadata\n├── state.db              # SQLite session store with FTS5\n├── cron/\n│   ├── jobs.json         # Scheduled jobs\n│   └── output/           # Cron run outputs\n│\n├── plugins/              # Custom plugins\n├── hooks/                # Lifecycle hooks\n├── skins/                # CLI themes\n└── logs/                 # agent.log, gateway.log, errors.log\nA few files deserve a closer look.\nconfig.yaml\nis the source of truth for everything non-secret. Model choice, terminal backend, tool enablement, MCP servers all live here. Edit with hermes config edit or set values one at a time with hermes config set <key> <value>.\n.env\nholds your secrets. API keys, bot tokens, passwords. Hermes routes secret-looking values here automatically.\nSOUL.md\nis slot #1 in the system prompt, before everything else. Identity layer, covered earlier.\nskills/\nis where the entire learning loop lives. Every skill the agent creates, plus everything you install, lands here.\nstate.db\nis the SQLite database backing session search.\nYou won’t manually edit most of this. But knowing the layout makes everything else click.\nAdding new Skills\nHermes maintains its own official\nSkills Hub\nwith 687 skills across 18 categories. The breakdown:\n87 built-in skills that ship with the agent\n79 optional skills you can enable on demand\n16 from Anthropic (frontend-design, pdf, pptx, docx, mcp-builder, etc.)\n505 from LobeHub (broader community contributions)\nYou can also add any GitHub repo as a custom tap:\nhermes skills tap add yourname/your-skills-repo\nhermes skills install yourname/your-skills-repo/<skill-name>\nThis is how you’d share skills across a team or maintain your own private collection.\nGoing from 1 to 10 agents\nOne agent is fine. Multiple specialized agents is where Hermes gets interesting.\nHermes has a first-class feature for this called profiles. Each profile is a fully isolated Hermes instance with its own config, memory, skills, sessions, and\nSOUL.md\n. They share nothing by default.\nWe’ll set up three: a designer, a programmer, and a researcher.\nhermes profile create designer --clone\nhermes profile create programmer --clone\nhermes profile create researcher --clone\nhermes profile list\n--clone\ncopies your default profile’s config and\n.env\nas a starting point.\n0:00\n/\n0:45\n1×\nTo give each one its own Telegram bot, each profile needs its own bot from BotFather. Telegram only allows one connection per token, so sharing breaks things.\nRun\n/newbot\nthree times with BotFather and save the three tokens. Then run the gateway wizard once per profile:\nhermes -p designer gateway setup\nhermes -p programmer gateway setup\nhermes -p researcher gateway setup\nThe setup is exactly the same as a regular agent, where you can again create new bots in Bot Father and connect them to their respective agents.\nGive each one a personality via SOUL.md\nThis is where the agents become genuinely different from each other. Edit each profile’s\nSOUL.md\n.\nDesigner\nat\n~/.hermes/profiles/designer/SOUL.md\n:\n# Soul\n\nYou are an expert at creating hand-drawn illustrations that explain\nAI, machine learning, and software engineering concepts. Think\nwhiteboard sketches, not polished marketing art.\n\nEvery illustration should make a technical idea click. You lead with\nthe concept, then choose the metaphor, then commit to the sketch.\nYou prefer simple line work and clear labels over visual flourish.\n\nBe opinionated about what to draw and what to leave out. Say when an\nillustration would hurt more than help.\nCheck out these examples:\nProgrammer at\n~/.hermes/profiles/programmer/SOUL.md\n:\n# Soul\n\nYou are my staff engineer. Terse, direct, pragmatic.\n\nYou read code before you write code. You write the smallest change\nthat solves the problem. You prefer standard library over dependencies,\nboring tech over shiny tech, and explicit over clever.\n\nAlways check: does this already exist in the codebase? Are there\ntests? What breaks if this fails? Run the tests before saying \"done.\"\nResearcher at\n~/.hermes/profiles/researcher/SOUL.md\n:\n# Soul\n\nYou are my deep researcher for the AI and machine learning space.\nYour main job is a daily Telegram digest of what's new and what\nmatters.\n\nCover four streams: trending GitHub repos, big tech and lab\nannouncements, fresh research papers, and the social pulse on X,\nReddit, and Hacker News. Lead with what changed since yesterday.\nCite every claim with a URL. Flag when signal is thin.\n\nUse delegate_task aggressively to parallelize across streams. Never\nstate a contested claim as settled. Never fabricate a citation.\nRoute programmer’s execution through Claude Code\nThe programmer is more interesting if it doesn’t just write code itself, but delegates execution to the Claude Code CLI while Hermes orchestrates.\nClaude Code does the file edits, runs commands, and manages git. Hermes reads the result and decides what’s next.\nThis is also how we run our on top of our Claude Max subscription without needing any separate API key. Claude Code uses Max credentials automatically.\nStart a session and send this single activation prompt:\nWe already have a Claude Max subscription. You are my staff engineer who\nhelps me with my day-to-day coding tasks, and under the hood you use\nClaude Code for all the executions. Set yourself up accordingly.\nThe programmer will install the\nautonomous-ai-agents/claude-code\nskill on its own, verify Claude is on PATH, and start using it for code execution. From the next message onward, anything coding-related (read files, write code, run tests, commit, push) routes through Claude Code under the hood.\nTwo things worth knowing:\nMake sure\nclaude\nis on your PATH before activating.\nwhich claude\ncommand should print a real binary path.\nClaude Code has both a print mode (one-shot, fast, no TUI) and an interactive mode (full\ntmux\nsession). The programmer picks based on the task. You don’t need to think about it.\nCustomizing the designer to teach it your visual style\nThe designer becomes genuinely useful when they can generate images in your style, not generic AI output. The pattern is to feed it reference designs, let it study them, and ask it to create a skill that generates new images in the same style.\nThis is the self-improving loop being used as a setup mechanism. Instead of writing a skill by hand, you’re showing the agent good examples and asking it to encode the pattern itself.\nStart a session with the designer and paste your reference images (drag-and-drop in CLI, or attach in Telegram). Then send this prompt:\nCarefully study these reference illustrations. Note the color palette,\nline weight, level of detail, composition, and overall aesthetic.\n\nI want you to create a new skill called \"my-design-style\" that captures\nthis visual style. The skill should:\n\n1. Document the style fingerprint in plain language (palette, line\n   weights, composition rules, recurring motifs)\n2. Include a Python script that takes a text description of a new\n   illustration and generates the image using the Nano Banana model\n   (google/gemini-2.5-flash-image) via the OpenRouter API in this style\n3. Read OPENROUTER_API_KEY from the environment\n\nUse skill_manage to create it. Test the generated script on a sample\nprompt before saying it's done.\nThe designer will study the references, write the\nSKILL.md\n, generate the Python script, save it under\n~/.hermes/profiles/designer/skills/my-design-style/\n, and verify the script runs.\nIf you already ran hermes setup and picked OpenRouter as your provider, the key is already in the designer profile’s\n.env\nthanks to\n--clone\n. If not, add it once:\nhermes -p designer config set OPENROUTER_API_KEY <your-key>\nFrom then on, asking the designer for a new illustration triggers the skill. It writes a prompt informed by your style fingerprint, calls Nano Banana through OpenRouter, and saves the output.\nThe same pattern works for any style-specific output. Feed reference content, ask the agent to build a skill that reproduces the pattern. Newsletter intros, X threads, code review comments, anything where consistency matters.\nScheduling work with cron jobs\nThe researcher’s\nSOUL.md\nsays it’s responsible for a daily Telegram digest. That implies a job running on its own schedule, without you remembering to ask. That’s what Hermes cron is for.\nHermes ships with a built-in scheduler. The gateway daemon ticks every 60 seconds, runs any due jobs in isolated agent sessions, and delivers output to whichever messaging platform you specify.\nJobs survive restarts. They live in\n~/.hermes/cron/jobs.json\nand output goes to\n~/.hermes/cron/output/\n.\nYou don’t need to write cron expressions. You describe what you want in English and Hermes converts it.\nTo wire up the researcher’s daily digest, open a session with the researcher and send this prompt:\nEvery weekday at 8am India time, prepare a deep digest of what's new\nin the AI and machine learning space over the last 24 hours. Cover\nfour streams in this order:\n\n1. Trending GitHub repos (especially new AI/ML tooling)\n2. Big tech and lab announcements (Anthropic, OpenAI, Google, Meta,\n   xAI, Nous, etc.)\n3. Fresh research papers worth reading\n4. Social pulse from X, Reddit, and Hacker News\n\nLead with what changed since yesterday. Cite every claim with a URL.\nKeep it under 800 words. Deliver to Telegram.\n\nSet this up as a recurring cron job.\nThe researcher creates the job using its cronjob tool, delivery target defaults to the current chat (Telegram in this case), and the scheduler takes over from there. Verify it was created:\nhermes -p researcher cron list\nYou should see the job with its next scheduled run time.\nOther useful patterns\nThe cron syntax is flexible. A few variations worth knowing:\nOne-shot delays →\n/cron add 30m “Remind me to check the build”\nruns once in 30 minutes.\nRecurring intervals →\n/cron add “every 2h” “Check server status”\nruns every two hours.\nStandard cron expressions →\n/cron add “0 9 * * 1-5” “...”\nfor precise control. Weekdays at 9am, in this case.\nSkill attachment →\n/cron add “every 1h” “Summarize new feed items” --skill\nblogwatcher loads a skill before running the prompt.\nYou can also chain jobs. One cron’s output becomes the next cron’s input via a\ncontext_from\nflag. Useful for multi-stage automations where you want a research step to feed a writing step.\nWe’ll continue to write a lot more about Hermes since we have been using it extensively.\nAlso, if you learn better from video, we’ll drop a full Hermes Agent walkthrough in a couple of days!\n👉 Over to you: Have you used Hermes Agent?\nThanks for reading!\nPublished on May 14, 2026\nComments\nShare\nCopy link\nShare to X\nShare to Facebook\nShare to Linkedin\nCopied\nPrevious\nSpeculative Decoding in LLMs\nNext\nModel-Free Learning",
  "metadata": {
    "title": "Hermes Agent Masterclass",
    "description": "Everything you need to understand and customize Hermes Agent.",
    "keywords": null,
    "author": null,
    "og:site_name": "Daily Dose of Data Science",
    "og:type": "article",
    "og:title": "Hermes Agent Masterclass",
    "og:description": "Everything you need to understand and customize Hermes Agent.",
    "og:url": "https://www.dailydoseofds.com/p/hermes-agent-masterclass/",
    "og:image": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/images/2026/05/b526bcd4-4732-4c62-8372-826d45ed663a_722x511.webp",
    "og:image:width": "722",
    "og:image:height": "511",
    "twitter:card": "summary_large_image",
    "twitter:title": "Hermes Agent Masterclass",
    "twitter:description": "Everything you need to understand and customize Hermes Agent.",
    "twitter:url": "https://www.dailydoseofds.com/p/hermes-agent-masterclass/",
    "twitter:image": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/images/2026/05/b526bcd4-4732-4c62-8372-826d45ed663a_722x511.webp",
    "twitter:label1": "Written by",
    "twitter:data1": "Avi Chawla",
    "twitter:label2": "Filed under",
    "twitter:data2": "Agents",
    "twitter:site": "@_avichawla",
    "article:published_time": "2026-05-13T21:54:00.000Z",
    "article:modified_time": "2026-07-01T00:02:27.000Z",
    "article:tag": "Agents"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [
    {
      "file": "attachments/793e650d463e/code/body-000.txt",
      "chars": 138,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-001.txt",
      "chars": 443,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-002.txt",
      "chars": 134,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-003.txt",
      "chars": 12,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-004.txt",
      "chars": 6,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-005.txt",
      "chars": 1009,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-006.txt",
      "chars": 108,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-007.txt",
      "chars": 140,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-008.txt",
      "chars": 102,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-009.txt",
      "chars": 500,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-010.txt",
      "chars": 391,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-011.txt",
      "chars": 525,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-012.txt",
      "chars": 719,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-013.txt",
      "chars": 59,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-014.txt",
      "chars": 549,
      "language": "text"
    },
    {
      "file": "attachments/793e650d463e/code/body-015.txt",
      "chars": 30,
      "language": "text"
    }
  ],
  "images": [
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/images/size/w400/2026/03/avi-google.jpg",
      "bytes": 11344,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/000.jpg",
      "src": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/images/size/w400/2026/03/avi-google.jpg",
      "alt": "Avi Chawla",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!SpeK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb526bcd4-4732-4c62-8372-826d45ed663a_722x511.png",
      "bytes": 49652,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/001.png",
      "src": "https://substackcdn.com/image/fetch/$s_!SpeK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb526bcd4-4732-4c62-8372-826d45ed663a_722x511.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!NpOz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04d4f8f4-c0de-4a00-820b-c4e5c9cbe845_742x389.png",
      "bytes": 117037,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/002.png",
      "src": "https://substackcdn.com/image/fetch/$s_!NpOz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04d4f8f4-c0de-4a00-820b-c4e5c9cbe845_742x389.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!bobk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3374920d-37f3-4790-8df7-9ec8da37dfa0_754x418.png",
      "bytes": 65647,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/003.png",
      "src": "https://substackcdn.com/image/fetch/$s_!bobk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3374920d-37f3-4790-8df7-9ec8da37dfa0_754x418.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!XqWb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead60cd-37fc-44be-ba63-5fb97faa93d4_680x366.png",
      "bytes": 130079,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/004.png",
      "src": "https://substackcdn.com/image/fetch/$s_!XqWb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ead60cd-37fc-44be-ba63-5fb97faa93d4_680x366.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!o8H5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3ccc2b8-3c80-4401-84e2-9203886f8b35_680x366.png",
      "bytes": 124614,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/005.png",
      "src": "https://substackcdn.com/image/fetch/$s_!o8H5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3ccc2b8-3c80-4401-84e2-9203886f8b35_680x366.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!mgfk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311ea7ef-ddb6-402c-8079-ea70d0856550_777x526.png",
      "bytes": 85485,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/006.png",
      "src": "https://substackcdn.com/image/fetch/$s_!mgfk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F311ea7ef-ddb6-402c-8079-ea70d0856550_777x526.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!JXKs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7f0ad4-1502-4d1c-9127-33494c42a18b_680x368.png",
      "bytes": 94131,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/007.png",
      "src": "https://substackcdn.com/image/fetch/$s_!JXKs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e7f0ad4-1502-4d1c-9127-33494c42a18b_680x368.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!zb_y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587fa63-6685-4415-9b6e-4ba3088d448d_679x376.png",
      "bytes": 120118,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/008.png",
      "src": "https://substackcdn.com/image/fetch/$s_!zb_y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587fa63-6685-4415-9b6e-4ba3088d448d_679x376.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!LoVV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e6d475d-7140-47af-b6b3-f1e6345866e2_680x368.png",
      "bytes": 114393,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/009.png",
      "src": "https://substackcdn.com/image/fetch/$s_!LoVV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e6d475d-7140-47af-b6b3-f1e6345866e2_680x368.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!oAvQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae2b056-342f-4e8e-8d4a-eae5d1dd1bba_748x624.png",
      "bytes": 84990,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/010.png",
      "src": "https://substackcdn.com/image/fetch/$s_!oAvQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae2b056-342f-4e8e-8d4a-eae5d1dd1bba_748x624.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!PtRp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04780146-a467-41d4-b8ec-c1386cf4c646_680x673.png",
      "bytes": 192473,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/011.png",
      "src": "https://substackcdn.com/image/fetch/$s_!PtRp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04780146-a467-41d4-b8ec-c1386cf4c646_680x673.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!ed-f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62e87b32-dcb0-409a-a6e3-18d75cad68f0_733x433.png",
      "bytes": 81948,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/012.png",
      "src": "https://substackcdn.com/image/fetch/$s_!ed-f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62e87b32-dcb0-409a-a6e3-18d75cad68f0_733x433.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!vYst!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea2aab-596b-4a9a-851e-e628d0312631_754x518.png",
      "bytes": 156972,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/013.png",
      "src": "https://substackcdn.com/image/fetch/$s_!vYst!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54ea2aab-596b-4a9a-851e-e628d0312631_754x518.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://substackcdn.com/image/fetch/$s_!efi3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f98f020-5d11-4e26-ab38-e271c70513ca_754x497.png",
      "bytes": 76219,
      "reused": true,
      "local_path": "attachments/793e650d463e/images/014.png",
      "src": "https://substackcdn.com/image/fetch/$s_!efi3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f98f020-5d11-4e26-ab38-e271c70513ca_754x497.png",
      "alt": "",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [
    {
      "url": "https://www.youtube.com/watch?v=bNp6YcKBLgY",
      "src": "https://www.youtube.com/embed/bNp6YcKBLgY?feature=oembed",
      "status": "ok",
      "kind": "single_video",
      "local_path": "attachments/793e650d463e/videos/repair-bNp6YcKBLgY.mp4",
      "bytes": 160190729,
      "valid": true,
      "height": 1080,
      "width": 1828,
      "duration": "2889.981000",
      "reused": false
    },
    {
      "url": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/media/2026/05/hermes-1.mp4",
      "src": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/media/2026/05/hermes-1.mp4",
      "status": "ok",
      "kind": "direct_video",
      "bytes": 5207023,
      "reused": false,
      "content_type": "video/mp4",
      "valid": true,
      "height": 1080,
      "width": 1764,
      "duration": "28.266000",
      "local_path": "attachments/793e650d463e/videos/repair-dc76dbb7b02700312647.mp4"
    },
    {
      "url": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/media/2026/05/hermes-2.mp4",
      "src": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/media/2026/05/hermes-2.mp4",
      "status": "ok",
      "kind": "direct_video",
      "bytes": 7853185,
      "reused": false,
      "content_type": "video/mp4",
      "valid": true,
      "height": 1080,
      "width": 1764,
      "duration": "45.568000",
      "local_path": "attachments/793e650d463e/videos/repair-6dda3e6224d2d0063023.mp4"
    }
  ],
  "links": [
    {
      "href": "https://www.youtube.com/embed/bNp6YcKBLgY?feature=oembed",
      "label": "",
      "type": "iframe"
    },
    {
      "href": "https://hermes-agent.nousresearch.com/docs/user-guide/features/memory-providers?ref=dailydoseofds.com",
      "label": "8 pluggable providers",
      "type": "a"
    },
    {
      "href": "https://github.com/NousResearch/hermes-agent-self-evolution?ref=dailydoseofds.com",
      "label": "More details in this repo →",
      "type": "a"
    },
    {
      "href": "https://www.dailydoseofds.com/p/how-to-beat-grpo-without-touching-model-weights/",
      "label": "We recently wrote an article on GEPA →",
      "type": "a"
    },
    {
      "href": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/media/2026/05/hermes-1.mp4",
      "label": "",
      "type": "video"
    },
    {
      "href": "https://hermes-agent.nousresearch.com/docs/skills?ref=dailydoseofds.com",
      "label": "Skills Hub",
      "type": "a"
    },
    {
      "href": "https://storage.ghost.io/c/3f/df/3fdf6ed2-17ac-4b12-a693-8078bd13e748/content/media/2026/05/hermes-2.mp4",
      "label": "",
      "type": "video"
    },
    {
      "href": "https://x.com/intent/tweet?url=https%3A%2F%2Fwww.dailydoseofds.com%2Fp%2Fhermes-agent-masterclass%2F&text=Hermes%20Agent%20Masterclass",
      "label": "Share to X",
      "type": "a"
    },
    {
      "href": "https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.dailydoseofds.com%2Fp%2Fhermes-agent-masterclass%2F",
      "label": "Share to Facebook",
      "type": "a"
    },
    {
      "href": "https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.dailydoseofds.com%2Fp%2Fhermes-agent-masterclass%2F",
      "label": "Share to Linkedin",
      "type": "a"
    },
    {
      "href": "https://www.dailydoseofds.com/p/speculative-decoding-in-llms/",
      "label": "Previous Speculative Decoding in LLMs",
      "type": "a"
    },
    {
      "href": "https://www.dailydoseofds.com/rl-course-part-4/",
      "label": "Next Model-Free Learning",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:47:57Z",
  "source_url": "https://www.dailydoseofds.com/p/hermes-agent-masterclass/",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 23362,
  "expected_body_images": 15,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/793e650d463e/pages/source.html",
  "local_html": "attachments/793e650d463e/pages/article.html",
  "body_base_path": "attachments/793e650d463e/pages/",
  "body_markdown_path": "attachments/793e650d463e/pages/article.md"
}