5 GitHub Tools That Give Hermes Superpowers #Hermes #GitHub #superpowers #ainews #opensource
Your Hermes Agent setup could be doing more. These five GitHub repos add a command center, browser access, better conversation memory, useful skills, and a way to see what your agent actually did.
Get all five here:
1. Hermes Workspace
Chat, files, memory, skills, and a terminal in one interface.
outsourc-e/hermes-workspace
2. Hermes Browser Extension
Bring your Hermes Agent into a browser side panel.
abundantbeing/hermes-browser-extension
3. Hermes LCM
Store and retrieve conversation history beyond context compression.
stephenschoettler/hermes-lcm
4. Evey’s Hermes Plugins
Plugins and skills, including “verify-before-done” for checking work before claiming it’s finished.
42-evey/hermes-plugins
5. Hermes Labyrinth
Inspect your agent’s tool calls, results, failures, and activity.
stainlu/hermes-labyrinth
Get Hermes Agent from Nous Research:
NousResearch/hermes-agent
Which one are you trying first? Comment below, like the video, and subscribe for more practical AI tools.
Subscribe to With Manny:
youtube.com
Join my newsletter:
mannys-newsletter-bf191f.beehiiv.com
Explore the HighLevel Bootcamp:
gohighlevel.com
Affiliate link. I may earn a commission if you purchase through it.
#HermesAgent #GitHub #AITools #WithManny
[de-DE] 5 GitHub-Tools, die Hermes Superkräfte verleihen #Hermes #GitHub #Superkräfte #AINews #OpenSource
Ihre Hermes-Agent-Konfiguration bietet mehr Möglichkeiten. Diese fünf GitHub-Repositories erweitern Ihre Konfiguration um ein Kommandozentrum, Browserzugriff, eine verbesserte Gesprächsspeicherung, nützliche Skills und eine Übersicht der Aktionen Ihres Agents.
Alle fünf Repositories finden Sie hier:
1. Hermes Workspace
Chat, Dateien, Speicher, Skills und Terminal in einer einzigen Oberfläche.
outsourc-e/hermes-workspace
2. Hermes Browser Extension
Integrieren Sie Ihren Hermes-Agent in die Seitenleiste Ihres Browsers.
abundantbeing/hermes-browser-extension
3. Hermes LCM
Speichern und Abrufen von Gesprächsverläufen ohne Kontextkomprimierung.
stephenschoettler/hermes-lcm
4. Evey’s Hermes Plugins
Plugins und Skills, darunter „verify-before-done“ zur Überprüfung der Arbeit vor der endgültigen Bestätigung.
42-evey/hermes-plugins
5. Hermes Labyrinth
Überprüfen Sie die Tool-Aufrufe, Ergebnisse, Fehler und Aktivitäten Ihres Agenten.
stainlu/hermes-labyrinth
Hermes Agent von Nous Research herunterladen:
NousResearch/hermes-agent
Welches Tool testen Sie zuerst? Schreiben Sie es in die Kommentare, liken Sie das Video und abonnieren Sie den Kanal für weitere praktische KI-Tools.
Abonnieren Sie With Manny:
youtube.com
Meinen Newsletter abonnieren:
mannys-newsletter-bf191f.beehiiv.com
Das HighLevel Bootcamp entdecken:
gohighlevel.com
Affiliate-Link. Ich erhalte möglicherweise eine Provision, wenn Sie über diesen Link kaufen.
#HermesAgent #GitHub #KI-Tools #WithManny
[es-US] 5 herramientas de GitHub que le dan superpoderes a Hermes #Hermes #GitHub #superpoderes #noticias...
Tu configuración de Agente Hermes podría ser más completa. Estos cinco repositorios de GitHub añaden un centro de comandos, acceso al navegador, mejor memoria de conversaciones, habilidades útiles y una forma de ver qué hizo realmente tu agente.
Descárgalos aquí:
1. Hermes Workspace
Chat, archivos, memoria, habilidades y una terminal en una sola interfaz.
outsourc-e/hermes-workspace
2. Extensión de navegador Hermes
Integra tu Agente Hermes en un panel lateral del navegador.
abundantbeing/hermes-browser-extension
3. Hermes LCM
Almacena y recupera el historial de conversaciones más allá de la compresión de contexto.
stephenschoettler/hermes-lcm
4. Complementos de Hermes de Evey
Complementos y habilidades, incluyendo "verify-before-done" para revisar el trabajo antes de declararlo terminado.
42-evey/hermes-plugins
5. Hermes Labyrinth
Inspecciona las llamadas, resultados, fallos y actividad de las herramientas de tu agente.
stainlu/hermes-labyrinth
Obtén Hermes Agent de Nous Research:
NousResearch/hermes-agent
¿Cuál vas a probar primero? Deja un comentario, dale a "Me gusta" al vídeo y suscríbete para obtener más herramientas prácticas de IA.
Suscríbete a With Manny:
youtube.com
Únete a mi boletín:
mannys-newsletter-bf191f.beehiiv.com
Explora el HighLevel Bootcamp:
gohighlevel.com
Enlace de afiliado. Puedo recibir una comisión si compras a través de él.
#HermesAgent #GitHub #HerramientasDeIA #ConManny
[fr-FR] 5 outils GitHub qui donnent des super-pouvoirs à Hermes #Hermes #GitHub #superpouvoirs #actualité...
Votre configuration Hermes Agent pourrait être optimisée. Ces cinq dépôts GitHub ajoutent un centre de contrôle, un accès via navigateur, une meilleure mémoire des conversations, des compétences utiles et la possibilité de consulter l'historique des actions de votre agent.
Téléchargez-les ici :
1. Hermes Workspace
Chat, fichiers, mémoire, compétences et terminal dans une seule interface.
outsourc-e/hermes-workspace
2. Extension Hermes pour navigateur
Intégrez votre agent Hermes dans un panneau latéral de votre navigateur.
abundantbeing/hermes-browser-extension
3. Hermes LCM
Stockez et consultez l'historique des conversations sans compression contextuelle.
stephenschoettler/hermes-lcm
4. Plugins Hermes d'Evey
Plugins et compétences, dont « vérifier avant de valider » pour contrôler le travail effectué avant de le déclarer terminé. 42-evey/hermes-plugins
5. Hermes Labyrinth
Analysez les appels d'outils, les résultats, les erreurs et l'activité de votre agent.
stainlu/hermes-labyrinth
Obtenez Hermes Agent auprès de Nous Research :
NousResearch/hermes-agent
Lequel allez-vous tester en premier ? Laissez un commentaire ci-dessous, aimez la vidéo et abonnez-vous pour découvrir d'autres outils d'IA pratiques.
Abonnez-vous à With Manny :
youtube.com
Inscrivez-vous à ma newsletter :
mannys-newsletter-bf191f.beehiiv.com
Explorez le HighLevel Bootcamp :
gohighlevel.com
Lien affilié. Je peux percevoir une commission si vous effectuez un achat via ce lien.
#HermesAgent #GitHub #OutilsIA #AvecManny
[hi] Hermes को सुपरपावर देने वाले 5 GitHub टूल्स #Hermes #GitHub #superpowers #ainews #opensource
आपके हर्मेस एजेंट सेटअप में और भी बहुत कुछ हो सकता है। ये पाँच GitHub रिपॉज़िटरी एक कमांड सेंटर, ब्राउज़र एक्सेस, बेहतर वार्तालाप मेमोरी, उपयोगी स्किल्स और आपके एजेंट द्वारा किए गए कार्यों को देखने का तरीका प्रदान करते हैं।
सभी पाँचों यहाँ प्राप्त करें:
1. हर्मेस वर्कस्पेस
चैट, फ़ाइलें, मेमोरी, स्किल्स और एक टर्मिनल एक ही इंटरफ़ेस में।
outsourc-e/hermes-workspace
2. हर्मेस ब्राउज़र एक्सटेंशन
अपने हर्मेस एजेंट को ब्राउज़र साइड पैनल में लाएँ।
abundantbeing/hermes-browser-extension
3. हर्मेस एलसीएम
कॉन्टेक्स्ट कम्प्रेशन से परे वार्तालाप इतिहास को स्टोर और रिट्रीव करें।
stephenschoettler/hermes-lcm
4. ईवी के हर्मेस प्लगइन्स
प्लगइन्स और स्किल्स, जिनमें "वेरीफाई-बिफोर-डन" भी शामिल है, जो काम पूरा होने की घोषणा करने से पहले उसकी जाँच करता है।
42-evey/hermes-plugins
5. हर्मेस लेबिरिंथ
अपने एजेंट के टूल कॉल, परिणाम, विफलताएँ और गतिविधि की जाँच करें।
stainlu/hermes-labyrinth
नूस रिसर्च से हर्मेस एजेंट प्राप्त करें:
NousResearch/hermes-agent
आप सबसे पहले कौन सा आज़माना चाहते हैं? नीचे टिप्पणी करें, वीडियो को लाइक करें और अधिक व्यावहारिक AI टूल के लिए सब्सक्राइब करें।
विद मैनी को सब्सक्राइब करें:
youtube.com
मेरे न्यूज़लेटर से जुड़ें:
mannys-newsletter-bf191f.beehiiv.com
हाई लेवल बूटकैंप देखें:
gohighlevel.com
यह एक संबद्ध लिंक है। इसके माध्यम से खरीदारी करने पर मुझे कमीशन मिल सकता है।
#हर्मेसएजेंट #गिटहब #एआईटीूल्स #विदमैनी
[id] 5 Tools GitHub yang Memberikan Kekuatan Super pada Hermes #Hermes #GitHub #kekuatansuper #beritaa...
Pengaturan Agen Hermes Anda dapat melakukan lebih banyak hal. Lima repositori GitHub ini menambahkan pusat komando, akses browser, memori percakapan yang lebih baik, keterampilan yang berguna, dan cara untuk melihat apa yang sebenarnya dilakukan agen Anda.
Dapatkan kelima repositori di sini:
1. Hermes Workspace
Obrolan, file, memori, keterampilan, dan terminal dalam satu antarmuka.
outsourc-e/hermes-workspace
2. Ekstensi Browser Hermes
Bawa Agen Hermes Anda ke panel samping browser.
abundantbeing/hermes-browser-extension
3. Hermes LCM
Simpan dan ambil riwayat percakapan di luar kompresi konteks.
stephenschoettler/hermes-lcm
4. Plugin Hermes Evey
Plugin dan keterampilan, termasuk "verifikasi sebelum selesai" untuk memeriksa pekerjaan sebelum mengklaimnya selesai.
42-evey/hermes-plugins
5. Hermes Labyrinth
Periksa panggilan alat, hasil, kegagalan, dan aktivitas agen Anda.
stainlu/hermes-labyrinth
Dapatkan Hermes Agent dari Nous Research:
NousResearch/hermes-agent
Mana yang akan Anda coba terlebih dahulu? Beri komentar di bawah, sukai video ini, dan berlangganan untuk mendapatkan lebih banyak alat AI praktis.
Berlangganan ke With Manny:
youtube.com
Gabung ke buletin saya:
mannys-newsletter-bf191f.beehiiv.com
Jelajahi HighLevel Bootcamp:
gohighlevel.com
Tautan afiliasi. Saya mungkin mendapatkan komisi jika Anda membeli melalui tautan ini.
#HermesAgent #GitHub #AITools #WithManny
[it] 5 strumenti GitHub che danno superpoteri a Hermes #Hermes #GitHub #superpoteri #ainews #opensource
La tua configurazione di Hermes Agent potrebbe fare di più. Questi cinque repository GitHub aggiungono un centro di comando, accesso tramite browser, una migliore memoria delle conversazioni, utili funzionalità e un modo per vedere cosa ha effettivamente fatto il tuo agente.
Scaricali tutti e cinque qui:
1. Hermes Workspace
Chat, file, memoria, funzionalità e un terminale in un'unica interfaccia.
outsourc-e/hermes-workspace
2. Hermes Browser Extension
Porta il tuo Hermes Agent in un pannello laterale del browser.
abundantbeing/hermes-browser-extension
3. Hermes LCM
Archivia e recupera la cronologia delle conversazioni oltre la compressione del contesto.
stephenschoettler/hermes-lcm
4. Evey’s Hermes Plugins
Plugin e funzionalità, tra cui "verify-before-done" per controllare il lavoro prima di dichiararlo completato.
Italiano: 42-evey/hermes-plugins
5. Hermes Labyrinth
Esamina le chiamate agli strumenti, i risultati, gli errori e l'attività del tuo agente.
stainlu/hermes-labyrinth
Scarica Hermes Agent da Nous Research:
NousResearch/hermes-agent
Quale proverai per primo? Commenta qui sotto, metti mi piace al video e iscriviti per altri strumenti pratici di intelligenza artificiale.
Iscriviti a With Manny:
youtube.com
Iscriviti alla mia newsletter:
mannys-newsletter-bf191f.beehiiv.com
Scopri HighLevel Bootcamp:
gohighlevel.com
Link di affiliazione. Potrei guadagnare una commissione se acquisti tramite questo link.
#HermesAgent #GitHub #AITools #WithManny
[pt-BR] 5 ferramentas do GitHub que dão superpoderes ao Hermes #Hermes #GitHub #superpoderes #noticiasIA ...
Sua configuração do Agente Hermes pode fazer mais. Estes cinco repositórios do GitHub adicionam um centro de comando, acesso via navegador, melhor memória de conversas, habilidades úteis e uma maneira de ver o que seu agente realmente fez.
Obtenha os cinco aqui:
1. Hermes Workspace
Chat, arquivos, memória, habilidades e um terminal em uma única interface.
outsourc-e/hermes-workspace
2. Extensão do Hermes para Navegador
Acesse o painel lateral do seu Agente Hermes no navegador.
abundantbeing/hermes-browser-extension
3. Hermes LCM
Armazene e recupere o histórico de conversas além da compressão de contexto.
stephenschoettler/hermes-lcm
4. Plugins do Hermes da Evey
Plugins e habilidades, incluindo "verify-before-done" para verificar o trabalho antes de marcá-lo como concluído.
42-evey/hermes-plugins
5. Hermes Labyrinth
Inspecione as chamadas de ferramentas, resultados, falhas e atividades do seu agente.
stainlu/hermes-labyrinth
Obtenha o Hermes Agent da Nous Research:
NousResearch/hermes-agent
Qual você vai experimentar primeiro? Comente abaixo, curta o vídeo e inscreva-se para mais ferramentas práticas de IA.
Inscreva-se no canal With Manny:
youtube.com
Assine minha newsletter:
mannys-newsletter-bf191f.beehiiv.com
Explore o HighLevel Bootcamp:
gohighlevel.com
Link de afiliado. Posso receber uma comissão se você comprar através dele.
#HermesAgent #GitHub #AITools #WithManny
4 likes · 161 views
Mac mini(M6 / 32GB)でローカル AI エージェントを試す:Hermes Agent + Splash
はじめに
前回は Mac mini(M6 / 32GB)で Ollama と Splash を導入し、日本語の質問や HTTP API 経由の応答を確認した。
今回はその続きとして、ローカル LLM をツールから利用する AI エージェント環境を試す。会話や作業の進行に Hermes Agent、生成モデルの推論に Splash を使用する。
動作試験としては自宅のネットワークラボで、containerlab 上の Nexus 9000v に SSH 接続し、状態取得と小さな設定変更を試す。ツール導入後の初回試験として、変更前の確認、変更、変更後の確認、元の設定への復元までを一通り行う。
本記事で確認する内容は下記のとおり。
- Splash 上のローカル LLM を Hermes から利用する
- Hermes の terminal ツールから Nexus 9000v に SSH 接続し、状態を取得する
- 試験用インターフェースの description を変更し、事前・事後・復元後の状態を確認する
- Leaf–Spine 間の OSPF にタイマー不一致、IP 不整合を作り、Hermes に原因切り分け・修正提案・復元を依頼する
!hermes-overview.png
Hermes と Splash は Mac mini 上で動かし、Nexus 9000v は既存の containerlab 環境を利用する。Splash の API は 127.0.0.1:8000、機器へのアクセスは SSH とする。
Hermes の terminal 実行先を Mac にして、SSH 経由で機器のコマンドを実行する。
description の変更は 1 台・1 インターフェースを対象とし、切り分け試験は Leaf と Spine の間の 1 リンクを対象とする。
実施環境
前回同様に自宅ラボの Mac Mini M6 環境。
| 項目 | 内容 |
| :--- | :--- |
| 本体 | Mac mini M6 / 32GB |
| OS | macOS 27.0.1 / Build 26A434 |
| Splash | 1.4.0(2026.10.25時点の最新へ更新)|
| Hermes Agent | v0.22.5 / local commit bf0203a794a0 |
| Hermes の実行環境 | Python 3.14.9 / OpenAI SDK 2.24.0 |
| Splash のモデル | unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS|
| Splash のドラフトモデル | incoai/Qwen3.8-27B-DFlash2 |
| 実効コンテキスト | Splash:65,536(max_model_len / context_length) / Hermes 起動表示:65,536 / 画面下部:65.5K |
| 試験日 | 2026/10/25 |
機器操作の試験は、既存の containerlab 上の Nexus 9000v に Mac から SSH 接続できる環境を前提とする。Leaf は ssh admin@192.168.129.141、切り分け試験で使う Spine は ssh admin@192.168.129.150 で接続し、パスワードを対話入力する。ラボ構築と SSH の接続設定は事前に済ませている状態。
Hermes は v0.22.5、Splash は 1.4.0 を使用する。事前確認時のログと導入・更新ログを別に掲載する。Hermes、Splash
<details><summary>前提環境の確認ログ(Mac からの SSH 接続・Nexus 9000v の状態取得)</summary><div>
suzuyu@macmini-m6 ~ % ssh admin@192.168.129.141
The authenticity of host '192.168.129.141 (192.168.129.141)' can't be established.
RSA key fingerprint is: SHA256:FYRBd0McrMRBvQrCvr12uFoXOGYBMlO56oFLx1DdcbM
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.129.141' (RSA) to the list of known hosts.
User Access Verification
(admin@192.168.129.141) Password:
Cisco NX-OS Software
Copyright (c) 2002-2026, Cisco Systems, Inc. All rights reserved.
Nexus 9000v software ("Nexus 9000v Software") and related documentation,
files or other reference materials ("Documentation") are
the proprietary property and confidential information of Cisco
Systems, Inc. ("Cisco") and are protected, without limitation,
pursuant to United States and International copyright and trademark
laws in the applicable jurisdiction which provide civil and criminal
penalties for copying or distribution without Cisco's authorization.
Any use or disclosure, in whole or in part, of the Nexus 9000v Software
or Documentation to any third party for any purposes is expressly
prohibited except as otherwise authorized by Cisco in writing.
The copyrights to certain works contained herein are owned by other
third parties and are used and distributed under license. Some parts
of this software may be covered under the GNU Public License or the
GNU Lesser General Public License. A copy of each such license is
available at
http://www.gnu.org/licenses/gpl.html and
http://www.gnu.org/licenses/lgpl.html
***************************************************************************
* Nexus 9000v is strictly limited to use for evaluation, demonstration *
* and NX-OS education. Any use or disclosure, in whole or in part of *
* the Nexus 9000v Software or Documentation to any third party for any *
* purposes is expressly prohibited except as otherwise authorized by *
* Cisco in writing. *
***************************************************************************
bdc-lfsw0101#
bdc-lfsw0101#
bdc-lfsw0101# exit
Connection to 192.168.129.141 closed.
suzuyu@macmini-m6 ~ % ssh admin@192.168.129.141
User Access Verification
(admin@192.168.129.141) Password:
Cisco NX-OS Software
Copyright (c) 2002-2026, Cisco Systems, Inc. All rights reserved.
Nexus 9000v software ("Nexus 9000v Software") and related documentation,
files or other reference materials ("Documentation") are
the proprietary property and confidential information of Cisco
Systems, Inc. ("Cisco") and are protected, without limitation,
pursuant to United States and International copyright and trademark
laws in the applicable jurisdiction which provide civil and criminal
penalties for copying or distribution without Cisco's authorization.
Any use or disclosure, in whole or in part, of the Nexus 9000v Software
or Documentation to any third party for any purposes is expressly
prohibited except as otherwise authorized by Cisco in writing.
The copyrights to certain works contained herein are owned by other
third parties and are used and distributed under license. Some parts
of this software may be covered under the GNU Public License or the
GNU Lesser General Public License. A copy of each such license is
available at
http://www.gnu.org/licenses/gpl.html and
http://www.gnu.org/licenses/lgpl.html
***************************************************************************
* Nexus 9000v is strictly limited to use for evaluation, demonstration *
* and NX-OS education. Any use or disclosure, in whole or in part of *
* the Nexus 9000v Software or Documentation to any third party for any *
* purposes is expressly prohibited except as otherwise authorized by *
* Cisco in writing. *
***************************************************************************
bdc-lfsw0101# show version
Cisco Nexus Operating System (NX-OS) Software
TAC support: http://www.cisco.com/tac
Documents: http://www.cisco.com/en/US/products/ps9372/tsd_products_support_series_home.html
Copyright (c) 2002-2026, Cisco Systems, Inc. All rights reserved.
The copyrights to certain works contained herein are owned by
other third parties and are used and distributed under license.
Some parts of this software are covered under the GNU Public
License. A copy of the license is available at
http://www.gnu.org/licenses/gpl.html.
Nexus 9000v is a demo version of the Nexus Operating System
Software
BIOS: version
NXOS: version 10.6(4) [Maintenance Release]
BIOS compile time:
NXOS image file is: bootflash:///nxos64-cs-lite.10.6.4.M.bin
NXOS compile time: 7/31/2026 31:00:00 [08/15/2026 15:10:23]
Hardware
cisco Nexus9000 C9300v Chassis
Intel(R) Core(TM) Ultra 5 125H with 4522876 kB of memory.
Processor Board ID 9K1NSEDUODU
Device name: bdc-lfsw0101
bootflash: 8598528 kB
Kernel uptime is 35 day(s), 0 hour(s), 44 minute(s), 20 second(s)
Last reset
Reason: Unknown
System version:
Service:
plugin
Core Plugin, Ethernet Plugin
Active Package(s):
bdc-lfsw0101# show interface brief
--------------------------------------------------------------------------------
Port VRF Status IP Address Speed MTU
--------------------------------------------------------------------------------
mgmt0 -- up 192.168.129.141 1000 1500
--------------------------------------------------------------------------------
Ethernet VLAN Type Mode Status Reason Speed Port
Interface Ch #
--------------------------------------------------------------------------------
Eth1/1 1 eth trunk up none 1000(D) 11
Eth1/2 1 eth trunk up none 1000(D) 12
Eth1/3 1 eth trunk up none 1000(D) 13
Eth1/4 1 eth trunk up none 1000(D) 14
Eth1/5 1 eth trunk up none 1000(D) 15
Eth1/6 1 eth trunk up none 1000(D) 16
Eth1/7 -- eth routed down Administratively down auto(D) --
Eth1/8 -- eth routed up none 1000(D) --
Eth1/9 1 eth access down Administratively down auto(D) --
Eth1/10 1 eth access down Administratively down auto(D) --
Eth1/11 1 eth access down Administratively down auto(D) --
Eth1/12 1 eth access down Administratively down auto(D) --
Eth1/13 1 eth access down Administratively down auto(D) --
Eth1/14 1 eth access down Administratively down auto(D) --
Eth1/15 1 eth access down Administratively down auto(D) --
Eth1/16 1 eth access down Administratively down auto(D) --
Eth1/17 1 eth access down Administratively down auto(D) --
Eth1/18 1 eth access down Administratively down auto(D) --
Eth1/19 1 eth access down Administratively down auto(D) --
Eth1/20 1 eth access down Administratively down auto(D) --
Eth1/21 1 eth access down Administratively down auto(D) --
Eth1/22 1 eth access down Administratively down auto(D) --
Eth1/23 1 eth access down Administratively down auto(D) --
Eth1/24 1 eth access down Administratively down auto(D) --
Eth1/25 1 eth access down Administratively down auto(D) --
Eth1/26 1 eth access down Administratively down auto(D) --
Eth1/27 1 eth access down Administratively down auto(D) --
Eth1/28 1 eth access down Administratively down auto(D) --
Eth1/29 1 eth access down Administratively down auto(D) --
Eth1/30 1 eth access down Administratively down auto(D) --
Eth1/31 1 eth access down Administratively down auto(D) --
Eth1/32 1 eth access down Administratively down auto(D) --
Eth1/33 1 eth access down Administratively down auto(D) --
Eth1/34 1 eth access down Administratively down auto(D) --
Eth1/35 1 eth access down Administratively down auto(D) --
Eth1/36 1 eth access down Administratively down auto(D) --
Eth1/37 1 eth access down Administratively down auto(D) --
Eth1/38 1 eth access down Administratively down auto(D) --
Eth1/39 1 eth access down Administratively down auto(D) --
Eth1/40 1 eth access down Administratively down auto(D) --
Eth1/41 1 eth access down Administratively down auto(D) --
Eth1/42 1 eth access down Administratively down auto(D) --
Eth1/43 1 eth access down Administratively down auto(D) --
Eth1/44 1 eth access down Administratively down auto(D) --
Eth1/45 1 eth access down Administratively down auto(D) --
Eth1/46 1 eth access down Administratively down auto(D) --
Eth1/47 1 eth access down Administratively down auto(D) --
Eth1/48 1 eth access down Administratively down auto(D) --
Eth1/49 1 eth access down Administratively down auto(D) --
Eth1/50 1 eth access down Administratively down auto(D) --
Eth1/51 1 eth access down Administratively down auto(D) --
Eth1/52 1 eth access down Administratively down auto(D) --
Eth1/53 1 eth access down Administratively down auto(D) --
Eth1/54 1 eth access down Administratively down auto(D) --
Eth1/55 1 eth access down Administratively down auto(D) --
Eth1/56 1 eth access down Administratively down auto(D) --
Eth1/57 1 eth access down Administratively down auto(D) --
Eth1/58 1 eth access down Administratively down auto(D) --
Eth1/59 1 eth access down Administratively down auto(D) --
Eth1/60 1 eth access down Administratively down auto(D) --
Eth1/61 1 eth access down Administratively down auto(D) --
Eth1/62 1 eth access down Administratively down auto(D) --
Eth1/63 1 eth access down Administratively down auto(D) --
Eth1/64 1 eth access down Administratively down auto(D) --
------------------------------------------------------------------------------------------
Port-channel VLAN Type Mode Status Reason Speed Protocol
Interface
------------------------------------------------------------------------------------------
Po1 1 eth trunk up none auto(I) none
Po11 1 eth trunk up none a-1000(D) lacp
Po12 1 eth trunk up none a-1000(D) lacp
Po13 1 eth trunk up none a-1000(D) lacp
Po14 1 eth trunk up none a-1000(D) lacp
Po15 1 eth trunk up none a-1000(D) lacp
Po16 1 eth trunk up none a-1000(D) lacp
--------------------------------------------------------------------------------
Interface Status Description
--------------------------------------------------------------------------------
Lo0 up RouterID Loopback
Lo1 up VTEP Loopback
Lo105 up Cilium k03 BGP endpoint
-------------------------------------------------------------------------------
Interface Secondary VLAN(Type) Status Reason
-------------------------------------------------------------------------------
Vlan1 -- down Administratively down
Vlan100 -- up --
Vlan105 -- up --
Vlan201 -- up --
Vlan2002 -- up --
Vlan3000 -- up --
Vlan3001 -- up --
Vlan3002 -- up --
--------------------------------------------------------------------------------
Port Status Reason MTU
--------------------------------------------------------------------------------
nve1 up none 9216
bdc-lfsw0101# show running-config in
include-switch-profile interface
bdc-lfsw0101# show running-config interface ethernet 1/10
!Command: show running-config interface Ethernet1/10
!No configuration change since last restart
!Time: Sun Oct 25 03:05:47 2026
version 10.6(4) Bios:version
interface Ethernet1/10
shutdown
bdc-lfsw0101# show interface ethernet 1/10
Ethernet1/10 is down (Administratively down)
admin state is down, Dedicated Interface
Hardware: 100/1000/10000 Ethernet, address: 0c8f.d900.010a (bia 0c8f.d900.010a)
MTU 1500 bytes, BW 10000000 Kbit , DLY 10 usec
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, medium is broadcast
Port mode is access
auto-duplex, auto-speed
Beacon is turned off
Auto-Negotiation is turned on FEC mode is Auto
Input flow-control is off, output flow-control is off
Auto-mdix is turned off
Switchport monitor is off
EtherType is 0x8100
EEE (efficient-ethernet) : n/a
admin fec state is auto, oper fec state is off
Last link flapped never
Last clearing of "show interface" counters never
0 interface resets
Load-Interval #1: 0 seconds
0 seconds input rate 0 bits/sec, 0 packets/sec
0 seconds output rate 0 bits/sec, 0 packets/sec
input rate 0 bps, 0 pps; output rate 0 bps, 0 pps
Load-Interval #2: 0 seconds
0 seconds input rate 0 bits/sec, 0 packets/sec
0 seconds output rate 0 bits/sec, 0 packets/sec
input rate 0 bps, 0 pps; output rate 0 bps, 0 pps
RX
0 unicast packets 0 multicast packets 0 broadcast packets
0 input packets 0 bytes
0 jumbo packets 0 storm suppression packets
0 runts 0 giants 0 CRC 0 no buffer
0 input error 0 short frame 0 overrun 0 underrun 0 ignored
0 watchdog 0 bad etype drop 0 bad proto drop 0 if down drop
0 input with dribble 0 input discard
0 Rx pause
0 Stomped CRC
TX
0 unicast packets 0 multicast packets 0 broadcast packets
0 output packets 0 bytes
0 jumbo packets
0 output error 0 collision 0 deferred 0 late collision
0 lost carrier 0 no carrier 0 babble 0 output discard
0 Tx pause
bdc-lfsw0101#
</div></details>
AI エージェントと LLM の役割
今回の構成を理解するために、先に AI エージェントと LLM の役割を整理する。
AI エージェントとは
本記事で扱う AI エージェントは、LLM を使って次に必要な処理を選び、ツールの実行結果を受け取りながら、依頼された作業を進める仕組みとなる。LLM に加え、ツールを実行するプログラムや、会話・作業状態を管理する部分を組み合わせる。Hermes も、モデルの呼び出し、ツールの実行、状態管理を持つ構成となっている。Hermes の構成
例えば「BGP がつながらない原因を調べたい」という依頼に対し、観測情報を読む → 不足する情報を確認する → 原因候補を絞る → 根拠と次の確認事項を回答する、という流れを想定する。必要に応じてツールを呼び直し、その結果を次の処理に利用する。今回は実際に Nexus 9000v から情報を取得し、設定変更前後の状態を確認する。
LLM と推論基盤の役割
LLM は依頼とツールの実行結果を読み、次の処理や回答を生成する。Hermes はその出力に従ってツールを実行し、結果を再び LLM に渡す。今回の LLM は Qwen で、その推論を Mac 上で実行するのが Splash となる。
| 要素 | 今回の担当 | 今回の試験での使い方 |
| :--- | :--- | :--- |
| AI エージェント | Hermes Agent | 会話と作業状態を管理し、ツールを実行する |
| LLM | Qwen | 依頼と実行結果から次の処理や回答を生成する |
| 推論基盤 | Splash | Qwen を実行し、Hermes に API を提供する |
使用するツールとモデル
Hermes Agent
Hermes Agent は Nous Research が公開する AI エージェント。モデルとの会話に加え、ツールを呼び出し、その結果を使って処理を進める。今回は CLI から使い、必要なローカルツールだけを接続する。
現行の公式 Quickstart では、最低 64,000 トークンのコンテキストを要求している。前回の 8K 設定は Splash 単体の動作確認には使えるが、今回の Hermes 連携には不足する。Quickstart
Splash
Splash は Apple Silicon 向けの推論エンジン兼 API サーバ。前回と同じく CLI から直接起動する。
splash hermes は導入済みの Hermes を起動済み Splash に接続するランチャーとなる。専用プロファイルを使うため、手動設定から始めるより接続先やモデル ID を合わせやすい。ランチャー仕様
32GB でのモデル選定
前回の UD-IQ4_XS を基準に、64K で起動・応答できるかを確認する。
| モデル | 対象 GGUF の配布サイズ | 今回の扱い |
| :--- | :--- | :--- |
| UD-IQ4_XS | 約 14.3GB | 前回と同じ量子化 |
容量は配布一覧の値。ドラフトモデルや KV キャッシュを含む実行時メモリとは異なる。
事前確認・事前対応
既存環境の確認
Mac mini のターミナルを開き、現在の OS と Splash のバージョン、Hermes の有無、空き容量、使用予定ポートを下記コマンドで確認する。
sw_vers
command -v splash
splash --version
command -v hermes
df -h /System/Volumes/Data
lsof -nP -iTCP:8000 -sTCP:LISTEN
command -v でパスが表示されないツールは、導入状況と PATH を確認し、未導入なら後続の手順で導入する。8000 番ポートに待ち受けがある場合は、起動元を確認してから Splash を起動する。
今回の開始時点は macOS 27.0.1 / Splash 1.3.2。Hermes と uv のパス、および 8000 番ポートの待ち受けは表示なし。CPU・メモリの確認と Splash のヘルプを含む実行ログを以下に掲載する。
<details><summary>Mac mini の事前確認ログ(環境・コマンドの有無・Splash のヘルプ全文)</summary><div>
suzuyu@macmini-m6 ~ % uname -m
arm64
suzuyu@macmini-m6 ~ % sw_vers
ProductName: macOS
ProductVersion: 27.0.1
BuildVersion: 26A434
suzuyu@macmini-m6 ~ % sysctl -n machdep.cpu.brand_string
Apple M6
suzuyu@macmini-m6 ~ % sysctl -n hw.memsize
34359738368
suzuyu@macmini-m6 ~ % df -h /System/Volumes/Data
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk3s5 460Gi 70Gi 364Gi 17% 509k 3.8G 0% /System/Volumes/Data
suzuyu@macmini-m6 ~ % command -v splash
/opt/homebrew/bin/splash
suzuyu@macmini-m6 ~ % command -v hermes
suzuyu@macmini-m6 ~ % command -v uv
suzuyu@macmini-m6 ~ % lsof -nP -iTCP:8000 -sTCP:LISTEN
suzuyu@macmini-m6 ~ % splash --version
Splash 1.3.2
suzuyu@macmini-m6 ~ % splash --help
usage: splash [-h] [--version] {serve,claude,opencode,codex,hermes,pi} ...
Serve in the foreground, or connect an installed agent to the local server.
positional arguments:
{serve,claude,opencode,codex,hermes,pi}
serve run the local server; Ctrl+C stops it
claude connect claude to the running server
opencode connect opencode to the running server
codex connect codex to the running server
hermes connect hermes to the running server
pi connect pi to the running server
options:
-h, --help show this help message and exit
--version show program's version number and exit
Quick start:
splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M
splash opencode # in another terminal, after Ready
Use splash serve --help for server settings. An agent command takes
--port PORT for a server on another port and passes every other
argument, including --help, to the installed agent. To pass the
agent's own --port, start its arguments with --:
splash opencode --port 8001 -- --port 4096
suzuyu@macmini-m6 ~ % splash serve --help
usage: splash serve [-h] --model OWNER/REPO[:VARIANT] [--revision REVISION] [--draft-model DRAFT]
[--language-only] [--offline] [--port PORT] [--host ADDRESS]
[--allowed-host HOST] [--allowed-origin ORIGIN] [--api-key KEY] [--no-webui]
[--max-memory SIZE] [--max-context TOKENS] [--kv-format {int8,bf16}]
[--state-format {fp32,bf16}] [--idle-release DURATION] [--max-cache-disk SIZE]
[--max-cache-disk-writes SIZE] [--persistent-cache] [--cache-dir DIRECTORY]
[--served-model-name NAME] [--announce-served-name]
[--default-reasoning-effort EFFORT] [--thinking-token-budget N]
[--thinking-end-text TEXT] [--max-request-size SIZE]
[--max-image-pixels PIXELS] [--request-timeout DURATION]
[--queue-size REQUESTS] [--decode-share SHARE] [--disable-ane]
[--allow-idle-sleep]
Load an upstream model, automatically select its DFlash2 draft, and serve in the foreground.
options:
-h, --help show this help message and exit
model:
--model OWNER/REPO[:VARIANT]
upstream Hugging Face model, with a GGUF variant after ':' (e.g.
:UD-Q4_K_M)
--revision REVISION model branch, tag or commit (default: the repository's default branch)
--draft-model DRAFT DFlash2 draft repository or local directory to use instead of the
automatically selected one
--language-only skip vision preparation and loading; image and PDF input is refused
--offline start the installed model without contacting the Hugging Face Hub (as
HF_HUB_OFFLINE=1)
network and access:
--port PORT HTTP port (default: SPLASH_PORT or 8000)
--host ADDRESS HTTP bind address (default: 127.0.0.1; 0.0.0.0 for all IPv4 interfaces);
clients use an IP address, localhost or a name given with --allowed-host
--allowed-host HOST additional HTTP Host name to accept, e.g. mymac.local; does not change the
bind address (repeatable)
--allowed-origin ORIGIN
origin whose pages may call the API from a browser or webview, e.g.
tauri://localhost; '*' for any (repeatable)
--api-key KEY require this key as a bearer token or x-api-key on every route but the
chat page, /health and /ready (default: SPLASH_API_KEY)
--no-webui disable the chat page
memory and context:
--max-memory SIZE Metal memory budget, e.g. 28G; it can only lower the automatic budget
(default: auto)
--max-context TOKENS context token limit, e.g. 100K (K = 1024 tokens); it can only lower the
automatic limit, the model's native window when memory holds it (default:
auto)
--kv-format {int8,bf16}
target KV cache storage (default: int8); bf16 uses more memory
--state-format {fp32,bf16}
recurrent state storage (default: fp32); bf16 halves each state, so memory
and the SSD cache hold about twice as many
--idle-release DURATION
time without a request before the engine unwires its memory and frees the
weights: seconds, or with an s, m or h suffix, e.g. 30m (default: 10m);
off keeps both, though POST /v1/memory/release still frees the weights
SSD cache:
--max-cache-disk SIZE
SSD quota for cached KV pages and states: auto follows the volume's free
space up to 32G, 0 disables, or a size such as 16G (default: auto)
--max-cache-disk-writes SIZE
the most the SSD cache writes a day, e.g. 200G; the state a conversation
resumes from and KV pages pass it (default: 0, no limit)
--persistent-cache keep the SSD cache across restarts
--cache-dir DIRECTORY
where --persistent-cache keeps its files; needs --persistent-cache
(default: ~/Library/Caches/Splash/prefix-cache)
API:
--served-model-name NAME
additional API model name (repeatable); responses report the loaded model
ID unless --announce-served-name
--announce-served-name
report the first --served-model-name in API responses and list it first in
/v1/models; /status keeps the loaded model ID (needs --served-model-name)
--default-reasoning-effort EFFORT
effort of Chat and Responses requests that set none: none, minimal, low,
medium, high, xhigh or max (default: SPLASH_DEFAULT_REASONING_EFFORT, else
the model template's)
--thinking-token-budget N
thinking tokens of a thinking request that sets no thinking_token_budget,
after which its thinking closes (default: SPLASH_THINKING_TOKEN_BUDGET,
else no cap)
--thinking-end-text TEXT
text that ends thinking where a thinking budget runs out, such as a
sentence that turns to the answer, then </think> as its last token; at
most 64 tokens (default: SPLASH_THINKING_END_TEXT, else </think> alone)
requests:
--max-request-size SIZE
maximum HTTP request body size, e.g. 128M (default: 128M); shared input
budget is max(512M, twice this limit)
--max-image-pixels PIXELS
maximum resized pixels per image, 65536–4194304 (default: 4194304); bounds
the vision scratch one image needs
--request-timeout DURATION
time before a queued or in-flight request expires with 504: seconds, or
with an s, m or h suffix, e.g. 30m (default: none)
--queue-size REQUESTS
requests admitted at once, running or waiting; more get 503 (default: 32)
--decode-share SHARE decode time owed per unit of prefill time while other requests decode
(default: 0.5; 0 alternates one command each)
--disable-ane prefill on the GPU alone (default: a dense model's long prompts also use
the Neural Engine when that is faster)
--allow-idle-sleep let the Mac sleep automatically while requests run (default: it stays
awake until they finish; the display may still sleep)
Examples:
splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M
splash serve --model unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M --max-context 128K
SIZE is bytes, or a number with K, M or G (1024-based), such as 28G.
DURATION is seconds, or a number with s, m or h, such as 30m.
After Ready, open http://127.0.0.1:PORT in a browser on this Mac, or
connect an installed agent; both reach the server on loopback, which
the default --host and 0.0.0.0 include. The startup summary and
/status report the effective context limit; a client may impose a
smaller one. Keep this terminal open; Ctrl+C stops serving.
suzuyu@macmini-m6 ~ %
</div></details>
Splash の更新
Hermes 連携試験の前に、Splash を 1.4.0 へ更新する。
(新機能の Flash-Next や 1M コンテキストは今回使用しない。1.4.0 の変更点)
Splash が動いている場合は停止し、Mac のシェルで配布版と pin の状態を確認する。
brew update
brew info incoai/tap/splash
brew list --pinned
配布版が 1.4.0 であることを確認してから更新する。前回の手順で pin している場合は解除する。配布版が変わっている場合は、その版の変更点を確認して試験条件に記録する。
# splash が pin されている場合だけ実行
brew unpin incoai/tap/splash
brew upgrade incoai/tap/splash
brew list --versions splash
splash --version
splash serve --help
# 試験期間中は確認した版を固定
brew pin incoai/tap/splash
今回の更新結果は、brew list --versions splash と splash --version の両方で 1.4.0。更新先は /opt/homebrew/Cellar/splash/1.4.0 で、ヘルプ表示後に brew pin incoai/tap/splash も再実行している。64K 起動と Hermes 連携は次の工程で確認する。
更新後の版で試験を進める。Hermes の導入と接続は後続の節で準備する。
<details><summary>Splash 1.3.2 から 1.4.0 への更新ログ(バージョン・ヘルプ・pin)</summary><div>
suzuyu@macmini-m6 ~ % brew update
==> Updating Homebrew...
==> Downloading https://ghcr.io/v2/homebrew/core/portable-ruby/blobs/sha256:25d6becc4464b6e65ac38a76ccd27eee8be5d0d805f6b3292d74e37deb8dd13b
############################################################################################# 100.0%
==> Pouring portable-ruby-4.0.7_1.arm64_big_sur.bottle.tar.gz
Updated 3 taps (incoai/tap, homebrew/core and homebrew/cask).
==> New Formulae
annotsv: Annotation and ranking of structural variations
ascelerate: Command-line tool for the App Store Connect API
buildkite: Work with Buildkite from the command-line
erpc: Fault-tolerant RPC proxy with re-org-aware permanent caching
filmcraft-cli: Headless FilmCraft CLI and MCP server to edit, render and export video projects
gitea-cli: Official command-line tool for Gitea
openssh-sk-provider: Standalone FIDO2 SecurityKeyProvider (sk-libfido2) for the system OpenSSH
tpcgen-cli: Fast TPC-H and TPC-DS data generator
xfr: Modern network bandwidth testing with TUI
zvec-grep: Agent-friendly hybrid workspace search across code and non-code content
==> Outdated Formulae
ca-certificates ollama python@3.15 splash
You have 4 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
suzuyu@macmini-m6 ~ % brew info incoai/tap/splash
==> incoai/tap/splash ↑: 1.3.2 → stable 1.4.0 (bottled)
Local inference engine for Apple silicon, built around the model
https://github.com/incoai/splash
Installed (on request)
From: https://github.com/incoai/homebrew-tap/blob/HEAD/Formula/splash.rb
Tap: incoai/tap
License: Apache-2.0
Pinned: 1.3.2 on 2026-10-18 at 15:36:32
==> Installed Versions
incoai/tap/splash ↑ 1.3.2 → 1.4.0 (7,079 files, 250.7MB) [Linked]
==> Requirements
Required: arm64 architecture ✔, macOS >= 26 ✔, Splashmacos ✔
==> Caveats
Serve a model:
splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M
suzuyu@macmini-m6 ~ % brew list --pinned
ollama
splash
suzuyu@macmini-m6 ~ %
suzuyu@macmini-m6 ~ % brew unpin incoai/tap/splash
suzuyu@macmini-m6 ~ % brew upgrade incoai/tap/splash
==> Fetching downloads for: incoai/tap/splash
✔︎ Bottle splash (1.4.0) Downloaded 76.0MB/ 76.0MB
==> Upgrading incoai/tap/splash
1.3.2 -> 1.4.0
==> Pouring splash-1.4.0.arm64_tahoe.bottle.tar.gz
🍺 /opt/homebrew/Cellar/splash/1.4.0: 7,081 files, 254.6MB
==> Cleanup
Removing: /opt/homebrew/Cellar/splash/1.3.2... (7,079 files, 250.7MB)
Removing: /Users/suzuyu/Library/Caches/Homebrew/splash--1.3.2.arm64_tahoe.bottle.tar.gz... (74.5MB)
Disable this behaviour by setting `HOMEBREW_NO_INSTALL_CLEANUP=1`.
Hide these hints with `HOMEBREW_NO_ENV_HINTS=1` (see `man brew`).
==> Caveats
zsh completions have been installed to:
/opt/homebrew/share/zsh/site-functions
==> splash
Serve a model:
splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M
suzuyu@macmini-m6 ~ % brew list --versions splash
splash 1.4.0
suzuyu@macmini-m6 ~ % splash --version
Splash 1.4.0
suzuyu@macmini-m6 ~ % splash serve --help
usage: splash serve [-h] --model OWNER/REPO[:VARIANT] [--revision REVISION] [--draft-model DRAFT]
[--language-only] [--offline] [--port PORT] [--host ADDRESS]
[--allowed-host HOST] [--allowed-origin ORIGIN] [--api-key KEY] [--no-webui]
[--max-memory SIZE] [--max-context TOKENS] [--ple-memory SIZE]
[--expert-memory SIZE] [--sparse-kv-memory SIZE] [--kv-format {int8,bf16}]
[--state-format {fp32,bf16}] [--idle-release DURATION] [--max-cache-disk SIZE]
[--max-cache-disk-writes SIZE] [--persistent-cache] [--cache-dir DIRECTORY]
[--served-model-name NAME] [--announce-served-name]
[--default-reasoning-effort EFFORT] [--thinking-token-budget N]
[--thinking-end-text TEXT] [--max-request-size SIZE]
[--max-image-pixels PIXELS] [--request-timeout DURATION]
[--queue-size REQUESTS] [--decode-share SHARE] [--disable-ane]
[--verify-rows {auto,all}] [--allow-idle-sleep]
Load an upstream model, automatically select its DFlash2 draft, and serve in the foreground.
options:
-h, --help show this help message and exit
model:
--model OWNER/REPO[:VARIANT]
upstream Hugging Face model, with a GGUF variant after ':' (e.g.
:UD-Q4_K_M)
--revision REVISION model branch, tag or commit (default: the repository's default branch)
--draft-model DRAFT DFlash2 draft repository or local directory to use instead of the
automatically selected one
--language-only skip vision preparation and loading; image and PDF input is refused
--offline start the installed model without contacting the Hugging Face Hub (as
HF_HUB_OFFLINE=1)
network and access:
--port PORT HTTP port (default: SPLASH_PORT or 8000)
--host ADDRESS HTTP bind address (default: 127.0.0.1; 0.0.0.0 for all IPv4 interfaces);
clients use an IP address, localhost or a name given with --allowed-host
--allowed-host HOST additional HTTP Host name to accept, e.g. mymac.local; does not change the
bind address (repeatable)
--allowed-origin ORIGIN
origin whose pages may call the API from a browser or webview, e.g.
tauri://localhost; '*' for any (repeatable)
--api-key KEY require this key as a bearer token or x-api-key on every route but the
chat page, /health and /ready (default: SPLASH_API_KEY)
--no-webui disable the chat page
memory and context:
--max-memory SIZE Metal memory budget, e.g. 28G; it can only lower the automatic budget
(default: auto)
--max-context TOKENS context token limit, e.g. 100K or 1M (K = 1024 tokens, M = 1000000
tokens), up to 1010000; past the model's 256K native window it turns on
YaRN, which is static and changes answers at every length, so pass more
than 256K only when a request needs it (default: auto, the native window
when memory holds it)
--ple-memory SIZE RAM row cache of the PLE n-gram table of a Qwen3.8-Flash-Next GGUF, e.g.
2G, which streams the rest from the SSD; off loads the whole table, tens
of GB (default: auto, which streams it where memory cannot hold it)
--expert-memory SIZE RAM slots of the routed experts of a MoE model, e.g. 16G, which reads the
others from the SSD when a token routes them; off loads every expert
(default: auto, which loads them all where memory holds them and otherwise
gives them what the context leaves)
--sparse-kv-memory SIZE
RAM cache of the KV blocks a block-sparse model such as Qwen3.8-Flash-Next
reads of requests whose KV is on the SSD, e.g. 1200M; never below its
floor (default: auto, its floor)
--kv-format {int8,bf16}
target KV cache storage (default: int8); bf16 uses more memory
--state-format {fp32,bf16}
recurrent state storage (default: fp32); bf16 halves each state, so memory
and the SSD cache hold about twice as many
--idle-release DURATION
time without a request before the engine unwires its memory and frees the
weights: seconds, or with an s, m or h suffix, e.g. 30m (default: 10m);
off keeps both, though POST /v1/memory/release still frees the weights
SSD cache:
--max-cache-disk SIZE
SSD quota for cached KV pages and states: auto follows the volume, a
quarter of its free space beyond a floor of 10G (5% of a volume under
200G), at most 32G; a size such as 16G is held as given while the volume
keeps that floor; 0 disables (default: auto)
--max-cache-disk-writes SIZE
the most the SSD cache writes a day, e.g. 200G; the state a conversation
resumes from and KV pages pass it (default: 0, no limit)
--persistent-cache keep the SSD cache across restarts
--cache-dir DIRECTORY
where --persistent-cache keeps its files; needs --persistent-cache
(default: ~/Library/Caches/Splash/prefix-cache)
API:
--served-model-name NAME
additional API model name (repeatable); responses report the loaded model
ID unless --announce-served-name
--announce-served-name
report the first --served-model-name in API responses and list it first in
/v1/models; /status keeps the loaded model ID (needs --served-model-name)
--default-reasoning-effort EFFORT
effort of Chat and Responses requests that set none: none, minimal, low,
medium, high, xhigh or max (default: SPLASH_DEFAULT_REASONING_EFFORT, else
the model template's)
--thinking-token-budget N
thinking tokens of a thinking request that sets no thinking_token_budget,
after which its thinking closes (default: SPLASH_THINKING_TOKEN_BUDGET,
else no cap)
--thinking-end-text TEXT
text that ends thinking where a thinking budget runs out, such as a
sentence that turns to the answer, then </think> as its last token; at
most 64 tokens (default: SPLASH_THINKING_END_TEXT, else </think> alone)
requests:
--max-request-size SIZE
maximum HTTP request body size, e.g. 128M (default: 128M); shared input
budget is max(512M, twice this limit)
--max-image-pixels PIXELS
maximum resized pixels per image, 65536–4194304 (default: 4194304); bounds
the vision scratch one image needs
--request-timeout DURATION
time before a queued or in-flight request expires with 504: seconds, or
with an s, m or h suffix, e.g. 30m (default: none)
--queue-size REQUESTS
requests admitted at once, running or waiting; more get 503 (default: 32)
--decode-share SHARE decode time owed per unit of prefill time while other requests decode
(default: 0.5; 0 alternates one command each)
--disable-ane prefill on the GPU alone (default: a dense model's long prompts also use
the Neural Engine when that is faster)
--verify-rows {auto,all}
rows of each draft block decode verifies: all verifies every row, so a MoE
model's greedy and seeded outputs repeat as a dense model's do (default:
auto, where a verify budget learned from earlier cycles chooses a MoE
model's rows, which is faster but lets those outputs differ from run to
run)
--allow-idle-sleep let the Mac sleep automatically while requests run (default: it stays
awake until they finish; the display may still sleep)
Examples:
splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M
splash serve --model unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M --max-context 128K
SIZE is bytes, or a number with K, M or G (1024-based), such as 28G.
DURATION is seconds, or a number with s, m or h, such as 30m.
After Ready, open http://127.0.0.1:PORT in a browser on this Mac, or
connect an installed agent; both reach the server on loopback, which
the default --host and 0.0.0.0 include. The startup summary and
/status report the effective context limit; a client may impose a
smaller one. Keep this terminal open; Ctrl+C stops serving.
suzuyu@macmini-m6 ~ % brew pin incoai/tap/splash
suzuyu@macmini-m6 ~ %
</div></details>
Splash の起動とコンテキスト確認
64K で起動する
下記コマンドで、Splash 1.4.0 をコンテキスト長 64K・テキスト専用で起動する。モデルは前回と同じ UD-IQ4_XS を使用する。起動オプション
splash serve \
--model unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS \
--host 127.0.0.1 \
--port 8000 \
--max-context 65536 \
--language-only \
--no-webui
起動したターミナルで Ready が表示されるまで待つ。context 64K、language only、待ち受け先 http://127.0.0.1:8000 を確認し、このターミナルを開いたまま次の API 確認へ進む。
今回の実行では、ログの Loading から約1分59秒で Ready に到達した。
<details><summary>Splash 1.4.0 の起動ログ(UD-IQ4_XS / 64K / language only)</summary><div>
suzuyu@macmini-m6 ~ % splash serve \
--model unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS \
--host 127.0.0.1 \
--port 8000 \
--max-context 65536 \
--language-only \
--no-webui
Updating unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS: the GGUF metadata adapter changed.
Selected Qwen3.8-27B-UD-IQ4_XS.gguf from unsloth/Qwen3.8-27B-GGUF.
Installing unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS as Qwen3.8-27B (gguf); draft incoai/Qwen3.8-27B-DFlash2; vision disabled.
01:59:59 Loading · unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS
02:00:00 Chat template · patched to render later system messages in place (the original template rejects them), generation prompt 5-7 tokens
02:00:06 Weights loaded in 5.52 s.
02:00:06 Decode cycles verify every row of the draft's block (--verify-rows auto, as unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS is dense).
02:00:06 SSD cache: up to 32.0 GiB of temporary files in /var/folders/vm/x0l5wqcx7njgdqpfvbpp20n00000gn/T/ (its automatic quota, while its volume has room beyond the 10.0 GiB it keeps free); KV pages of 1040 KiB and states of 152 MiB, a state's write staging through 152 MiB of the memory plan; --max-cache-disk 0 turns it off.
02:00:06 Kernel policy for GPU family 11 with 12 cores.
02:00:06 Setting up the Neural Engine FFN split (splash serve --disable-ane keeps the FFN on the GPU).
02:00:57 Neural Engine FFN split at share 0.74 for chunks of 512 rows or more: 31.4 ms per 2048-row FFN layer against 63.6 on the GPU alone, 1.1% from the GPU alone on the Neural Engine's part (calibrated in 51.1 s).
02:01:58 Ready · unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS · context 64K · language only · http://127.0.0.1:8000
</div></details>
API で実効値を確認する
Ready 表示後、別ターミナルで下記コマンドを実行し、サーバの状態とコンテキスト長を確認する。今回は API キー未設定のローカル接続を使う。
curl --fail-with-body --connect-timeout 5 --max-time 15 \
http://127.0.0.1:8000/ready
curl --fail-with-body --connect-timeout 5 --max-time 15 \
http://127.0.0.1:8000/v1/models
/ready の status が ready、/v1/models のモデル名が指定どおりで、max_model_len と context_length がともに 65536 になっていることを確認する。
| 確認項目 | 結果 |
| :--- | :--- |
| サーバの状態 | ready |
| モデル | unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS |
| コンテキスト長 | max_model_len / context_length ともに 65536(64K) |
上記の結果が返った。続いて Hermes から接続し、文章生成を試す。
<details><summary>Splash の準備完了・コンテキスト確認ログ(初回タイムアウトと再試行)</summary><div>
suzuyu@macmini-m6 ~ % curl --fail-with-body --connect-timeout 5 --max-time 15 \
http://127.0.0.1:8000/ready
curl: (28) Failed to connect to 127.0.0.1 port 8000 after 5007 ms: Timeout was reached
suzuyu@macmini-m6 ~ %
suzuyu@macmini-m6 ~ % curl --fail-with-body --connect-timeout 5 --max-time 15 \
http://127.0.0.1:8000/ready
{"status":"ready"}%
suzuyu@macmini-m6 ~ % curl --fail-with-body --connect-timeout 5 --max-time 15 \
http://127.0.0.1:8000/v1/models
{"object":"list","data":[{"id":"unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS","object":"model","created":0,"owned_by":"splash","max_model_len":65536,"context_length":65536,"vision":false,"input_modalities":["text"]}],"models":[{"name":"unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS","description":"Splash resident model","release_date":""}]}%
suzuyu@macmini-m6 ~ %
</div></details>
Hermes Agent から利用する
導入とプロファイルの確認
公式 Quickstartに従って導入する。公式のインストーラは下記で取得できる。作業ディレクトリに保存し、内容と導入先を確認してから実行する。
curl --fail --show-error --location \
https://hermes-agent.nousresearch.com/install.sh \
--output hermes-install.sh
less hermes-install.sh
# 内容確認後、導入するときに実行
bash hermes-install.sh
セットアップ方法の選択画面では、矢印キーで Blank Slate を選び、Enter で進む。続いて追加機能を設定するか聞かれた場合は、最小構成のまま完了する選択肢を選ぶ。今回はローカルの Splash に接続するため、Nous Portal にログインする Quick Setup は使わない。セットアップ方法
!hermes-install-setup1.png
Select provider では Custom endpoint (enter URL manually) を選び、起動済みの Splash を接続先にする。以降、表示される項目に次の値を指定する。ローカル接続の設定例
!hermes-install-setup2.png
今回入力した項目は下記の通り
| 項目 | 今回の指定 |
| :--- | :--- |
| API base URL | http://127.0.0.1:8000/v1 |
| API key | 今回は認証なしのため空欄 |
| API compatibility mode | 2. Chat Completions |
| Model | unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS(取得したモデル一覧から選択) |
| Context length | 65536(Splash の API で確認した値) |
| Display name | Splash local(接続先を識別する任意の名前) |
| Reasoning effort | medium |
| Terminal backend | local または Keep current (local) |
| Shared metrics | No thanks(今回の完了ログは off) |
!hermes-install-setup3.png
!hermes-install-setup4.png
!hermes-install-setup5.png
!hermes-install-setup6.png
<details><summary>Hermes Agent のインストール・初期設定ログ(curl からセットアップ完了まで)</summary><div>
suzuyu@macmini-m6 ~ % curl --fail --show-error --location \
hermes-agent.nousresearch.com \
--output hermes-install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 66864 0 66864 0 0 300k 0 --:--:-- --:--:-- --:--:-- 299k
suzuyu@macmini-m6 ~ % less hermes-install.sh
suzuyu@macmini-m6 ~ % bash hermes-install.sh
┌─────────────────────────────────────────────────────────┐
│ ☤ Hermes Agent Installer │
├─────────────────────────────────────────────────────────┤
│ An open source AI agent by Nous Research. │
└─────────────────────────────────────────────────────────┘
✓ prerequisites ok (git, curl)
→ Installing the latest stable release (v0.22.5); --channel main follows every commit
✓ Hermes Agent cloned
→ Downloading uv 0.13.5 (darwin-arm64)
✓ uv ready (uv 0.13.5 (46776a95d 2026-10-21 aarch64-apple-darwin))
✓ bootstrap Python ready; PM prepares the dependency environment
✓ uv ready (uv 0.13.5 (46776a95d 2026-10-21 aarch64-apple-darwin))
✓ dependencies installed
✓ config prepared in /Users/suzuyu/.hermes
✓ uv ready (uv 0.13.5 (46776a95d 2026-10-21 aarch64-apple-darwin))
✓ added ~/.local/bin to PATH in /Users/suzuyu/.zshrc
✓ added ~/.local/bin to PATH in /Users/suzuyu/.zprofile
✓ app products an
Mentions
the same steps in all three, side by side: read the seller's record, borrow and pay, repay in hermes agent it's a plugin, and it asks you before it pays. our pull request to the @NousResearch catalog: hermes-agent#147003 in agentkit it's an action provider, one npm i @priors/agentkit away. our pull request with @CoinbaseDev: agentkit#1611 in @elizaOS it's a plugin with four actions: npm i @priors/plugin-elizaos
2026年後半のLLM動向: この数か月の進化を振り返る ここ数週間で、気になるモデルの発表が続いています。OpenAIからは、Sonnet 5.5に近い能力を半分のAPI単価で使えるGPT-6.1 Terra。Googleからは、GPT-6 AstraやClaude Opus 5.5と競うGemini 4 Argonに続き、約1か月でさらに性能を伸ばしたGemini 4 Carbonです。中国からも、Opus 5.5やAstraに迫る性能をうたうKimi K3.1 Proが出てきました。 この数か月でだいぶ動きがあったので、まず最新の発表で現在地を確認し、そこまでの移り変わりを振り返ってみます。そのあとに、私のコーディング環境と思考がどう変わったか、最後に、進化の速い道具や、自分で作った仕組みとの付き合い方について少し。発表を読むたびに装備を買い替えている気もするので、いったん手持ちを整理してみます。 現在地:最新モデルは、何を競っているのか 直近の三つの発表から、それぞれが何を強みにしているのかを見てみます。料金は100万トークンあたりのAPI単価で、キャッシュなし入力/出力の順です。 Gemini 4 Carbon:Googleも性能の上限を競う 10月28日のCarbon発表では、①総合的な知的能力、②エージェントによる開発、③画面操作、④知識業務、⑤マルチモーダル理解、⑥長文脈理解、⑦科学・数学、⑧サイバーセキュリティの8分野を、複数のベンチマークで評価しています。 主な比較対象は、約1か月前に発表されたArgonに加え、GPT-6 Astra、Claude Opus 5.5、Claude Fable 5.1です。公式の比較表では、17指標のうち15で掲載モデル中の最高値を示しています。一部の開発指標ではAstra、画面操作ではOpus 5.5が上ですが、幅広い用途で最上位を競うモデル、という打ち出しです。 長い間 Flash系の更新のみでしたが、Argon、Carbonと続き、Googleも性能上限の競争に入ってきました。 導入価格はArgonと同じ、入力$2/出力$10。導入期間の終了後は$4/$20となる案内です。ただし、まずは一部のサイバー防御関係者からの限定提供で、一般提供日は未発表です。 GPT-6.1 Terra:Sonnet 5.5との比較で見る低価格モデル 10月26日のGPT-6.1 Terra発表は、費用や速さを強調した発表です。 普段使いの比較相手として気になるのはSonnet 5.5です。Terraは入力$1/出力$5で、Sonnetの$2/$10の半額。総合評価ではSonnet 5.5 に及ばないものの、低い単価で回せるモデル、という見方が近そうです。 評価会社Artificial Analysisの比較では、総合指数はTerraが約51、Sonnetが約54でした。両者とも最大思考量での比較で、SonnetはDefault Fallback設定の結果です。一方、実際のリポジトリのコード修正を測るFrontierCode 2.0では、42.3%対41.7%とほぼ互角です。OpenAIも、Sonnetが開発や画面操作で上回る比較を掲載しています。一方、Agents’ Last Examという評価では、Sol・Astraより作業を3倍超速く終えることや、Opus 5.5よりタスク費用が低いことを訴えています。 GPT-6 Sol・Luna、続いて6.1 Solが出るなかで、Terraは5.6のままでした。てっきり Sonnet 5.5 より高性能で同価格帯のものが出てくるのかと思っていたので、少し残念です。しかし、強みもあるので、どれだけ使えるのか試してみようとは思います。Agentic なコーディングは Sonnet 5.5 と要比較、画面操作(ブラウザ、動画編集、CADなど)は期待といった感じかな。 Kimi K3.1 Pro:米国勢にも、中国勢の上位にも比較を向ける 10月23日のKimi K3.1 Pro発表では、Astra・Opusに加え、中国勢のDeepSeek V4.1 FlashやGLM-5.3との比較も出しています。 Kimiの公表値では、開発や知識業務の一部でOpus 5.5やAstraに迫り、上回る項目もあります。比較対象のGLM-5.3やDeepSeek V4.1 Flashにも、複数の指標で差をつけています。 一方、DeepSeek V4.1 Flashのコスパは、やはり別格に見えます。9月の発表では、GPT-5.6 SolやOpus 5と競える指標もありました。しかも、ピーク時間でも入力$0.30/出力$1.20で、オフピークはさらに半額です。最新の最上位モデルに全面的に並ぶわけではなくても、この価格ならまだまだ出番がありそうです。 「中国製モデルは少し性能を譲る代わりに安い」という見方だけでは、捉えきれなくなってきたのかな、という印象です。 ここ数カ月の動き:上位の能力が、普段使いの価格へ 6月下旬にGPT-5.6 Solが登場するころまでは、性能で先行するAnthropicをOpenAIが追い、Googleは安さや自社サービスとの連携で勝負しているように見えていました。その後は各社が、性能の上限を伸ばす一方で、上位に近い能力を安く使えるモデルも増やしています。会社ごとに振り返ってみます。 Anthropic:性能の上限を伸ばし、普段使いへ広げる 4月のMythos Previewから、6月のFable・Mythos 5へ。最上位の能力に注目していましたが、Fableの$10/$50を普段の実装で使うのは、なかなか勇気がいります。その後、6月末のSonnet 5は一部でOpus 4.8級の能力を$2/$10で、7月のOpus 5はFable 5に近い能力を半額の$5/$25で提供しました。 9月にはFable・Mythos 5.1で上限を伸ばしつつ、Opus 5.5は多くの仕事でFable 5.1級の能力を$4/$20へ。Sonnet 5.5も$2/$10を据え置いて性能を伸ばし、10月のHaiku 5.5は大量処理向けの価格帯を強化しました。OpenAIや中国勢が迫るなか、最上位の能力を普段使いへ広げてきた印象です。 開発者にとっては、Claude Code はやはりハーネスとしての機能性が高く、魅力的です。私は、あまりベンダーロックインされたくないという思想が強いんですが。便利さの前では、思想もなかなか脆いです。 OpenAI:性能を追いながら、価格帯を広げる 6月下旬に限定公開され、7月に一般提供されたGPT-5.6 Sol・Terra・Lunaは、能力と価格を三階層に分けた展開でした。SolはFable 5に迫り、一部の業務では上回る結果に。その後も値下げが続き、9月のGPT-6 Astraでは、Fable 5.1やOpus 5と性能の上限を競っています。 同じ9月のGPT-6 Sol・Lunaは、Solが$2/$10、Lunaが$0.10/$0.50へ。続くGPT-6.1 SolはAstraに迫る能力を5分の1の単価で、10月のGPT-6.1 TerraはSonnet 5.5やSolの半単価となる$1/$5で提供しました。 OpenAI は基本的に Anthropic よりも安く LLM を提供している印象ですが、この1か月くらいは Sonnet 5.5 の登場でこのイメージが少し崩れました。 Google:Flash系の更新から、性能上限の競争へ 7〜9月はGemini 3.6→3.8 Flashの更新が続き、導入単価$0.75/$3.75を維持しながら性能を向上。3.8では一部の開発試験でOpus 5や5.6 Solに近い結果を示しました。Google は長い間マルチモーダル性(画像・動画・音声)を押しており、そこが強みでもありましたが、ここの差もどんどんと縮んできている印象です。それでも、まだある程度の数の動画を解析するとなったら 3.8 Flash を検討するかなぁ。 9月末のGemini 4 ArgonはAstraやOpus 5.5などと比較し、10月にはGemini 4 Carbonでさらに性能を伸ばしました。ともに導入価格は$2/$10で、終了後は$4/$20。安さや連携に加えて、性能の上限を競う動きも強まった印象です。 中国勢:低価格の選択肢から、最上位との競争へ 4月のDeepSeek V4-Pro・Flashは、公開ウェイトと低価格で気になる存在でした。Proは発売時$1.74/$3.48から割引で$0.435/$0.87へ下がり、その価格のまま5月に恒久化されました。性能比でバグっている価格だったので、かなり話題になりましたね。6月のGLM-5.2も一部の長時間開発でOpus 4.8に迫り、上位に近い能力を安く使う選択肢が増えました。 7月のKimi K3はFable 5や5.6 Solに迫る能力を掲げ、8月にはQwen3.8-Max、GLM-5.3と更新が続きます。GLM-5.3-Flashは画像理解にも対応し、通常$0.15/$0.50でGLM-5.2を上回ると訴求。9月のDeepSeek V4.1 Flashも、ピーク$0.30/$1.20という低い単価のままで開発・業務の能力を伸ばしました。 一方、10月のKimi K3.1 Proは、最新のAstraやOpus 5.5にも迫る性能を掲げ、単価はK3の$3/$15から$2/$10へ。上でも述べましたが、「中国製モデルは少し性能を譲る代わりに安い」という見方だけでは、捉えきれなくなってきています。 こうして見ると、各社が一斉に同じ方向へ切り替わったというより、性能と価格の両方で、互いの得意な領域との差を埋めてきたように見えます。 私の開発セットアップの変遷 ここでちょっと私の開発手法の振り返りです。 6月頃まではClaude CodeやCodexを使い、利用枠が足りなくなるとGoogle の Antigravityへ、というように複数の道具を行き来していました。OpenClawやHermes Agentに安いモデルを組み合わせる使い方も気になって試していましたが、セキュリティ面の心配が残り、日常の開発はClaude CodeやCodexでよいか、となりました。 ただ、このあたりからコストが気になるようになり、中国製モデルも話題になっていたのでDeepSeekやGLMについて調べた結果、OpenCodeというハーネスで Thinker と Implementer という2種類のエージェントを定義し、OpenAIの上位モデルをThinkerに、DeepSeekやGLMをImplementerにする構成に落ち着きました。Thinkerと対話しながら調査して実装の骨格まで詰め、GitHub Issueに落とし、Implementerが実装するといった感じです。 このあたりから、自分なりのループエンジニアリングについて考えるようになりました。開発用の Skill やサブエージェントの定義を専用リポジトリで整備し、計画・実装・レビュー・修正に加えて、うまくいかなかった原因を指示や手順に戻すところまで含めて逐次改善しています。 いろいろとモデルを変えながら、1か月くらいはこれをメインで使っていたと思います。GLM-5.2や、その後の5.3-Flashなどを試し、別の選択肢としてGemini Flash系も使っていました。ただ、不満もいくつかあって、安いモデルの動作が安定しなかったり、画像が入力できなかったり、スマホからのリモート操作が面倒だったり(herdr + Tailscale でやってました)、あたりです。 その後は各社から性能が十分で安価なモデルが出たことと、ハーネスやスマホアプリの完成度の高さから Claude Code や Codex に移行することにしました(Claude Code や Codex にはリモート接続機能があって、PC の作業をスマホアプリから操作可能)。エージェントの Thinker/Implementer 構成は変わっていません。 私の記憶では、GPT-5.6 のころから徐々に Codex 中心になり、Sonnet 5.5でClaude Codeの利用が増えました。今はTerraを機にCodexの比率を少し戻し、Googleの発表も見てAntigravityも試してみようか、と考えています。 基本は各社の月20ドル前後のサブスクで、足りないときにたまに追加する形です。簡単なWebアプリをいくつか作る程度では、それで十分でした。一社に全部寄せないのは、ベンダーロックインを避けたいことと、いろいろなものに触れておきたいという理由です。一方で、ハーネスの機能を使いきりたい気持ち(特に Claude Code)もあるのですが。 作り込んだ仕組みを、どこまで持ち続けるか こうして振り返ると、モデルの性能や価格が変わるたびに、自分の開発環境も選び直していました。以前は意味のあった工夫が、新しいモデルやハーネスの機能で不要になることもありそうです。作り込んだ仕組みを、ずっと維持することがよいとも限りません。 最初はベンダーへの依存を避けたくて、OpenCode、Codex、Claude Code、Antigravity のどれでも使える手順を中心に作っていました。ハーネス固有の機能を前提にしすぎない方針です。ただ、ループエンジニアリングを実践するなかで、固有の機能を使う便利さも実感しています。最近は、そのあたりの縛りを少し緩めて使うようになりました。 それでも、モデルの性能や価格だけでなく、ハーネスやアプリの使いやすさまで含めて、そのときよい環境を選びたい気持ちは変わりません。便利な機能は使いたい。でも、次にもっとよい選択肢が出たときに、乗り換えるコストが高くならないようにもしておきたい。この加減は、まだ試行錯誤中です。 モデルの性能差は縮まってきた気がしますが、私のサブスクは増えるばかりです。 元記事(ブログ版): 2026年後半のLLM動向: この数か月の進化を振り返る 関連: Agentic Development: どうスケールさせるのか?
10 coding agents, one Qwen 3.8 27B, same llama-server: tokens and cache reuse differ more than pass rates Part 2 of my agent test (part 1 was a 4B model) Hardware I used: MacBook Pro M5 Max, 64 GB. Qwen 3.8 27B Q4 on llama.cpp, thinking off. Setup - same model and server for everyone - 5 small coding tasks, each with a little trap - each agent locked in a sandbox: it can only touch its own folder and only talk to the model - auto-approve on, telemetry off, 5 min limit Results |#|Agent|Passed|Median time|Median tokens|Cache reuse|Tried to go online| |:-|:-|:-|:-|:-|:-|:-| |1|Pi|5/5|38 s|9.2k|72%|no| |2|DeepSeek Harness|5/5|60 s|35.3k|83%|no| |3|Codex CLI|5/5|94 s|36.3k|79%|every run| |4|OpenClaw|5/5|106 s|39.0k|72%|unclear| |5|Cline|5/5|152 s|29.6k|79%|every run| |6|OpenCode|4/5|50 s|32.4k|75%|every run| |7|Hermes|4/5|80 s|64.9k|93%|no| |8|Atomic Agent|5/5|56 s|30.4k|86%|no| |9|goose|4/5|98 s|20.3k|76%|every run| |10|Qwen Code|4/5|183 s|107.9k|74%|unclear| Tokens and cache Pi is crazy lean: about 9k tokens per task, the lowest on every single task. Qwen Code was the hungriest at about 108k per task. Atomic Agent is the odd one out in how it works. It was the only one talking to llama.cpp's native endpoint with a grammar that forces the tool calls into shape. The other nine all went through the OpenAI-style API. It's also built to keep its prompt the same from step to step, which is why it reused 86% of the cache (2rd of 10). It stayed offline the whole time and passed 5/5. DeepSeek Harness was the surprise. It’s still an alpha, but it went 5/5, never tried to go online, and had the best cache reuse after Atomic Agent (83%). The trap and the network The log task got three agents. They grepped "ERROR" and got 244 instead of 64, because some normal lines just mention errors. OpenCode, goose and Atomic Agent fell for it. Codex, Cline, goose and OpenCode tried to reach the internet in every run, even with telemetry off. The sandbox blocked it, so I don't know what they were calling. OpenClaw and Qwen Code are "unclear" because they run as plain node and I couldn't tell them apart. llama.cpp notes - Codex needs llama-server's /v1/responses now - Hermes needs at least 64K context - Cline and Qwen Code have usage stats on by default, DeepSeek Harness uploads session logs (per their docs). I turned it all off Which column matters most to you when you pick an agent for a local model like Qwen 3.8 27B: passing, speed, tokens, or staying offline?
ローカル LLM のエージェントを AppContainer に入れて DNS まで塞いだ。ループバックの例外は全ポートを開けていた ! 先に、この記事の要約(専門用語なし) 前の記事で、ローカルの LLM のエージェント(Hermes)を、外へ通信できない専用のユーザーで動かした。ただ、名前の問い合わせ(DNS)だけは、Windows の別のサービスが代わりに外へ出すので止められなかった Windows のアプリの隔離の仕組み(AppContainer)の箱に、ネットワークの権限を何も付けずに入れると、その別のサービスが、箱からの問い合わせを「アクセス拒否」で断った。DNS Client の記録では、ネットワークへの問い合わせは始まらなかった 箱の中で Hermes とそのチャット画面を動かすまでに、詰まりが 9 つあった。いちばん手間取ったのは、チャット画面が CPU を使い切ったまま何も描かなかったことだった 箱から同じ PC の LLM に届くように付けた例外が、PC の中の全部の窓口を開けていた。箱の身元で照合する規則で、要る窓口だけに絞り直した 箱の外で動く台本を、箱の中から書き換えられる道もあった。置き場を変えて塞いだ 前回の続き 前の記事では、Surface で動かしている Hermes Agent を、権限の低い専用のユーザーで動かし、そのユーザーの外向きの通信を全部止めた。ふつうの通信は外へ届かなかった。 残ったのは名前の問い合わせだった。専用のユーザーで Resolve-DnsName を使い、でたらめな名前を引くと、外の DNS サーバーの「その名前は無い」という答えが返ってきた。調べた範囲では、Windows の名前解決の API を通した問い合わせは、DNS Client というサービスが代わりに行い、このサービスは別のアカウントで動いているようだ。だから、ユーザーごとの外向きの遮断に当たらない。名前に少しずつ情報を埋めれば、外へ持ち出せる。 前の記事では、仮想マシンに入れてネットワークを内部だけにする案を挙げ、「次に試す」と書いた。まず手軽な Windows Sandbox で確かめた。 ネットワークなし:DNS サーバーが無いので、名前の問い合わせは出ない。ただ、同じ PC の LLM にも届かない ネットワークあり(NAT):本体の側が問い合わせを代わりに外へ流した。本体の記録では SYSTEM の名義になり、どの箱から来たのかを区別できなかった 別の PC で前に試した箱でも、名前の問い合わせは外へ出ていた(DNS の見張りの記事)。問い合わせを代わりに送るサービスは、誰が問い合わせたか(プロセスとユーザー)を記録してはいたが、それを理由に断ることはしなかった。 内部だけのネットワークを組むには Hyper-V が要り、LLM と画像生成の GPU を仮想マシンに渡せるかという壁もある。そこで、OS の外側で切るのをいったんやめた。問い合わせを受けるサービスの側で「誰が問い合わせたか」を見て断れる仕組みを探し、AppContainer を試した。 AppContainer とは AppContainer は、Windows でストアのアプリなどを閉じ込めるための仕組みである。箱の中のプロセスは、箱ごとの身元(package SID)を持つ。ファイルなどは、その身元か、すべての箱に共通の身元(ALL APPLICATION PACKAGES)に許された所しか触れない。ネットワークも、箱に付けた権限(capability)の分しか使えない。 ストアのアプリでなくても、ふつうのプログラムを箱に入れて起動できる。CreateAppContainerProfile で箱を作り、CreateProcess に箱の情報(PROC_THREAD_ATTRIBUTE_SECURITY_CAPABILITIES)を付けて起動する。小さな起動役を C# で書き、PowerShell の Add-Type で読み込んで使った。 小さな試験:箱から何が届くか 権限を何も付けない箱で、外と PC の中への届き方を確かめた。 試したこと 権限なしの箱 対照:インターネットの権限(internetClient)を付けた箱 名前の問い合わせ(Resolve-DnsName) DNS Client がその場で拒否(status 5=アクセス拒否) 外まで届いた 外の IP への直接の接続・UDP 53 への直送 通らない — 同じ PC の LLM と画像生成の窓口(127.0.0.1) 通らない — 名前の問い合わせは、DNS Client の記録(Microsoft-Windows-DNS-Client/Operational)でも確かめた。権限なしの箱では、問い合わせを受けた記録(3006)と終わった記録(3008)だけが残り、ネットワークへ問い合わせを始めたときに出る記録(3009 以降)は出なかった。DNS Client が、問い合わせてきたのが箱だと分かったうえで断っていると見ている。専用のユーザーでは止められなかったものが、ここで止まった。 ほかの抜け道も試した。外の IP のファイル共有(\<IP>)と WebDAV は、どの条件でも外へ接続しなかった。BITS(Windows のバックグラウンド転送)は、普段のユーザーでは BITS のサービスが代わりに外へ出た。専用のユーザーは「ネットワークにログオンしていない」で失敗し、箱は「アクセス拒否」で失敗した。 箱は、同じ PC の中(ループバック)への接続も止める。Hermes は同じ PC の LLM と画像生成に頼むので、ここだけは開ける必要がある。CheckNetIsolation LoopbackExempt で箱にループバックの例外を付けると(管理者が要る)、LLM と画像生成に届き、名前の問い合わせは拒否のままだった。 この時点では、これで足りると思っていた。あとで、この例外が穴を開けていたと分かる(後の節)。 Hermes を箱の中で動かす Hermes は Python で動き、チャット画面は Node で動く。どちらも、箱の中で動かす前提では作られていない。1 つ解くと次が出た。直しはどれも、箱で動かすときだけ働く形にして、箱の外での動きは変えていない。 詰まり 原因 直し ゲートウェイ(Hermes の常駐の部分)が「使えない」と出る 存在の確認でタスク スケジューラに問い合わせるが、箱からはタスク スケジューラに届かない 箱のときは問い合わせを飛ばす。制御用の名前付きパイプは \.\pipe\LOCAL\ の下に作り、DACL に AppContainer 全体(ALL APPLICATION PACKAGES)を足す cmd 経由で起動した Node が動かなかった 原因は追っていない(箱の中の cmd そのものは起動でき、外のコマンドも動いた) 起動の親を Python にした シェルの道具の bash(Git に付いてくる MSYS のもの)が 0xC0000142 で起動しない MSYS が箱の中で初期化できない busybox-w32(ARM64 版)の sh に替える。ash に無い declare・shopt・builtin などを使わない形に直す Python で作ったフォルダに、作った本人が入れない Hermes と標準ライブラリ(tempfile.mkdtemp)が、mode 0o700 でフォルダを作る。Python 3.13 から(それより前の版も、3.12.4・3.11.10・3.10.15・3.9.20 以降のセキュリティ修正で)、Windows でもこの mode を扱い、作った本人と管理者などだけが入れる ACL を付けるようになった(公式文書)。そこに箱の SID が入らない 箱のときだけ、mode を付けずに作るようにした。Python と Hermes のコードは書き換えず、仮想環境に置いた .pth で、起動のときに os.mkdir を包んでいる チャット画面の Node が起動の途中で EPERM 実際のパスを求める処理が C:\ そのものを lstat する C:\ そのものにだけ、箱へ属性の読み取りを付ける(継承なし) Node が起動できない Node の入ったフォルダに、箱が読める許可が無い そのフォルダに、箱の SID への読み取りと実行を付ける ゲートウェイが立ち上がらない Hermes(Python の側)は、Windows ではゲートウェイをジョブから切り離した別のプロセスとして起動する作りで、箱の中では立ち上がらなかった(切り離しが許されないためと見ている) 起動の台本で、ゲートウェイを先に起動しておく Hermes が /c/Users/... の形のパスで空振りする システムプロンプトに「この形のパスが使える」とあるが、busybox では通らない 箱のときだけ、その説明を差し替える チャット画面が CPU を使い切ったまま何も描かない いちばん手間取ったのはこれだった。チャット画面の Node が CPU を 100% 使い続け、画面には何も出ない。エラーも出ない。 Node の --prof でプロファイルを取ると、git のブランチ名を取る execFile の中で回り続けていた。箱の中では、Node が使う libuv が、子プロセスの出力を受ける名前付きパイプを作れない。拒否されるたびに名前を変えて作り直し、それを続けていた、と読んだ。箱の中で、出力をパイプで受ける起動は戻ってこず、パイプを使わない起動(stdio を ignore)はすぐ終わることを確かめた。 直しは、Node の前処理(--require)で execFile を包み、子プロセスの出力をパイプではなく一時ファイルで受けるようにした。パイプで子プロセスを起こす spawn は、回り続けないよう、すぐに失敗させている。チャット画面のコードには手を入れていない。 脇道で見誤りかけたこと チャットだけが途中で切れた。中継(後述)が、接続のときに付けた 10 秒の時間切れを付けたままにしていて、10 秒データが流れない WebSocket がそこで切られていた 試験の道具でチャットに文を送ると、送信されなかった。文字と Enter を一度に送っていたので、画面が貼り付けとして受け取っていた。箱の外でも同じだったので、箱のせいではなかった 送った文字が入力欄に出ただけなのを、返事が来たと誤って判定しかけた。返事の中身まで見て判定するようにした ブラウザから箱の中の画面へ:逆向きの中継 ループバックの例外を付けても、通るのは箱から外への向きだけで、外のブラウザから箱の中の待ち受けへは繋がらなかった。箱に、ネットワークで待ち受ける権限(privateNetworkClientServer)を付けて試したが、外から箱の中の待ち受けへは繋がらなかった。しかも、名前の問い合わせと LAN まで通るようになった。 そこで、向きを逆にした。箱の中から、外で待っている中継へ接続を張っておく。ブラウザの接続を受けた中継は、その接続を箱の中の画面に渡す。中継は標準ライブラリだけで書き、127.0.0.1 だけで待ち受け、トークンを照合してから繋ぐ。 穴 1:ループバックの例外は、PC の中の全部の窓口を開ける 箱の点検として、箱の中から、127.0.0.1 で待ち受けているものに総当たりで接続した(接続できたかだけを見て、中身は送らない)。結果は、ほぼ全部に届いた。LLM と画像生成だけでなく、ファイル共有、SSH、ゲームの配信のアプリ、そのほか同じ PC で待ち受けている別のサービスにもである。中には、外へ通信できる別のプログラムに文を渡せる窓口もあった。そこに届けば、名前の問い合わせを塞いでも、その先から外へ出せてしまう。 CheckNetIsolation の例外は、ポートを選べない。付けると、その箱からループバックの全部に届く。 前の記事で、専用のユーザーのループバックは、WFP(Windows Filtering Platform)の規則で決めた窓口だけに絞ってあった。ところが、その専用のユーザーの名義で箱を動かしても、全部に届いた。規則はユーザーの身元で照合していて、箱の中のプロセスには当たらなかった。箱のトークンでは、アクセスの確認に箱の SID も要るためだと見ている。 もう一つあった。箱の SID は、箱の名前から決まる(名前から SID を求める DeriveAppContainerSidFromAppContainerName という関数もある)。例外は SID に付くので、例外を付けた箱と同じ名前で箱を作れば、その例外をそのまま使える。実際に、専用のユーザーが自分で同じ名前の箱を作ると、全部の窓口に届いた。試験のために例外を付けた時点で、本番の側にも同じ穴が開いていたことになる。 直しは次の順にした。 例外を外す WFP の規則を、ユーザーではなく箱の身元で照合する形で作り直す。照合の条件は FWPM_CONDITION_ALE_PACKAGE_ID(箱の package SID)にする。許すのは、LLM・画像生成・中継の受け口・箱の中の画面とゲートウェイ・Hermes が内部で使う範囲だけで、ほかのポートは止める 規則が入ってから、例外を付け直す 普段のユーザーと専用のユーザーのどちらの名義で箱を動かしても、許したポートだけに届き、残りは WSAEACCES(10013)で拒否されることを確かめた。 穴 2:箱の外で動く台本を、箱が書き換えられる 試験のときは、逆向きの中継の、外の側の台本が普段のユーザーで動いていた。この台本が、箱から書けるフォルダに置かれていて、そこを作業フォルダにして動いていた。 箱の中から台本を書き換えれば、次の起動で、その中身が箱の外の権限で動く。書き換えなくても、同じフォルダに argparse.py のような名前のファイルを置けば、同じことが起きる。Python は、台本のあるフォルダをモジュールの探し先の先頭に入れるからである。 直しは、箱の外で動かすものを、箱が書けない場所に置くことにした。作業フォルダも箱が書けない場所にし、Python は -I を付けて起動する。本番では、外の中継も専用のユーザーで動かしている。 箱の境目は、ネットワークだけではなかった。箱が書けるファイルを、箱の外の誰が実行するか、まで見る必要があった。 箱を動かす名義は、専用のユーザーにした 箱の中のプロセスを、普段のユーザーの名義で動かすか、前の記事の専用のユーザーの名義で動かすかを決める必要があった。専用のユーザーにした。 理由は、守りを箱ひとつに頼らないためである。箱の中のプロセスは、ファイルについては、箱と専用のユーザーの両方に許された所しか触れない。箱から抜け出されても、出た先は、外向きの通信を止め、書ける場所を絞った専用のユーザーである。普段のユーザーの名義なら、自分のファイルにも全部の通信にも手が届く。 ただし、ネットワークは別だった。専用のユーザーの外向きを止める規則は、ユーザーの身元で照合しているので、箱の中のプロセスには当たらない。インターネットの権限を付けた箱を専用のユーザーの名義で動かすと、外の IP に届いた。 そこで、箱そのものの身元で照合するファイアウォールの規則(New-NetFirewallRule の -Package)を 1 本足した。外向きで、行き先がループバック以外のものを止める。試しに一度だけ箱にインターネットの権限を付けて比べると、外への直接の接続は WSAEACCES(10013)で止まり、同じ PC の LLM と画像生成には届いた。ただ、でたらめな名前の問い合わせは、規則を入れたあとも外の DNS サーバーまで届いた。権限を付けた箱の問い合わせは DNS Client が代わりに外へ出すので、箱の身元の規則には当たらないと見ている。 名前の問い合わせまで塞いでいるのは、箱に権限を何も付けないことだけだった。点検では、後で書く 47 項目に加えて、本番の起動の台本が箱に権限を付けていないかと、この規則が残っているかも見ている。権限を付け間違えても、点検を流せば気づける。 欠点は手間で、起動が二段になり、ファイルの許可も両方に付け、試験も両方でやり直すことになる。使い勝手と速さは変わらなかった。 本番の切り替えで、穴 1 が数分だけ開き直した 試験の名前のまま本番にするのをやめ、本番用の名前で箱を作り直した。名前が変わると SID も変わるので、ファイルの許可・WFP の規則・ループバックの例外を、新しい SID に入れ直す必要がある。ファイルの許可は、試験の箱に付けた明示の許可を同じ形で新しい SID に写す台本で移した(約 4,700 か所)。 ここで一つ失敗した。例外を付け替える台本に、こう書いていた。 CheckNetIsolation LoopbackExempt -a -p=$sid PowerShell は、- で始まるこの引数の中の $sid を展開せずに、そのまま渡していた。CheckNetIsolation はエラー 1337(SID が不正)で失敗した。WFP の規則は新しい箱に移ったのに、古い箱の例外が規則なしで残り、数分のあいだ穴 1 が開き直していた。 手元の Windows PowerShell 5.1 でも、同じことが起きた。 $sid = "S-1-15-2-123" cmd /c echo -p=$sid # → -p=$sid cmd /c echo "-p=$sid" # → -p=S-1-15-2-123 引用符で囲めば展開される。台本は "-p=$sid" に直した。付け替えのあとは、成功の表示を探すのではなく、一覧(-s)で結果を見ることにした。 開いていた数分のあいだも、箱の中のものは専用のユーザーの名義で動いていた。ファイルは、専用のユーザーにも箱にも許された所しか触れない。ただ、ネットワークは別だった。ループバックの穴は専用のユーザーの規則では塞がらず(穴 1 のとおり)、後で確かめると、外向きを止める規則も箱の中のプロセスには当たっていなかった。だから、付け替えのあとは一覧で確かめる。 崩れに気づくための点検 設定は、更新や編集で黙って崩れる。前の記事でも、行動ルールのファイルを編集したら、書き換えを止める設定が外れていた。そこで、管理者の要らない点検の台本を 1 本作り、更新や設定の変更のたびに流すことにした。 専用のユーザーの名義の箱の中から、47 項目を確かめる。 ループバック:止まるべきポートが止まり、届くべきポートに届くか 名前の問い合わせと、外の IP への直接の接続が止まるか 読めてはいけない場所(普段のユーザーのフォルダ、資格情報、ほかの AI の道具の設定、SSH の鍵)が読めないか 書けてはいけない場所(Hermes 本体、Python の環境)に書けないか あわせて、ループバックの例外の一覧に想定外の箱が無いか、専用のユーザーの外向きを止める規則と、箱そのものの外向きの規則が残っているか、本番の起動で箱に権限を付けていないか、画像生成の閉じ込めが崩れていないかを見る。点検の台本と起動役は、箱からも専用のユーザーからも書けない場所に置いた。点検の台本そのものが抜け道にならないようにするためである。 本番の切り替えのあと、47 項目は全部通った。ブラウザでチャットの返事が返り、シェルの道具(busybox)から画像生成の道具まで呼べた。止める手順で、箱の中のプロセスが全部止まることも確かめた。 使えなくなったもの 箱に入れた代わりに、使えなくなったものがある。 Git に付いてくる MSYS の道具(bash など)。busybox の範囲で書き直す busybox の wget(箱の中で落ちる) git のブランチ名の表示など、チャット画面の付属の機能の一部 curl の -o /dev/null(-o NUL なら通る)。ネイティブのプログラムの出力の改行は CRLF のままで、日本語の出力が cp932 で化けることがある 残るもの 作ったファイル(画像や文書の埋め込み情報)に文を混ぜ、それを読む別の AI に指示を仕込む道。仕組みでは防げないので、読む側の決まり(ファイルの中の指示に従わず、見つけたら知らせる)で守っている 設定の崩れ。上の点検で気づく 手元で確かめるときのコマンド例 名前の問い合わせがネットワークへ出たか(箱からの問い合わせで 3009 以降が出ていなければ、ネットワークへは問い合わせていない) Get-WinEvent -LogName Microsoft-Windows-DNS-Client/Operational -MaxEvents 50 | Where-Object Id -in 3006,3008,3009,3010,3011,3020 | Select-Object TimeCreated, Id, Message ループバックの例外の一覧(想定外の箱が無いか) CheckNetIsolation LoopbackExempt -s 例外を外す(管理者)。SID は引用符で囲む CheckNetIsolation LoopbackExempt -d "-p=<箱の SID>" 箱そのものの外向きを、ループバック以外は止める規則も足した(管理者の PowerShell)。箱の SID は、箱の名前から DeriveAppContainerSidFromAppContainerName で求めたもの(S-1-15-2-… の形)である。ループバックへの道は、別に作った WFP の規則(箱の身元で照合)に任せているので、この規則ではループバックを外してある。 $sid = "<箱の SID>" ループバック以外:IPv4 は 127.0.0.0/8 を除く 2 つの範囲、IPv6 は ::1 を除く範囲 $remote = @("0.0.0.0-126.255.255.255", "128.0.0.0-255.255.255.255", "::2-ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") New-NetFirewallRule -Name "<規則の名前>" -DisplayName "<規則の名前>" ` -Direction Outbound -Action Block -Package $sid -RemoteAddress $remote -Profile Any -Enabled True 確かめる $r = Get-NetFirewallRule -Name "<規則の名前>" $r | Select-Object Name, Enabled, Action, Direction ($r | Get-NetFirewallApplicationFilter).Package # 箱の SID が出る ($r | Get-NetFirewallAddressFilter).RemoteAddress # 上の 3 つの範囲が出る 外す Remove-NetFirewallRule -Name "<規則の名前>" 箱の名前を変えると SID も変わるので、この規則も入れ直しになる。前に書いたとおり、この規則で止まるのは直接の接続までで、名前の問い合わせは止まらない。 箱の中から総当たりで接続を試すときは、接続できたかだけを見る。結果は、届いた/拒否(10013)/時間切れ(許されているが、待ち受けが無い)の 3 つに分かれる。 持ち帰り ユーザー単位の外向きの遮断では、名前の問い合わせは止まらなかった。ネットワークの権限を何も付けない AppContainer に入れると、DNS Client が箱からの問い合わせを断り、DNS Client の記録では、ネットワークへの問い合わせは始まらなかった CheckNetIsolation のループバックの例外は、ポートを選べない。付けると、同じ PC で待ち受けている全部に届く。WFP の規則を箱の身元(FWPM_CONDITION_ALE_PACKAGE_ID)で照合して、要るポートだけに絞る。規則を入れてから例外を付ける ユーザーの身元で照合する WFP の規則は、箱の中のプロセスには当たらなかった。ファイアウォールの外向きの規則も同じだった 箱の SID は名前から決まる。例外を付けた箱と同じ名前で箱を作れば、その例外を使える。試験用の例外も、外すまでは本番の穴になる 箱の境目は、ネットワークだけではない。箱が書けるファイルを、箱の外で誰が実行するかまで見る PowerShell では、- で始まる引数の中の変数が展開されないことがある。"-p=$sid" と囲み、付け替えのあとは一覧で結果を見る 名前の問い合わせを塞いでいるのは、箱に権限を何も付けないことだけだった。箱の身元で照合するファイアウォールの規則(-Package)を足すと、権限を付け間違えても外への直接の接続は止まるが、名前の問い合わせは止まらない 守りを箱ひとつに頼らない。箱を動かす名義を専用のユーザーにすると、ファイルの範囲と、箱から抜け出た先が狭くなる。ただし、ユーザーで照合する通信の規則(外向きの遮断・WFP の絞り込み)は、箱の中には当たらない
Oh-my-hermes guía completa para orquestar el agente Hermes con modelos en paralelo Oh-my-hermes, o OMH, es una capa de operación de código abierto para Hermes Agent que convierte objetivos amplios en flujos de trabajo verificables. En vez de tratar una petición como una sola conversación con un…
Oh-my-hermes guía completa para orquestar el agente Hermes con modelos en paralelo Oh-my-hermes, o OMH, es una capa de operación de código abierto para Hermes Agent que convierte objetivos amplios en flujos de trabajo verificables. En vez de tratar una petición como una sola conversación con un…
ローカル LLM のエージェントが外へ送ろうとしても困らないように組む。守りと確かめ方と残る穴 ! 先に、この記事の要約(専門用語なし) AI の会社 Cohere が、ある公開モデルが試験の環境から外のクラウドへ試験用の文字列を送ろうとし、止められた、と報告した。報告自体が「ごくまれ」「悪意かどうかは分からない」と留保している 自分も、Surface でローカルの LLM のエージェント(Hermes)を動かしている。モデルの中身は確かめようがないので、「勝手に外へ送ろうとしても困らない」ように組んでいる エージェントもその頭脳の LLM も、権限の低い専用のユーザーで動かす。そのユーザーは外へ通信できず、同じ PC の中でも決めた相手としか話せない。書けるのは自分の作業場所だけにした 普段のユーザーで挟んで、届くはずの所に届き、止めた所で止まることを確かめた。Cohere の例のような、ふつうの通信での送信は外へ届かず、秘密のファイルも読めなかった ただし、名前の問い合わせ(DNS)と ping は外まで届いた。少しずつなら情報を載せられる細い道で、ユーザー単位の閉じ込めでは塞げない。ping は PC 全体の規則で塞いだ。名前の問い合わせは今も穴として残っていて、塞ぐなら OS の外側(仮想マシンなど)で切ることになりそうだ きっかけ:Cohere の報告 Cohere が、公開モデルの Qwen3.8-Flash-Next を試験していて気になる動きを見つけた、と報告した(Cohere の報告)。 報告によると、モデルはエージェントとして、シェルを使える隔離環境の中で「悪いファイルのダウンロードと実行を見つける検知ルールを書く」という課題を与えられていた。その途中で、/tmp の中身を一覧し、転送に使える道具(curl など)があるかを調べ、DNS の設定を読んでから、北京にあるクラウドの保管場所へ試験用の文字列を送ろうとした。思考の記録では「道具は呼ばない」と書いていた、とも報告されている。 隔離環境には外への経路が無かったので、送信はそこで止まり、外へは出ていない。Cohere は、ふつうに外へ通信できる開発者の PC や CI の上なら、誰も気づかないうちに外のサーバーまで届いていただろう、と書いている。 ただし、報告自体が次のように留保している。 起きたのは、評価で投げた呼び出しの 10 万回に 1 回未満。同じ指示を流し直すと、期待どおりの検知ルールが返った わざとなのか、学習の残りかすなのかは分からない。学習用の隔離環境の通信の記録が、消されずに学習データに混ざった可能性も挙げている 送ろうとした中身は PROBE_PAYLOAD_ABC123 という試験用の文字列だった Cohere は記録と再現用の手順も公開している(Hugging Face のデータセット)。報道では WinBuzzer などが取り上げている。 この記事は、このモデルや提供元を責めるためのものではない。読んで考えたのは、「自分のエージェントで同じことが起きたら、どこで止まるか」だった。守りは前から組んである。報告を読んで、その組み方で本当に止まるかを確かめ直した。 何から守りたいか Surface では、Hermes というエージェントを、ローカルの LLM を頭脳にして動かしている。Hermes Agent は Nous Research が MIT ライセンスで公開しているオープンソースのエージェントで、使いながら経験からスキル(手順書)を作り、直していく「自己改善」を特徴にしている(公式サイト)。ここでは、PC の中で動かす LLM につないで、ローカルだけで動かしている。Hermes はコマンドを実行し、ファイルを読み書きし、画像生成の ComfyUI に仕事を投げる。 モデルの重みに何が入っているかは、外から確かめようがない。Cohere の例のように、ふだんは何もせず、まれに外へ送ろうとすることもありうる。そこで、モデルを信じることを前提にせず、勝手に外へ送ろうとしても困らないように組んである。守りたいのは次の 2 つである。 普段のユーザーの鍵・設定・資格情報・文書・ソース それらを外へ持ち出す経路 今の守り 専用のユーザーで動かす エージェントも、その頭脳の LLM(llama-server)も、Web の画面も、普段のユーザーとは別の、権限の低い専用のユーザーで動かす。普段のユーザーのフォルダは、このユーザーからは読めない。 外向きの通信は全部止める この専用のユーザーからの外向きの通信は、Windows のファイアウォールで全部止めた。インターネットにも、同じ LAN の機器にも届かない(ただし、あとで書くとおり、名前の問い合わせと ping はこの規則の外を通った)。 同じ PC の中でも、話してよい相手を名指しで決める 外を止めても、同じ PC の中(127.0.0.1)には、ほかのツールや管理用の窓口が待ち受けている。そこに届けば、その窓口の持ち主の権限で何かをさせられるかもしれない。 そこで、Windows の通信の仕組みの層で、同じ PC の中の宛先も絞った。通すのは、LLM・Web の画面・Hermes の内部の窓口・ComfyUI という、決めた数か所だけである。ほかの待ち受けには届かない。Hermes は内部で「空いている番号を OS に選ばせる」待ち受けを使うので、その番号を許した範囲に寄せる手当ても入れた。 書けるのは、自分の作業場所だけにする 専用のユーザーが書けるのは、Hermes の作業場所と記憶の置き場だけにした。Hermes 本体・Python の環境・道具・起動のスクリプト・人格と絶対に越えない線を書いたファイル・手順書は、読むだけである。 ねらいは 2 つある。エージェントが、自分を動かすコードを書き換えられないこと。そして、普段のユーザーがあとで実行するものに手を入れられないことである。 自己改善は許し、その履歴はエージェントに消せない場所に残す Hermes には、自分の行動ルール・設定・学んだことのメモを書き換える機能がある。これを止めると、使い勝手が落ちる。 そこで、書き換えは許すことにした。そのかわり、起動・停止・点検のたびに、そのファイルをエージェントから読めない場所へ写して、履歴を残す。あとから「いつ、何が変わったか」を、エージェントに消されずにたどれる。 画像生成の側も閉じ込める ComfyUI は WSL の中で、こちらも専用のユーザーで動かしている。外向きの通信は、ループバック以外を止めた。クラウドに送るノードは読み込まない起動のしかたにし、ノードを入れる仕組み(ComfyUI-Manager)は入れていない。 どう確かめたか 規則を書いただけでは、本当に止まっているかは分からない。そこで、確かめるスクリプトを作った。 同じ宛先の一覧(同じ PC の中の各窓口、LAN、WSL のアドレス、外の IP と名前)に、次の順で接続を試す。 普段のユーザー(対照) 専用のユーザー 普段のユーザー(対照) 確かめるスクリプトは、宛先ごとに届いたか止まったかを書き出すだけで、判定はしない。届かない理由が、相手がいないのか規則なのかは区別できないので、前後の対照で届くのに専用のユーザーでは止まるものだけを「規則が働いている」と読み、対照でも届かない宛先は判定に使わない。 ファイルも同じように、専用のユーザーで、秘密の置き場所を読めるか、あちこちに書けるかを試す。書き込みは、実行に関わる場所に空のファイルを作れるかで確かめた。 確かめた結果 公開の前に流し直した結果は次のとおりである。 同じ PC の中で届いたのは、許した窓口だけだった(ComfyUI は止めていたので、この回は判定していない) 外・LAN・WSL のアドレスには、どれも届かなかった 普段のユーザーのフォルダ(SSH の鍵、資格情報、ブラウザのデータ、ドキュメント、ソース)と、モデルや道具の置き場は、どれも読めなかった Hermes 本体・Python の環境・道具・起動のスクリプトには、書けなかった 読めたのは、Hermes 本体、同じ専用のユーザーで動かしている記憶の仕組みのデータ(取り込むときに秘密と個人情報を除いてある)、Windows の共有の設定置き場(ProgramData)だった。ProgramData には Wi-Fi の設定も置かれているが、調べた範囲では、鍵は Windows が暗号化して置いているので、このユーザーからは取り出せないようだ。 窓口の先も確かめた。LLM・Web の画面・Hermes の内部の窓口は、どれも同じ専用のユーザーのプロセスだった。同じ外向きの遮断の下にあるので、そこを踏み台にして外へ出ることはできない。ComfyUI は別の専用のユーザーで動き、外の IP へは届かなかった。 Cohere の例でモデルがしようとしたのは、curl でクラウドの保管場所へ送る、ふつうの通信だった。この組み方なら、それは外へ届かずに止まる。 残る穴 1:名前の問い合わせ(DNS) ここが、いちばん大きく残っている穴である。 専用のユーザーで、問い合わせ先を指定して nslookup を直接送ると、応答が返らずにタイムアウトした(普段のユーザーでは答えが返った)。nslookup は応答が無くても終了コード 0 を返すことがあるので、終了コードではなく、応答の有無で見た。 ところが、OS の名前解決のしくみに頼む経路(PowerShell の Resolve-DnsName)で、でたらめな名前を引くと、専用のユーザーでも、そのドメインの「その名前は無い」という答え(SOA 付き)が返ってきた。手元に覚えのない名前なので、問い合わせは外の DNS サーバーまで届いている。つまり、問い合わせた文字列そのものが外へ出ている。Python の getaddrinfo も同じ OS のしくみを通るので、同じ経路で外へ出ると見ているが、こちらは外まで届いた証拠を取れていない。 調べた範囲では、Windows では名前の問い合わせを DNS Client というサービスが代わりに行い、このサービスは別のアカウントで動いているようだ。そのため、ユーザーごとの外向きの遮断では止まらない。WSL の側も同じで、直接の問い合わせは止まったが、システムの名前解決サービス(resolvectl)に頼むと解決できた。 名前に少しずつ情報を埋めれば、外へ持ち出すのに使える。Cohere の例でも、モデルは送る前に DNS の設定を読んでいた。 別の PC では、この穴を「止める」のではなく、「気づいて止める」見張りを作った。どのプロセスがどの名前を問い合わせたかを Windows の記録から読み、エージェントの問い合わせが出たら止めるものである。詳しくは DNS の見張りの記事 に書いた。Surface でも、Windows の DNS Client の記録を有効にして、専用のユーザーの問い合わせが「どのユーザーが引いたか」付きで残ることまでは確かめた。いまは記録するだけで、止める仕組みはまだ無い。ふだん引く名前を集めてから、許していない名前を引いた時点で Hermes を止める仕組みを足すつもりだ。それができても、最初の 1 件は外へ出る。だから、塞いだとは言えない。 残る穴 2:ping 専用のユーザーの外向きの通信を止めていても、ping は外まで届いた。ユーザー単位の遮断は、ping には当たらないようだ(理由は確かめていない)。ping のデータにも、少しずつなら情報を載せられる。 そこで、PC 全体で、外向きの ping だけを止める規則を足した(家の中への ping は残した)。足したあと、普段のユーザーからも専用のユーザーからも、外への ping は届かず、家の中とループバックへは届くことを確かめた。 ping は PC 全体で止めた。名前の問い合わせは塞げていない この 2 つは、どちらもユーザー単位の閉じ込めの外を通る。専用のユーザーの規則をいくら固くしても、ここは塞げない。ping は、普段のユーザーの ping も止めてよいと割り切って、PC 全体で止めた。名前の問い合わせは、PC 全体で止めると普段の作業ができなくなるので、同じ手は使えない。 調べた範囲では、名前の問い合わせを確実に塞ぐには、エージェントを OS ごと外から切るのがよさそうだ。たとえば、エージェントを仮想マシンに入れ、そのネットワークを内部だけにすれば、名前の問い合わせにも、そもそも出口が無くなる。WSL も仮想マシンだが、既定のネットワークのままでは、前に書いたとおり名前を引けた。要は、ネットワークを内部だけにすることである。調べた範囲では、Hyper-V の既定のネットワーク(Default Switch)や NAT の構成では、PC 本体が仮想マシンの名前の問い合わせを受けて、代わりに外へ流すようだ。これでは同じ穴が残る。外へつながらない内部だけのネットワークにして、本体の側にも問い合わせを受ける窓口(DNS サーバーやインターネット接続の共有)を置かないことになる。ただ、Hermes の頭脳の LLM と画像生成は GPU を使うので、仮想マシンに GPU を渡せるかが最初の壁になる。ここは次に試す。 残る穴 3:窓口の先で何をさせられるか ComfyUI は、受け取ったワークフローをそのまま実行する。外へは出られないが、その中のノードを使えば、ファイルを書く、同じ PC の中の届く範囲に接続する、といったことはできる。 窓口の先の相手も同じ考え方で閉じ込めているので、窓口を通って外へ出ることはできない。ただし、窓口の先で何をさせられるかは、その相手の機能しだいである。 生成の要求を中身で検査する門番(決めた形のワークフローだけを通すもの)は、置いていない。ComfyUI 自体が外へ出られないので、門番は置かなかった。外へ出られないことと、クラウドのノードを読み込まないことで守っている。 点検で気づいたこと 外への通信・秘密の読み取り・自分を動かすファイルの書き換えは、どれも止まっていた。 記録を読むと、Hermes が読むだけの手順書を自分で直そうとして、拒否されていた。壊れたものは無かった。 一つ、落とし穴があった。行動ルールのファイルを運用側が編集したら、ファイルが置き換わって、書き換えを止める設定が外れていた。中身を控えと照合すると、変わっていたのは運用側の変更だけだった。編集のあとは設定をかけ直し、点検で確かめることにした。 これをきっかけに、方針を切り替えた。行動ルールのような、エージェントが育てていくファイルは、書かせない守りをやめた。書かせて、その履歴を消せない場所に残す守りにした。 手元で組むときのコマンド例 Surface で使った形を元に、名前だけ仮のものにした。agent が専用のユーザー、C:\agent-work が作業場所である。1・2・5 は管理者の PowerShell で、3・4 は普段のユーザーで実行する。runas では専用のユーザーのパスワードを聞かれる。 1. 専用のユーザーの外向きの通信を、全部止める $sid = (Get-LocalUser -Name agent).SID.Value New-NetFirewallRule -Name "Block-agent-Outbound" -DisplayName "Block-agent-Outbound" ` -Direction Outbound -Action Block -Profile Any -LocalUser "D:(A;;CC;;;$sid)" 戻す Remove-NetFirewallRule -Name "Block-agent-Outbound" この規則では、ping と、OS が代わりに行う名前の問い合わせは止まらなかった。 2. PC 全体で、外向きの ping だけを止める(家の中の 10/8・172.16/12・192.168/16、ループバック、リンクローカルへの ping は残す) New-NetFirewallRule -Name "Block-ICMPv4-Echo-Out-Internet" -DisplayName "Block-ICMPv4-Echo-Out-Internet" ` -Direction Outbound -Action Block -Protocol ICMPv4 -IcmpType 8 -Profile Any ` -RemoteAddress "0.0.0.0-9.255.255.255","11.0.0.0-126.255.255.255","128.0.0.0-169.253.255.255","169.255.0.0-172.15.255.255","172.32.0.0-192.167.255.255","192.169.0.0-255.255.255.255" New-NetFirewallRule -Name "Block-ICMPv6-Echo-Out-Internet" -DisplayName "Block-ICMPv6-Echo-Out-Internet" ` -Direction Outbound -Action Block -Protocol ICMPv6 -IcmpType 128 -Profile Any -RemoteAddress "2000::/3" 戻す Remove-NetFirewallRule -Name "Block-ICMPv4-Echo-Out-Internet","Block-ICMPv6-Echo-Out-Internet" 3. 専用のユーザーで、1 つの宛先へ接続を試す(前後に同じコマンドを普段のユーザーで流して挟む) runas /user:agent "cmd /c curl.exe -s -o nul --connect-timeout 3 -w \"%{time_connect} %{exitcode}\" example.com > C:\agent-work\net.txt" 結果は C:\agent-work\net.txt に書かれる。終了コードが 0 なら届いた。7 なら届かなかった(止められたのか、相手がいないのかは、これだけでは分からない)。ping は ping -n 2 1.1.1.1 で同じように試す。 4. 書き込めないことを確かめる runas /user:agent "cmd /c (echo x> C:\Users<普段のユーザー>\Documents_write_test.txt) && echo WRITABLE> C:\agent-work\w.txt || echo denied> C:\agent-work\w.txt" WRITABLE になったら、できてしまった _write_test.txt を消し、権限を見直す。標準のユーザーは、既定で C:\Users\Public などにも書けるので、そうした場所も含めて試す。 5. 書き込みを作業場所だけに絞る icacls C:\agent-work /grant "agent:(OI)(CI)M" rem プログラムと設定は、読み取りと実行だけ icacls C:\path\to\agent-app /grant "agent:(OI)(CI)RX" rem 書き換えさせたくない個別のファイル icacls C:\path\to\agent-app\persona.md /inheritance:r /grant:r "agent:RX" "Administrators:F" "SYSTEM:F" rem 戻す icacls C:\agent-work /remove agent icacls C:\path\to\agent-app\persona.md /reset 同じ PC の中の宛先を絞る部分は、ファイアウォールの規則だけではループバック宛ての接続を絞れなかったので、Windows のフィルタリングの仕組み(WFP)に独自の層を足した。専用のユーザーのループバック宛ての接続のうち、決めた窓口だけを許している。ここは考え方の紹介にとどめる。 持ち帰り モデルの中身は確かめられないので、「勝手に外へ送ろうとしても困らない」ように組む。Cohere の例は 10 万回に 1 回未満で、悪意かどうかも分からない。それでも、ふつうに外へ通信できる環境なら届いていた、という点は自分の環境にも当てはまる エージェントも頭脳の LLM も、権限の低い専用のユーザーで動かす。外向きは全部止め、同じ PC の中でも話してよい相手を名指しで決める エージェントが書けるのは、自分の作業場所だけにする。自分を動かすコードと、普段のユーザーがあとで実行するものは書けないようにする 自己改善を許すなら、その履歴はエージェントに消せない場所に残す 規則は、普段のユーザーで前後を挟んで確かめる。前後の対照で届いて、専用のユーザーで止まれば、規則が働いている ユーザー単位の閉じ込めで塞げるのは、ふつうの通信までである。名前の問い合わせと ping は外へ届いた。少しずつなら情報を載せられる細い道が残る ping は PC 全体の規則で塞げる。名前の問い合わせは、調べた範囲では、仮想マシンなどで OS の外側から切るのが確実そうだ。それまでは、名前の問い合わせを見張って気づいて止める
5 GitHub Tools That Give Hermes Superpowers #Hermes #GitHub #superpowers #ainews #opensource Your Hermes Agent setup could be doing more. These five GitHub repos add a command center, browser access, better conversation memory, useful skills, and a way to see what your agent actually did. Get all five here: 1. Hermes Workspace Chat, files, memory, skills, and a terminal in one interface. outsourc-e/hermes-workspace 2. Hermes Browser Extension Bring your Hermes Agent into a browser side panel. abundantbeing/hermes-browser-extension 3. Hermes LCM Store and retrieve conversation history beyond context compression. stephenschoettler/hermes-lcm 4. Evey’s Hermes Plugins Plugins and skills, including “verify-before-done” for checking work before claiming it’s finished. 42-evey/hermes-plugins 5. Hermes Labyrinth Inspect your agent’s tool calls, results, failures, and activity. stainlu/hermes-labyrinth Get Hermes Agent from Nous Research: NousResearch/hermes-agent Which one are you trying first? Comment below, like the video, and subscribe for more practical AI tools. Subscribe to With Manny: youtube.com Join my newsletter: mannys-newsletter-bf191f.beehiiv.com Explore the HighLevel Bootcamp: gohighlevel.com Affiliate link. I may earn a commission if you purchase through it. #HermesAgent #GitHub #AITools #WithManny [de-DE] 5 GitHub-Tools, die Hermes Superkräfte verleihen #Hermes #GitHub #Superkräfte #AINews #OpenSource Ihre Hermes-Agent-Konfiguration bietet mehr Möglichkeiten. Diese fünf GitHub-Repositories erweitern Ihre Konfiguration um ein Kommandozentrum, Browserzugriff, eine verbesserte Gesprächsspeicherung, nützliche Skills und eine Übersicht der Aktionen Ihres Agents. Alle fünf Repositories finden Sie hier: 1. Hermes Workspace Chat, Dateien, Speicher, Skills und Terminal in einer einzigen Oberfläche. outsourc-e/hermes-workspace 2. Hermes Browser Extension Integrieren Sie Ihren Hermes-Agent in die Seitenleiste Ihres Browsers. abundantbeing/hermes-browser-extension 3. Hermes LCM Speichern und Abrufen von Gesprächsverläufen ohne Kontextkomprimierung. stephenschoettler/hermes-lcm 4. Evey’s Hermes Plugins Plugins und Skills, darunter „verify-before-done“ zur Überprüfung der Arbeit vor der endgültigen Bestätigung. 42-evey/hermes-plugins 5. Hermes Labyrinth Überprüfen Sie die Tool-Aufrufe, Ergebnisse, Fehler und Aktivitäten Ihres Agenten. stainlu/hermes-labyrinth Hermes Agent von Nous Research herunterladen: NousResearch/hermes-agent Welches Tool testen Sie zuerst? Schreiben Sie es in die Kommentare, liken Sie das Video und abonnieren Sie den Kanal für weitere praktische KI-Tools. Abonnieren Sie With Manny: youtube.com Meinen Newsletter abonnieren: mannys-newsletter-bf191f.beehiiv.com Das HighLevel Bootcamp entdecken: gohighlevel.com Affiliate-Link. Ich erhalte möglicherweise eine Provision, wenn Sie über diesen Link kaufen. #HermesAgent #GitHub #KI-Tools #WithManny [es-US] 5 herramientas de GitHub que le dan superpoderes a Hermes #Hermes #GitHub #superpoderes #noticias... Tu configuración de Agente Hermes podría ser más completa. Estos cinco repositorios de GitHub añaden un centro de comandos, acceso al navegador, mejor memoria de conversaciones, habilidades útiles y una forma de ver qué hizo realmente tu agente. Descárgalos aquí: 1. Hermes Workspace Chat, archivos, memoria, habilidades y una terminal en una sola interfaz. outsourc-e/hermes-workspace 2. Extensión de navegador Hermes Integra tu Agente Hermes en un panel lateral del navegador. abundantbeing/hermes-browser-extension 3. Hermes LCM Almacena y recupera el historial de conversaciones más allá de la compresión de contexto. stephenschoettler/hermes-lcm 4. Complementos de Hermes de Evey Complementos y habilidades, incluyendo "verify-before-done" para revisar el trabajo antes de declararlo terminado. 42-evey/hermes-plugins 5. Hermes Labyrinth Inspecciona las llamadas, resultados, fallos y actividad de las herramientas de tu agente. stainlu/hermes-labyrinth Obtén Hermes Agent de Nous Research: NousResearch/hermes-agent ¿Cuál vas a probar primero? Deja un comentario, dale a "Me gusta" al vídeo y suscríbete para obtener más herramientas prácticas de IA. Suscríbete a With Manny: youtube.com Únete a mi boletín: mannys-newsletter-bf191f.beehiiv.com Explora el HighLevel Bootcamp: gohighlevel.com Enlace de afiliado. Puedo recibir una comisión si compras a través de él. #HermesAgent #GitHub #HerramientasDeIA #ConManny [fr-FR] 5 outils GitHub qui donnent des super-pouvoirs à Hermes #Hermes #GitHub #superpouvoirs #actualité... Votre configuration Hermes Agent pourrait être optimisée. Ces cinq dépôts GitHub ajoutent un centre de contrôle, un accès via navigateur, une meilleure mémoire des conversations, des compétences utiles et la possibilité de consulter l'historique des actions de votre agent. Téléchargez-les ici : 1. Hermes Workspace Chat, fichiers, mémoire, compétences et terminal dans une seule interface. outsourc-e/hermes-workspace 2. Extension Hermes pour navigateur Intégrez votre agent Hermes dans un panneau latéral de votre navigateur. abundantbeing/hermes-browser-extension 3. Hermes LCM Stockez et consultez l'historique des conversations sans compression contextuelle. stephenschoettler/hermes-lcm 4. Plugins Hermes d'Evey Plugins et compétences, dont « vérifier avant de valider » pour contrôler le travail effectué avant de le déclarer terminé. 42-evey/hermes-plugins 5. Hermes Labyrinth Analysez les appels d'outils, les résultats, les erreurs et l'activité de votre agent. stainlu/hermes-labyrinth Obtenez Hermes Agent auprès de Nous Research : NousResearch/hermes-agent Lequel allez-vous tester en premier ? Laissez un commentaire ci-dessous, aimez la vidéo et abonnez-vous pour découvrir d'autres outils d'IA pratiques. Abonnez-vous à With Manny : youtube.com Inscrivez-vous à ma newsletter : mannys-newsletter-bf191f.beehiiv.com Explorez le HighLevel Bootcamp : gohighlevel.com Lien affilié. Je peux percevoir une commission si vous effectuez un achat via ce lien. #HermesAgent #GitHub #OutilsIA #AvecManny [hi] Hermes को सुपरपावर देने वाले 5 GitHub टूल्स #Hermes #GitHub #superpowers #ainews #opensource आपके हर्मेस एजेंट सेटअप में और भी बहुत कुछ हो सकता है। ये पाँच GitHub रिपॉज़िटरी एक कमांड सेंटर, ब्राउज़र एक्सेस, बेहतर वार्तालाप मेमोरी, उपयोगी स्किल्स और आपके एजेंट द्वारा किए गए कार्यों को देखने का तरीका प्रदान करते हैं। सभी पाँचों यहाँ प्राप्त करें: 1. हर्मेस वर्कस्पेस चैट, फ़ाइलें, मेमोरी, स्किल्स और एक टर्मिनल एक ही इंटरफ़ेस में। outsourc-e/hermes-workspace 2. हर्मेस ब्राउज़र एक्सटेंशन अपने हर्मेस एजेंट को ब्राउज़र साइड पैनल में लाएँ। abundantbeing/hermes-browser-extension 3. हर्मेस एलसीएम कॉन्टेक्स्ट कम्प्रेशन से परे वार्तालाप इतिहास को स्टोर और रिट्रीव करें। stephenschoettler/hermes-lcm 4. ईवी के हर्मेस प्लगइन्स प्लगइन्स और स्किल्स, जिनमें "वेरीफाई-बिफोर-डन" भी शामिल है, जो काम पूरा होने की घोषणा करने से पहले उसकी जाँच करता है। 42-evey/hermes-plugins 5. हर्मेस लेबिरिंथ अपने एजेंट के टूल कॉल, परिणाम, विफलताएँ और गतिविधि की जाँच करें। stainlu/hermes-labyrinth नूस रिसर्च से हर्मेस एजेंट प्राप्त करें: NousResearch/hermes-agent आप सबसे पहले कौन सा आज़माना चाहते हैं? नीचे टिप्पणी करें, वीडियो को लाइक करें और अधिक व्यावहारिक AI टूल के लिए सब्सक्राइब करें। विद मैनी को सब्सक्राइब करें: youtube.com मेरे न्यूज़लेटर से जुड़ें: mannys-newsletter-bf191f.beehiiv.com हाई लेवल बूटकैंप देखें: gohighlevel.com यह एक संबद्ध लिंक है। इसके माध्यम से खरीदारी करने पर मुझे कमीशन मिल सकता है। #हर्मेसएजेंट #गिटहब #एआईटीूल्स #विदमैनी [id] 5 Tools GitHub yang Memberikan Kekuatan Super pada Hermes #Hermes #GitHub #kekuatansuper #beritaa... Pengaturan Agen Hermes Anda dapat melakukan lebih banyak hal. Lima repositori GitHub ini menambahkan pusat komando, akses browser, memori percakapan yang lebih baik, keterampilan yang berguna, dan cara untuk melihat apa yang sebenarnya dilakukan agen Anda. Dapatkan kelima repositori di sini: 1. Hermes Workspace Obrolan, file, memori, keterampilan, dan terminal dalam satu antarmuka. outsourc-e/hermes-workspace 2. Ekstensi Browser Hermes Bawa Agen Hermes Anda ke panel samping browser. abundantbeing/hermes-browser-extension 3. Hermes LCM Simpan dan ambil riwayat percakapan di luar kompresi konteks. stephenschoettler/hermes-lcm 4. Plugin Hermes Evey Plugin dan keterampilan, termasuk "verifikasi sebelum selesai" untuk memeriksa pekerjaan sebelum mengklaimnya selesai. 42-evey/hermes-plugins 5. Hermes Labyrinth Periksa panggilan alat, hasil, kegagalan, dan aktivitas agen Anda. stainlu/hermes-labyrinth Dapatkan Hermes Agent dari Nous Research: NousResearch/hermes-agent Mana yang akan Anda coba terlebih dahulu? Beri komentar di bawah, sukai video ini, dan berlangganan untuk mendapatkan lebih banyak alat AI praktis. Berlangganan ke With Manny: youtube.com Gabung ke buletin saya: mannys-newsletter-bf191f.beehiiv.com Jelajahi HighLevel Bootcamp: gohighlevel.com Tautan afiliasi. Saya mungkin mendapatkan komisi jika Anda membeli melalui tautan ini. #HermesAgent #GitHub #AITools #WithManny [it] 5 strumenti GitHub che danno superpoteri a Hermes #Hermes #GitHub #superpoteri #ainews #opensource La tua configurazione di Hermes Agent potrebbe fare di più. Questi cinque repository GitHub aggiungono un centro di comando, accesso tramite browser, una migliore memoria delle conversazioni, utili funzionalità e un modo per vedere cosa ha effettivamente fatto il tuo agente. Scaricali tutti e cinque qui: 1. Hermes Workspace Chat, file, memoria, funzionalità e un terminale in un'unica interfaccia. outsourc-e/hermes-workspace 2. Hermes Browser Extension Porta il tuo Hermes Agent in un pannello laterale del browser. abundantbeing/hermes-browser-extension 3. Hermes LCM Archivia e recupera la cronologia delle conversazioni oltre la compressione del contesto. stephenschoettler/hermes-lcm 4. Evey’s Hermes Plugins Plugin e funzionalità, tra cui "verify-before-done" per controllare il lavoro prima di dichiararlo completato. Italiano: 42-evey/hermes-plugins 5. Hermes Labyrinth Esamina le chiamate agli strumenti, i risultati, gli errori e l'attività del tuo agente. stainlu/hermes-labyrinth Scarica Hermes Agent da Nous Research: NousResearch/hermes-agent Quale proverai per primo? Commenta qui sotto, metti mi piace al video e iscriviti per altri strumenti pratici di intelligenza artificiale. Iscriviti a With Manny: youtube.com Iscriviti alla mia newsletter: mannys-newsletter-bf191f.beehiiv.com Scopri HighLevel Bootcamp: gohighlevel.com Link di affiliazione. Potrei guadagnare una commissione se acquisti tramite questo link. #HermesAgent #GitHub #AITools #WithManny [pt-BR] 5 ferramentas do GitHub que dão superpoderes ao Hermes #Hermes #GitHub #superpoderes #noticiasIA ... Sua configuração do Agente Hermes pode fazer mais. Estes cinco repositórios do GitHub adicionam um centro de comando, acesso via navegador, melhor memória de conversas, habilidades úteis e uma maneira de ver o que seu agente realmente fez. Obtenha os cinco aqui: 1. Hermes Workspace Chat, arquivos, memória, habilidades e um terminal em uma única interface. outsourc-e/hermes-workspace 2. Extensão do Hermes para Navegador Acesse o painel lateral do seu Agente Hermes no navegador. abundantbeing/hermes-browser-extension 3. Hermes LCM Armazene e recupere o histórico de conversas além da compressão de contexto. stephenschoettler/hermes-lcm 4. Plugins do Hermes da Evey Plugins e habilidades, incluindo "verify-before-done" para verificar o trabalho antes de marcá-lo como concluído. 42-evey/hermes-plugins 5. Hermes Labyrinth Inspecione as chamadas de ferramentas, resultados, falhas e atividades do seu agente. stainlu/hermes-labyrinth Obtenha o Hermes Agent da Nous Research: NousResearch/hermes-agent Qual você vai experimentar primeiro? Comente abaixo, curta o vídeo e inscreva-se para mais ferramentas práticas de IA. Inscreva-se no canal With Manny: youtube.com Assine minha newsletter: mannys-newsletter-bf191f.beehiiv.com Explore o HighLevel Bootcamp: gohighlevel.com Link de afiliado. Posso receber uma comissão se você comprar através dele. #HermesAgent #GitHub #AITools #WithManny
Guide: Advanced Delegation — send subagents to the right model (or the right profile) automatically Your main agent doesn't need to run Opus-class reasoning just to check this week's AI news. Advanced Delegation fixes that. It's an official Nous plugin that changes how delegate_task picks subagents. Instead of every subagent running on the same model, you set up named routes and the parent agent chooses one per task. tonbi put out a great 10-minute walkthrough showing the full install and two live demos. This guide is a written companion to it — watch the video here: tonbi (@tonbistudio) on X The two modes You get one mode at a time — Default, Model routes, or Profile routes. Never two at once (switching keeps the other mode's settings saved for later). - Model routes — each route is a name + a one-line description + a model. Example: fast → Luna for lookups, deep → Astra for research and reasoning. - Profile routes — the subagent runs as one of your existing Hermes profiles, with that profile's own model, skills, credentials and SOUL.md. Example: a reviewer profile fact-checks, a wiki-writer profile writes it up. - Default — the old behavior. Every subagent uses delegation.model / delegation.provider, or the parent's model. Install Needs Hermes 0.22.5 or newer. - Desktop: Capabilities → Plugins → Official → Advanced Delegation → Install. (Or Settings → Model → Subagents → Install plugin.) - CLI: hermes plugins install advanced-delegation Install it on the profile that does the delegating. Profiles you route to don't need the plugin — they just need to exist and have a working model. Set up model routes Desktop: Settings → Subagents → Routing → Model Routes. CLI: hermes delegation config. For each route you set: 1. Name — short, no spaces. This is literally what the agent picks (fast, deep). 2. When to use it — one line. This is the only thing the agent reads before choosing, so write it like an instruction: "Quick lookups and searches." / "Deep research and reasoning tasks." 3. Provider + model — from providers you already have credentials for. 4. Reasoning effort and speed tier — optional (normal / fast / ultrafast where offered). Until you add a route, subagents keep using the main agent's model. You can also mark one route as the default for tasks that don't pick one. What it looked like in the demo: tonbi asked for "a couple subagents for a quick check on AI news this week" and "a subagent for deep research on quantization." He never named a route. The parent sent both quick checks to Luna and the research task to Astra, then summarized everything on his main model (Opus 5.5). The words "quick check" and "deep research" were enough to match the route descriptions. Set up profile routes Same screen, switch to Profile Routes. It's a checklist of your profiles: - Check the ones subagents are allowed to run as. The list is an allowlist — unchecked profiles can never be picked. - Add a one-line "when to use" for each. - Pick a default (the first one you check becomes the default; click another to change it). Demo: with reviewer and wiki-writer listed, tonbi asked it to fact-check the earlier quantization research and turn it into a wiki. The reviewer subagent ran first on its own model, then the wiki writer ran with its own custom skills. Different model, different skills, no manual handoff. His framing is the useful one: it's a lightweight way to get Kanban-style specialist profiles (research, planning, review, testing) without setting up a board — the parent just orchestrates. Gotchas - Start a new session after changing settings. Routes are baked into the tool list when a session starts. In chat, /delegation switches modes for the next session; /delegation <mode> --now applies it immediately at the cost of one prompt-cache break. - Your descriptions are the routing logic. Vague descriptions = vague choices. The agent only sees the names and descriptions — never the provider, model ID, or keys. - Profile routes share credentials. Listing a profile lets this profile's subagents use that profile's keys, credential pool and terminal access. Only list profiles you're comfortable lending out. - Check what actually ran. Each routed result reports the route, provider, model, effort and tier it used — worth a glance the first few times. Quick picks - Expensive main model, cheap busywork → model routes: fast (small/fast model) + deep (strong reasoning model) - Want privacy for some tasks → add a local route pointing at your own OpenAI-compatible endpoint - Already have specialist profiles with their own skills → profile routes - Happy with one subagent model → stay on Default --- Credit to tonbi for the walkthrough — go give the video a watch, it's much clearer seeing the routes fire live: x.com Official plugin docs: github.com/NousResearch/hermes-official-plugins/t…
Mac mini(M6 / 32GB)でローカル AI エージェントを試す:Hermes Agent + Splash はじめに 前回は Mac mini(M6 / 32GB)で Ollama と Splash を導入し、日本語の質問や HTTP API 経由の応答を確認した。 今回はその続きとして、ローカル LLM をツールから利用する AI エージェント環境を試す。会話や作業の進行に Hermes Agent、生成モデルの推論に Splash を使用する。 動作試験としては自宅のネットワークラボで、containerlab 上の Nexus 9000v に SSH 接続し、状態取得と小さな設定変更を試す。ツール導入後の初回試験として、変更前の確認、変更、変更後の確認、元の設定への復元までを一通り行う。 本記事で確認する内容は下記のとおり。 - Splash 上のローカル LLM を Hermes から利用する - Hermes の terminal ツールから Nexus 9000v に SSH 接続し、状態を取得する - 試験用インターフェースの description を変更し、事前・事後・復元後の状態を確認する - Leaf–Spine 間の OSPF にタイマー不一致、IP 不整合を作り、Hermes に原因切り分け・修正提案・復元を依頼する !hermes-overview.png Hermes と Splash は Mac mini 上で動かし、Nexus 9000v は既存の containerlab 環境を利用する。Splash の API は 127.0.0.1:8000、機器へのアクセスは SSH とする。 Hermes の terminal 実行先を Mac にして、SSH 経由で機器のコマンドを実行する。 description の変更は 1 台・1 インターフェースを対象とし、切り分け試験は Leaf と Spine の間の 1 リンクを対象とする。 実施環境 前回同様に自宅ラボの Mac Mini M6 環境。 | 項目 | 内容 | | :--- | :--- | | 本体 | Mac mini M6 / 32GB | | OS | macOS 27.0.1 / Build 26A434 | | Splash | 1.4.0(2026.10.25時点の最新へ更新)| | Hermes Agent | v0.22.5 / local commit bf0203a794a0 | | Hermes の実行環境 | Python 3.14.9 / OpenAI SDK 2.24.0 | | Splash のモデル | unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS| | Splash のドラフトモデル | incoai/Qwen3.8-27B-DFlash2 | | 実効コンテキスト | Splash:65,536(max_model_len / context_length) / Hermes 起動表示:65,536 / 画面下部:65.5K | | 試験日 | 2026/10/25 | 機器操作の試験は、既存の containerlab 上の Nexus 9000v に Mac から SSH 接続できる環境を前提とする。Leaf は ssh admin@192.168.129.141、切り分け試験で使う Spine は ssh admin@192.168.129.150 で接続し、パスワードを対話入力する。ラボ構築と SSH の接続設定は事前に済ませている状態。 Hermes は v0.22.5、Splash は 1.4.0 を使用する。事前確認時のログと導入・更新ログを別に掲載する。Hermes、Splash <details><summary>前提環境の確認ログ(Mac からの SSH 接続・Nexus 9000v の状態取得)</summary><div> suzuyu@macmini-m6 ~ % ssh admin@192.168.129.141 The authenticity of host '192.168.129.141 (192.168.129.141)' can't be established. RSA key fingerprint is: SHA256:FYRBd0McrMRBvQrCvr12uFoXOGYBMlO56oFLx1DdcbM This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.129.141' (RSA) to the list of known hosts. User Access Verification (admin@192.168.129.141) Password: Cisco NX-OS Software Copyright (c) 2002-2026, Cisco Systems, Inc. All rights reserved. Nexus 9000v software ("Nexus 9000v Software") and related documentation, files or other reference materials ("Documentation") are the proprietary property and confidential information of Cisco Systems, Inc. ("Cisco") and are protected, without limitation, pursuant to United States and International copyright and trademark laws in the applicable jurisdiction which provide civil and criminal penalties for copying or distribution without Cisco's authorization. Any use or disclosure, in whole or in part, of the Nexus 9000v Software or Documentation to any third party for any purposes is expressly prohibited except as otherwise authorized by Cisco in writing. The copyrights to certain works contained herein are owned by other third parties and are used and distributed under license. Some parts of this software may be covered under the GNU Public License or the GNU Lesser General Public License. A copy of each such license is available at http://www.gnu.org/licenses/gpl.html and http://www.gnu.org/licenses/lgpl.html *************************************************************************** * Nexus 9000v is strictly limited to use for evaluation, demonstration * * and NX-OS education. Any use or disclosure, in whole or in part of * * the Nexus 9000v Software or Documentation to any third party for any * * purposes is expressly prohibited except as otherwise authorized by * * Cisco in writing. * *************************************************************************** bdc-lfsw0101# bdc-lfsw0101# bdc-lfsw0101# exit Connection to 192.168.129.141 closed. suzuyu@macmini-m6 ~ % ssh admin@192.168.129.141 User Access Verification (admin@192.168.129.141) Password: Cisco NX-OS Software Copyright (c) 2002-2026, Cisco Systems, Inc. All rights reserved. Nexus 9000v software ("Nexus 9000v Software") and related documentation, files or other reference materials ("Documentation") are the proprietary property and confidential information of Cisco Systems, Inc. ("Cisco") and are protected, without limitation, pursuant to United States and International copyright and trademark laws in the applicable jurisdiction which provide civil and criminal penalties for copying or distribution without Cisco's authorization. Any use or disclosure, in whole or in part, of the Nexus 9000v Software or Documentation to any third party for any purposes is expressly prohibited except as otherwise authorized by Cisco in writing. The copyrights to certain works contained herein are owned by other third parties and are used and distributed under license. Some parts of this software may be covered under the GNU Public License or the GNU Lesser General Public License. A copy of each such license is available at http://www.gnu.org/licenses/gpl.html and http://www.gnu.org/licenses/lgpl.html *************************************************************************** * Nexus 9000v is strictly limited to use for evaluation, demonstration * * and NX-OS education. Any use or disclosure, in whole or in part of * * the Nexus 9000v Software or Documentation to any third party for any * * purposes is expressly prohibited except as otherwise authorized by * * Cisco in writing. * *************************************************************************** bdc-lfsw0101# show version Cisco Nexus Operating System (NX-OS) Software TAC support: http://www.cisco.com/tac Documents: http://www.cisco.com/en/US/products/ps9372/tsd_products_support_series_home.html Copyright (c) 2002-2026, Cisco Systems, Inc. All rights reserved. The copyrights to certain works contained herein are owned by other third parties and are used and distributed under license. Some parts of this software are covered under the GNU Public License. A copy of the license is available at http://www.gnu.org/licenses/gpl.html. Nexus 9000v is a demo version of the Nexus Operating System Software BIOS: version NXOS: version 10.6(4) [Maintenance Release] BIOS compile time: NXOS image file is: bootflash:///nxos64-cs-lite.10.6.4.M.bin NXOS compile time: 7/31/2026 31:00:00 [08/15/2026 15:10:23] Hardware cisco Nexus9000 C9300v Chassis Intel(R) Core(TM) Ultra 5 125H with 4522876 kB of memory. Processor Board ID 9K1NSEDUODU Device name: bdc-lfsw0101 bootflash: 8598528 kB Kernel uptime is 35 day(s), 0 hour(s), 44 minute(s), 20 second(s) Last reset Reason: Unknown System version: Service: plugin Core Plugin, Ethernet Plugin Active Package(s): bdc-lfsw0101# show interface brief -------------------------------------------------------------------------------- Port VRF Status IP Address Speed MTU -------------------------------------------------------------------------------- mgmt0 -- up 192.168.129.141 1000 1500 -------------------------------------------------------------------------------- Ethernet VLAN Type Mode Status Reason Speed Port Interface Ch # -------------------------------------------------------------------------------- Eth1/1 1 eth trunk up none 1000(D) 11 Eth1/2 1 eth trunk up none 1000(D) 12 Eth1/3 1 eth trunk up none 1000(D) 13 Eth1/4 1 eth trunk up none 1000(D) 14 Eth1/5 1 eth trunk up none 1000(D) 15 Eth1/6 1 eth trunk up none 1000(D) 16 Eth1/7 -- eth routed down Administratively down auto(D) -- Eth1/8 -- eth routed up none 1000(D) -- Eth1/9 1 eth access down Administratively down auto(D) -- Eth1/10 1 eth access down Administratively down auto(D) -- Eth1/11 1 eth access down Administratively down auto(D) -- Eth1/12 1 eth access down Administratively down auto(D) -- Eth1/13 1 eth access down Administratively down auto(D) -- Eth1/14 1 eth access down Administratively down auto(D) -- Eth1/15 1 eth access down Administratively down auto(D) -- Eth1/16 1 eth access down Administratively down auto(D) -- Eth1/17 1 eth access down Administratively down auto(D) -- Eth1/18 1 eth access down Administratively down auto(D) -- Eth1/19 1 eth access down Administratively down auto(D) -- Eth1/20 1 eth access down Administratively down auto(D) -- Eth1/21 1 eth access down Administratively down auto(D) -- Eth1/22 1 eth access down Administratively down auto(D) -- Eth1/23 1 eth access down Administratively down auto(D) -- Eth1/24 1 eth access down Administratively down auto(D) -- Eth1/25 1 eth access down Administratively down auto(D) -- Eth1/26 1 eth access down Administratively down auto(D) -- Eth1/27 1 eth access down Administratively down auto(D) -- Eth1/28 1 eth access down Administratively down auto(D) -- Eth1/29 1 eth access down Administratively down auto(D) -- Eth1/30 1 eth access down Administratively down auto(D) -- Eth1/31 1 eth access down Administratively down auto(D) -- Eth1/32 1 eth access down Administratively down auto(D) -- Eth1/33 1 eth access down Administratively down auto(D) -- Eth1/34 1 eth access down Administratively down auto(D) -- Eth1/35 1 eth access down Administratively down auto(D) -- Eth1/36 1 eth access down Administratively down auto(D) -- Eth1/37 1 eth access down Administratively down auto(D) -- Eth1/38 1 eth access down Administratively down auto(D) -- Eth1/39 1 eth access down Administratively down auto(D) -- Eth1/40 1 eth access down Administratively down auto(D) -- Eth1/41 1 eth access down Administratively down auto(D) -- Eth1/42 1 eth access down Administratively down auto(D) -- Eth1/43 1 eth access down Administratively down auto(D) -- Eth1/44 1 eth access down Administratively down auto(D) -- Eth1/45 1 eth access down Administratively down auto(D) -- Eth1/46 1 eth access down Administratively down auto(D) -- Eth1/47 1 eth access down Administratively down auto(D) -- Eth1/48 1 eth access down Administratively down auto(D) -- Eth1/49 1 eth access down Administratively down auto(D) -- Eth1/50 1 eth access down Administratively down auto(D) -- Eth1/51 1 eth access down Administratively down auto(D) -- Eth1/52 1 eth access down Administratively down auto(D) -- Eth1/53 1 eth access down Administratively down auto(D) -- Eth1/54 1 eth access down Administratively down auto(D) -- Eth1/55 1 eth access down Administratively down auto(D) -- Eth1/56 1 eth access down Administratively down auto(D) -- Eth1/57 1 eth access down Administratively down auto(D) -- Eth1/58 1 eth access down Administratively down auto(D) -- Eth1/59 1 eth access down Administratively down auto(D) -- Eth1/60 1 eth access down Administratively down auto(D) -- Eth1/61 1 eth access down Administratively down auto(D) -- Eth1/62 1 eth access down Administratively down auto(D) -- Eth1/63 1 eth access down Administratively down auto(D) -- Eth1/64 1 eth access down Administratively down auto(D) -- ------------------------------------------------------------------------------------------ Port-channel VLAN Type Mode Status Reason Speed Protocol Interface ------------------------------------------------------------------------------------------ Po1 1 eth trunk up none auto(I) none Po11 1 eth trunk up none a-1000(D) lacp Po12 1 eth trunk up none a-1000(D) lacp Po13 1 eth trunk up none a-1000(D) lacp Po14 1 eth trunk up none a-1000(D) lacp Po15 1 eth trunk up none a-1000(D) lacp Po16 1 eth trunk up none a-1000(D) lacp -------------------------------------------------------------------------------- Interface Status Description -------------------------------------------------------------------------------- Lo0 up RouterID Loopback Lo1 up VTEP Loopback Lo105 up Cilium k03 BGP endpoint ------------------------------------------------------------------------------- Interface Secondary VLAN(Type) Status Reason ------------------------------------------------------------------------------- Vlan1 -- down Administratively down Vlan100 -- up -- Vlan105 -- up -- Vlan201 -- up -- Vlan2002 -- up -- Vlan3000 -- up -- Vlan3001 -- up -- Vlan3002 -- up -- -------------------------------------------------------------------------------- Port Status Reason MTU -------------------------------------------------------------------------------- nve1 up none 9216 bdc-lfsw0101# show running-config in include-switch-profile interface bdc-lfsw0101# show running-config interface ethernet 1/10 !Command: show running-config interface Ethernet1/10 !No configuration change since last restart !Time: Sun Oct 25 03:05:47 2026 version 10.6(4) Bios:version interface Ethernet1/10 shutdown bdc-lfsw0101# show interface ethernet 1/10 Ethernet1/10 is down (Administratively down) admin state is down, Dedicated Interface Hardware: 100/1000/10000 Ethernet, address: 0c8f.d900.010a (bia 0c8f.d900.010a) MTU 1500 bytes, BW 10000000 Kbit , DLY 10 usec reliability 255/255, txload 1/255, rxload 1/255 Encapsulation ARPA, medium is broadcast Port mode is access auto-duplex, auto-speed Beacon is turned off Auto-Negotiation is turned on FEC mode is Auto Input flow-control is off, output flow-control is off Auto-mdix is turned off Switchport monitor is off EtherType is 0x8100 EEE (efficient-ethernet) : n/a admin fec state is auto, oper fec state is off Last link flapped never Last clearing of "show interface" counters never 0 interface resets Load-Interval #1: 0 seconds 0 seconds input rate 0 bits/sec, 0 packets/sec 0 seconds output rate 0 bits/sec, 0 packets/sec input rate 0 bps, 0 pps; output rate 0 bps, 0 pps Load-Interval #2: 0 seconds 0 seconds input rate 0 bits/sec, 0 packets/sec 0 seconds output rate 0 bits/sec, 0 packets/sec input rate 0 bps, 0 pps; output rate 0 bps, 0 pps RX 0 unicast packets 0 multicast packets 0 broadcast packets 0 input packets 0 bytes 0 jumbo packets 0 storm suppression packets 0 runts 0 giants 0 CRC 0 no buffer 0 input error 0 short frame 0 overrun 0 underrun 0 ignored 0 watchdog 0 bad etype drop 0 bad proto drop 0 if down drop 0 input with dribble 0 input discard 0 Rx pause 0 Stomped CRC TX 0 unicast packets 0 multicast packets 0 broadcast packets 0 output packets 0 bytes 0 jumbo packets 0 output error 0 collision 0 deferred 0 late collision 0 lost carrier 0 no carrier 0 babble 0 output discard 0 Tx pause bdc-lfsw0101# </div></details> AI エージェントと LLM の役割 今回の構成を理解するために、先に AI エージェントと LLM の役割を整理する。 AI エージェントとは 本記事で扱う AI エージェントは、LLM を使って次に必要な処理を選び、ツールの実行結果を受け取りながら、依頼された作業を進める仕組みとなる。LLM に加え、ツールを実行するプログラムや、会話・作業状態を管理する部分を組み合わせる。Hermes も、モデルの呼び出し、ツールの実行、状態管理を持つ構成となっている。Hermes の構成 例えば「BGP がつながらない原因を調べたい」という依頼に対し、観測情報を読む → 不足する情報を確認する → 原因候補を絞る → 根拠と次の確認事項を回答する、という流れを想定する。必要に応じてツールを呼び直し、その結果を次の処理に利用する。今回は実際に Nexus 9000v から情報を取得し、設定変更前後の状態を確認する。 LLM と推論基盤の役割 LLM は依頼とツールの実行結果を読み、次の処理や回答を生成する。Hermes はその出力に従ってツールを実行し、結果を再び LLM に渡す。今回の LLM は Qwen で、その推論を Mac 上で実行するのが Splash となる。 | 要素 | 今回の担当 | 今回の試験での使い方 | | :--- | :--- | :--- | | AI エージェント | Hermes Agent | 会話と作業状態を管理し、ツールを実行する | | LLM | Qwen | 依頼と実行結果から次の処理や回答を生成する | | 推論基盤 | Splash | Qwen を実行し、Hermes に API を提供する | 使用するツールとモデル Hermes Agent Hermes Agent は Nous Research が公開する AI エージェント。モデルとの会話に加え、ツールを呼び出し、その結果を使って処理を進める。今回は CLI から使い、必要なローカルツールだけを接続する。 現行の公式 Quickstart では、最低 64,000 トークンのコンテキストを要求している。前回の 8K 設定は Splash 単体の動作確認には使えるが、今回の Hermes 連携には不足する。Quickstart Splash Splash は Apple Silicon 向けの推論エンジン兼 API サーバ。前回と同じく CLI から直接起動する。 splash hermes は導入済みの Hermes を起動済み Splash に接続するランチャーとなる。専用プロファイルを使うため、手動設定から始めるより接続先やモデル ID を合わせやすい。ランチャー仕様 32GB でのモデル選定 前回の UD-IQ4_XS を基準に、64K で起動・応答できるかを確認する。 | モデル | 対象 GGUF の配布サイズ | 今回の扱い | | :--- | :--- | :--- | | UD-IQ4_XS | 約 14.3GB | 前回と同じ量子化 | 容量は配布一覧の値。ドラフトモデルや KV キャッシュを含む実行時メモリとは異なる。 事前確認・事前対応 既存環境の確認 Mac mini のターミナルを開き、現在の OS と Splash のバージョン、Hermes の有無、空き容量、使用予定ポートを下記コマンドで確認する。 sw_vers command -v splash splash --version command -v hermes df -h /System/Volumes/Data lsof -nP -iTCP:8000 -sTCP:LISTEN command -v でパスが表示されないツールは、導入状況と PATH を確認し、未導入なら後続の手順で導入する。8000 番ポートに待ち受けがある場合は、起動元を確認してから Splash を起動する。 今回の開始時点は macOS 27.0.1 / Splash 1.3.2。Hermes と uv のパス、および 8000 番ポートの待ち受けは表示なし。CPU・メモリの確認と Splash のヘルプを含む実行ログを以下に掲載する。 <details><summary>Mac mini の事前確認ログ(環境・コマンドの有無・Splash のヘルプ全文)</summary><div> suzuyu@macmini-m6 ~ % uname -m arm64 suzuyu@macmini-m6 ~ % sw_vers ProductName: macOS ProductVersion: 27.0.1 BuildVersion: 26A434 suzuyu@macmini-m6 ~ % sysctl -n machdep.cpu.brand_string Apple M6 suzuyu@macmini-m6 ~ % sysctl -n hw.memsize 34359738368 suzuyu@macmini-m6 ~ % df -h /System/Volumes/Data Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk3s5 460Gi 70Gi 364Gi 17% 509k 3.8G 0% /System/Volumes/Data suzuyu@macmini-m6 ~ % command -v splash /opt/homebrew/bin/splash suzuyu@macmini-m6 ~ % command -v hermes suzuyu@macmini-m6 ~ % command -v uv suzuyu@macmini-m6 ~ % lsof -nP -iTCP:8000 -sTCP:LISTEN suzuyu@macmini-m6 ~ % splash --version Splash 1.3.2 suzuyu@macmini-m6 ~ % splash --help usage: splash [-h] [--version] {serve,claude,opencode,codex,hermes,pi} ... Serve in the foreground, or connect an installed agent to the local server. positional arguments: {serve,claude,opencode,codex,hermes,pi} serve run the local server; Ctrl+C stops it claude connect claude to the running server opencode connect opencode to the running server codex connect codex to the running server hermes connect hermes to the running server pi connect pi to the running server options: -h, --help show this help message and exit --version show program's version number and exit Quick start: splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M splash opencode # in another terminal, after Ready Use splash serve --help for server settings. An agent command takes --port PORT for a server on another port and passes every other argument, including --help, to the installed agent. To pass the agent's own --port, start its arguments with --: splash opencode --port 8001 -- --port 4096 suzuyu@macmini-m6 ~ % splash serve --help usage: splash serve [-h] --model OWNER/REPO[:VARIANT] [--revision REVISION] [--draft-model DRAFT] [--language-only] [--offline] [--port PORT] [--host ADDRESS] [--allowed-host HOST] [--allowed-origin ORIGIN] [--api-key KEY] [--no-webui] [--max-memory SIZE] [--max-context TOKENS] [--kv-format {int8,bf16}] [--state-format {fp32,bf16}] [--idle-release DURATION] [--max-cache-disk SIZE] [--max-cache-disk-writes SIZE] [--persistent-cache] [--cache-dir DIRECTORY] [--served-model-name NAME] [--announce-served-name] [--default-reasoning-effort EFFORT] [--thinking-token-budget N] [--thinking-end-text TEXT] [--max-request-size SIZE] [--max-image-pixels PIXELS] [--request-timeout DURATION] [--queue-size REQUESTS] [--decode-share SHARE] [--disable-ane] [--allow-idle-sleep] Load an upstream model, automatically select its DFlash2 draft, and serve in the foreground. options: -h, --help show this help message and exit model: --model OWNER/REPO[:VARIANT] upstream Hugging Face model, with a GGUF variant after ':' (e.g. :UD-Q4_K_M) --revision REVISION model branch, tag or commit (default: the repository's default branch) --draft-model DRAFT DFlash2 draft repository or local directory to use instead of the automatically selected one --language-only skip vision preparation and loading; image and PDF input is refused --offline start the installed model without contacting the Hugging Face Hub (as HF_HUB_OFFLINE=1) network and access: --port PORT HTTP port (default: SPLASH_PORT or 8000) --host ADDRESS HTTP bind address (default: 127.0.0.1; 0.0.0.0 for all IPv4 interfaces); clients use an IP address, localhost or a name given with --allowed-host --allowed-host HOST additional HTTP Host name to accept, e.g. mymac.local; does not change the bind address (repeatable) --allowed-origin ORIGIN origin whose pages may call the API from a browser or webview, e.g. tauri://localhost; '*' for any (repeatable) --api-key KEY require this key as a bearer token or x-api-key on every route but the chat page, /health and /ready (default: SPLASH_API_KEY) --no-webui disable the chat page memory and context: --max-memory SIZE Metal memory budget, e.g. 28G; it can only lower the automatic budget (default: auto) --max-context TOKENS context token limit, e.g. 100K (K = 1024 tokens); it can only lower the automatic limit, the model's native window when memory holds it (default: auto) --kv-format {int8,bf16} target KV cache storage (default: int8); bf16 uses more memory --state-format {fp32,bf16} recurrent state storage (default: fp32); bf16 halves each state, so memory and the SSD cache hold about twice as many --idle-release DURATION time without a request before the engine unwires its memory and frees the weights: seconds, or with an s, m or h suffix, e.g. 30m (default: 10m); off keeps both, though POST /v1/memory/release still frees the weights SSD cache: --max-cache-disk SIZE SSD quota for cached KV pages and states: auto follows the volume's free space up to 32G, 0 disables, or a size such as 16G (default: auto) --max-cache-disk-writes SIZE the most the SSD cache writes a day, e.g. 200G; the state a conversation resumes from and KV pages pass it (default: 0, no limit) --persistent-cache keep the SSD cache across restarts --cache-dir DIRECTORY where --persistent-cache keeps its files; needs --persistent-cache (default: ~/Library/Caches/Splash/prefix-cache) API: --served-model-name NAME additional API model name (repeatable); responses report the loaded model ID unless --announce-served-name --announce-served-name report the first --served-model-name in API responses and list it first in /v1/models; /status keeps the loaded model ID (needs --served-model-name) --default-reasoning-effort EFFORT effort of Chat and Responses requests that set none: none, minimal, low, medium, high, xhigh or max (default: SPLASH_DEFAULT_REASONING_EFFORT, else the model template's) --thinking-token-budget N thinking tokens of a thinking request that sets no thinking_token_budget, after which its thinking closes (default: SPLASH_THINKING_TOKEN_BUDGET, else no cap) --thinking-end-text TEXT text that ends thinking where a thinking budget runs out, such as a sentence that turns to the answer, then </think> as its last token; at most 64 tokens (default: SPLASH_THINKING_END_TEXT, else </think> alone) requests: --max-request-size SIZE maximum HTTP request body size, e.g. 128M (default: 128M); shared input budget is max(512M, twice this limit) --max-image-pixels PIXELS maximum resized pixels per image, 65536–4194304 (default: 4194304); bounds the vision scratch one image needs --request-timeout DURATION time before a queued or in-flight request expires with 504: seconds, or with an s, m or h suffix, e.g. 30m (default: none) --queue-size REQUESTS requests admitted at once, running or waiting; more get 503 (default: 32) --decode-share SHARE decode time owed per unit of prefill time while other requests decode (default: 0.5; 0 alternates one command each) --disable-ane prefill on the GPU alone (default: a dense model's long prompts also use the Neural Engine when that is faster) --allow-idle-sleep let the Mac sleep automatically while requests run (default: it stays awake until they finish; the display may still sleep) Examples: splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M splash serve --model unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M --max-context 128K SIZE is bytes, or a number with K, M or G (1024-based), such as 28G. DURATION is seconds, or a number with s, m or h, such as 30m. After Ready, open http://127.0.0.1:PORT in a browser on this Mac, or connect an installed agent; both reach the server on loopback, which the default --host and 0.0.0.0 include. The startup summary and /status report the effective context limit; a client may impose a smaller one. Keep this terminal open; Ctrl+C stops serving. suzuyu@macmini-m6 ~ % </div></details> Splash の更新 Hermes 連携試験の前に、Splash を 1.4.0 へ更新する。 (新機能の Flash-Next や 1M コンテキストは今回使用しない。1.4.0 の変更点) Splash が動いている場合は停止し、Mac のシェルで配布版と pin の状態を確認する。 brew update brew info incoai/tap/splash brew list --pinned 配布版が 1.4.0 であることを確認してから更新する。前回の手順で pin している場合は解除する。配布版が変わっている場合は、その版の変更点を確認して試験条件に記録する。 # splash が pin されている場合だけ実行 brew unpin incoai/tap/splash brew upgrade incoai/tap/splash brew list --versions splash splash --version splash serve --help # 試験期間中は確認した版を固定 brew pin incoai/tap/splash 今回の更新結果は、brew list --versions splash と splash --version の両方で 1.4.0。更新先は /opt/homebrew/Cellar/splash/1.4.0 で、ヘルプ表示後に brew pin incoai/tap/splash も再実行している。64K 起動と Hermes 連携は次の工程で確認する。 更新後の版で試験を進める。Hermes の導入と接続は後続の節で準備する。 <details><summary>Splash 1.3.2 から 1.4.0 への更新ログ(バージョン・ヘルプ・pin)</summary><div> suzuyu@macmini-m6 ~ % brew update ==> Updating Homebrew... ==> Downloading https://ghcr.io/v2/homebrew/core/portable-ruby/blobs/sha256:25d6becc4464b6e65ac38a76ccd27eee8be5d0d805f6b3292d74e37deb8dd13b ############################################################################################# 100.0% ==> Pouring portable-ruby-4.0.7_1.arm64_big_sur.bottle.tar.gz Updated 3 taps (incoai/tap, homebrew/core and homebrew/cask). ==> New Formulae annotsv: Annotation and ranking of structural variations ascelerate: Command-line tool for the App Store Connect API buildkite: Work with Buildkite from the command-line erpc: Fault-tolerant RPC proxy with re-org-aware permanent caching filmcraft-cli: Headless FilmCraft CLI and MCP server to edit, render and export video projects gitea-cli: Official command-line tool for Gitea openssh-sk-provider: Standalone FIDO2 SecurityKeyProvider (sk-libfido2) for the system OpenSSH tpcgen-cli: Fast TPC-H and TPC-DS data generator xfr: Modern network bandwidth testing with TUI zvec-grep: Agent-friendly hybrid workspace search across code and non-code content ==> Outdated Formulae ca-certificates ollama python@3.15 splash You have 4 outdated formulae installed. You can upgrade them with brew upgrade or list them with brew outdated. suzuyu@macmini-m6 ~ % brew info incoai/tap/splash ==> incoai/tap/splash ↑: 1.3.2 → stable 1.4.0 (bottled) Local inference engine for Apple silicon, built around the model https://github.com/incoai/splash Installed (on request) From: https://github.com/incoai/homebrew-tap/blob/HEAD/Formula/splash.rb Tap: incoai/tap License: Apache-2.0 Pinned: 1.3.2 on 2026-10-18 at 15:36:32 ==> Installed Versions incoai/tap/splash ↑ 1.3.2 → 1.4.0 (7,079 files, 250.7MB) [Linked] ==> Requirements Required: arm64 architecture ✔, macOS >= 26 ✔, Splashmacos ✔ ==> Caveats Serve a model: splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M suzuyu@macmini-m6 ~ % brew list --pinned ollama splash suzuyu@macmini-m6 ~ % suzuyu@macmini-m6 ~ % brew unpin incoai/tap/splash suzuyu@macmini-m6 ~ % brew upgrade incoai/tap/splash ==> Fetching downloads for: incoai/tap/splash ✔︎ Bottle splash (1.4.0) Downloaded 76.0MB/ 76.0MB ==> Upgrading incoai/tap/splash 1.3.2 -> 1.4.0 ==> Pouring splash-1.4.0.arm64_tahoe.bottle.tar.gz 🍺 /opt/homebrew/Cellar/splash/1.4.0: 7,081 files, 254.6MB ==> Cleanup Removing: /opt/homebrew/Cellar/splash/1.3.2... (7,079 files, 250.7MB) Removing: /Users/suzuyu/Library/Caches/Homebrew/splash--1.3.2.arm64_tahoe.bottle.tar.gz... (74.5MB) Disable this behaviour by setting `HOMEBREW_NO_INSTALL_CLEANUP=1`. Hide these hints with `HOMEBREW_NO_ENV_HINTS=1` (see `man brew`). ==> Caveats zsh completions have been installed to: /opt/homebrew/share/zsh/site-functions ==> splash Serve a model: splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M suzuyu@macmini-m6 ~ % brew list --versions splash splash 1.4.0 suzuyu@macmini-m6 ~ % splash --version Splash 1.4.0 suzuyu@macmini-m6 ~ % splash serve --help usage: splash serve [-h] --model OWNER/REPO[:VARIANT] [--revision REVISION] [--draft-model DRAFT] [--language-only] [--offline] [--port PORT] [--host ADDRESS] [--allowed-host HOST] [--allowed-origin ORIGIN] [--api-key KEY] [--no-webui] [--max-memory SIZE] [--max-context TOKENS] [--ple-memory SIZE] [--expert-memory SIZE] [--sparse-kv-memory SIZE] [--kv-format {int8,bf16}] [--state-format {fp32,bf16}] [--idle-release DURATION] [--max-cache-disk SIZE] [--max-cache-disk-writes SIZE] [--persistent-cache] [--cache-dir DIRECTORY] [--served-model-name NAME] [--announce-served-name] [--default-reasoning-effort EFFORT] [--thinking-token-budget N] [--thinking-end-text TEXT] [--max-request-size SIZE] [--max-image-pixels PIXELS] [--request-timeout DURATION] [--queue-size REQUESTS] [--decode-share SHARE] [--disable-ane] [--verify-rows {auto,all}] [--allow-idle-sleep] Load an upstream model, automatically select its DFlash2 draft, and serve in the foreground. options: -h, --help show this help message and exit model: --model OWNER/REPO[:VARIANT] upstream Hugging Face model, with a GGUF variant after ':' (e.g. :UD-Q4_K_M) --revision REVISION model branch, tag or commit (default: the repository's default branch) --draft-model DRAFT DFlash2 draft repository or local directory to use instead of the automatically selected one --language-only skip vision preparation and loading; image and PDF input is refused --offline start the installed model without contacting the Hugging Face Hub (as HF_HUB_OFFLINE=1) network and access: --port PORT HTTP port (default: SPLASH_PORT or 8000) --host ADDRESS HTTP bind address (default: 127.0.0.1; 0.0.0.0 for all IPv4 interfaces); clients use an IP address, localhost or a name given with --allowed-host --allowed-host HOST additional HTTP Host name to accept, e.g. mymac.local; does not change the bind address (repeatable) --allowed-origin ORIGIN origin whose pages may call the API from a browser or webview, e.g. tauri://localhost; '*' for any (repeatable) --api-key KEY require this key as a bearer token or x-api-key on every route but the chat page, /health and /ready (default: SPLASH_API_KEY) --no-webui disable the chat page memory and context: --max-memory SIZE Metal memory budget, e.g. 28G; it can only lower the automatic budget (default: auto) --max-context TOKENS context token limit, e.g. 100K or 1M (K = 1024 tokens, M = 1000000 tokens), up to 1010000; past the model's 256K native window it turns on YaRN, which is static and changes answers at every length, so pass more than 256K only when a request needs it (default: auto, the native window when memory holds it) --ple-memory SIZE RAM row cache of the PLE n-gram table of a Qwen3.8-Flash-Next GGUF, e.g. 2G, which streams the rest from the SSD; off loads the whole table, tens of GB (default: auto, which streams it where memory cannot hold it) --expert-memory SIZE RAM slots of the routed experts of a MoE model, e.g. 16G, which reads the others from the SSD when a token routes them; off loads every expert (default: auto, which loads them all where memory holds them and otherwise gives them what the context leaves) --sparse-kv-memory SIZE RAM cache of the KV blocks a block-sparse model such as Qwen3.8-Flash-Next reads of requests whose KV is on the SSD, e.g. 1200M; never below its floor (default: auto, its floor) --kv-format {int8,bf16} target KV cache storage (default: int8); bf16 uses more memory --state-format {fp32,bf16} recurrent state storage (default: fp32); bf16 halves each state, so memory and the SSD cache hold about twice as many --idle-release DURATION time without a request before the engine unwires its memory and frees the weights: seconds, or with an s, m or h suffix, e.g. 30m (default: 10m); off keeps both, though POST /v1/memory/release still frees the weights SSD cache: --max-cache-disk SIZE SSD quota for cached KV pages and states: auto follows the volume, a quarter of its free space beyond a floor of 10G (5% of a volume under 200G), at most 32G; a size such as 16G is held as given while the volume keeps that floor; 0 disables (default: auto) --max-cache-disk-writes SIZE the most the SSD cache writes a day, e.g. 200G; the state a conversation resumes from and KV pages pass it (default: 0, no limit) --persistent-cache keep the SSD cache across restarts --cache-dir DIRECTORY where --persistent-cache keeps its files; needs --persistent-cache (default: ~/Library/Caches/Splash/prefix-cache) API: --served-model-name NAME additional API model name (repeatable); responses report the loaded model ID unless --announce-served-name --announce-served-name report the first --served-model-name in API responses and list it first in /v1/models; /status keeps the loaded model ID (needs --served-model-name) --default-reasoning-effort EFFORT effort of Chat and Responses requests that set none: none, minimal, low, medium, high, xhigh or max (default: SPLASH_DEFAULT_REASONING_EFFORT, else the model template's) --thinking-token-budget N thinking tokens of a thinking request that sets no thinking_token_budget, after which its thinking closes (default: SPLASH_THINKING_TOKEN_BUDGET, else no cap) --thinking-end-text TEXT text that ends thinking where a thinking budget runs out, such as a sentence that turns to the answer, then </think> as its last token; at most 64 tokens (default: SPLASH_THINKING_END_TEXT, else </think> alone) requests: --max-request-size SIZE maximum HTTP request body size, e.g. 128M (default: 128M); shared input budget is max(512M, twice this limit) --max-image-pixels PIXELS maximum resized pixels per image, 65536–4194304 (default: 4194304); bounds the vision scratch one image needs --request-timeout DURATION time before a queued or in-flight request expires with 504: seconds, or with an s, m or h suffix, e.g. 30m (default: none) --queue-size REQUESTS requests admitted at once, running or waiting; more get 503 (default: 32) --decode-share SHARE decode time owed per unit of prefill time while other requests decode (default: 0.5; 0 alternates one command each) --disable-ane prefill on the GPU alone (default: a dense model's long prompts also use the Neural Engine when that is faster) --verify-rows {auto,all} rows of each draft block decode verifies: all verifies every row, so a MoE model's greedy and seeded outputs repeat as a dense model's do (default: auto, where a verify budget learned from earlier cycles chooses a MoE model's rows, which is faster but lets those outputs differ from run to run) --allow-idle-sleep let the Mac sleep automatically while requests run (default: it stays awake until they finish; the display may still sleep) Examples: splash serve --model unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M splash serve --model unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M --max-context 128K SIZE is bytes, or a number with K, M or G (1024-based), such as 28G. DURATION is seconds, or a number with s, m or h, such as 30m. After Ready, open http://127.0.0.1:PORT in a browser on this Mac, or connect an installed agent; both reach the server on loopback, which the default --host and 0.0.0.0 include. The startup summary and /status report the effective context limit; a client may impose a smaller one. Keep this terminal open; Ctrl+C stops serving. suzuyu@macmini-m6 ~ % brew pin incoai/tap/splash suzuyu@macmini-m6 ~ % </div></details> Splash の起動とコンテキスト確認 64K で起動する 下記コマンドで、Splash 1.4.0 をコンテキスト長 64K・テキスト専用で起動する。モデルは前回と同じ UD-IQ4_XS を使用する。起動オプション splash serve \ --model unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS \ --host 127.0.0.1 \ --port 8000 \ --max-context 65536 \ --language-only \ --no-webui 起動したターミナルで Ready が表示されるまで待つ。context 64K、language only、待ち受け先 http://127.0.0.1:8000 を確認し、このターミナルを開いたまま次の API 確認へ進む。 今回の実行では、ログの Loading から約1分59秒で Ready に到達した。 <details><summary>Splash 1.4.0 の起動ログ(UD-IQ4_XS / 64K / language only)</summary><div> suzuyu@macmini-m6 ~ % splash serve \ --model unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS \ --host 127.0.0.1 \ --port 8000 \ --max-context 65536 \ --language-only \ --no-webui Updating unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS: the GGUF metadata adapter changed. Selected Qwen3.8-27B-UD-IQ4_XS.gguf from unsloth/Qwen3.8-27B-GGUF. Installing unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS as Qwen3.8-27B (gguf); draft incoai/Qwen3.8-27B-DFlash2; vision disabled. 01:59:59 Loading · unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS 02:00:00 Chat template · patched to render later system messages in place (the original template rejects them), generation prompt 5-7 tokens 02:00:06 Weights loaded in 5.52 s. 02:00:06 Decode cycles verify every row of the draft's block (--verify-rows auto, as unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS is dense). 02:00:06 SSD cache: up to 32.0 GiB of temporary files in /var/folders/vm/x0l5wqcx7njgdqpfvbpp20n00000gn/T/ (its automatic quota, while its volume has room beyond the 10.0 GiB it keeps free); KV pages of 1040 KiB and states of 152 MiB, a state's write staging through 152 MiB of the memory plan; --max-cache-disk 0 turns it off. 02:00:06 Kernel policy for GPU family 11 with 12 cores. 02:00:06 Setting up the Neural Engine FFN split (splash serve --disable-ane keeps the FFN on the GPU). 02:00:57 Neural Engine FFN split at share 0.74 for chunks of 512 rows or more: 31.4 ms per 2048-row FFN layer against 63.6 on the GPU alone, 1.1% from the GPU alone on the Neural Engine's part (calibrated in 51.1 s). 02:01:58 Ready · unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS · context 64K · language only · http://127.0.0.1:8000 </div></details> API で実効値を確認する Ready 表示後、別ターミナルで下記コマンドを実行し、サーバの状態とコンテキスト長を確認する。今回は API キー未設定のローカル接続を使う。 curl --fail-with-body --connect-timeout 5 --max-time 15 \ http://127.0.0.1:8000/ready curl --fail-with-body --connect-timeout 5 --max-time 15 \ http://127.0.0.1:8000/v1/models /ready の status が ready、/v1/models のモデル名が指定どおりで、max_model_len と context_length がともに 65536 になっていることを確認する。 | 確認項目 | 結果 | | :--- | :--- | | サーバの状態 | ready | | モデル | unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS | | コンテキスト長 | max_model_len / context_length ともに 65536(64K) | 上記の結果が返った。続いて Hermes から接続し、文章生成を試す。 <details><summary>Splash の準備完了・コンテキスト確認ログ(初回タイムアウトと再試行)</summary><div> suzuyu@macmini-m6 ~ % curl --fail-with-body --connect-timeout 5 --max-time 15 \ http://127.0.0.1:8000/ready curl: (28) Failed to connect to 127.0.0.1 port 8000 after 5007 ms: Timeout was reached suzuyu@macmini-m6 ~ % suzuyu@macmini-m6 ~ % curl --fail-with-body --connect-timeout 5 --max-time 15 \ http://127.0.0.1:8000/ready {"status":"ready"}% suzuyu@macmini-m6 ~ % curl --fail-with-body --connect-timeout 5 --max-time 15 \ http://127.0.0.1:8000/v1/models {"object":"list","data":[{"id":"unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS","object":"model","created":0,"owned_by":"splash","max_model_len":65536,"context_length":65536,"vision":false,"input_modalities":["text"]}],"models":[{"name":"unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS","description":"Splash resident model","release_date":""}]}% suzuyu@macmini-m6 ~ % </div></details> Hermes Agent から利用する 導入とプロファイルの確認 公式 Quickstartに従って導入する。公式のインストーラは下記で取得できる。作業ディレクトリに保存し、内容と導入先を確認してから実行する。 curl --fail --show-error --location \ https://hermes-agent.nousresearch.com/install.sh \ --output hermes-install.sh less hermes-install.sh # 内容確認後、導入するときに実行 bash hermes-install.sh セットアップ方法の選択画面では、矢印キーで Blank Slate を選び、Enter で進む。続いて追加機能を設定するか聞かれた場合は、最小構成のまま完了する選択肢を選ぶ。今回はローカルの Splash に接続するため、Nous Portal にログインする Quick Setup は使わない。セットアップ方法 !hermes-install-setup1.png Select provider では Custom endpoint (enter URL manually) を選び、起動済みの Splash を接続先にする。以降、表示される項目に次の値を指定する。ローカル接続の設定例 !hermes-install-setup2.png 今回入力した項目は下記の通り | 項目 | 今回の指定 | | :--- | :--- | | API base URL | http://127.0.0.1:8000/v1 | | API key | 今回は認証なしのため空欄 | | API compatibility mode | 2. Chat Completions | | Model | unsloth/Qwen3.8-27B-GGUF:UD-IQ4_XS(取得したモデル一覧から選択) | | Context length | 65536(Splash の API で確認した値) | | Display name | Splash local(接続先を識別する任意の名前) | | Reasoning effort | medium | | Terminal backend | local または Keep current (local) | | Shared metrics | No thanks(今回の完了ログは off) | !hermes-install-setup3.png !hermes-install-setup4.png !hermes-install-setup5.png !hermes-install-setup6.png <details><summary>Hermes Agent のインストール・初期設定ログ(curl からセットアップ完了まで)</summary><div> suzuyu@macmini-m6 ~ % curl --fail --show-error --location \ hermes-agent.nousresearch.com \ --output hermes-install.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 66864 0 66864 0 0 300k 0 --:--:-- --:--:-- --:--:-- 299k suzuyu@macmini-m6 ~ % less hermes-install.sh suzuyu@macmini-m6 ~ % bash hermes-install.sh ┌─────────────────────────────────────────────────────────┐ │ ☤ Hermes Agent Installer │ ├─────────────────────────────────────────────────────────┤ │ An open source AI agent by Nous Research. │ └─────────────────────────────────────────────────────────┘ ✓ prerequisites ok (git, curl) → Installing the latest stable release (v0.22.5); --channel main follows every commit ✓ Hermes Agent cloned → Downloading uv 0.13.5 (darwin-arm64) ✓ uv ready (uv 0.13.5 (46776a95d 2026-10-21 aarch64-apple-darwin)) ✓ bootstrap Python ready; PM prepares the dependency environment ✓ uv ready (uv 0.13.5 (46776a95d 2026-10-21 aarch64-apple-darwin)) ✓ dependencies installed ✓ config prepared in /Users/suzuyu/.hermes ✓ uv ready (uv 0.13.5 (46776a95d 2026-10-21 aarch64-apple-darwin)) ✓ added ~/.local/bin to PATH in /Users/suzuyu/.zshrc ✓ added ~/.local/bin to PATH in /Users/suzuyu/.zprofile ✓ app products an