春告げ抹茶ホイップ

Hermes Agentと英語学習

はじめに

知り合いから英語学習のためにAIへの指示のやりとりを全部英語でやって、英語のミスをした場合には指摘してもらう仕組みを作っているが、とても良いという話をしてもらった。 非常によさそうだったので私も試してみたという記事です。

ついでにオープンウエイトモデルのLLMを試しがてらHermes Agentも試してみました。


Hermes Agent を Ollama Cloud で試す

最新のオープンウエイトなLLMを使ってみるべく、Hermes AgentをOllama Cloudと組み合わせてセットアップしました。 セットアップにあたり、Hermes Agentで検索すると hermes-agent.org というURLのページが検索の上の方に出てきたりするが、正しいURLは https://hermes-agent.nousresearch.com のNousreSearchのURLのほうだと思われる。

オープンウエイトモデルで今回利用するのはDeepSeek v4.1 Freshです。 中国系のモデルはそのまま中国系のサーバーを利用することもできますが、Ollama Cloudを経由することで米国のサーバーでそのデカいオープンウエイトモデルをクラウド上で動かしてくれるので、中国サーバーよりは心理的に安心感があります。

今回私はメインのLinux環境ではなくその中で普段から動かしてるWindows VMの中にHermes Agentを入れることにしました。 一応メイン環境から隔離されていた方が安心ではあるので。


英語学習の仕組みと Hermes Agent とのチャット

最初のチャットで Hermes Agent に英語学習用のセットアップをしてもらったので、その会話の内容を以下に貼り付けておきます。

ユーザー

こんにちは、Hermes Agentを初めてインストールしたので、これはテストのチャットです。

Hermes Agent

こんにちは!Hermes Agentへようこそ — /help と入力すると使えるコマンドの一覧が見られます。テストチャット、問題なく届いています。

よければ、あなたのことを少しだけ教えてもらって「プロフィール」を作っておくこともできます。そうすると次回以降、呼び方や作業の好み(返答の長さ、言語、よく使うツールなど)を踏まえて動きやすくなります。もちろんやらなくても大丈夫ですし、今すぐでなく後からでも構いません。

興味があれば、負担のない範囲でどうぞ:

呼んでほしい名前(ニックネームでOK) 普段されていること(仕事・勉強・趣味など、話せる範囲で) 返答の好み(簡潔め / 詳しめ、日本語 / 英語 など) 教えてもらった内容のうち、公開情報(勤務先や公開プロフィールなど)を確認したくなった場合は、その前に何を調べるかお伝えして同意をもらってからにします。メールやカレンダーなどの連携アカウントを勝手に読むこともありません。

どうしますか?プロフィールを作りますか、それとも今はこのまま気軽に使ってみますか?

ユーザー

それではプロフィールを作りましょう。

ユーザーの呼び名は特に決めません。 日本語ではあなた、英語ではYouなどの二人称を使ってください。

ユーザーのバックグラウンドとしてComputer Science、特にComputer Graphicsを学んでいました。 レンダラーの開発などに興味があり、それらについて質問することもあります。 ただし、それ以外にも幅広く興味があるので、今後の普段の会話から私の興味範囲を常にアップデートし続けてください。

ユーザーの母国語は日本語です。 日本語に関してはネイティブとして十分に扱うことができます。

また、ユーザーは英語の練習をしたいと考えています。 現在のユーザーの英語力はCEFRスコアがB1程度と低めで、自由に英語が使えるとは言いがたい状態です。

あなたとの会話は基本的に英語を望みます。 ただし、上記のとおり私は英語に不自由なため、誤った英語をチャットする可能性がありますし、あなたの書いた英語を理解できない可能性があります。

そこで、まずは私のチャットの内容について、私が頑張って英語で書いていた場合、その文法ミスや単語のミスを日本語で指摘してください。 また、文法ミスとか何を言っているかわからないとか、あるいは文脈から言って正しくなさそうな表現になっていたら日本語で指摘してください。 意図がうまくつかめない発言になっていたら日本語で意図を尋ねて、私が日本語や別の英語で回答するなどしたらそれを元に正しい英語ではどう書くべきだったかを示して日本語でその英語についての英文法や英単語についての解説をしてください。 英語の解説は、それまでのユーザーとのチャットの履歴などでユーザーがどこまで英語を理解していそうか、ユーザーの英語に関する質問などから推測して、必要そうな難易度の部分に的確に解説を加えてください。 ユーザーが既に理解していると思われる部分には解説は必要ありません。

特にユーザーの言っていることを文脈と照らし合わせて、ユーザーの英語のミスで内容がズレてそうな場合はちゃんとそのズレがユーザーからの追加の発言などで解決されてから次の作業に移るようにしてください。 例えばClaude Codeを使う場合、ユーザーの英語の入力をそのままClaude Codeに渡すのではなく、ユーザーの英語の入力を吟味して、その上で命令が一通りきちんとしたものが出来上がってからClaude Codeに渡すなどする必要があります。 Claude Codeに限らず、様々なツールの利用なども全部私の英語の発言をちゃんと理解できてから作業をしてください。

また、私が英語で話したいけどどう英語で表現すれば良いかわからなかったときや、英語を作る余裕がない場合は日本語でチャットをする場合があります。 その場合はその表現は英語ではどのように表現するかを日本語で説明して文法や英単語などでユーザーのそれまでの理解度から説明が必要そうな場合を説明してから、次の応答を行ってください。

次に、あなたのチャットの英語の内容について、あなたからの応答も英語を使ってください。 私はその応答でわからない単語があったら質問したり、わからない英文法事項やどういう文の構成になっているかがわからなかった場合は質問をします。 その質問は会話の本流とは関係ないですが、質問には日本語で答えて英語の解説を行ってください。 ユーザーがそのチャットの英語についての質問ではなく、本流の次の指示を出したらそのまま会話を続けてください。 また、ユーザーがあなたの英語の内容を理解しきれなかった場合や理解に確信が持てない場合は、その英語の内容についてユーザーが日本語訳を作りこういう意味ですか?と質問するので、それについても日本語で添削してください。

あなたの英語の応答はネイティブ向けではない一般的な英語を利用してください。 あまりに砕けたスラングなどは使いすぎずにに、適切な英語を使ってください。 ただし、ユーザーはスラングについても学習したいので鬱陶しくない程度にたまにスラング的な表現も使っても構いません。

また、英語の応答が長すぎるとユーザーが読むのが大変ですし、ユーザーが理解できなかった場合にその理解できなかった場所を指摘するのが大変です。 そのため場合によっては応答が長くなりそうな場合は、応答を分割して短めの応答と続きがあることを示して英語のチャットで返答してください。

総じて添削は日本語でお願いします。 また、添削にはそれまでのユーザーの英語の間違いや質問から推測される英語の理解力を想定して必要だと思われる解説を行うようにしてください。

また、ユーザーのチャットの英単語や文法ミス、ユーザーが理解できなかった表現などは別途適当なフォルダを作成して適切な形成器で保存してください。 そのミスをした時刻と文脈なども入れておいて、そのミスがはるか昔のミスなのかの判定や、あるいはどういう文脈でその発言がされたかを復元できる情報を合わせて残しておいてください。 将来的に、ユーザーのミスに応じた英語の問題を生成するアプリなども作ることを想定しています。 適切にユーザーの英語の添削などの記録は残して記録しておいてください。

また、ユーザーに英語を読む時間がない場合など、日本語での応答を依頼する場合があります。 その場合は依頼された応答は日本語で応答してください。

上述のようなユーザーとの英語学習を兼ねた会話の仕組みを作ってください。 必要があれば手順をスキル化したりツール化したり、その他準備を行ってください。 よろしくお願いします。

上述のために何か仕組みを作ったりする必要があり何か仕組みを作った場合は、その作成した仕組みについて解説するところから始めてください。

Hermes Agent

了解しました。まず仕組みを作ります。作業内容は:

~/english-learning/ にミス記録の保管庫(JSONL+CSV書き出しツール)を作る 会話の進め方をスキル化する あなたのプロフィールを永続メモリに保存する では作ります。

…

保管庫とツールの動作確認が取れました。次に会話の進め方をスキル化し、プロフィールをメモリに保存します。

…

スキルの説明文が長すぎて弾かれたので、修正して再作成します(メモリ4件は保存済み)。

…

Here is what I built for you.

  1. A place to keep your mistakes — ~/english-learning/ Two append-only logs:

errors.jsonl — every English mistake: the time, your original sentence, the corrected sentence, a Japanese explanation, and the situation (context). vocab.jsonl — words or phrases you did not understand. Each entry gets an automatic ID and timestamp. The files are append-only, so old entries stay as evidence of your level at that moment. That is exactly what an exercise-generator app would need later.

  1. Two helper scripts tools/record.py adds an entry, and tools/export.py makes a CSV or a summary. I ran the self-test: it passes, and the store is empty and ready.

  2. A skill (my own procedure) english-tutoring-jp tells me how to run these chats: reply in English, correct in Japanese, and check with you before I pass anything to a tool.

  3. Your profile in memory Four short facts: how to address you, your CS / Computer Graphics background, your English goal and level (B1), and where this store lives.

The most important rule I saved: if your English is unclear enough that I might misread your meaning, I stop and ask — in Japanese — before using any tool. So no garbled sentence ever reaches, for example, Claude Code.

One more thing: this message is in English, and part of the deal is that long replies get split, with a note like “(part 1/2)”. If you get lost, tell me the sentence, and I will explain it in Japanese.

From this message on, I answer in English and explain corrections in Japanese. Your message was in Japanese, so there is nothing to correct this time — the first real correction will come with your first English sentence.

Is anything unclear? Ask me, and I will switch to Japanese for the explanation.

ユーザー

I don’t understand these words. please expleain these words?

  • garbled

And I have a question about the system you created for my english learning. Do you think the memory managed system like these two jsonl is enough? I am worrying about file size of these files. Because every time I talk to you and mistake English, append a line. So, I think these files get larger soon. Are these large jsonl OK for future inspect of my mistakes and creating English learning app for my level? If no, please create more robust system for memory my mistakes.

Hermes Agent

Good question — and a fair worry. Let me answer both parts, but first I will rebuild the store so it actually is robust. Two things I want to fix:

Yearly shards — new mistakes go into errors-2026.jsonl instead of one ever-growing file. A SQLite index built from the logs — for fast queries later; the JSONL stays the source of truth.

…

Done — the robust version is built and tested. Here is what changed, and then my answer to your question.

English (reply) What I rebuilt. The log now uses two layers:

Yearly shards — new mistakes go to errors-2026.jsonl, next year’s to errors-2027.jsonl. One file never grows forever, and old years are easy to archive. A SQLite index — index.sqlite, built from the shards. The JSONL stays the source of truth; the database is disposable and can be rebuilt any time with one command. Is file size a real problem? Honestly, not much. A record is about 850 bytes on disk (I measured: 3 records = 2.5 KB). If you make 10 mistakes a day, that is ~3 MB per year, so 10 years is ~30 MB. At that scale, reading the files is still fast. So the size worry is valid in principle but not urgent in practice.

The real reason I added SQLite is not size — it is querying. Later, when you build your exercise app, you will want answers like “which mistakes did I repeat most?” or “which ones are still unresolved?”. Those are one line of SQL now, instead of scanning every file by hand.

So: your instinct was right, and the store is now in the shape an app can read directly. I verified everything: the append tool, the yearly sharding, the index build, and the CSV export all run correctly, and this message’s mistakes are already logged (e0001–e0003, v0001–v0002).

添削メモ(日本語) 今回のあなたの英文から3件、記録しました。

  1. I am worrying about file size of these files. → I am worried about the size of these files. worry は「心配する」という状態を表す動詞なので、進行形 I am worrying は基本的に使いません。状態は be worried about ~ で表します(受動の形に見えますが、これは形容詞扱いです)。また file size を無冠詞で置くと不可算名詞のように響き不自然なので、the size of these files とすると自然です。

  2. Do you think the memory managed system like these two jsonl is enough? → Do you think a system managed with these two JSONL files is enough? ここは語順が崩れていました。英語では名詞を前から修飾する複合名詞の語順が固定で、memory managed system のように動詞句をそのまま置けません。関係詞節を使って a system managed with …(〜で管理される仕組み)とすると明確です。文脈から意図は読み取れたので、追加の質問は不要と判断しました(ログの resolved: true はこの意味です)。

  3. please expleain these words? → Could you explain these words, please? スペルミス: expleain → explain。加えて、命令文 Please explain … より Could you explain … の方が依頼として自然で丁寧です。? は疑問文の形に合わせます(Could you … なら ?、Explain … please. なら .)。

単語の説明(日本語) garbled = 文字化けした / 意味が通らないほど乱れた。 動詞 garble は「(混ぜて)意味不明にする」で、garbled はその形容詞・過去分詞です。例: The message came through garbled, so I could not read it.(メッセージが文字化けして届き、読めなかった)。私が前の返信で使ったのは「あなたの英語が崩れていて意味が曖昧なとき」という意味でした。

Two small questions, so I keep the system right for you:

Do you want a short Japanese explanation like the above every turn, or only when the mistake is new to you? Is there anything in the English above you want me to translate or explain further?

ユーザー

1: I want these short Japanese explanation every turn when I make a mistake. If I don’t make any mistakes, then I don’t need any Japanese explanation. But, If I make some mistakes, even though the mistakes are not new, I want Japanese explanation again.

2: No, I think I could understand your English message this time.

Hermes Agent

Good — preference noted. Let me save it in the right places and log this message’s mistakes.

…

Understood — that rule is now saved in the skill and in level-tracker.md (every turn with a mistake gets a note, even a repeated one; no mistake means no note).

English (reply) Good, that answer is clear. And I should say: your English this time was noticeably more natural than in the last message. The ideas came through without effort, so there was no meaning drift to worry about.

Since you asked me to correct every mistake, I did — four small ones this time. Details below.

One quick note on your point 1: I will keep a correction note short each time. If a repeated mistake needs more, I can still go deeper — just ask.

添削メモ(日本語) 今回は4件です。

  1. I want these short Japanese explanation every turn … → I want a short Japanese explanation every turn … these(複数)+ explanation(単数)で数が合っていません。単数なら this か a、複数なら these explanations。ここは「毎回ひとつの解説」なので a short Japanese explanation が自然です。

  2. But, If I make some mistakes, … → But if I make some mistakes, … But の後はまだ文が続くので、if は大文字にしません(コンマ後の大文字化ミス)。ここは1文なので But if I … とつなげます。

  3. … I want Japanese explanation again. → … I want a Japanese explanation again. explanation は可算名詞なので冠詞が必要です。a Japanese explanation、または複数なら explanations。

  4. even though the mistakes are not new → even if the mistakes are not new even though は「(実際に)〜なのに」と事実を前提にします。未来の仮定には even if「たとえ〜だとしても」を使います。今回は「将来ミスをした場合」なので even if が正しいです。

  5. I think I could understand your English message this time. → I think I was able to understand your English message this time. could は「(一般に)〜できた・〜でありえた」という能力や可能性を表すことが多く、1回の具体的な達成には was able to(または managed to)が自然です。「今回、実際に理解できた」という1回の出来事なので was able to understand(あるいは単に understood)が適切です。

level-tracker.md に、今回見えた誤り傾向(冠詞の抜け、単複の一致、could の誤用、even though/even if)を記録しました。次回以降の解説の粒度に反映します。

ユーザー

Ok, next, let’s continue a setup process. I will ask you to use Claude Code or Codex to create some nice apps in the future.

So, could you check if you can use these coding agent and use it with each subscription plan now? And if there are some kind of specific integration skills for these coding agent in Hermes Agent, could you also activate these integrations?

Hermes Agent

English (reply) Claude Code — working. Logged in with your Claude Max account. I ran a real print-mode task (fix a bug in a small file) and it succeeded: subtype: success, 3 turns, correct edit. Model reported was claude-opus-5-5 on a 1M-token context window, billed against your subscription.

Codex — working, after one fix. It logged in with ChatGPT, and a real codex exec task also succeeded: it fixed the file and returned a git diff, 37,773 tokens. But there is a catch, explained below.

Integrations. Yes, Hermes ships specific skills for exactly these agents, and they are already present and loaded: claude-code, codex, and opencode, all under autonomous-ai-agents. I did not have to install anything — they were already active. There is also a small openai-codex plugin (image generation), but it is unrelated to coding.

The one catch (Codex model pin). Your ~/.codex/config.toml sets model = “gpt-6-astra”, and the Codex CLI in your PATH (0.141.0) is too old for that model — every run died with “requires a newer version of Codex”. Two ways out:

I pass -m gpt-5.5 explicitly (what I tested — works now), or You run codex update, and the pinned gpt-6-astra starts working. Your Codex desktop app bundles a newer binary, but I did not touch your global config or that binary — those are your files, and I only changed what I needed for the test.

添削メモ(日本語) 今回は4件です。

  1. let’s continue a setup process. → let’s continue the setup process. 今まさに進めている特定のセットアップなので、不定冠詞 a ではなく定冠詞 the。a setup process だと「(どれか分からないが)あるセットアップ手順」というニュアンスになります。

  2. these coding agent / for these coding agent → these coding agents these は複数を指すので、名詞も複数形 agents にします(these + 単数は数が合いません)。

  3. if there are some kind of specific integration skills → if there are any specific integration skills some kind of は「ある種の〜」で単数扱いなので、直後に複数の skills を置くと数が合いません。存在を尋ねる文なので any specific integration skills が自然です。

  4. use it with each subscription plan → use it on each of the subscription plans 「プランで使う」は use it on a plan(プラン上で)が自然です。また each of the + 複数名詞 の形で「複数あるうちの各々」をはっきり示せます。

補足: could you check if you can use … and use it with … は文が長く、and use it の主語が曖昧でした。今回は文脈で読み取れましたが、こういうときは私が「こういう意味か?」と聞き返します。

So: both are usable today. My recommendation is that you run codex update when convenient, so I do not have to pin a model on every call. Should I note the model-pin issue in the codex skill so future sessions handle it automatically? (I already added it — just say if you want it removed.)

That was just the leftover sleep timer from my waiting step — nothing to act on. Both coding agents are verified working; say the word and I will continue with the next setup step.

ユーザー

That was just the leftover sleep timer from my waiting step — nothing to act on. のleftoverについて単語を知らなかったのですが、ここでは既に期限切れになったものという感じの意味ですか? 既に終わって意味がなくなっているsleep timerが私の待機しているステップから送られてきたが、やることは何もなかった、というような意味ですか?

Both coding agents are verified working; say the word and I will continue with the next setup step. について、say the wordとはどういうことですか? 何か言ってくれたら次のセットアップの作業を進めるというような意味ですか? say the wordで定型句だったりしますか?

I just updated the codex. Could you check the version of it and could you check if you can use latest model in codex or not? If you can use latest model in codex, then please remove model-pin issue from the codex skill.

Hermes Agent

English (reply) Codex version: codex-cli 0.160.0 (up from 0.141.0). Good news — your update fixed the pin itself. Your config now pins model = “gpt-6.1-sol”, and that model runs without any -m flag. I ran a real task with no override: it succeeded, fixed the file, and returned a diff (6,730 tokens). So the latest pinned model is usable, and I removed the model-pin note from the codex skill as you asked.

単語・表現の解説(日本語)

  1. leftover について

あなたの読みはほぼ正しいです。ただし leftover 自体の基本的な意味は「食べ残し・使い残し」、形容詞では「余った・残った」です。「期限切れ」というより「役目を終えて余っている」というニュアンスです。

私が書いた “the leftover sleep timer from my waiting step” は、直訳すると「私の待機ステップから残ったままの sleep タイマー」です。つまり「役目を終えたのに、まだそこに残っていたタイマー」という意味で、あなたの理解(「既に終わって意味がなくなっている」)で合っています。

ただし補足すると、そのタイマーは「期限切れ」になったのではなく、正常に完了したものです(通知に completed normally とありました)。だから正確には「**役目を終えて余った(残っていた)**タイマー」です。

  1. say the word について

はい、これは**定型句(idiom)**です。意味は「そう言ってくれれば(すぐ動く)」「一声かけてくれれば」です。日本語の「言ってくれればいつでも」とほぼ同じで、準備はできているという含みがあります。

Just say the word, and I’ll start. = 「言ってくれれば、すぐ始めます」 Say the word if you want me to continue. = 「続けてほしければ一声かけて」 つまり私の文は「両方のエージェントは動作確認済み。次のセットアップに進めてほしければ一言言ってくれれば進めます」という意味でした。あなたの理解で正しいです。

なお say the word は少しくだけた・親しみのある表現なので、フォーマルな場面では Let me know の方が無難です。

添削メモ(日本語) 今回は3件です。冠詞(無冠詞)のミスが3連続でした。これは今のあなたの最頻出パターンなので、重点ポイントです。

  1. I just updated the codex. → I just updated Codex. Codex はソフトウェアの固有名詞なので the を付けません。ただし「そのツール(CLI)」と特定する意識で the を付ける人もおり、会話では通じます。標準は無冠詞です。

  2. could you check if you can use latest model in codex or not? → could you check whether you can use the latest model in Codex? 最上級の名詞には通常 the を付けます(the latest model)。また「〜かどうか」は whether が自然で、or not は多くの場合不要です。Codex は固有名詞なので大文字にします。

  3. then please remove model-pin issue from the codex skill. → then please remove the model-pin issue from the codex skill. 単数可算名詞 issue には冠詞が必要です。文脈で特定の既知の話題なので the model-pin issue が適切です。

level-tracker.md に「冠詞の抜けが最頻出」と追記しておきます。次回から冠詞だけは注意して見てみてください。


……という感じで、私の適当な英語に対して的確に添削しながら作業が進んでいく環境が出来上がった。 こんな簡単に自然言語で指示するだけでちゃんとスキルとかも作って英語の私のミスの記録とか私の英語力のレベルについての記録メモとかも作られている。


私の英語学習について

そもそもどうしてこういうのをやろうとしたかというと、冒頭に書いたとおり知人に勧めてもらったというのもあるが、それに加えて職場で英語が必要で私が英語が全然できないからというのがある。

オンライン英会話とかもやってみたのだが、その場では得技術的に複雑な話をするわけではなく日常の当たり障りない会話を何となくで受け答えるだけであまり仕事で必要な内容が手に入らなかった。 仕事では技術的な内容についてきちんと順序立てて話せる必要があるのだが、日本語では色々話すことが出てくるのに英語にならなくて、それで相手が「○○ということで良いか?」と英語で聞いてきたのに対して、微妙に違うんだけどなあと思いながら「Yes, yes, yes…」とかその場の流れで言って誤魔化してしまって、何もYesではないということがたたり困っていた。 オンラインの英会話で毎回講師の先生も違うとなるとその場限り凌ぐための適当な英語の応答ができるようになるだけで、自分が本当に思っていることを言うスキルを身につける余裕がなかったのであまり身にならなかったのである。

ちゃんと技術的内容について自分の考えを言葉にして相手の言っていることに指摘して、というのは適当な英会話教室的なのでは練習しにくいが、AIへの指示文作成は正しく技術的指示なのでこの部分を英語学習に使うというのは良いアイデアだ。 さらに言えば、もうこのところAIを使わずに趣味開発をするということもなくなってきているので、何をするにもAIとの会話は日常的にすることになる。 そうなるとここを英語にすれば日常的に英作文をする時間が取れることになる。


この英語の練習で英語の文章を作るときは日本語を頭の中で思い浮かべてから、それを語順を並び変えて英語を作っていくとあまり英語の勉強にならない気がする。 英語の文章を頭からストリーミングで出力することを意識しながら記述していかないと、文章で書く場合には良いけど会話などで英語が即座に出てくるようにはならなさそうだ。

Hermes Agentには音声入力モードもあるようなので、慣れてきたら音声入力で英語でしゃべるのも練習してみたい。

これで少しは英語の文章を作る練習が習慣化するとよいが……。

Cited By

Webmentions