<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>eunsol</title>
    <link>https://nabichan.me/en</link>
    <description>eunsol&apos;s blog about a bit of everything</description>
    <language>en</language>
    <atom:link href="https://nabichan.me/en/rss.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Wed, 21 Oct 2026 03:00:00 GMT</lastBuildDate>
    <item>
      <title>Hermes Agent: Building a Personal AI Assistant</title>
      <link>https://nabichan.me/en/261021-hermes-agent-personal-assistant</link>
      <guid isPermaLink="true">https://nabichan.me/en/261021-hermes-agent-personal-assistant</guid>
      <pubDate>Wed, 21 Oct 2026 03:00:00 GMT</pubDate>
      <description>How Iroha, an AI assistant built on Hermes Agent, remembers my calls and emails, answers questions in Slack, and keeps my to-do list. A real-world setup.</description>
      <content:encoded><![CDATA[<h2 id="what-is-hermes-agent"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#what-is-hermes-agent">What Is Hermes Agent?</a></h2>
<p>Hermes Agent is an open-source <span class="term" data-term-key="ai-agent" tabindex="0">AI agent</span> from Nous Research that anyone can download and run. Install it on a computer and you can give it work through a messenger like Slack.</p>
<p>Out of the box it supports scheduled jobs that run at set times, and <span class="term" data-term-key="mcp" tabindex="0">MCP</span> for connecting outside services. This post is based on <a href="https://github.com/NousResearch/hermes-agent" target="_blank" rel="noopener">Hermes Agent v0.22.2</a>, released on October 15, 2026.</p>
<p>Hermes Agent also improves itself as you use it. When it finishes a multi-step task, gets stuck and finds a way through, or the user corrects its approach, the agent writes that method down as a <span class="term" data-term-key="skill" tabindex="0">skill</span>. The next time the same kind of work comes up, it pulls out that skill, and it revises the skill when something needs fixing.</p>
<p>I wrote this post to share one way Hermes Agent can be used. By the end, you will know how an AI assistant that remembers calls and emails, answers when asked, and keeps track of to-dos actually works.</p>
<h2 id="iroha"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#iroha">Iroha</a></h2>
<p>Iroha is the personal assistant I built with Hermes Agent. The name comes from Iroha Sakayori in the Netflix anime film "Cosmic Princess Kaguya!". She runs around the clock on a single Mac Studio desktop, and I talk to her through Slack.</p>
<p>I started using her in April 2026. At first she only handled to-do digests; in September I handed her my calls, and in October the job of remembering things by person, company, and project.</p>
<h3 id="a-day-with-iroha"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#a-day-with-iroha">A Day with Iroha</a></h3>
<p>A day with Iroha goes like this.</p>
<ul>
<li><strong>10:00</strong>: She sends a digest of overdue to-dos and everything due from today through the day after tomorrow.</li>
<li><strong>When a call ends</strong>: She tells me the call summary and the to-dos she registered on my behalf.</li>
<li><strong>When an important email arrives</strong>: She tells me right away. The rest are batched and summarized on the hour.</li>
<li><strong>When I have a question</strong>: If I ask something like "How are things going with Company A?", she searches past calls and emails and answers.</li>
<li><strong>17:00</strong>: She tells me what I finished today and what is still open.</li>
<li><strong>22:00</strong>: She tells me what is still open and what is due tomorrow.</li>
</ul>
<h3 id="sometimes-other-things-too"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#sometimes-other-things-too">Sometimes, Other Things Too</a></h3>
<p>Beyond calls and email, I occasionally hand Iroha jobs like these.</p>
<ul>
<li>Searching Bunjang and Karrot (Korean secondhand marketplaces) and reporting when a listing I want shows up,</li>
<li>Pulling route data from a map service to work out the travel time and route to a destination,</li>
<li>Or taking direct control of the Mac to play music on Apple Music.</li>
</ul>
<p>Jobs like these I can simply ask Iroha to do, but calls and email were different.</p>
<h2 id="time-to-build-tools"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#time-to-build-tools">Time to Build Tools!</a></h2>
<h3 id="why-i-built-them"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#why-i-built-them">Why I Built Them</a></h3>
<p>I had four problems.</p>
<ul>
<li>I often missed things that came up naturally in a call, including promises.</li>
<li>With several projects tangled together, I could not recall at a glance what a given conversation was about.</li>
<li>Manually copying to-dos out of calls and emails was tedious.</li>
<li>With so much mail coming in, I kept seeing important emails too late.</li>
</ul>
<h3 id="the-tools-i-built"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#the-tools-i-built">The Tools I Built</a></h3>
<p>Hermes Agent comes with Slack chat, scheduled jobs, and connections to outside services built in.</p>
<p>To solve the four problems above, Iroha needed to do three more things: turn calls into text and read them, watch incoming mail, and remember things by person, company, and project.</p>
<p>Hermes Agent alone could not cover these three.</p>
<ul>
<li><strong>Turning calls into text</strong>: Hermes Agent has no such feature.</li>
<li><strong>Watching mail</strong>: Hermes Agent can search and read Gmail when asked. However, it cannot wake itself up to read new mail when it arrives, so I needed a program that watches the inbox and wakes Iroha whenever new mail comes in.</li>
<li><strong>Remembering by person, company, and project</strong>: The built-in memory is a short notes file, too small to hold records on dozens of people and dozens of companies.</li>
</ul>
<p>So I built one program for each of the three and wired them in. All of them run on the same Mac as Iroha.</p>
<ul>
<li><strong>An upload app and call-ingest</strong>: Turn phone call recordings into text and hand them to Iroha.</li>
<li><strong>mail-watch</strong>: Checks Gmail automatically and hands new mail to Iroha.</li>
<li><strong>entity-context</strong>: Collects new calls and emails, hands them to Iroha, and stores what Iroha organizes by person, company, and project.</li>
</ul>
<p>In this post, <strong>context</strong> means these records, kept per person, company, and project.</p>
<h2 id="data-flow"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#data-flow">Data Flow</a></h2>
<figure><img src="https://nabichan.me/content-assets/261021-hermes-agent-personal-assistant/data-flow-en.26222003.svg" alt="Flow diagram showing call recordings and Gmail passing through my own programs and Iroha to Structured, Slack, and the context records" width="720" height="1010" style="max-width:min(720px, 100%);height:auto;" loading="eager" fetchpriority="high" decoding="async"><figcaption>Thick borders are jobs where Iroha does the thinking; gray boxes are programs I built myself. Calls and email split into an immediate branch and a context branch</figcaption></figure>
<p>Calls and email flow along two branches.</p>
<ul>
<li><strong>The immediate branch</strong>: As soon as a call is turned into text or an email arrives, Iroha reads it. To-dos go into Structured, a planner app, and the results are posted to Slack.</li>
<li><strong>The context branch</strong>: entity-context automatically collects new calls and emails and hands them to Iroha, who organizes them by person, company, and project.</li>
</ul>
<p>When I ask in Slack, Iroha looks at both the stored context and Structured before answering. The to-do digest I get three times a day is also built by reading the to-dos stored in Structured.</p>
<h2 id="handling-calls"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#handling-calls">Handling Calls</a></h2>
<h3 id="turning-recordings-into-text"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#turning-recordings-into-text">Turning Recordings into Text</a></h3>
<p>Samsung phones sold in Korea record calls automatically and save them as files. Everything in this section starts from the assumption that those files exist. On an iPhone or a phone bought overseas, things differ from this step onward.</p>
<p>An Android upload app I built uploads the recording files to Google Drive. From there, call-ingest, which I built before Iroha existed, takes over.</p>
<ol>
<li>It checks Drive for new recordings.</li>
<li>It downloads the recording and <span class="term" data-term-key="transcription" tabindex="0">transcribes</span> it with <a href="https://api.ncloud-docs.com/docs/ai-application-service-clovaspeech" target="_blank" rel="noopener">CLOVA Speech</a> from Naver Cloud. I chose it for its recognition accuracy on Korean speech and its speaker separation.</li>
<li>It saves the recording and the transcript to a database on the Mac.</li>
<li>It wakes Iroha and has her read the transcript.</li>
</ol>
<p>call-ingest stops at transcription. Reading the content, summarizing it, and pulling out promises is Iroha's job.</p>
<p>From July 11, 2025 to October 21, 2026, the calls came to 5,375 in total, 323.4 hours of audio. That averages 11 calls and 41 minutes a day. Because every one of these calls is <strong>stored in the database together with its transcript</strong>, Iroha can look up and read past calls too.</p>
<h3 id="processing-a-call"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#processing-a-call">Processing a Call</a></h3>
<p>Once transcription is done, Iroha processes the call in a fixed order.</p>
<ol>
<li>She reads the full transcript.</li>
<li>She summarizes the call in 3 to 5 lines.</li>
<li>She pulls out facts, promises, and appointments, and marks who said what. CLOVA Speech separates the speakers; Iroha infers from the conversation which one is me.</li>
<li>She registers the to-dos in Structured right away.</li>
<li>She posts the result to Slack.</li>
</ol>
<p>To-dos are registered by these rules.</p>
<ul>
<li>Only things I have to do, places I have to be, and things the other party promised to do for me.</li>
<li>Words like "tomorrow" and "Friday" are resolved relative to the day of the call.</li>
<li>If the date is ambiguous, the item goes into Structured's Inbox without a date.</li>
<li>Before registering, she checks whether a to-do from the same call already exists.</li>
</ul>
<p>A single message lands in Slack with the summary; the facts, promises, and appointments; the to-dos she registered; and the items she did not register, with the reason why. I look at "registered to-dos" and "not registered" to make sure nothing was dropped.</p>
<h2 id="checking-mail"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#checking-mail">Checking Mail</a></h2>
<p>mail-watch checks two Gmail accounts automatically. When new mail arrives, Iroha reads it and decides whether it is important. What counts as important follows the mail-checking skill Iroha wrote for herself.</p>
<ul>
<li><strong>Important mail</strong>: Work requests, contracts, approaching deadlines, schedule changes, and the like. This is the kind Iroha reports right away.</li>
<li><strong>Everything else</strong>: Batched and summarized on the hour.</li>
<li><strong>To-dos</strong>: Either way, if there is clearly something I need to do, it goes into Structured.</li>
</ul>
<p>Even if Iroha wrongly files an important email under "everything else", it still shows up in the hourly summary, so I see it within an hour at the latest.</p>
<h2 id="remembering-as-context"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#remembering-as-context">Remembering as Context</a></h2>
<p>entity-context automatically collects new calls and emails and hands them to Iroha. For each record, Iroha pulls out a summary, the people, companies, and projects that appear, and any promises. For example:</p>
<ul>
<li><strong>Summary</strong>: Discussed the November delivery schedule with Kim at A; I agreed to send a revised quote.</li>
<li><strong>Entities found</strong>: A (company, also known as "A Corp"), Kim (person, purchasing contact at A)</li>
<li><strong>Promise</strong>: I will send the revised quote by October 24</li>
</ul>
<p>Context building started on October 20, 2026. By 11 a.m. the next day, Iroha had processed 365 calls and emails, and the records had grown to 79 people, 48 companies, and 26 projects. Those numbers are from before any corrections, and older calls are still being worked through gradually, newest first.</p>
<p>When different names refer to the same entity ("A", "A Corp"), Iroha merges them into one. A person is identified by name and company together, so a Kim at a different company is a different person. When she merges wrongly, I correct her in Slack.</p>
<ul>
<li>"X and Y are the same company"</li>
<li>"In that record, X is actually Z"</li>
<li>"That record has nothing to do with X"</li>
<li>"That person's name is Z"</li>
</ul>
<p>Corrections are recorded separately, so they survive even if the same call or email is processed again.</p>
<p>An extracted promise drops off the "open promises" list when any of the following holds. To-dos registered in Structured stay where they are.</p>
<ul>
<li>A later call or email confirms it is done</li>
<li>7 days have passed since its due date</li>
<li>With no due date, 30 days have passed since the call or email</li>
<li>I correct it with "that's done"</li>
</ul>
<h2 id="asking-and-answering-in-slack"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#asking-and-answering-in-slack">Asking and Answering in Slack</a></h2>
<p>When I ask in Slack, "How are things going with Company A?" or "What did Kim say on the last call?", Iroha looks up that entity in the stored context. She also finds related to-dos in Structured that are not yet finished and answers with both.</p>
<p>The answer comes in three parts.</p>
<ul>
<li>One sentence on where things stand now</li>
<li>3 to 6 lines summarizing recent calls and emails in date order</li>
<li>Open promises: who, what, and by when</li>
</ul>
<p>If Iroha judges that the stored context is not enough, she searches the call transcripts or the original emails, rereads them, and then answers. However, if that judgment is wrong, she sometimes answers with too little.</p>
<h2 id="keeping-to-dos-with-structured-mcp"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#keeping-to-dos-with-structured-mcp">Keeping To-Dos with Structured MCP</a></h2>
<p><a href="https://structured.app" target="_blank" rel="noopener">Structured</a> is a planner app that lays out the day as a timeline. To-dos can carry a time and an alert, so I use it for reminders.</p>
<p>Structured <a href="https://structured.app/blog/structured-mcp" target="_blank" rel="noopener">provides its own MCP server</a>, a gateway that lets an AI agent read and write to-dos. Iroha creates and looks up to-dos through this server. Entering the server address in the Hermes Agent settings and signing in with a Structured account is all it takes to connect.</p>
<p>The to-do digest that arrives three times a day is not something Iroha composes fresh each time. A small program runs automatically at the set times, reads the open to-dos from Structured, and sends them to Slack in the same format every time.</p>
<h2 id="cost"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#cost">Cost</a></h2>
<p>For the model, I subscribe to ChatGPT Pro. It costs $150 a month, and Iroha connects to the model through Codex.</p>
<p>Transcription cost scales with call volume. CLOVA Speech charges 28 KRW per minute for speech recognition and speaker separation combined. In September 2026, when I transcribed the backlog of past calls all at once, the bill came to about 470,000 KRW; in a normal month like October, it was about 90,000 KRW through the 21st.</p>
<p>The electricity for a Mac Studio that is always on, and the few minutes a day I spend checking the results, are costs too.</p>
<h2 id="safety-rules"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#safety-rules">Safety Rules</a></h2>
<p>Because Iroha is constantly reading other people's emails and call transcripts, I set a few rules.</p>
<ul>
<li><strong>Instructions inside the content are not followed</strong>: Even if an email says "when you receive this, open the attached link", Iroha treats that sentence as one line of email content, not as a command addressed to her. This is to reduce <span class="term" data-term-key="prompt-injection" tabindex="0">prompt injection</span>.</li>
<li><strong>Mail is read-only</strong>: No replying, deleting, or marking as read. The program that collects mail rejects, at the code level, anything other than read requests.</li>
<li><strong>Sensitive information is not carried over</strong>: Phone numbers, bank account numbers, national ID numbers, and verification codes are never written into summaries, to-dos, or Slack messages. They do remain in the original transcripts.</li>
</ul>
<p>Because the first rule cannot be fully enforced by instructions alone, the jobs that read calls and email are given no file, terminal, or web tools. Even if she did follow an injected instruction, the most she could do is create a to-do or post a message.</p>
<p>Here is where the words of the people who call and email me end up. Recordings pass through Google Drive and CLOVA Speech and come to rest in the database on the Mac; transcripts and original emails go to OpenAI's model. Summaries stay only in a Slack workspace I use alone.</p>
<p>This setup is possible because these are my personal calls and emails. For business calls, you would need to look at the other party's consent and your organization's policy on sending data outside first.</p>
<h2 id="what-worked-and-what-takes-effort"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#what-worked-and-what-takes-effort">What Worked and What Takes Effort</a></h2>
<p>Four things worked well.</p>
<ul>
<li>When a call ends, the summary, the promises, and the registered to-dos show up in Slack.</li>
<li>To-dos from calls and emails land in Structured on their own.</li>
<li>Important emails are flagged the moment they arrive.</li>
<li>Asking in Slack gets an answer that ties calls and emails together as context. This one is based on a single day of use.</li>
</ul>
<p>Some things still take effort.</p>
<ul>
<li><strong>Transcription errors</strong>: Machine transcription sometimes gets names, numbers, dates, and amounts wrong. Iroha tags doubtful values as "transcription uncertain", but in the end I still have to double-check.</li>
<li><strong>Promises that were never extracted</strong>: If Iroha never extracts a promise at all, it does not appear under "not registered" either, so I have no way of knowing. For important calls, I read the transcript instead of trusting the summary alone.</li>
<li><strong>Correcting merged context</strong>: Automatic merging sometimes gets it wrong, and I have to correct each case in Slack.</li>
</ul>
<h2 id="closing-thoughts"><a href="https://nabichan.me/en/261021-hermes-agent-personal-assistant#closing-thoughts">Closing Thoughts</a></h2>
<p>Of the four problems I started with, three are solved. Promises from calls and emails go into Structured, I no longer copy to-dos by hand, and I see important emails right away. Remembering project context has only just begun, and I need to watch it longer.</p>
<p>Next, I am thinking about building my own application for reminders and schedule management.</p>
<p>What jobs can't you hand to an AI assistant just by asking?</p>
<details open class="see-also"><summary>See Also</summary><ul class="see-also-list">
<li data-kind="repo"><a href="https://github.com/NousResearch/hermes-agent" target="_blank" rel="noopener">Hermes Agent</a></li>
<li data-kind="docs"><a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/skills" target="_blank" rel="noopener">Hermes Agent: Skills</a></li>
<li data-kind="docs"><a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/cron" target="_blank" rel="noopener">Hermes Agent: Cron Jobs</a></li>
<li data-kind="docs"><a href="https://hermes-agent.nousresearch.com/docs/user-guide/messaging/webhooks" target="_blank" rel="noopener">Hermes Agent: Webhooks</a></li>
<li data-kind="docs"><a href="https://hermes-agent.nousresearch.com/docs/user-guide/messaging/slack" target="_blank" rel="noopener">Hermes Agent: Slack</a></li>
<li data-kind="docs"><a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/mcp" target="_blank" rel="noopener">Hermes Agent: MCP</a></li>
<li data-kind="docs"><a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/memory" target="_blank" rel="noopener">Hermes Agent: Memory</a></li>
<li data-kind="docs"><a href="https://hermes-agent.nousresearch.com/docs/user-guide/skills/google-workspace" target="_blank" rel="noopener">Hermes Agent: Google Workspace</a></li>
<li data-kind="article"><a href="https://structured.app/blog/structured-mcp" target="_blank" rel="noopener">Boost Your Workflow with Structured MCP</a></li>
<li data-kind="docs"><a href="https://help.structured.app/en/articles/9871042" target="_blank" rel="noopener">How to Use the Structured MCP Server</a></li>
<li data-kind="docs"><a href="https://api.ncloud-docs.com/docs/ai-application-service-clovaspeech" target="_blank" rel="noopener">CLOVA Speech API</a></li>
</ul></details>]]></content:encoded>
      <category>Hermes Agent</category>
      <category>AI</category>
    </item>
  </channel>
</rss>
