| name | hermes-query |
| description | Query live Hermes-owned external services through `hermes chat -q`. Use when required data has not already been captured in Inbox. |
hermes-query — コア → Hermes 同期呼び出し(pull 経路)
にはコアエージェント ⇄ Hermes の2 経路がある:
| 経路 | 向き | トリガー | 用途 | 既定 |
|---|
| push(capture) | hermes → Inbox | on-demand(ジョブリスト指示)/ 外部イベント | 定常取り込み(Calendar/Tasks/Slack 等を Inbox/ へ) | 定常取り込みはこちら |
| pull(このスキル) | コア → Hermes(CLI) | あなたが必要時に呼ぶ | ライブな確認・検索(今のタスク? この件の Slack は?) | 補助 |
なぜ hermes 経由か:Slack / Google Workspace / Notion / Web / GitHub MCP の認証はすべて hermes が一元所有し(GitHub PAT も hermes のみ保持、#38)、
コアエージェントは持たない([[.codex/rules/agent-boundaries.md]] §6)。だからライブ外部参照は Hermes に委譲する。
1. いつ使うか(トリガー)
- Google Tasks / Calendar をその場で確認:「今の未完了タスクは?」「明日の予定は?」(Inbox 未生成・最新が欲しい時)
- Slack を検索させる:「#general で先週の "締切" を含む発言」「自分への未読 mention」「このスレッドの結論」
- Notion を読む:清書版 KB の特定ページ参照(公開は一方向だが read は可)
- GitHub を読む:他リポのコード / PR / commit / issue をその場で確認(例「
your-org/your-repo の最新コミット」「この repo の README」)。GitHub MCP は Hermes 所有なのでコアからの直接利用不可 → pull で委譲。定常のコード変化取得は on-demand github-eod-capture(push → Inbox/{YYYY-MM-DD}/code/)に任せ、pull は「今すぐ・特定リポ」用途に限る
- Web の軽い確認を Hermes 側で完結させたい時(広域調査はコア CLI の標準調査手段を使う)
使わない場面
- 定常取り込みで足りる → on-demand capture(push)に任せる。毎回 pull しない。
- Vault ノートの作成・編集 → コアエージェントが直接(hermes に投げない)。
- 外部システムへの書き込み・破壊的操作 → このスキルの既定スコープ外。必要なら明示的に範囲を切り、ユーザー承認を取る([[.codex/rules/agent-boundaries.md]] §5 承認ティア)。
- コード作業 → コアエージェントが直接行う(委譲しない)。
2. 呼び出し方
hermes chat -q が非対話ワンショット。
hermes chat -q "<Hermes への指示>" -Q --source core-agent
-q/--query:単発クエリ(非対話)
-Q/--quiet:バナー・スピナー抑制(出力をパースしやすく)
--source core-agent:セッション元タグ(追跡用)
- 必要なら
-s <skill> で hermes 側スキルを事前ロード(例 -s google-tasks)
タイムアウト:LLM セッション + 外部 API 呼び出しで 30–120 秒かかる。Bash ツールの timeout を 180000(3 分)程度に。
⚠️ 文字コード(日本語 Windows のみ必須):hermes(Python)は子プロセス出力を既定のロケールエンコーディング(日本語 Windows では cp932)でデコードするため、’(U+2019)等の非 cp932 文字が混じると UnicodeDecodeError でリーダースレッドが死に、rc=0 なのに stdout が空 / 欠落する(エラーにならず気づきにくい)。呼び出し前に PYTHONUTF8=1 を必ず設定(UTF-8 モード強制。PowerShell なら $env:PYTHONUTF8 = '1')。恒久化は User 環境変数 PYTHONUTF8=1。
PYTHONUTF8=1 hermes chat -q "<指示>" -Q --source core-agent
指示の書き方(重要)
hermes は自律エージェントなので、何を・どこから・どう返すかを明示する:
- タスク:例「Google Tasks の未完了タスクを一覧して」
- ソース指定:どの接続か(Slack の channel 名 / Tasks のリスト / Notion ページ)
- 戻し方:
- transient(その場参照):「結果を簡潔に標準出力に返して。ファイルは作らないで」→ コアエージェントが stdout を読む
- durable(残す):「生のまま
Inbox/{YYYY-MM-DD}/slack/{slug}.md に書いて、パスだけ返して」→ Inbox 経由([[.codex/rules/inbox-routing.md]])。curated へ直接書かせない
3. 結果の統合(Output Contract)
- transient:stdout を読み、結論を会話に統合([[AGENTS.md]] §4 の出力契約:結論→根拠→次アクション)。
- durable:hermes が
Inbox/ に置いたファイルを コアエージェントが curate(move/蒸留は通常フロー。宛先判断は Daily 集約/EOD 配分で コアエージェントが判断)。
- 失敗時(未認証・接続不可・タイムアウト・出力空):hermes の stderr/末尾メッセージを 1 行で要約し、原因(auth 失効? rc=0 で出力空なら cp932(日本語 Windows) →
PYTHONUTF8=1)と次アクションを提示。hermes doctor / hermes status で切り分け可。※chat -q は単発スタンドアロンなので gateway 稼働は不要(gateway 停止は pull 失敗の原因ではない)。
4. 境界(守ること)
- push を pull で置き換えない:定常データは on-demand capture(push)に任せ、pull は「今すぐ・特定の」確認に限る。
- Inbox 原則を守る:残すべきデータは hermes に
Inbox/ へ書かせる。curated への直接書き込みは禁止(single-writer / [[.codex/rules/agent-boundaries.md]])。
- read/query 既定:外部への書き込み・送信は明示スコープ + 承認。
- 接続は複製しない:コアエージェントが直接 Slack/GWS/Notion を叩こうとしない。必ず hermes 経由。
関連
- [[.codex/rules/agent-boundaries.md]] — エージェント分担(Hermes / コア)・接続所有・push/pull 経路
- [[.codex/rules/inbox-routing.md]] — durable 結果の置き場(Inbox)
- Hermes Agent(upstream) — hermes CLI リファレンス(
hermes chat -q 他)
- [[Meta/connections/README.md]] — 各接続のセットアップ・トラブルシューティング