<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: sunny yuen</title>
    <description>The latest articles on DEV Community by sunny yuen (@yuens1002).</description>
    <link>https://dev.to/yuens1002</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F72273%2F1f7cd29e-4d12-444f-97de-5cb562ad9894.png</url>
      <title>DEV Community: sunny yuen</title>
      <link>https://dev.to/yuens1002</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yuens1002"/>
    <language>en</language>
    <item>
      <title>You Don't Have to Learn Hermes From Scratch — I Brought My Existing Skills In</title>
      <dc:creator>sunny yuen</dc:creator>
      <pubDate>Thu, 28 May 2026 21:41:06 +0000</pubDate>
      <link>https://dev.to/yuens1002/you-dont-have-to-learn-hermes-from-scratch-i-brought-my-existing-skills-in-18f0</link>
      <guid>https://dev.to/yuens1002/you-dont-have-to-learn-hermes-from-scratch-i-brought-my-existing-skills-in-18f0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hermes-agent-2026-05-15"&gt;Hermes Agent Challenge&lt;/a&gt;: Write About Hermes Agent&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  I Didn't Start With Hermes
&lt;/h2&gt;

&lt;p&gt;Six months ago I started building a set of agent skills and personas for how I build software. Not generic prompts — opinionated role files. A &lt;code&gt;/backend-architect&lt;/code&gt; that owns schema and recommendation logic. A &lt;code&gt;/test-engineer&lt;/code&gt; that writes Vitest coverage and flags weak acceptance criteria. A &lt;code&gt;/project-manager&lt;/code&gt; that maintains planning docs and closes iterations cleanly.&lt;/p&gt;

&lt;p&gt;These roles have evolved across multiple projects. They have layering rules, discovery checklists, inheritance from a base engineering discipline file. They produce consistent, reviewable work because they're scoped — the backend architect doesn't touch test files, the test engineer doesn't redesign the schema, each persona has a defined mandate and exits cleanly.&lt;/p&gt;

&lt;p&gt;When I heard about Hermes Agent, my first instinct wasn't "let me learn a new system." It was: &lt;strong&gt;can I run my existing system inside this?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer is yes. That's what this article is about — what it looks like to bring a mature workflow into Hermes, what you gain, where it breaks down, and what I'd do differently.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Hermes Is (and Isn't) to Someone Who Already Has a Workflow
&lt;/h2&gt;

&lt;p&gt;Hermes is an LLM-agnostic orchestration layer. It has its own skill system, its own &lt;code&gt;soul.md&lt;/code&gt; concept for persistent agent identity, built-in cron scheduling and MCP management. All of that is real and useful.&lt;/p&gt;

&lt;p&gt;But it's also a runtime. If you have skills that work, you can bring them in.&lt;/p&gt;

&lt;p&gt;I installed a local Hermes instance — few clicks, straightforward setup — and ran it inside VSCode's integrated terminal pointed at my existing persona files. No migration. No rewrite. My &lt;code&gt;/backend-architect&lt;/code&gt; runs in Hermes the same way it runs in Claude Code.&lt;/p&gt;

&lt;p&gt;Before settling on this, I'd tried a couple of other paths — a VPS instance with a Telegram interface for ideation, and attempting to build through a browser-based terminal. The VPS was fine for sketching ideas. The browser terminal made it clear that building production-grade tooling without proper local environment was the wrong path. Local Hermes in VSCode removed that friction.&lt;/p&gt;

&lt;p&gt;The thing that surprised me: you don't have to choose between "learn Hermes natively" and "keep using what works." You can do both at once. Hermes becomes the runtime. Your skills stay the structure.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Build: Production in 3 Days on a New System
&lt;/h2&gt;

&lt;p&gt;The project I built with this setup is &lt;a href="https://brew-guide-production.up.railway.app" rel="noopener noreferrer"&gt;Brew Guide&lt;/a&gt; — a community coffee knowledge base exposed as a public MCP server. It logs real brew experiments, builds consensus recommendations from that data, and returns technique guidance (bloom timing, pour stages, agitation style) via 5 MCP tools. Production endpoint, no auth, live now.&lt;/p&gt;

&lt;p&gt;I built it in 3 days — on Hermes, which I'd never used before.&lt;/p&gt;

&lt;p&gt;That number is the point. Not because the build was simple (Neon Postgres, Prisma migrations, 55 passing tests, Railway auto-deploy, strict TypeScript throughout), but because I didn't spend those 3 days learning Hermes. I spent them building. The workflow did the heavy lifting on an unfamiliar runtime because the workflow was already mature.&lt;/p&gt;

&lt;p&gt;The competition sprint — 7 deliverables including a scraper, technique JSONB on the schema, a landing page, and the competition article — reached "verified" on the first review pass. One iteration. That's the workflow functioning, not the AI being infallible.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Breaks When You Switch Models
&lt;/h2&gt;

&lt;p&gt;Here's the more interesting part, and I want to be honest about it.&lt;/p&gt;

&lt;p&gt;During an earlier iteration, I ran the same skill set through a different model on the same codebase. Same persona files, same task scope, same Hermes orchestration. The goal: understand whether my workflow was portable across LLMs.&lt;/p&gt;

&lt;p&gt;The observable failure mode was &lt;strong&gt;tool call adherence&lt;/strong&gt;. The other model fumbled calls more often — retries, moments where it found its own path around the structured orchestration rather than following the skill specification. Tasks that took 30 minutes with Claude took most of a working day. The output required remediation: a Node version API call that crashed production, acceptance criteria tests that confirmed plumbing but not the scoring invariants the ACs required, docs that drifted from the code.&lt;/p&gt;

&lt;p&gt;I want to be careful about what I can and can't claim. I wasn't using Hermes' native model adapters at the time — the skills were running through the same interface I'd built for Claude. So I can't say definitively whether the gap was model capability or a Hermes-model integration issue. Both are plausible.&lt;/p&gt;

&lt;p&gt;What I can say: &lt;strong&gt;same instructions, same personas, dramatically different adherence to the spec&lt;/strong&gt;. My skills were written and refined on Claude's way of parsing structured instructions. When you hand those same instructions to a model with different parsing behaviour, adherence degrades — and tool call reliability is the first thing to break.&lt;/p&gt;

&lt;p&gt;This is the portability question Hermes is built to solve. It's a genuinely hard problem, and I didn't solve it. But surfacing where it breaks is the useful finding.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd Build Differently
&lt;/h2&gt;

&lt;p&gt;The gap I felt throughout came from one step I skipped: I never migrated my skills to native Hermes format.&lt;/p&gt;

&lt;p&gt;Hermes has a &lt;code&gt;soul.md&lt;/code&gt; concept — a persistent document that shapes agent identity across sessions. Think of it as the context your agent carries into every conversation: its values, working style, constraints. My skills work without it, but they're missing an anchor. A &lt;code&gt;soul.md&lt;/code&gt; tuned to how I build — layering rules, persona boundaries, the engineering discipline that governs all my roles — would give Hermes native context that currently lives in my head, and make skills more robust across model handoffs.&lt;/p&gt;

&lt;p&gt;The second missing step: model-specific skill validation. My skills assume Claude's instruction-following behaviour. A proper migration would test each persona against multiple model families and adjust language and structure where adherence breaks down. That's what "native Hermes skills" gives you — not just ported files, but skills validated against the runtime you're actually using.&lt;/p&gt;

&lt;p&gt;The parts of Hermes where the DX is already smooth regardless: cron scheduling and &lt;code&gt;hermes mcp add&lt;/code&gt;. Setting up the weekly coffee literature automation as a cron job was trivial. Connecting the production MCP endpoint to any client is one command. These infrastructure pieces are where Hermes earns its keep without needing any skill migration at all.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest Verdict
&lt;/h2&gt;

&lt;p&gt;Six months of evolved Claude skills beats Hermes' out-of-the-box defaults — for the way I specifically build software.&lt;/p&gt;

&lt;p&gt;But that's the wrong comparison. The right question: &lt;strong&gt;does Hermes give you something you don't already have?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For me, two things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM portability.&lt;/strong&gt; The ability to run your skills against a local model, a different provider, without rebuilding anything. For production work with tight quality requirements, I want Claude's reliability. For experiments, local automations, cost-sensitive builds: Hermes makes the option real without a rewrite tax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The infrastructure layer.&lt;/strong&gt; Cron, MCP management, soul.md persistence. Not things you'd build for one project, but immediately useful once they exist.&lt;/p&gt;

&lt;p&gt;What I'd tell a developer starting out: &lt;strong&gt;bring your existing workflow in first.&lt;/strong&gt; Don't wait until you've learned Hermes natively before you build anything. Run your current skills, see what holds, see what breaks at the model boundary, and use that signal to decide what to migrate properly. The portability is the point — you don't earn it by starting over.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The project this workflow produced:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web: &lt;a href="https://brew-guide-production.up.railway.app" rel="noopener noreferrer"&gt;brew-guide-production.up.railway.app&lt;/a&gt; — no login, try it now&lt;/li&gt;
&lt;li&gt;MCP: &lt;code&gt;https://brew-guide-production.up.railway.app/mcp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/yuens1002/brew-guide" rel="noopener noreferrer"&gt;yuens1002/brew-guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Every Great Cup Starts with the Right Question — I Built the Community Behind the Answer with Hermes Agent</title>
      <dc:creator>sunny yuen</dc:creator>
      <pubDate>Thu, 28 May 2026 21:29:01 +0000</pubDate>
      <link>https://dev.to/yuens1002/every-great-cup-starts-with-the-right-question-i-built-the-community-behind-the-answer-with-o04</link>
      <guid>https://dev.to/yuens1002/every-great-cup-starts-with-the-right-question-i-built-the-community-behind-the-answer-with-o04</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hermes-agent-2026-05-15"&gt;Hermes Agent Challenge&lt;/a&gt;: Build With Hermes Agent&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Real brewing knowledge lives in human experience — in roaster guides, in community notes, in what a barista learned from last Tuesday's pour. It doesn't accumulate anywhere. Every brew is forgotten. Ask any AI and you get statistical averages: 93°C, 1:16 ratio, four minutes. Technically defensible. Practically generic. Worse still for rare origins where training data is thin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  For coffee drinkers
&lt;/h3&gt;

&lt;p&gt;Visit &lt;a href="https://brew-guide-production.up.railway.app" rel="noopener noreferrer"&gt;brew-guide-production.up.railway.app&lt;/a&gt;. No account. No setup. No AI client required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsavrk9g4wy65zzbmahb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsavrk9g4wy65zzbmahb1.png" alt="Brew Guide — " width="799" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pick your coffee origin, roast level, and brew method. What comes back isn't a generic recipe — it's community consensus: the grind, temperature, ratio, and brew time that real people have logged and rated for that origin, plus step-by-step technique guidance (bloom timing, pour stages, agitation style). If data is sparse for your origin, the confidence tier says so honestly and falls back to method defaults rather than making something up.&lt;/p&gt;

&lt;p&gt;This is for the person who just picked up a bag of Kenyan peaberry and wants to know how to do it justice. It works for anyone who cares about their cup — no technical knowledge required.&lt;/p&gt;

&lt;h3&gt;
  
  
  For developers and AI clients
&lt;/h3&gt;

&lt;p&gt;Connect to any MCP-capable client in one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;https://brew-guide-production.up.railway.app/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask your AI: &lt;em&gt;"recommend a pour over for Ethiopian light roast."&lt;/em&gt; What comes back is a traceable community consensus object: brew parameters, a confidence tier (high/medium/low), the source brews that contributed, and method-specific technique guidance. You can see where the knowledge came from and how certain the system is — a fundamentally different epistemic object from an AI-generated recipe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/yuens1002/brew-guide" rel="noopener noreferrer"&gt;yuens1002/brew-guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Five MCP tools — &lt;code&gt;get_brewing_methods&lt;/code&gt;, &lt;code&gt;recommend&lt;/code&gt;, &lt;code&gt;log_brew&lt;/code&gt;, &lt;code&gt;search_brews&lt;/code&gt;, &lt;code&gt;compare_brew&lt;/code&gt; — over Streamable HTTP transport. Public, no auth required.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Tech Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;Hono 4 + &lt;code&gt;@hono/node-server&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@modelcontextprotocol/sdk&lt;/code&gt; + &lt;code&gt;@hono/mcp&lt;/code&gt; (Streamable HTTP)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Neon Postgres + Prisma ORM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;td&gt;Node 24, TypeScript strict, ESM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;Vitest (55 tests, 0 errors)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deploy&lt;/td&gt;
&lt;td&gt;Railway (auto-deploy from &lt;code&gt;main&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The recommendation engine is fully deterministic — no LLM on the hot path. &lt;code&gt;computeBestBrew()&lt;/code&gt; fetches up to 50 recent brews, scores each against your request params (origin, method, roast, variety, grind), applies recency decay (linear 1.0 → 0.1 over 365 days) and source trust weights, takes the top 5, and builds consensus via weighted average (numeric fields) or weighted mode (categorical). Sub-100ms. Reproducible. Auditable.&lt;/p&gt;

&lt;p&gt;The voting infrastructure is live (&lt;code&gt;thumbs_up&lt;/code&gt;/&lt;code&gt;thumbs_down&lt;/code&gt; on recommendations, &lt;code&gt;brew_recommendation_links&lt;/code&gt; tracking which brews followed which recommendations). Vote weighting inside &lt;code&gt;computeBestBrew&lt;/code&gt; is the one acknowledged gap — the checks-and-balances mechanism is designed, the math isn't wired yet. That's the next commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Hermes Agent
&lt;/h2&gt;

&lt;p&gt;I built this in 3 days — on a system I'd never used before.&lt;/p&gt;

&lt;p&gt;That's the headline, and it's what I want to explain. I didn't start from scratch on Hermes. I installed a local instance, ran it inside VSCode's terminal, and pointed it at persona files I'd spent six months building. Three role files govern the entire build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/backend-architect&lt;/code&gt; — owns schema design, the recommendation engine, all DB logic&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/test-engineer&lt;/code&gt; — owns Vitest coverage, catches weak ACs, flags regressions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/project-manager&lt;/code&gt; — owns planning docs, retrospectives, and this article&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each persona has a focused mandate and a defined exit condition. The backend architect doesn't touch test files. The test engineer doesn't redesign the schema.&lt;/p&gt;

&lt;p&gt;What the workflow looks like in practice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a plan with a deliverable table (D1–D7), each with owner, files, acceptance criteria, commit schedule&lt;/li&gt;
&lt;li&gt;Hand each deliverable to the relevant persona&lt;/li&gt;
&lt;li&gt;After each feature, the test engineer verifies coverage and flags gaps&lt;/li&gt;
&lt;li&gt;Review report before merge&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The competition sprint — scraper, technique JSONB, landing page, this article — reached "verified" on the first review pass. 55 tests, zero TypeScript errors, all deliverables complete. One iteration.&lt;/p&gt;

&lt;p&gt;The previous iteration of this codebase was run on a different model through the same Hermes setup. Similar scope, same skill set, same orchestration. That iteration required production hotfixes (a Node version API crash on Railway), remediation of weak acceptance criteria tests, and took the better part of a working day. The gap in tool call adherence — the other model fumbling calls and finding workarounds around the skill spec rather than through it — was the visible failure mode.&lt;/p&gt;

&lt;p&gt;Hermes as a runtime made that comparison possible without changing anything in the workflow. Same skills, same personas, different model. The portability is the point.&lt;/p&gt;

&lt;p&gt;Beyond orchestration, Hermes added two things directly: cron scheduling for the weekly coffee literature automation (&lt;code&gt;hermes-automation/&lt;/code&gt;), and &lt;code&gt;hermes mcp add&lt;/code&gt; for connecting the production endpoint to any client instantly. That MCP management DX is genuinely smooth.&lt;/p&gt;

&lt;p&gt;What I'd build differently next time: migrate the skills to native Hermes format with a &lt;code&gt;soul.md&lt;/code&gt; as a persistent identity anchor. The skills work as-is, but validating them against multiple model families — adjusting language and structure where tool call adherence degrades — is the proper portability work I didn't have time for. That's the experiment this project sets up.&lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
