Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
926 commits
Select commit Hold shift + click to select a range
f45434d
Merge pull request #17626 from NousResearch/bb/tui-prompt-gap
OutThisLife Apr 29, 2026
faa467c
fix(tui): share detail section constants
OutThisLife Apr 29, 2026
d9bf093
Merge pull request #17638 from NousResearch/bb/tui-details-persist
OutThisLife Apr 29, 2026
5e6e8b6
fix(tui): honor launch toolsets (#17623)
OutThisLife Apr 29, 2026
98f5be1
fix(tui): word-wrap composer input (#17651)
OutThisLife Apr 29, 2026
fc7f55f
fix(tui): responsive /compress with live progress + CLI-parity feedba…
OutThisLife Apr 30, 2026
9fc9c15
fix(banner): show correct update status on nix-built hermes (#17550)
ethernet8023 Apr 30, 2026
b978fd8
feat(tui): preserve modifiers on mouse wheel events
OutThisLife Apr 30, 2026
7a4da31
fix(docker): add curl to apt dependencies
benbarclay Apr 30, 2026
fc0f358
fix(tui): add modifier-held precision wheel scrolling
OutThisLife Apr 30, 2026
8cce85b
Merge pull request #17669 from NousResearch/bb/tui-scroll-precision-mod
OutThisLife Apr 30, 2026
98a428f
fix(cli): recover from leaked mouse tracking escapes
OutThisLife Apr 30, 2026
d05497f
fix(tui): reset terminal modes on startup and exit
OutThisLife Apr 30, 2026
31f70d1
fix(ci): recover 38 failing tests on main (#17642)
teknium1 Apr 30, 2026
87e259a
fix(cli): tighten mouse leak sanitizer
OutThisLife Apr 30, 2026
4cc6da8
fix(tui): normalize legacy Terminal.app colors (#17695)
OutThisLife Apr 30, 2026
0ba451d
fix(vision): use HERMES_HOME-based cache dir instead of cwd (#17719)
teknium1 Apr 30, 2026
24b5279
feat(tui): delete sessions from /resume picker with `d`
OutThisLife Apr 30, 2026
49fcad8
fix(tui): require double-tap `d` to confirm session delete
OutThisLife Apr 30, 2026
8dcab19
fix(gateway): fail closed when session.delete can't enumerate active …
OutThisLife Apr 30, 2026
22ff6ca
docs: two-week gap sweep — platforms, CLI, config, TUI, hooks, provid…
teknium1 Apr 30, 2026
95f2802
feat(cli): preserve --tui and other flags across internal relaunches
ethernet8023 Apr 29, 2026
3c67346
refactor(cli): derive relaunch flag table from argparse introspection
ethernet8023 Apr 30, 2026
7d48a16
remove relaunch_chat
ethernet8023 Apr 29, 2026
a7780fe
fix(skills/comfyui): bug fixes, cloud parity, expanded coverage, exam…
SHL0MS Apr 30, 2026
51b44b6
fix(skills/comfyui): correct hallucinated node names and registry slugs
SHL0MS Apr 30, 2026
289cc47
docs: resync reference, user-guide, developer-guide, and messaging pa…
teknium1 Apr 30, 2026
e6b05ea
feat: add Models dashboard tab with rich per-model analytics
yatesjalex Apr 30, 2026
113239f
fix(dashboard/models): filter empty-string model rows + simplify vend…
teknium1 Apr 30, 2026
7966560
feat(skills): /reload-skills slash command + skills_reload agent tool
shannonsands Apr 29, 2026
dd2d1ba
refactor(reload-skills): queue note for next turn, drop cache invalid…
teknium1 Apr 30, 2026
1f71217
fix(telegram): support group user allowlist
xandersbell Apr 30, 2026
763aadd
fix(telegram): preserve pre-#17686 chat-ID-in-_USERS configs + doc split
teknium1 Apr 30, 2026
d69a0b2
fix(security): apply ACL checks to QQBot guild messages and guild DMs…
memosr Apr 29, 2026
1623371
chore(release): map memosr commit email for release notes
teknium1 Apr 30, 2026
ffa6529
fix(cron): clear auto-delivery thread context between jobs
simbam99 Apr 29, 2026
502debe
chore: map vlad19@gmail.com -> dandaka for CI author check
teknium1 Apr 30, 2026
a7fb79e
fix(agent): spawn OpenRouter pre-warm thread only once per process
dandaka Apr 29, 2026
7fae87b
fix(gateway): refresh cached agents after MCP tool changes
helix4u Apr 30, 2026
4d7fc0f
feat(gateway,cli): confirm /reload-mcp to warn about prompt cache inv…
teknium1 Apr 30, 2026
8f144fe
feat: pluggable platform adapter registry + IRC reference implementation
teknium1 Apr 11, 2026
2e20f6a
feat: complete plugin platform parity — all 12 integration points
teknium1 Apr 11, 2026
457128d
fix: wire PII redaction + token empty warnings for plugin platforms
teknium1 Apr 11, 2026
e464cde
feat: final platform plugin parity — webhook delivery, platform hints…
teknium1 Apr 12, 2026
52d9e57
feat: dynamic toolset generation for plugin platforms
teknium1 Apr 12, 2026
1f16080
feat(gateway): unify setup flows, load platforms dynamically from reg…
ethernet8023 Apr 20, 2026
6e42daf
fix(nix): bundle plugins/ and expose it via HERMES_BUNDLED_PLUGINS
ethernet8023 Apr 20, 2026
868bc1c
feat(irc): add interactive setup
ethernet8023 Apr 20, 2026
71c8ca1
chore(salvage): strip duplicated/merge-corrupted blocks from PR #17664
teknium1 Apr 30, 2026
4d36349
feat(plugins): bundled platform plugins auto-load by default
teknium1 Apr 30, 2026
828d3a3
fix(anthropic): reactive recovery for OAuth 1M-context beta rejection…
teknium1 Apr 30, 2026
b06a06e
fix(docker): restore trailing newline on Dockerfile
benbarclay Apr 30, 2026
e7beaaf
Merge pull request #17694 from NousResearch/fix/docker-add-curl
benbarclay Apr 30, 2026
f73364b
fix(ci): stabilize main test suite regressions (#17660)
stephenschoettler Apr 30, 2026
ce0c3ae
fix(aux): remove hardcoded Codex fallback model, drop Codex from auto…
teknium1 Apr 30, 2026
62a5d72
feat(plugins): bundle hermes-achievements + scan full session history…
teknium1 Apr 30, 2026
718e4e2
fix(plugins): register dynamically-loaded modules in sys.modules befo…
jquesnelle Apr 28, 2026
3c27efb
feat(dashboard): configure main + auxiliary models from Models page (…
teknium1 Apr 30, 2026
21e695f
fix: clean up defensive shims and finish CI stabilization from #17660…
teknium1 Apr 30, 2026
b3137d7
feat(teams): add Microsoft Teams platform adapter as a plugin
Apr 30, 2026
a696bce
fix(tools_config): handle plugin platforms in platform_tool_universe
Apr 30, 2026
ca5bebe
fix(teams): send images as attachments instead of markdown links
Apr 30, 2026
39b0bc3
fix(teams): override send_image_file for local image attachments
Apr 30, 2026
45780ed
feat(teams): keep card body visible after approval button click
Apr 30, 2026
e23bb18
fix(teams): rewrite interactive_setup to use teams CLI flow
Apr 30, 2026
26787ce
test(gateway): isolate plugin adapter imports and guard the anti-pattern
teknium1 Apr 30, 2026
aa7bf32
feat(gateway): centralize audio routing + FLAC support + Telegram doc…
teknium1 Apr 30, 2026
fd07969
fix: stabilize CI — TS widen, sys.modules restore, WS subscriber race…
teknium1 Apr 30, 2026
5b85a7d
fix(update): kill stale dashboard processes instead of warning (#17832)
teknium1 Apr 30, 2026
2facea7
feat(tts): add command-type provider registry under tts.providers.<na…
teknium1 Apr 30, 2026
0ad4f55
feat(dashboard): add --stop and --status flags (#17840)
teknium1 Apr 30, 2026
25caaa4
feat(tips): add cost-saving tips from April 30 tip-of-the-day (#17841)
teknium1 Apr 30, 2026
97a851b
fix(openviking): normalize summary pseudo-URIs to prevent v0.3.3 500s
htsh Apr 7, 2026
bff8ab0
test(openviking): add helper regression coverage
htsh Apr 9, 2026
10e43ed
fix(openviking): fallback summary reads to content/read for file URIs
htsh Apr 15, 2026
5d253e6
fix(openviking): pre-check fs/stat to route file URIs before hitting …
teknium1 Apr 30, 2026
d2536a7
fix(acp): replay session history on load
HenkDz Apr 29, 2026
6589474
fix(acp): drop dead message_id kwarg from replay chunks
teknium1 Apr 30, 2026
0da968e
fix(curator): unify under auxiliary.curator (hermes model, dashboard)…
teknium1 Apr 30, 2026
2662bfb
fix(tests): make test_update_stale_dashboard immune to hermes_cli.mai…
teknium1 Apr 30, 2026
8d302e3
feat(tts): add Piper as a native local TTS provider (closes #8508) (#…
teknium1 Apr 30, 2026
cb130bf
fix(ssh): prevent tar from overwriting remote home dir permissions
vominh1919 Apr 30, 2026
663ba9a
fix(gateway): drain pending messages via fresh task, not recursion (#…
briandevans Apr 30, 2026
f44f1f9
fix(gateway): preserve session guard across in-band drain handoff
briandevans Apr 30, 2026
f549357
fix(cron): surface agent run_conversation failure flags as job failure
briandevans Apr 30, 2026
362996e
fix(runtime_provider): _get_named_custom_provider must honour transpo…
zicochaos Apr 30, 2026
01d7c87
chore(release): map zicochaos to GitHub login
teknium1 Apr 30, 2026
3858f94
fix: handle gateway Ctrl+C shutdown cleanly
rylena Apr 30, 2026
19f9be1
fix(tools): serialize concurrent hermes_tools RPC calls from execute_…
Heltman Apr 30, 2026
5af8fa5
chore(release): map Heltman email to username for AUTHOR_MAP
teknium1 Apr 30, 2026
ca87c82
fix(gateway): guard yaml.safe_load and float() env var casts against …
vominh1919 Apr 30, 2026
411f586
refactor(gateway): extract _float_env helper for env-var float casts
teknium1 Apr 30, 2026
ca7f46b
Merge upstream/main and address Copilot review feedback
Apr 30, 2026
04ea895
feat(gateway/signal): add support for multiple images sending
MaxyMoos Apr 30, 2026
3de8e21
feat(gateway): native send_multiple_images for Telegram, Discord, Sla…
teknium1 Apr 30, 2026
cc5b9fb
fix(transport): omit thinking_config for Gemma on the gemini provider…
briandevans Apr 29, 2026
fbb3775
fix(gateway): enforce auth check in busy-session path to prevent unau…
Bartok9 Apr 30, 2026
0dd373e
fix(context): honor model.context_length for Ollama num_ctx and all d…
Apr 30, 2026
70ae678
chore(release): map rob@atlas.lan to @rmoen
teknium1 Apr 30, 2026
e0fa2cf
fix(tools): isolate get_tool_definitions quiet_mode cache + dedup LCM…
Sanjays2402 Apr 29, 2026
201f7ca
fix: prevent bare 'custom' slug in model.provider (#17478)
Apr 29, 2026
61fec76
chore(release): map Andy283 gitee email in AUTHOR_MAP
teknium1 Apr 30, 2026
3fc4c63
test(model_switch): update regression to reflect bare-custom guard
teknium1 Apr 30, 2026
b50bc13
fix(config): preserve YAML lists in hermes config set (#17876)
teknium1 Apr 30, 2026
87f5e1a
test(ssh): update tar pipe assertion for --no-overwrite-dir
teknium1 Apr 30, 2026
d1d0ef6
fix(gateway): persist user message on transient agent failures (#7100)
konsisumer Apr 17, 2026
e8e5985
fix(curator): seed defaults on update, create logs/curator dir, defer…
teknium1 Apr 30, 2026
eda1d51
fix(skills): exclude .archive from skill index walk
leoneparise Apr 29, 2026
a845177
fix(skills): also exclude .archive in skills_tool + add author map entry
teknium1 Apr 30, 2026
4c79286
test(gateway): pin cleanup invariants for #17758 in-band drain hand-off
teknium1 Apr 30, 2026
4178ab3
fix(skills): wire bump_use() into skill invocation and preload paths …
Bartok9 Apr 30, 2026
ae8930a
fix(skills): also bump_use on skill_view tool invocation
teknium1 Apr 30, 2026
9a14540
fix(nix): replace magic-nix-cache with Cachix (#17928)
alt-glitch Apr 30, 2026
407dfbb
fix(ci): stabilize current main test regressions
stephenschoettler Apr 30, 2026
cad7944
fix(tui): reset extended keyboard modes
OutThisLife Apr 30, 2026
285e9ef
Merge pull request #17701 from NousResearch/bb/mouse-mode-self-heal
OutThisLife Apr 30, 2026
e30de51
fix(cli): tighten terminal leak fast path
OutThisLife Apr 30, 2026
d954d6f
Merge pull request #18024 from NousResearch/bb/mouse-mode-fast-path
OutThisLife Apr 30, 2026
4e296dc
fix(auxiliary): pass raw base_url to _maybe_wrap_anthropic for correc…
chengoak Apr 30, 2026
2d3c041
change(nix): dedupe nix lockfile checking scripts in ci (#18000)
ethernet8023 Apr 30, 2026
d499d17
Merge pull request #17969 from stephenschoettler/fix/current-main-tes…
ethernet8023 Apr 30, 2026
b9d9fa7
fix(tui): respect max turns config
OutThisLife Apr 30, 2026
29bcd2f
Merge pull request #18029 from NousResearch/bb/tui-max-iterations-sal…
OutThisLife Apr 30, 2026
cdf9793
fix(acp): advertise and forward image prompts
HenkDz Apr 30, 2026
8b290a5
feat(curator): split archived into consolidated vs pruned with model …
teknium1 Apr 30, 2026
7913d6a
chore(author-map): add y0shua1ee and 0xDevNinja for curator PRs (#18031)
teknium1 Apr 30, 2026
564a649
fix(curator): scan nested archive subdirs in restore_skill
0xDevNinja Apr 30, 2026
f4b76fa
fix: use skill activity in curator status
y0shua1ee Apr 30, 2026
7c07422
feat(tui): add a mini help menu when u write ? in the input field
ethernet8023 Apr 30, 2026
d60a991
feat(curator): show most-used and least-used skills in `hermes curato…
teknium1 Apr 30, 2026
699a9c1
test(acp): accept prompt persistence kwargs in mocks
stephenschoettler Apr 30, 2026
8fbc9d7
Merge pull request #18043 from NousResearch/feat/help-ui
ethernet8023 Apr 30, 2026
b9b9ee3
fix(deepseek): preserve v4 reasoning_content on replay
Apr 28, 2026
76edc40
fix(agent): extend thinking-mode reasoning_content pad to Kimi/Moonshot
teknium1 Apr 30, 2026
73bf3ab
chore: release v0.12.0 (2026.4.30) (#18057)
teknium1 Apr 30, 2026
b737af8
Merge pull request #18047 from stephenschoettler/fix/acp-persist-user…
ethernet8023 Apr 30, 2026
6bc5d72
Merge pull request #16419 from vincez-hms-coder/feat/dashboard-profil…
austinpickett Apr 30, 2026
9ac4a2e
fix: let fixing nix pkgs command work without an initial build
ethernet8023 Apr 25, 2026
1d8068d
feat(models): add openrouter/owl-alpha (free) to curated OpenRouter l…
teknium1 Apr 30, 2026
59c1a13
Merge pull request #15680 from NousResearch/fix/nix-package-lock
ethernet8023 Apr 30, 2026
c868425
feat(kanban): durable multi-profile collaboration board (#17805)
teknium1 Apr 30, 2026
80a6766
fix(cli): surface self-improvement review summaries from bg thread
teknium1 Apr 30, 2026
bbbce92
feat(tui): render self-improvement review summaries in the transcript
teknium1 Apr 30, 2026
71b685a
fix(tui): recover fragmented SGR mouse reports
OutThisLife Apr 30, 2026
ded011c
fix(tui): tighten SGR fragment matching
OutThisLife Apr 30, 2026
8fed969
Merge pull request #18113 from NousResearch/bb/tui-sgr-mouse-fragments
OutThisLife Apr 30, 2026
180a703
feat(skills): add Shopify optional skill (Admin + Storefront GraphQL)…
teknium1 Apr 30, 2026
e5dad4a
fix(agent): propagate ContextVars to concurrent tool worker threads (…
teknium1 Apr 30, 2026
e2e6b6f
chore(models): move Vercel AI Gateway to bottom of provider picker (#…
teknium1 May 1, 2026
f61695e
fix(signal): skip contentless envelopes (profile key updates, empty m…
cdanis May 1, 2026
97d6f25
test(toolsets): include kanban in expected post-#17805 toolset assert…
briandevans Apr 30, 2026
624057f
feat(teams): set User-Agent to Hermes via 2.0.0 client option
May 1, 2026
4a6fac3
docs(teams): fix group chat behavior — @mention required
May 1, 2026
c997830
docs(teams): fix port references and add TEAMS_ALLOW_ALL_USERS
May 1, 2026
f59693c
fix(teams): pipe TEAMS_PORT through docker-compose properly
May 1, 2026
09aba91
docs(teams): note that tunnel port 3978 is the default, not fixed
May 1, 2026
a5d60f4
docs(teams): fix CLI install tag and Step 6 install flow
May 1, 2026
d5e72ae
docs(teams): fix CLI install tag and Step 6 install flow
May 1, 2026
67f1198
docs(teams): fix CLI install tag and Step 6 install flow
May 1, 2026
1e5a23f
docs(teams): use teams app get --install-link for Step 6
May 1, 2026
5ad8281
fix(model_switch): correct user_providers override for private models
Apr 30, 2026
aab5bcc
test(model_switch): cover private user_providers override
Apr 30, 2026
75483b6
fix(curator): preserve last_report_path in state
Yukipukii1 Apr 30, 2026
f4ba97a
fix(status): add NVIDIA_API_KEY to hermes status API keys display
Feranmi10 May 1, 2026
5f3f456
fix(approval): wake blocked gateway approvals on session cleanup
Yukipukii1 Apr 30, 2026
2110a3a
fix(tui): return JSON-RPC errors for invalid request shapes
Yukipukii1 Apr 30, 2026
f7dfd4a
feat(skills): add built-in here.now skill
adamludwin Apr 23, 2026
21cc9c8
Update here.now skill bundle
adamludwin Apr 29, 2026
7cbe943
feat(skills): add here.now as an optional skill
teknium1 May 1, 2026
2bf73fb
fix(cli): coerce tls insecure flag safely in auth state
johnncenae Apr 30, 2026
79cffa9
auth: coerce tls insecure flag safely instead of using Python truthiness
johnncenae Apr 30, 2026
ca9a61a
fix(plugins): await async handlers in CLI and TUI dispatch
hharry11 Apr 30, 2026
447a2bb
fix(plugins): bound async plugin command await with 30s timeout
teknium1 May 1, 2026
1ef9e88
fix(gateway): write restart markers atomically and fix Windows lock c…
johnncenae Apr 30, 2026
f43b126
fix(gateway): atomic writes for sibling recovery/dedup state files
teknium1 May 1, 2026
b29b709
fix(agent): sanitize Codex tool-call history summaries
stephenschoettler Apr 29, 2026
9ae1fa9
fix(delegate): honor runtime default model during provider resolution
johnncenae Apr 29, 2026
a83d579
fix(telegram): enforce gateway auth for inline approval callbacks
johnncenae Apr 30, 2026
2997ef9
fix(api-server): use session-scoped task IDs for tool isolation
hharry11 Apr 29, 2026
b194617
fix(context_compressor): off-by-one in tail protection for short conv…
0z1-ghb Apr 28, 2026
8b7b074
test(context_compressor): regression test for PR #17025 tail-protecti…
teknium1 May 1, 2026
84324d0
chore(release): add quocanh261997 to AUTHOR_MAP
teknium1 May 1, 2026
77fe7ab
feat(gateway): restart manual profile gateways after update
quocanh261997 Apr 30, 2026
9669126
fix(gateway): drain manual profile gateways via SIGUSR1 before respawn
teknium1 May 1, 2026
142b4bf
fix(session_search): order recent mode by last activity instead of st…
simbam99 May 1, 2026
5089c55
refactor(state): compute last_active ordering at SQL level via recurs…
teknium1 May 1, 2026
38875d0
fix(gateway): ensure platform configs honor home_channel env overrides
Yukipukii1 Apr 29, 2026
0ddc8ab
fix(fallback): let custom_providers shadow built-in aliases
teknium1 May 1, 2026
226fd79
feat(dashboard): add interactive column sorting to analytics tables
AllardQuek Apr 29, 2026
f48ba47
chore(release): map allard.quek@singtel.com → AllardQuek
teknium1 May 1, 2026
25cbe3e
fix(gateway): preserve thread routing for /update progress and prompts
Yukipukii1 Apr 29, 2026
2b512cb
feat(gateway): add busy_ack_enabled config option to suppress ack mes…
JezzaHehn Apr 29, 2026
01cc701
docs + nit: busy_ack_enabled follow-ups
teknium1 May 1, 2026
33d2409
fix(dashboard): normalize typography and layout across built-in themes
AllardQuek Apr 29, 2026
ebe60ab
fix(dashboard): separate theme identity from layout scale
AllardQuek Apr 30, 2026
8e58265
chore(release): map allard.quek@singtel.com → AllardQuek (#18196)
teknium1 May 1, 2026
e3624e0
fix: enforce strictly subtractive toolset filtration
jatingodnani Apr 29, 2026
9a75743
fix(gateway): apply agent.disabled_toolsets in gateway message loop
teknium1 May 1, 2026
19136df
chore: map jatingodnani email in AUTHOR_MAP
teknium1 May 1, 2026
cc340c4
fix(tui): always call input.detect_drop for reliable image attachment
0xharryriddle Apr 29, 2026
531ac20
fix(state): JSON-encode multimodal message content for sqlite
teknium1 May 1, 2026
5ed27c0
fix(tui_gateway): guard env var parsing against invalid values at import
sprmn24 Apr 28, 2026
bdb7edd
fix(gateway): isolate pending native image paths by session
Yukipukii1 Apr 28, 2026
a178081
fix(gateway): use _session_key_for_source for native image buffer write
teknium1 May 1, 2026
7abc9ce
fix(gateway): read /status token totals from SessionDB (#17158)
JezzaHehn May 1, 2026
fa9fd26
fix(gateway): re-inject topic-bound skill after /new or /reset
ygd58 May 1, 2026
b94cb8e
feat(feishu): operator-configurable bot admission and mention policy
Roy-oss1 Apr 26, 2026
bea2562
fix(honcho): replace raw int() config parsing with safe helper
sprmn24 Apr 27, 2026
ec4cb16
fix(honcho): guard _peers_cache and _sessions_cache reads under _cach…
sprmn24 Apr 27, 2026
73a6b80
fix(browser_supervisor): verify thread and loop health before returni…
sprmn24 Apr 27, 2026
82b5786
test(browser_supervisor): cover cache-hit healthcheck on dead thread/…
teknium1 May 1, 2026
fa7b0b0
fix(discord_tool): key capability cache by token instead of single gl…
sprmn24 Apr 27, 2026
e21898e
test(discord_tool): add regression test for per-token capability cache
teknium1 May 1, 2026
adaee2c
test(skill_utils): add regression tests for non-dict metadata in extr…
sprmn24 Apr 27, 2026
158eb32
fix(gateway): preserve document type when merging queued events
hharry11 Apr 27, 2026
24130b7
fix(approval): harden YOLO mode env parsing against quoted-bool strings
hharry11 Apr 27, 2026
ccfe6a4
fix(gateway): coerce StreamingConfig booleans and malformed numerics …
simbam99 Apr 27, 2026
ab6c629
fix(terminal): skip sudo prompt when local NOPASSWD sudo works
May 1, 2026
787b5c5
chore(release): map Mind-Dragon and JustinUssuri emails for AUTHOR_MAP
teknium1 May 1, 2026
5536651
fix(auth): make provider config writes atomic
Yukipukii1 Apr 27, 2026
7ba1a2b
fix(gateway): preserve assistant metadata when branching sessions
simbam99 Apr 27, 2026
a94841e
fix(state): include finish_reason in conversation replay
teknium1 May 1, 2026
bb706c3
fix(gateway): coerce tool_progress_command as a real boolean
johnncenae Apr 27, 2026
27ec74c
fix: coerce show_reasoning and guard_agent_created config bools
teknium1 May 1, 2026
8d7500d
fix(gateway): snapshot callback generation after agent binds it, not …
Oxidane-bot May 1, 2026
58b8996
fix(agent): add tool-call loop guardrails
Apr 27, 2026
0704589
fix(agent): make tool loop guardrails warning-first
Apr 27, 2026
8fa44b1
fix(guardrails): preserve display _detect_tool_failure semantics
teknium1 May 1, 2026
e27b0b7
feat(acp): add steer and queue slash commands
HenkDz Apr 30, 2026
7888636
fix(acp): replay interrupted prompts for steer
HenkDz Apr 30, 2026
ec1443b
fix(acp): normalize Windows cwd for WSL tool execution
HenkDz Apr 30, 2026
fc78e70
fix(update): don't crash hermes update if skill config scan fails (#1…
teknium1 May 1, 2026
41fa1f1
fix(acp): run /steer as a regular prompt on idle sessions (#18258)
teknium1 May 1, 2026
f0dc919
fix(compression): include system prompt + tool schemas in token estim…
teknium1 May 1, 2026
bfb7046
fix(deepseek): use non-empty reasoning_content placeholder for V4 Pro…
IMHaoyan May 1, 2026
e2eb561
fix(curator): rewrite cron job skill refs after consolidation (#18253)
teknium1 May 1, 2026
4caad28
feat(gateway): auto-delete slash-command system notices after TTL (#1…
teknium1 May 1, 2026
50c0463
feat(update): add --yes/-y flag to skip interactive prompts (#18261)
teknium1 May 1, 2026
7c6c561
docs(sidebar): collapse exploding skills tree to a single Skills node…
teknium1 May 1, 2026
265bd59
feat: /goal — persistent cross-turn goals (Ralph loop) (#18262)
teknium1 May 1, 2026
1be3b74
fix(gateway): honor MATRIX_HOME_ROOM in onboarding
mikeyobrien Apr 19, 2026
77dd6d5
chore(release): add mikeyobrien to AUTHOR_MAP
teknium1 May 1, 2026
9ca72a6
fix(moonshot): fill missing type before enum cleanup to handle anyOf …
May 1, 2026
9cb5bae
chore(release): map hendrixfreire for moonshot salvage
teknium1 May 1, 2026
2af8b8f
fix(moonshot): also strip nullable/enum after anyOf collapse
teknium1 May 1, 2026
cf2b2d3
docs: add Persistent Goals (/goal) feature page (#18275)
teknium1 May 1, 2026
c6eebfc
docs: publish llms.txt and llms-full.txt for agent-friendly ingestion…
teknium1 May 1, 2026
dfe512c
fix(paths): route achievements plugin + profile-tui through HERMES_HOME
May 1, 2026
a2a3268
docs(website): add User Stories and Use Cases collage page (#18282)
teknium1 May 1, 2026
b7ad3f4
fix(yuanbao): enforce owner identity check on group slash commands
UgwujaGeorge May 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@

# Dependencies
node_modules
**/node_modules
.venv
**/.venv

# CI/CD
.github
Expand Down
16 changes: 16 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -398,3 +398,19 @@ IMAGE_TOOLS_DEBUG=false
# Override STT provider endpoints (for proxies or self-hosted instances)
# GROQ_BASE_URL=https://api.groq.com/openai/v1
# STT_OPENAI_BASE_URL=https://api.openai.com/v1

# =============================================================================
# MICROSOFT TEAMS INTEGRATION
# =============================================================================
# Register a Bot in Azure: https://dev.botframework.com/ → "Register a bot"
# Or use Azure Portal: Azure Active Directory → App registrations → New registration
# Then add the bot to Teams via the Bot Framework or App Studio.
#
# TEAMS_CLIENT_ID= # Azure AD App (client) ID
# TEAMS_CLIENT_SECRET= # Azure AD client secret value
# TEAMS_TENANT_ID= # Azure AD tenant ID (or "common" for multi-tenant)
# TEAMS_ALLOWED_USERS= # Comma-separated AAD object IDs or UPNs
# TEAMS_ALLOW_ALL_USERS=false # Set true to skip the allowlist
# TEAMS_HOME_CHANNEL= # Default channel/chat ID for cron delivery
# TEAMS_HOME_CHANNEL_NAME= # Display name for the home channel
# TEAMS_PORT=3978 # Webhook listen port (Bot Framework default)
14 changes: 12 additions & 2 deletions .github/actions/nix-setup/action.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
name: 'Setup Nix'
description: 'Install Nix with DeterminateSystems and enable magic-nix-cache'
description: 'Install Nix and configure Cachix binary cache'

inputs:
cachix-auth-token:
description: 'Cachix auth token (enables push). Omit for read-only.'
required: false
default: ''

runs:
using: composite
steps:
- uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22
- uses: DeterminateSystems/magic-nix-cache-action@565684385bcd71bad329742eefe8d12f2e765b39 # v13
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
with:
name: hermes-agent
authToken: ${{ inputs.cachix-auth-token }}
continue-on-error: true
10 changes: 10 additions & 0 deletions .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,16 @@ jobs:
run: |
mkdir -p _site/docs
cp -r website/build/* _site/docs/
# llms.txt / llms-full.txt are also published at the site root
# (https://hermes-agent.nousresearch.com/llms.txt) because some
# agents and IDE plugins probe the classic root-level path rather
# than /docs/llms.txt. Same file, two URLs, one source of truth.
if [ -f website/build/llms.txt ]; then
cp website/build/llms.txt _site/llms.txt
fi
if [ -f website/build/llms-full.txt ]; then
cp website/build/llms-full.txt _site/llms-full.txt
fi

- name: Upload artifact
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
Expand Down
68 changes: 0 additions & 68 deletions .github/workflows/nix-lockfile-check.yml

This file was deleted.

111 changes: 108 additions & 3 deletions .github/workflows/nix-lockfile-fix.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
name: Nix Lockfile Fix

on:
push:
branches: [main]
paths:
- 'ui-tui/package-lock.json'
- 'ui-tui/package.json'
- 'web/package-lock.json'
- 'web/package.json'
workflow_dispatch:
inputs:
pr_number:
Expand All @@ -19,9 +26,105 @@ concurrency:
cancel-in-progress: false

jobs:
# ── Auto-fix on main ───────────────────────────────────────────────
# Fires when a push to main touches package.json or package-lock.json
# in ui-tui/ or web/. Runs fix-lockfiles and pushes the hash
# update commit directly to main so Nix builds never stay broken.
#
# Safety invariants:
# 1. The fix commit only touches nix/*.nix files, which are NOT in
# the paths filter above, so this cannot re-trigger itself.
# 2. An explicit file-whitelist check before commit aborts if
# fix-lockfiles ever modifies unexpected files.
# 3. Job-level concurrency with cancel-in-progress: true ensures
# back-to-back pushes collapse to the newest; ref: main checkout
# always operates on the latest branch state.
# 4. Uses a GitHub App token (not GITHUB_TOKEN) so the fix commit
# triggers downstream nix.yml verification.
auto-fix-main:
if: github.event_name == 'push'
runs-on: ubuntu-latest
timeout-minutes: 25
concurrency:
group: auto-fix-main
cancel-in-progress: true
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@7bfa3a4717ef143a604ee0a99d859b8886a96d00 # v1.9.3
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}

- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
ref: main
token: ${{ steps.app-token.outputs.token }}

- uses: ./.github/actions/nix-setup
with:
cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }}

- name: Apply lockfile hashes
id: apply
run: nix run .#fix-lockfiles -- --apply

- name: Commit & push
if: steps.apply.outputs.changed == 'true'
shell: bash
run: |
set -euo pipefail

# Ensure only nix files were modified — prevents accidental
# self-triggering if fix-lockfiles ever touches package files.
unexpected="$(git diff --name-only | grep -Ev '^nix/(tui|web)\.nix$' || true)"
if [ -n "$unexpected" ]; then
echo "::error::Unexpected modified files: $unexpected"
exit 1
fi

# Record the base SHA before committing — used to detect package
# file changes if we need to rebase after a non-fast-forward push.
BASE_SHA="$(git rev-parse HEAD)"

git config user.name 'github-actions[bot]'
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
git add nix/tui.nix nix/web.nix
git commit -m "fix(nix): auto-refresh npm lockfile hashes" \
-m "Source: $GITHUB_SHA" \
-m "Run: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID"

# Retry push with rebase in case main advanced with an unrelated
# commit during the nix build. Without this, a non-fast-forward
# rejection silently loses the fix. If package files changed during
# the rebase, abort — a fresh auto-fix run will handle the new state.
for attempt in 1 2 3; do
if git push origin HEAD:main; then
exit 0
fi
echo "::warning::Push attempt $attempt failed (non-fast-forward?), rebasing…"
git fetch origin main

# If package files changed between our base and the new main,
# our computed hashes are stale. Abort and let the next triggered
# run recompute from the correct package-lock state.
pkg_changed="$(git diff --name-only "$BASE_SHA"..origin/main -- \
'ui-tui/package-lock.json' 'ui-tui/package.json' \
'web/package-lock.json' 'web/package.json' || true)"
if [ -n "$pkg_changed" ]; then
echo "::warning::Package files changed since hash computation — aborting; a fresh run will recompute"
exit 0
fi

git rebase origin/main
done
echo "::error::Failed to push after 3 rebase attempts"
exit 1

# ── PR fix (manual / checkbox) ─────────────────────────────────────
# Existing behavior: run on manual dispatch OR when a task-list
# checkbox in the sticky lockfile-check comment flips from [ ] to [x].
fix:
# Run on manual dispatch OR when a task-list checkbox in the sticky
# lockfile-check comment flips from `[ ]` to `[x]`.
if: |
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'issue_comment'
Expand Down Expand Up @@ -99,10 +202,12 @@ jobs:
fetch-depth: 0

- uses: ./.github/actions/nix-setup
with:
cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }}

- name: Apply lockfile hashes
id: apply
run: nix run .#fix-lockfiles -- --apply
run: nix run .#fix-lockfiles

- name: Commit & push
if: steps.apply.outputs.changed == 'true'
Expand Down
84 changes: 84 additions & 0 deletions .github/workflows/nix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ on:

permissions:
contents: read
pull-requests: write

concurrency:
group: nix-${{ github.ref }}
Expand All @@ -22,12 +23,95 @@ jobs:
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: ./.github/actions/nix-setup
with:
cachix-auth-token: ${{ secrets.CACHIX_AUTH_TOKEN }}

- name: Resolve head SHA
if: github.event_name == 'pull_request'
id: sha
shell: bash
run: |
FULL="${{ github.event.pull_request.head.sha || github.sha }}"
echo "full=$FULL" >> "$GITHUB_OUTPUT"
echo "short=${FULL:0:7}" >> "$GITHUB_OUTPUT"

- name: Check flake
id: flake
if: runner.os == 'Linux'
continue-on-error: true
run: nix flake check --print-build-logs

- name: Build package
id: build
if: runner.os == 'Linux'
continue-on-error: true
run: nix build --print-build-logs

# When the real Nix build fails, run a targeted diagnostic to see if
# the failure is specifically a stale npm lockfile hash in one of the
# known npm subpackages (tui / web). This avoids surfacing a generic
# "build failed" message when the fix is a single known command.
- name: Diagnose npm lockfile hashes
id: hash_check
if: (steps.flake.outcome == 'failure' || steps.build.outcome == 'failure') && runner.os == 'Linux'
continue-on-error: true
env:
LINK_SHA: ${{ steps.sha.outputs.full }}
run: nix run .#fix-lockfiles -- --check

# If fix-lockfiles itself crashes (infrastructure blip, cache throttle,
# etc.) it won't set stale=true/false. Treat that as a distinct failure
# mode rather than silently ignoring it.
- name: Fail if hash check crashed without reporting
if: steps.hash_check.outcome == 'failure' && steps.hash_check.outputs.stale != 'true' && steps.hash_check.outputs.stale != 'false'
run: |
echo "::error::fix-lockfiles exited without reporting stale status — likely an infrastructure or script failure"
exit 1

- name: Post sticky PR comment (stale hashes)
if: steps.hash_check.outputs.stale == 'true' && github.event_name == 'pull_request'
uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1
with:
header: nix-lockfile-check
message: |
### ⚠️ npm lockfile hash out of date

Checked against commit [`${{ steps.sha.outputs.short }}`](${{ github.server_url }}/${{ github.repository }}/commit/${{ steps.sha.outputs.full }}) (PR head at check time).

The `hash = "sha256-..."` line in these nix files no longer matches the committed `package-lock.json`:

${{ steps.hash_check.outputs.report }}

#### Apply the fix

- [ ] **Apply lockfile fix** — tick to push a commit with the correct hashes to this PR branch
- Or [run the Nix Lockfile Fix workflow](${{ github.server_url }}/${{ github.repository }}/actions/workflows/nix-lockfile-fix.yml) manually (pass PR `#${{ github.event.pull_request.number }}`)
- Or locally: `nix run .#fix-lockfiles` and commit the diff

# Clear the sticky comment when either the build passed outright (no
# hash check needed) or the hash check explicitly returned stale=false
# (build failed for a non-hash reason).
- name: Clear sticky PR comment (resolved)
if: |
github.event_name == 'pull_request' &&
runner.os == 'Linux' &&
(steps.hash_check.outputs.stale == 'false' ||
(steps.flake.outcome == 'success' && steps.build.outcome == 'success'))
uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1
with:
header: nix-lockfile-check
delete: true

- name: Final fail if build or flake failed
if: steps.flake.outcome == 'failure' || steps.build.outcome == 'failure'
run: |
if [ "${{ steps.hash_check.outputs.stale }}" == "true" ]; then
echo "::error::Nix build failed due to stale npm lockfile hash. Run: nix run .#fix-lockfiles"
else
echo "::error::Nix build/flake check failed. See logs above."
fi
exit 1

- name: Evaluate flake (macOS)
if: runner.os == 'macOS'
run: nix flake show --json > /dev/null
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,4 @@ mini-swe-agent/
.nix-stamps/
result
website/static/api/skills-index.json
models-dev-upstream/
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ hermes-agent/
│ │ # homeassistant, signal, matrix, mattermost, email, sms,
│ │ # dingtalk, wecom, weixin, feishu, qqbot, bluebubbles,
│ │ # webhook, api_server, ...). See ADDING_A_PLATFORM.md.
│ └── builtin_hooks/ # Always-registered gateway hooks (boot-md, ...)
│ └── builtin_hooks/ # Extension point for always-registered gateway hooks (none shipped)
├── plugins/ # Plugin system (see "Plugins" section below)
│ ├── memory/ # Memory-provider plugins (honcho, mem0, supermemory, ...)
│ ├── context_engine/ # Context-engine plugins
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ branding:
agent_name: "My Agent"
welcome: "Welcome message"
response_label: " ⚔ Agent "
prompt_symbol: "⚔"
prompt_symbol: "⚔"

tool_prefix: "╎" # Tool output line prefix
```
Expand Down
Loading