v0.14.0 wypuścił stos pracy nad wydajnością, który złożony razem sprawia, że Hermes Agent czuje się jak inny program. Trzy nagłówki z release notes:
- •~19 sekund mniej z cold startu. Rozsiane po grafie importów, checkach doctora, lookupie katalogu modeli, welcome-bannerze.
- •180× szybsze
browser_console. Jedno trwałe połączenie CDP zamiast otwierania nowej sesji DevTools na każdy call. - •Międzysesyjny godzinny prompt-cache Claude.
/newnie traci ci ciepłego prefix-cache.
Żadna z tych rzeczy to nie „przepisanie od zera". Każda to seria małych, lokalizowalnych PR-ów, które celują w konkretne hot pathy. Ten wpis to rozpiska PR-po-PR — co było wolne, co się zmieniło i jakie wnioski generalizują się dla każdego autora agenta.
Punkt wyjścia
Jeśli odpalałeś hermes na początku maja 2026, ścieżka cold startu wyglądała tak:
- 1.Wstaje interpreter Pythona (~100 ms)
- 2.
import hermesciągnie resztę grafu importów (~5–10 s) - 3.Plugin-discovery
hermesaskanuje zainstalowane pluginy (~2–3 s) - 4.
hermes doctorpuszcza sondy łączności API po kolei (~3–5 s) - 5.Skills-index się ładuje, często znowu ciągnąc z sieci (~2–4 s)
- 6.Renderuje się welcome-banner (~1 s)
- 7.Pojawia się prompt
Czyli 15–25 sekund, zanim możesz zacząć pisać. Dość długo, żeby zerwać flow. Performance-fala v0.14.0 atakuje każdy z tych kroków.
Fala cold startu (10+ PR-ów)
Cache skilli + lazy importy adapterów (#22138)
Pojedyncze największe zwycięstwo. Dwie równoległe zmiany:
- 1.Skills-index zcache-owany na dysk. Wcześniej: każde wywołanie
hermesznowu czytało katalog skilli i odpalało lekką indeksację. Teraz: index żyje w pliku cache; przebudowywany tylko, kiedy zmienia się katalog (check mtime). - 2.Ciężkie SDK adapterów lecą lazy. Wcześniej: import
hermesciągnął import SDK Feishu, SDK WhatsAppa, każdego dostawcy voice/TTS, każdego SDK do image-gen. Teraz: każdy odroczony do pierwszego użycia. Jeśli nigdy nie używasz Feishu, SDK Feishu nigdy się nie ładuje.
Obie zmiany w #22138 ściągnęły ~5–8 sekund. Wzorzec lazy-import to nieopiewany bohater — jest mechanicznie nakładany na cały codebase, ale nie pojawia się jako jeden dramatyczny PR.
Pomijaj agresywne plugin-discovery na znanych subkomendach (#22120)
Jeśli odpalasz hermes config set X Y, plugin-discovery jest niepotrzebne. Tak samo dla hermes tools, hermes model, hermes doctor. Dispatcher teraz robi zwarcie w plugin-discovery, kiedy komenda to znany built-in. ~2 sekundy zaoszczędzone na większości wywołań CLI.
Lookup models.dev cache-first (#22808)
Hermes bije do models.dev po kanoniczny katalog modeli. Przed v0.14.0 każdy start hermesa robił call HTTP. Teraz: najpierw czyta z cache na dysku; refetch dopiero, kiedy stale (>24 h). Cache hit to ~5 ms zamiast ~200–500 ms (sieciowy round-trip).
Równoległe sondy łączności API w hermes doctor (#22766)
hermes doctor sprawdzał „czy dosięgnę Nous Portal, OpenRouter, Anthropic, OpenAI" sekwencyjnie. Teraz: asyncio.gather je razem, plus wywalono sondowanie IMDS (instance metadata service), które na niechmurowych maszynach taimowało. ~3–5 sekund zerżnięte z doctora w typowym przypadku.
chat -q pomija welcome-banner (#22904)
Jeśli jesteś w trybie pojedynczego zapytania (hermes chat -q "what's the time"), welcome-banner to szum. v0.14.0 pomija jego rendering. ~1 sekunda z powrotem dla skryptowanych / zautomatyzowanych use case'ów.
Odroczone importy w całym grafie
Długi ogon PR-ów, każdy odracza jeden ciężkawy import:
- •
google-cloudw adapterzegoogle_chat— ładuje się dopiero, kiedy google chat jest po raz pierwszy używany (#22681) - •
QQAdapter,YuanbaoAdapter— odroczenie na poziomie modułu przez PEP 562 (#22790) - •
httpxw adapterze teams — dopiero przy pierwszym wywołaniu webhooka (#22831) - •
fal_client— dopiero przy pierwszej generacji obrazu (#22859)
Każdy PR mały. Razem to kolejne 2–4 sekundy.
Cache auth-a Nous i ładowań .env (#25341)
Ekran All-Platforms w hermes tools robił sondy auth-a per-platforma synchronicznie. To zleciało z 14 sekund do mniej niż 1,5, kiedy wjechał cache. Ekran nadal działa tak samo; tylko nie pali 14 s czasu sieciowego na każde wywołanie.
Wynik netto
Dodaj zwycięstwa i wychodzi nagłówkowe 19 sekund. Z osobna nic nie jest dramatyczne; razem program robi się responsywny.
Historia 180× w browser_console (#23226)
Tool browsera w Hermesie używa Chrome DevTools Protocol (CDP), żeby sterować headless Chrome'em. Przed v0.14.0 każde wywołanie browser_console robiło to:
- 1.Otwórz nowy WebSocket CDP do Chrome'a
- 2.Czekaj na handshake (~1–2 s)
- 3.Wyślij JavaScript do oceny
- 4.Wczytaj wynik
- 5.Zamknij WebSocket
Dla łańcucha ocen — powiedzmy, agent inspekcjonuje stronę krok po kroku — to było ~1,5 s na ocenę. Typowy flow „popatrz na tę stronę i mi opowiedz" był boleśnie wolny.
Zmiana w v0.14.0: jeden trwały WebSocket per supervisor, dzielony między wszystkie wywołania toola browsera. Handshake CDP dzieje się raz na sesję; kolejne oceny w ogóle pomijają kroki 1–2 i lecą tylko z payloadem.
Wynik: latencja per-call zleciała z ~1,5 s do ~8 ms. Czyli ~180×.
Lekcja jest ogólna. Wszędzie tam, gdzie twój agent robi N wywołań toola i każde otwiera nowe połączenie: dla obciążeń w tempie czatu connection pooling bije paralelizm. Cała robota siedzi w setupowaniu połączenia, nie w samej robocie.
Międzysesyjny godzinny prompt-cache Claude (#23828, #25434, #24778)
Prompt-cache Claude (feature API Anthropica) pozwala oznaczyć kawałek kontekstu jako cacheable. Kolejne requesty w TTL — historycznie 5 minut — reużywają zcache-owanego prefixa za dużo niższy koszt i latencję.
Przed v0.14.0 Hermes używał tego wewnątrz sesji: system-prompt + aktywne skille się cache-owały, hity w tej samej rozmowie były szybsze i tańsze. Ale kiedy odpaliłeś /new, cache był unieważniany, a kolejna rozmowa startowała na zimno.
Robota v0.14.0, rozsiana po trzech PR-ach, rozciąga TTL cache'u na 1 godzinę i sprawia, że klucz cache'u przeżywa /new. Pierwsza odpowiedź w świeżej sesji ma zysk z ciepłego cache'u z poprzedniej sesji. Dla osób, które prowadzą dużo krótkich rozmów dziennie, to konkretne zwycięstwo na koszcie i latencji.
Cache pokrywa też gałąź background memory review (#25434) — okresowy proces, który rewiduje i konsoliduje twój memory-plik, teraz uderza w ten sam prompt-cache, zamiast płacić pełną cenę na każdej iteracji.
Komplementarny perf-fix w tym obszarze: klucz prompt-cache'u używa timestampa tylko-z-datą, żeby cache nie pękały przez strefy czasowe. Głośne logowanie round-tripów gateway-DB dopełnia obraz pod kątem observability.
Narzędzia, które wyciągnęły zwycięstwa na powierzchnię
Jak autorzy znaleźli te konkretne hot pathy? Dwie odpowiedzi:
- •Profilowanie cold startu na prawdziwej instalacji. Odpalali
hermespod stoperem i śledzili, które importy trwały najdłużej. Potem po kolei pakowali się w nie. - •Reporty userów typu „Hermes mi się ślimaczy". To, że ekran All-Platforms w
hermes toolsbył wolny, to był konkretny bug report; gdy wypłynął, fix był prosty.
Żadnej magii. Te zwycięstwa są znajdowalne z python -X importtime, cProfile i słuchaniem ludzi, którzy narzekają.
Wnioski dla każdego autora agenta
Jeśli budujesz agenta, performance-fala v0.14.0 generalizuje się w kilka reguł:
- 1.Nie importuj tego, czego nie używasz. Lazy-import każdego adaptera i SDK providera. Graf importów to twój cold start.
- 2.Cache-uj wszystko, co stabilne. Skills-index, katalog modeli, tokeny auth-a. Refetch dopiero, kiedy wiesz, że jest stale.
- 3.Pulpiruj połączenia. Jeśli wołasz API albo CDP-serwer więcej niż raz na sesję, trzymaj połączenie.
- 4.Niezależne sondy puszczaj równolegle. Checki doctora, healthchecki, cokolwiek, gdzie kolejność nie ma znaczenia.
- 5.Nie renderuj UI, którego nie potrzebujesz. Welcome-bannery, dekoracyjny output — pomijaj w nieinteraktywnych ścieżkach.
Żadna z nich nie jest nowa. To standardowy performance playbook dla dowolnego CLI. Ciekawa rzecz w v0.14.0 to to, że puścili cały playbook w jednym oknie wydania i wynik było czuć w momencie, kiedy userzy zaktualizowali.
Jeśli twój Hermes na początku maja czuł się kruchy, v0.14.0 to wydanie, w którym zimna ścieżka znikła.