Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
7638 commits
Select commit Hold shift + click to select a range
81cdbbd
🐛 fix(cli): wrap approval preview hints
BlackishGreen33 May 2, 2026
b3f5e17
fix(tui): wrap long approval commands in the Ink overlay
teknium1 Jun 12, 2026
d810f2b
Merge pull request #44676 from NousResearch/bb/fix-schema-ref-default
OutThisLife Jun 12, 2026
87893fe
fix(memory): flatten multimodal content before provider sync
erosika Jun 11, 2026
15439be
refactor(memory): reuse _summarize_user_message_for_log instead of fo…
kshitijk4poor Jun 12, 2026
046f444
Merge pull request #44738 from kshitijk4poor/salvage/memory-sync-mult…
kshitijk4poor Jun 12, 2026
906bee9
fix(nix): natively compile and correctly stage node-pty for desktop app
ethernet8023 Jun 11, 2026
c196269
fix(credits): suppress usage gauge when top-up funds exist + add disp…
teknium1 Jun 12, 2026
0a963d8
feat(photon): add telemetry toggle via `hermes photon telemetry`
underthestars-zhy Jun 11, 2026
573c4e6
feat(photon): upgrade to spectrum-ts 3.0.0 (pinned) with markdown + r…
underthestars-zhy Jun 11, 2026
a652131
fix(photon): stop gateway restarts from orphaning the sidecar on its …
underthestars-zhy Jun 11, 2026
9bfff6e
chore(photon): bump spectrum-ts to 3.1.0
underthestars-zhy Jun 11, 2026
a23c0b3
fix(photon): use per-call httpx client in _sidecar_call
underthestars-zhy Jun 11, 2026
156f4fb
feat(photon): add agent-facing emoji reaction support
underthestars-zhy Jun 11, 2026
23305cf
fix(photon): normalize DM chat keys in last-inbound reaction tracker
underthestars-zhy Jun 11, 2026
b4e95a2
fix(photon): add clarifying comments for Windows-safe os.kill usage
underthestars-zhy Jun 11, 2026
05470aa
feat(messaging): expose action='unreact' in send_message + react disp…
teknium1 Jun 12, 2026
8207ae8
fix(gateway): add Signal message type classification for documents
kdunn926 Apr 20, 2026
ffef9da
test(gateway): verify Signal inbound PDF attachment sets MessageType.…
kdunn926 Apr 20, 2026
8e821cd
test(gateway): verify Signal inbound text attachment sets MessageType…
kdunn926 Apr 20, 2026
1e29ab3
fix(gateway): classify Signal video attachments + catch-all DOCUMENT …
teknium1 Jun 12, 2026
f03f161
fix(gateway): classify email document attachments as DOCUMENT
teknium1 Jun 12, 2026
74180eb
fix(gateway): classify SimpleX non-image/non-audio files as DOCUMENT
teknium1 Jun 12, 2026
8b2a3c9
chore: add kdunn926 to AUTHOR_MAP
teknium1 Jun 12, 2026
286ecd2
fix(agent): strip MEDIA directives from compressor summarizer input (…
Tranquil-Flow Apr 24, 2026
8e5b759
refactor(agent): hoist MEDIA-directive regex to module level
teknium1 Jun 12, 2026
4474873
feat(cli): persist resolved approval/clarify prompts in scrollback (#…
teknium1 Jun 12, 2026
7ba5df0
feat(billing): /credits command — balance + portal top-up handoff (#4…
alt-glitch Jun 12, 2026
0fd34e8
fix(teams): cache document/video/audio attachments and classify as DO…
teknium1 Jun 12, 2026
e20e0bd
feat(Yuanbao): support wechat forward msg (#43508)
loongfay Jun 12, 2026
88dbf95
fix(dashboard): profile-scope Channels endpoints and seed per-profile…
teknium1 Jun 12, 2026
9c50521
fix(desktop): complete backend PATH for Homebrew Codex
y0shua1ee Jun 12, 2026
d62979a
feat(desktop): composer status stack, live subagent windows, editable…
OutThisLife Jun 12, 2026
79c3ed3
fix(desktop): new chat honours the active profile instead of rubberba…
OutThisLife Jun 12, 2026
7d4e60e
docs(website): redirect old automation-templates URL to automation-bl…
SHL0MS Jun 12, 2026
46d758b
feat(desktop): window translucency slider in Appearance settings (#45…
OutThisLife Jun 12, 2026
2f9d187
fix(ci): remove pytest-timeout, use per-file timeout only
ethernet8023 Jun 10, 2026
c41a653
fix(tests): mock subprocess.Popen in all _handle_update_command tests
ethernet8023 Jun 12, 2026
6ff39c3
fix(tests): guard against real 'hermes update' subprocess spawns in c…
ethernet8023 Jun 12, 2026
4d68984
fix(tests): remove no-longer-needed forensics
ethernet8023 Jun 12, 2026
8044bf0
fix(ci): only save test durations when tests pass
ethernet8023 Jun 10, 2026
1e25358
refactor(desktop): use port 0 for ephemeral port discovery instead of…
ethernet8023 Jun 12, 2026
c618152
Update model correctly when updating from dashboard
IAvecilla Jun 11, 2026
8c3c08c
Update implementation to make it cleaner
IAvecilla Jun 11, 2026
bc3f4ed
Skip redundant model switch
IAvecilla Jun 12, 2026
6b40736
fix(tui): config.yaml wins over env model seed in per-turn sync
teknium1 Jun 12, 2026
05b9c84
Add Telegram Bot API 10.1 rich message support
AliZakaee Jun 12, 2026
652dd9c
fix: rich messages follow-ups — reply_parameters, send latch, opt-in …
teknium1 Jun 12, 2026
fa5e98f
fix(send): helpful error when --file gets a binary; document MEDIA: a…
teknium1 Jun 12, 2026
331cb38
fix: stop Discord typing after replies
itsflownium Jun 12, 2026
c2326bc
chore: add itsflownium to AUTHOR_MAP
teknium1 Jun 12, 2026
dc46748
test: assert typing-stop-before-callback as an invariant, not a call …
teknium1 Jun 12, 2026
2714fc8
fix(agent): re-enter retry loop on genuine Nous 429 so fallback guard…
Jun 12, 2026
fca84fe
test: regression guard for Nous 429 fallback re-entry; AUTHOR_MAP entry
teknium1 Jun 12, 2026
9b01c4d
fix(update): never spawn an interactive polkit prompt when restarting…
teknium1 Jun 12, 2026
bba9b51
fix(delegation): remove the default subagent wall-clock timeout (#45149)
teknium1 Jun 12, 2026
a118b94
fix(dashboard): skill installs from the dashboard silently auto-cance…
teknium1 Jun 12, 2026
749b721
fix(compression): always append END OF CONTEXT SUMMARY marker to stan…
Tranquil-Flow May 27, 2026
0db5cb8
refactor(agent): hoist summary end marker to _SUMMARY_END_MARKER; str…
teknium1 Jun 12, 2026
2e874ef
fix(desktop): allow dismissing settled tool rows
helix4u Jun 12, 2026
b16e22b
fix(desktop): persist tool-row dismissal across virtualization; keep …
OutThisLife Jun 12, 2026
7a318aa
fix(profiles): exclude session history, backups, and snapshots from -…
teknium1 Jun 12, 2026
691ff7c
fix(compressor): keep last visible assistant reply out of compaction …
xxxigm May 21, 2026
2fef3e2
fix(webui): split merge-into-tail compaction so reply renders as its …
xxxigm May 21, 2026
68536d4
test(compressor): regression coverage for assistant-tail anchor + com…
xxxigm May 21, 2026
135fe90
fix(profiles): backfill .env for pre-existing profiles on hermes upda…
teknium1 Jun 12, 2026
bbf020e
feat(desktop): follow streaming output at bottom + jump-to-bottom but…
OutThisLife Jun 12, 2026
e906726
feat(desktop): worktree-aware sidebar grouping + composer/sidebar UX …
OutThisLife Jun 12, 2026
0595af0
feat(desktop): move workspace/worktree drag handle into the leading icon
OutThisLife Jun 12, 2026
aec3885
fix(agent): preserve recent turns during compression
konsisumer Jun 12, 2026
5d0408d
fix(agent): clamp flush cursor after repair_message_sequence compacti…
kyssta-exe Jun 12, 2026
8905ee6
fix(agent): rewind flush cursor exactly when repair compacts before t…
teknium1 Jun 12, 2026
dd12a54
refactor(desktop): extract shared WorkspaceHeader for repo + worktree…
OutThisLife Jun 12, 2026
1899c8f
fix(skills): run youtube transcript helper through uv
helix4u Jun 12, 2026
956af7f
fix(agent): add metadata flag to context compression summary messages…
kyssta-exe Jun 12, 2026
7e46533
test: compressed-summary metadata flag set in-process, stripped on wire
teknium1 Jun 12, 2026
9688c1a
chore: add Kimi K2.7 code catalog slug (#45283)
teknium1 Jun 12, 2026
1a3cd3d
refactor(desktop): collapse sidebar drag-reorder into one generic Reo…
OutThisLife Jun 12, 2026
78ce917
fix(desktop): crisp terminal text via opaque xterm canvas
OutThisLife Jun 13, 2026
a1c6349
Merge branch 'main' of github.com:NousResearch/hermes-agent into bb/s…
OutThisLife Jun 13, 2026
d14f6c9
fix(desktop): stop streaming autoscroll bounce; move attachments belo…
OutThisLife Jun 13, 2026
a86b7b3
Merge pull request #45273 from NousResearch/bb/sidebar-workspace-dedup
OutThisLife Jun 13, 2026
7c226cc
perf(desktop): isolate streaming re-renders & cut layout thrash
OutThisLife Jun 13, 2026
edc36f3
perf(desktop): incremental markdown rendering during streams
OutThisLife Jun 13, 2026
3cf7d43
perf(desktop): faster session resume & warm AudioContext at idle
OutThisLife Jun 13, 2026
d62e9b7
build(nix): refresh npmDepsHash for the remend dependency
OutThisLife Jun 13, 2026
492c402
perf(desktop): cut GUI streaming & interaction lag (#45343)
OutThisLife Jun 13, 2026
7d183f6
fix(desktop): theme the image-gen placeholder instead of a white squa…
OutThisLife Jun 13, 2026
bf090de
fix(desktop): stop stranding queued prompts across backend bounces
OutThisLife Jun 13, 2026
f23a4b7
fix(desktop): keep queued drains quiet on transient "session busy"
OutThisLife Jun 13, 2026
1891637
fix(desktop): never surface "session busy" — retry every submit past it
OutThisLife Jun 13, 2026
7f302c9
chore: uptick
OutThisLife Jun 13, 2026
1e755ff
fix(desktop): keep recents sorted unless manually reordered (#45404)
helix4u Jun 13, 2026
a856276
Merge pull request #45414 from NousResearch/bb/fix-desktop-queue-drai…
OutThisLife Jun 13, 2026
76b9386
fix(desktop): rebuild thread autoscroll on use-stick-to-bottom
OutThisLife Jun 13, 2026
0a7a818
Merge pull request #45255 from NousResearch/bb/desktop-stuck-tool-rows
OutThisLife Jun 13, 2026
45ceee8
Merge branch 'main' of github.com:NousResearch/hermes-agent into bb/d…
OutThisLife Jun 13, 2026
7768715
fix(desktop): tighten multiline user prompt spacing
OutThisLife Jun 13, 2026
be6713c
fix(nix): refresh npm deps hash
OutThisLife Jun 13, 2026
acd4278
fix(nix): use fetchNpmDeps hash from flake check
OutThisLife Jun 13, 2026
b15dc58
fix(desktop): keep generated images in the tool slot, not inline
OutThisLife Jun 13, 2026
b82d2e5
fix(desktop): keep the diffusion placeholder circular at any aspect
OutThisLife Jun 13, 2026
9cd3d8a
Merge pull request #45466 from NousResearch/bb/fix-image-generation-p…
OutThisLife Jun 13, 2026
b2bc48c
Merge branch 'main' into bb/desktop-stick-to-bottom
OutThisLife Jun 13, 2026
b6c7ebf
fix(tui): honor provider_routing config in the desktop/TUI backend (#…
xxxigm Jun 13, 2026
bdd3868
fix(desktop): keep profile color picker open from the context menu (#…
OutThisLife Jun 13, 2026
3803e5f
fix(agent): don't treat custom:<name> pools as cross-provider mismatc…
teknium1 Jun 13, 2026
bc060c7
fix(models): remove unavailable claude-fable-5 (#45492)
teknium1 Jun 13, 2026
b62e57b
Merge pull request #45445 from NousResearch/bb/desktop-stick-to-bottom
OutThisLife Jun 13, 2026
8cf9d86
fix(desktop): keep composer usable during reconnect (#45488)
teknium1 Jun 13, 2026
197337c
fix(gateway): suppress duplicate final stream sends (#45517)
teknium1 Jun 13, 2026
2a5dc0e
fix(slack): make video attachments available to agents (#45512)
teknium1 Jun 13, 2026
2d474e3
fix(acp): preserve memory provider tools
helix4u Jun 12, 2026
202e318
fix(gateway): sync compression session splits before failures
justinbao19 Jun 13, 2026
266b5a1
feat(desktop): expand the full command inline from the approval bar
xxxigm Jun 12, 2026
5d6c16e
test(desktop): cover the inline command expander on the approval bar
xxxigm Jun 12, 2026
a5e9b17
fix(doctor): stop recommending the npm-crashing audit fix, explain bu…
xxxigm Jun 13, 2026
bea6c1c
test(doctor): assert audit-fix hint avoids crashing form and explains…
xxxigm Jun 13, 2026
905ed41
fix(doctor): avoid unsafe npm audit fallback
teknium1 Jun 13, 2026
5b85720
fix(profiles): correct misleading per-profile gateway port docstrings
xxxigm Jun 13, 2026
fa2aba9
docs(docker): explain per-profile gateway ports for multi-profile setups
xxxigm Jun 13, 2026
2681c5a
fix(photon): correct gateway start command (#45566)
teknium1 Jun 13, 2026
bd66e7e
fix(auth): self-heal Codex refresh_token rotation by reimporting from…
Jun 12, 2026
311ff96
review: validate refresh_token, path-agnostic recovery log, map autho…
Jun 12, 2026
aa07983
fix(auth): self-heal missing Codex access tokens
teknium1 Jun 13, 2026
573b964
fix(installer): clear an unmerged git index before stashing on update
xxxigm Jun 13, 2026
c814d3d
test(installer): regression for unmerged-index update failure
xxxigm Jun 13, 2026
2abcae9
fix(cli): preserve renderer state on resize
H-Ali13381 Jun 1, 2026
62b4618
fix(dashboard): scope sessions and analytics to selected profile (#45…
teknium1 Jun 13, 2026
4b646bc
fix(auxiliary): preserve main provider base url (#45587)
teknium1 Jun 13, 2026
a59d5e3
feat(telegram): make rich messages always on (#45584)
teknium1 Jun 13, 2026
cb125c2
fix(kanban): pin assigned profile toolsets for workers (#45590)
teknium1 Jun 13, 2026
e256f4a
fix(gateway): don't restore a bare billing provider as the resumed se…
HaozheZhang6 Jun 11, 2026
643dc82
Fix custom provider identity loss in session persistence
Jun 11, 2026
2667601
fix(tui): keep reasoning-only assistant turns visible on session resume
Jun 11, 2026
39a35b7
chore(release): map custom provider resume contributors
teknium1 Jun 13, 2026
5acd185
fix(moonshot): handle union type arrays in tool schemas
Tranquil-Flow Jun 13, 2026
0333a99
fix: merge session-only model analytics rows (#45582)
teknium1 Jun 13, 2026
aa53a78
fix(desktop): hand off Windows bootstrap recovery (#45594)
teknium1 Jun 13, 2026
6724daa
fix: keep CLI idle timer ticking (#45592)
teknium1 Jun 13, 2026
74c5158
fix(model): show bare custom endpoints in gateway picker (#45597)
teknium1 Jun 13, 2026
eed61a1
fix(gemini): add role field to systemInstruction
hbentel Jun 13, 2026
6f43ff5
chore(release): map Gemini schema contributor
teknium1 Jun 13, 2026
16fb573
fix(gateway): clear bloated compression binding on compression-exhaus…
konsisumer May 31, 2026
d206e1f
fix(dashboard): keep local file browser on home
teknium1 Jun 13, 2026
4373e80
fix(docs): reuse healthy skills index during Pages deploys (#45616)
teknium1 Jun 13, 2026
45f9099
fix(matrix): preserve markdown table structure
sarvesh1327 Jun 13, 2026
4fd9397
fix(codex): drop extra_headers for chatgpt.com backend
Tranquil-Flow Jun 13, 2026
f82cb48
fix(platform): add .xls, .doc, .ppt to SUPPORTED_DOCUMENT_TYPES
Jun 13, 2026
1185dfd
test: cover legacy Office document extensions
teknium1 Jun 13, 2026
fc46354
fix(security): fail closed when an own-policy gateway adapter has no …
Que0x Jun 13, 2026
ad7436a
fix(gateway): preserve WeCom per-group sender allowlists
teknium1 Jun 13, 2026
3380563
fix(security): stop /api/status leaking host paths and PID on gated b…
Que0x Jun 13, 2026
28bf8fb
feat(dashboard): clone profiles from any source
WompaJango Jun 13, 2026
d146b85
chore(release): map WompaJango author
teknium1 Jun 13, 2026
9b5f7b6
fix(profile): make clone-from a full source selector
teknium1 Jun 13, 2026
cc14b74
docs(profile): update clone-from references
teknium1 Jun 13, 2026
957a8ff
fix(bedrock): omit sampling params for restricted Claude models
ashishpatel26 Jun 13, 2026
78c11d9
fix(update): stop Windows gateways before mutating install
helix4u Jun 13, 2026
6e2fd95
fix(gateway): claim session slot before auto-resume task to prevent d…
liuhao1024 Jun 13, 2026
63097ee
test(gateway): cover auto-resume full-path no-regression; clarify gua…
kshitijk4poor Jun 13, 2026
28902dc
chore: map liuhao1024 contributor email for attribution
kshitijk4poor Jun 13, 2026
7be22e3
Merge pull request #45753 from kshitijk4poor/salvage/gateway-auto-res…
kshitijk4poor Jun 13, 2026
425e777
fix(desktop): polish slash command completion (space/tab/click + type…
OutThisLife Jun 13, 2026
08890d7
fix(plugins): normalize browser-pasted GitHub repo URLs (#33539)
teknium1 Jun 13, 2026
819def4
fix(agent): scope Nous tags to Nous auxiliary calls
achaljhawar Jun 13, 2026
7c0605b
fix(telegram): preserve rich formatting on stream final
AliZakaee Jun 13, 2026
7d11fa4
fix(codex-responses): let final_answer complete top-level incomplete …
briandevans Jun 13, 2026
c8e5f34
fix(gemini): strip native self prefixes before generateContent (#36141)
teknium1 Jun 13, 2026
0a865e5
fix(desktop): bypass Chromium editing pipeline for large paste & sele…
OutThisLife Jun 13, 2026
57c2a55
fix(telegram): harden rich message fallback handling
AliZakaee Jun 13, 2026
1d584a3
fix(agent): treat Codex reasoning items as thinking-only
briandevans Jun 13, 2026
069bfd6
fix(agent): keep Codex reasoning replay on Codex path
teknium1 Jun 13, 2026
1fa761f
fix(search): keep partial results on search timeout (#36142)
teknium1 Jun 13, 2026
da28d5d
fix(security): gate cp/mv/install into ~/.ssh, credential, and shell-…
briandevans Jun 3, 2026
abd69b8
fix(approval): detect absolute home shell rc writes
helix4u Jun 13, 2026
2b67e96
fix(approval): gate in-place edits to sensitive user files
teknium1 Jun 13, 2026
817f392
feat(read): extract notebook and office documents (#37082)
teknium1 Jun 13, 2026
bf8effa
fix(utils): copy fallback for atomic replace across devices (#43852)
teknium1 Jun 13, 2026
3581131
fix(skills): make bundled-update backup handling crash-safe and idemp…
MaxFreedomPollard Jun 12, 2026
9a2b976
test(skills): add regression tests for bundled-update backup recovery
MaxFreedomPollard Jun 12, 2026
4026f52
chore(release): map MaxFreedomPollard author email
teknium1 Jun 13, 2026
6b76284
fix(desktop): surface off-screen approvals via the jump-to-bottom con…
OutThisLife Jun 13, 2026
1106879
perf(process): wake waiters on background completion (#45831)
teknium1 Jun 14, 2026
a218a0f
fix(agent,gateway,doctor): add SSL CA cert bundle fail-fast guard
chromalinx Jun 1, 2026
b42c5bf
test(ssl_guard): fix macOS fallback test that passed for the wrong re…
chromalinx Jun 2, 2026
af5b526
fix(ssl): validate CA bundle paths before provider calls
teknium1 Jun 13, 2026
dc90ca4
fix(ssl): run CA guard during agent initialization
teknium1 Jun 13, 2026
af1995a
chore(release): map chromalinx noreply author
teknium1 Jun 13, 2026
73d1357
style(agent): keep run_agent import order stable
teknium1 Jun 13, 2026
7aaae7a
fix(ssl): align guard docs and escape hatch
teknium1 Jun 13, 2026
8d5d36d
fix(dispatch): forward session_id into registry.dispatch (#28479)
aimable100 Jun 14, 2026
12682d9
feat(telegram): restore rich messages opt-out
jmsunseri Jun 14, 2026
e986e3f
fix: add provider account removal
itsflownium Jun 14, 2026
1b16c48
fix: guard OAuth account removal
teknium1 Jun 14, 2026
8f27840
perf(execute-code): stop waiting on idle RPC accept (#45948)
teknium1 Jun 14, 2026
b4ba3f5
feat(desktop): add curated completion cue for agent turn completion (…
OutThisLife Jun 14, 2026
630a4ef
feat(desktop): native OS notifications with per-type toggles
OutThisLife Jun 14, 2026
b0288ae
feat(desktop): move completion-sound picker into Notifications settings
OutThisLife Jun 14, 2026
cdf30a7
Merge pull request #45866 from NousResearch/bb/desktop-notifications
OutThisLife Jun 14, 2026
4b5ba11
fix: shrink images to reported provider dimension limit (#45979)
OutThisLife Jun 14, 2026
bb46bf8
fix(agent): surface model refusals instead of retrying them as errors
SHL0MS Jun 9, 2026
ab26541
test(transports): lock in content_filter passthrough for OpenRouter
SHL0MS Jun 9, 2026
12c84d6
fix(transports): only treat a refusal as terminal when it is the sole…
kshitijk4poor Jun 14, 2026
10bd019
refactor(agent): share the content_policy_blocked result builder + re…
kshitijk4poor Jun 14, 2026
c8ad2ca
Merge pull request #46013 from kshitijk4poor/salvage/refusal-content-…
kshitijk4poor Jun 14, 2026
9cbb91a
fix(desktop): clarify UX — loading, enter-to-send, radio align (#46014)
OutThisLife Jun 14, 2026
715b691
fix(desktop): show summarizing indicator during auto-compaction
OutThisLife Jun 14, 2026
49dd91d
fix(desktop): show copied checkmark on session Copy ID (#46030)
OutThisLife Jun 14, 2026
1eb1374
fix(desktop): polish compaction indicator and preserve scrollback
OutThisLife Jun 14, 2026
526a1e2
Merge pull request #46029 from NousResearch/bb/summarize-gui
OutThisLife Jun 14, 2026
81e4233
fix(file-safety): relax user-write deny policy (#45947)
teknium1 Jun 14, 2026
85e6232
fix(providers): support anthropic proxy v1 endpoints
helix4u Jun 13, 2026
4936a49
fix(mcp): preserve loop during probes
helix4u Jun 13, 2026
d842155
Keep resumed profile cwd scoped to profile DB
necoweb3 Jun 13, 2026
9f33d67
fix(tui): persist resumed profile cwd updates to profile db
teknium1 Jun 14, 2026
1f5eef8
test(tui): tolerate resume init kwargs in protocol tests
teknium1 Jun 14, 2026
d76a58b
fix(gateway): resolve sudo profile system installs
helix4u Jun 13, 2026
7b9dc7c
test(gateway): align web profile wrapper expectation
teknium1 Jun 14, 2026
89bdb1e
fix: read dashboard spa assets as utf-8
LeonSGP43 Jun 14, 2026
afc8615
perf(webhook): prune request caches incrementally (#46065)
teknium1 Jun 14, 2026
0428945
fix(desktop): keep profile homes out of bootstrap (#46073)
teknium1 Jun 14, 2026
b00060c
fix(agent): expose HERMES_REAL_HOME in subprocess envs for profile is…
zccyman May 13, 2026
723c233
fix: make profile subprocess HOME policy explicit
teknium1 Jun 14, 2026
2b4873f
fix(agent): persist repaired-turn responses (#46071)
teknium1 Jun 14, 2026
10bad2f
fix(gateway): serialize startup auto-resume before inbound (#46074)
teknium1 Jun 14, 2026
293c04f
fix(gateway): suppress exact silence tokens without mutating history
aldoeliacim Jun 14, 2026
5105c36
perf(api-server): normalize chat content linearly (#46079)
teknium1 Jun 14, 2026
04d4471
fix(email): use SMTP_SSL for port 465 and fall back to IPv4 on timeout
liuhao1024 Jun 14, 2026
cf7d593
fix(email): make IPv4 SMTP fallback use supported sockets
teknium1 Jun 14, 2026
9459057
fix(telegram): guard rich details math crash (#46102)
teknium1 Jun 14, 2026
972a988
fix(mcp): block exfil-shaped stdio server configs (#46083)
teknium1 Jun 14, 2026
0e22bf6
docs(gateway): document exact silence tokens (#46105)
teknium1 Jun 14, 2026
13a1bd0
perf(model-metadata): persist OpenRouter metadata cache (#46114)
teknium1 Jun 14, 2026
a27d7e6
fix(mcp): block suspicious stdio configs before probe (#46112)
teknium1 Jun 14, 2026
efbe163
fix(gateway): include replied-to media attachments (#46107)
teknium1 Jun 14, 2026
288f702
fix(messaging): correct Weixin personal account labeling
Diyoncrz18 Jun 14, 2026
0f3670b
chore(release): map Diyoncrz18 author email
teknium1 Jun 14, 2026
5191c1c
fix(gateway): stop replaying interrupted tool-call tails and auto-con…
ali-nld Jun 12, 2026
2c174bc
fix(gateway): preserve new input on interrupted replay cleanup
teknium1 Jun 14, 2026
08d89e7
fix(desktop): limit thinking shimmer to the disclosure label (#46197)
OutThisLife Jun 14, 2026
1436793
fix(gateway): block shell gateway run when a service supervises the p…
konsisumer Jun 8, 2026
7433d5f
fix(gateway): scope early duplicate guard to pid file
teknium1 Jun 14, 2026
7bbe702
fix: filter platform-disabled skills from <available_skills> prompt (…
iborazzi Jun 14, 2026
7f245b0
fix(gateway): invalidate agent cache on cross-process session writes …
kyssta-exe Jun 14, 2026
ce19fdb
fix(skills): apply global|platform disabled union to all resolution s…
kshitijk4poor Jun 14, 2026
3bc4a2f
fix(gateway): re-baseline agent-cache message_count after each turn
kshitijk4poor Jun 14, 2026
fc2b8b3
Merge pull request #46236 from kshitijk4poor/salvage/disabled-skills-…
kshitijk4poor Jun 14, 2026
6c34088
Merge pull request #46237 from kshitijk4poor/salvage/46095-cross-proc…
kshitijk4poor Jun 14, 2026
e23a176
feat(tool_progress): add 'full' mode — unlimited tool args in gateway…
AmyRavenwolf Mar 31, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
91 changes: 91 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,105 @@
.gitignore
.gitmodules

# Python
__pycache__
*.py[cod]
*$py.class
*.so
.Python
*.egg-info/
dist/
build/

# Virtual environments
venv/
env/
ENV/

# Dependencies
node_modules
**/node_modules
.venv
**/.venv
.notebooklm-cli-venv/
.notebooklm-playwright/
.pip-cache/
.uv-cache/

# Built artifacts that are regenerated inside the image. Excluded so local
# rebuilds on the developer's machine don't invalidate the npm-install layer
# that now depends on the full ui-tui/packages/hermes-ink/ tree being present.
ui-tui/dist/
ui-tui/packages/hermes-ink/dist/

# CI/CD
.github

# Environment files
.env
.env.*

# IDE
.vscode/
.idea/
*.swp
*.swo

# Testing
.pytest_cache/
.coverage
htmlcov/

# Documentation
*.md

# Runtime data (bind-mounted at /opt/data; must not leak into build context)
data/
.hermes-docker/
.notebooklm-home/

# Compose/profile runtime state (bind-mounted; avoid ownership/secret issues)
hermes-config/
runtime/

# ---------- Not needed inside the Docker image ----------

# Desktop app source (Tauri/Electron); never installed in the container
apps/

# Test suite — not shipped in production images
tests/

# Documentation site (Docusaurus) and supplementary docs
website/
docs/

# Assets only used by the GitHub README
assets/
infographic/

# Plugin-level docs (hermes-achievements ships docs/ but the runtime doesn't read them)
plugins/hermes-achievements/docs/

# Nix / Homebrew / AUR packaging metadata — irrelevant to Docker
nix/
flake.nix
flake.lock
packaging/

# Design and planning documents
plans/
.plans/

# ACP registry manifest (icon + agent.json) — not consumed at runtime
acp_registry/

# Repo-level dotfiles that are git-only or dev-tooling config
.env.example
.envrc
.gitattributes
.hadolint.yaml
.mailmap

# Top-level LICENSE (not matched by *.md); not needed inside the container
LICENSE
135 changes: 114 additions & 21 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,14 @@
# LLM_MODEL is no longer read from .env — this line is kept for reference only.
# LLM_MODEL=anthropic/claude-opus-4.6

# =============================================================================
# LLM PROVIDER (NovitaAI)
# =============================================================================
# NovitaAI — 90+ models, pay-per-use
# Get your key at: https://novita.ai/settings/key-management
# NOVITA_API_KEY=
# NOVITA_BASE_URL=https://api.novita.ai/openai/v1 # Override default base URL

# =============================================================================
# LLM PROVIDER (Google AI Studio / Gemini)
# =============================================================================
Expand All @@ -24,6 +32,15 @@
# Optional base URL override (default: Google's OpenAI-compatible endpoint)
# GEMINI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai

# =============================================================================
# LLM PROVIDER (Ollama Cloud)
# =============================================================================
# Cloud-hosted open models via Ollama's OpenAI-compatible endpoint.
# Get your key at: https://ollama.com/settings
# OLLAMA_API_KEY=your_ollama_key_here
# Optional base URL override (default: https://ollama.com/v1)
# OLLAMA_BASE_URL=https://ollama.com/v1

# =============================================================================
# LLM PROVIDER (z.ai / GLM)
# =============================================================================
Expand All @@ -45,6 +62,14 @@
# KIMI_BASE_URL=https://api.moonshot.cn/v1 # For Moonshot China keys
# KIMI_CN_API_KEY= # Dedicated Moonshot China key

# =============================================================================
# LLM PROVIDER (Arcee AI)
# =============================================================================
# Arcee AI provides access to Trinity models (trinity-mini, trinity-large-*)
# Get an Arcee key at: https://chat.arcee.ai/
# ARCEEAI_API_KEY=
# ARCEE_BASE_URL= # Override default base URL

# =============================================================================
# LLM PROVIDER (MiniMax)
# =============================================================================
Expand Down Expand Up @@ -126,6 +151,18 @@
# Also requires ~/.honcho/config.json with enabled=true (see README).
# HONCHO_API_KEY=

# =============================================================================
# HYPERLIQUID OPTIONAL SKILL
# =============================================================================
# Optional defaults for the Hyperliquid skill in optional-skills/blockchain/hyperliquid
#
# Hyperliquid API base URL override
# Default: https://api.hyperliquid.xyz
# HYPERLIQUID_API_URL=https://api.hyperliquid-testnet.xyz
#
# Default address for account-level commands like state, fills, orders, and review
# HYPERLIQUID_USER_ADDRESS=0x0000000000000000000000000000000000000000

# =============================================================================
# TERMINAL TOOL CONFIGURATION
# =============================================================================
Expand All @@ -137,6 +174,10 @@
# Only override here if you need to force a backend without touching config.yaml:
# TERMINAL_ENV=local

# Override the container runtime binary (e.g. to use Podman instead of Docker).
# Useful on systems where Docker's storage driver is broken or unavailable.
# HERMES_DOCKER_BINARY=/usr/local/bin/podman

# Container images (for singularity/docker/modal backends)
# TERMINAL_DOCKER_IMAGE=nikolaik/python-nodejs:python3.11-nodejs20
# TERMINAL_SINGULARITY_IMAGE=docker://nikolaik/python-nodejs:python3.11-nodejs20
Expand Down Expand Up @@ -223,6 +264,15 @@ BROWSERBASE_PROXIES=true
# Uses custom Chromium build to avoid bot detection altogether
BROWSERBASE_ADVANCED_STEALTH=false

# Browser engine for local mode (default: auto = Chrome)
# "auto" — use Chrome (don't pass --engine flag)
# "lightpanda" — use Lightpanda (1.3-5.8x faster navigation, no screenshots)
# "chrome" — explicitly request Chrome
# Requires agent-browser v0.25.3+. Lightpanda commands that fail or return
# empty results are automatically retried with Chrome.
# Also configurable via browser.engine in config.yaml.
# AGENT_BROWSER_ENGINE=auto

# Browser session timeout in seconds (default: 300)
# Sessions are cleaned up after this duration of inactivity
BROWSER_SESSION_TIMEOUT=300
Expand All @@ -231,6 +281,27 @@ BROWSER_SESSION_TIMEOUT=300
# Browser sessions are automatically closed after this period of no activity
BROWSER_INACTIVITY_TIMEOUT=120

# Extra Chromium launch flags passed to agent-browser, comma- or newline-separated.
# Hermes auto-injects "--no-sandbox,--disable-dev-shm-usage" when it detects root
# or AppArmor-restricted unprivileged user namespaces (Ubuntu 23.10+, DGX Spark,
# many container images), so leave this unset unless you need extra flags.
# Setting this disables the auto-injection.
# AGENT_BROWSER_ARGS=--no-sandbox

# Camofox local anti-detection browser (Camoufox-based Firefox).
# Set CAMOFOX_URL to route the browser tools through a local Camofox server
# instead of agent-browser/Browserbase. See docs/user-guide/features/browser.md.
# CAMOFOX_URL=http://localhost:9377

# Externally managed Camofox sessions — when another app owns the visible
# Camofox browser, set these so Hermes shares the same userId/profile instead
# of creating its own isolated session.
# CAMOFOX_USER_ID=
# CAMOFOX_SESSION_KEY=
# Set to true to reuse an already-open Camofox tab for this identity before
# creating a new one (useful for gateway restarts).
# CAMOFOX_ADOPT_EXISTING_TAB=false

# =============================================================================
# SESSION LOGGING
# =============================================================================
Expand Down Expand Up @@ -268,6 +339,7 @@ BROWSER_INACTIVITY_TIMEOUT=120
# TELEGRAM_ALLOWED_USERS= # Comma-separated user IDs
# TELEGRAM_HOME_CHANNEL= # Default chat for cron delivery
# TELEGRAM_HOME_CHANNEL_NAME= # Display name for home channel
# TELEGRAM_CRON_THREAD_ID= # Forum topic ID for cron deliveries; overrides TELEGRAM_HOME_CHANNEL_THREAD_ID for cron so replies work in topic mode

# Webhook mode (optional — for cloud deployments like Fly.io/Railway)
# Default is long polling. Setting TELEGRAM_WEBHOOK_URL switches to webhook mode.
Expand Down Expand Up @@ -323,24 +395,6 @@ IMAGE_TOOLS_DEBUG=false
# CONTEXT_COMPRESSION_THRESHOLD=0.85 # Compress at 85% of context limit
# Model is set via compression.summary_model in config.yaml (default: google/gemini-3-flash-preview)

# =============================================================================
# RL TRAINING (Tinker + Atropos)
# =============================================================================
# Run reinforcement learning training on language models using the Tinker API.
# Requires the rl-server to be running (from tinker-atropos package).

# Tinker API Key - RL training service
# Get at: https://tinker-console.thinkingmachines.ai/keys
# TINKER_API_KEY=

# Weights & Biases API Key - Experiment tracking and metrics
# Get at: https://wandb.ai/authorize
# WANDB_API_KEY=

# RL API Server URL (default: http://localhost:8080)
# Change if running the rl-server on a different host/port
# RL_API_URL=http://localhost:8080

# =============================================================================
# SKILLS HUB (GitHub integration for skill search/install/publish)
# =============================================================================
Expand All @@ -363,17 +417,56 @@ IMAGE_TOOLS_DEBUG=false
# Default STT provider is "local" (faster-whisper) — runs on your machine, no API key needed.
# Install with: pip install faster-whisper
# Model downloads automatically on first use (~150 MB for "base").
# To use cloud providers instead, set GROQ_API_KEY or VOICE_TOOLS_OPENAI_KEY above.
# Provider priority: local > groq > openai
# Configure in config.yaml: stt.provider: local | groq | openai
# To use cloud providers instead, set GROQ_API_KEY, VOICE_TOOLS_OPENAI_KEY, or ELEVENLABS_API_KEY above.
# Provider priority: local > groq > openai > mistral > xai > elevenlabs
# Configure in config.yaml: stt.provider: local | groq | openai | mistral | xai | elevenlabs

# =============================================================================
# STT ADVANCED OVERRIDES (optional)
# =============================================================================
# Override default STT models per provider (normally set via stt.model in config.yaml)
# STT_GROQ_MODEL=whisper-large-v3-turbo
# STT_OPENAI_MODEL=whisper-1
# STT_ELEVENLABS_MODEL=scribe_v2

# 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
# ELEVENLABS_STT_BASE_URL=https://api.elevenlabs.io/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)

# =============================================================================
# GOOGLE CHAT INTEGRATION
# =============================================================================
# Connects via Cloud Pub/Sub pull subscription (no public URL required).
# Setup walkthrough: website/docs/user-guide/messaging/google_chat.md.
# 1. Create a GCP project, enable the Google Chat API and Cloud Pub/Sub.
# 2. Create a Service Account with roles/pubsub.subscriber on the
# subscription (NOT project-wide); download the JSON key.
# 3. Configure your Chat app at console.cloud.google.com/apis/credentials
# → Google Chat API → Configuration → Cloud Pub/Sub topic.
# 4. (Optional, for native attachment delivery) Each user runs
# `/setup-files` once in their own DM after Pub/Sub is wired up.
#
# GOOGLE_CHAT_PROJECT_ID= # GCP project hosting the topic (or set GOOGLE_CLOUD_PROJECT)
# GOOGLE_CHAT_SUBSCRIPTION_NAME= # Full path: projects/<id>/subscriptions/<name>
# GOOGLE_CHAT_SERVICE_ACCOUNT_JSON= # Path to SA JSON (or set GOOGLE_APPLICATION_CREDENTIALS)
# GOOGLE_CHAT_ALLOWED_USERS= # Comma-separated emails allowed to talk to the bot
# GOOGLE_CHAT_ALLOW_ALL_USERS=false # Set true to skip the allowlist
# GOOGLE_CHAT_HOME_CHANNEL= # Default space (spaces/XXXX) for cron delivery
# GOOGLE_CHAT_HOME_CHANNEL_NAME= # Display name for the home channel
4 changes: 4 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
watch_file pyproject.toml uv.lock
watch_file package-lock.json package.json web/package.json ui-tui/package.json website/package.json apps/shared/package.json apps/desktop/package.json ui-tui/packages/hermes-ink/package.json
watch_file flake.nix flake.lock nix/devShell.nix nix/tui.nix nix/package.nix nix/python.nix

use flake
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,10 @@
# Auto-generated files — collapse diffs and exclude from language stats
web/package-lock.json linguist-generated=true

# Enforce LF for scripts that run inside Linux containers.
# Without this, Windows checkout converts to CRLF and breaks `exec` in the
# container entrypoint with "no such file or directory".
*.sh text eol=lf
Dockerfile text eol=lf
*.dockerfile text eol=lf
docker/entrypoint.sh text eol=lf
30 changes: 24 additions & 6 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ body:
**Before submitting**, please:
- [ ] Search [existing issues](https://github.com/NousResearch/hermes-agent/issues) to avoid duplicates
- [ ] Update to the latest version (`hermes update`) and confirm the bug still exists
- [ ] Run `hermes debug share` and paste the links below (see Debug Report section)

- type: textarea
id: description
Expand Down Expand Up @@ -82,6 +83,25 @@ body:
- Slack
- WhatsApp

- type: textarea
id: debug-report
attributes:
label: Debug Report
description: |
Run `hermes debug share` from your terminal and paste the links it prints here.
This uploads your system info, config, and recent logs to a paste service automatically.

If you're in an interactive chat session, you can also use the `/debug` slash command — it does the same thing.

If the upload fails, run `hermes debug share --local` and paste the output directly.
placeholder: |
Report https://paste.rs/abc123
agent.log https://paste.rs/def456
gateway.log https://paste.rs/ghi789
render: shell
validations:
required: true

- type: input
id: os
attributes:
Expand All @@ -97,23 +117,21 @@ body:
label: Python Version
description: Output of `python --version`
placeholder: "3.11.9"
validations:
required: true

- type: input
id: hermes-version
attributes:
label: Hermes Version
description: Output of `hermes version`
placeholder: "2.1.0"
validations:
required: true

- type: textarea
id: logs
attributes:
label: Relevant Logs / Traceback
description: Paste any error output, traceback, or log messages. This will be auto-formatted as code.
label: Additional Logs / Traceback (optional)
description: |
The debug report above covers most logs. Use this field for any extra error output,
tracebacks, or screenshots not captured by `hermes debug share`.
render: shell

- type: textarea
Expand Down
Loading
Loading