Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
10000 commits
Select commit Hold shift + click to select a range
0fd223d
fix(desktop): stop dual main lanes for non-git project workspaces
rsk-731 Jul 20, 2026
3defb25
fix(desktop): evict stale lane entry when overlay moves session to wo…
liuhao1024 Jun 30, 2026
d40dda7
fix(desktop): preserve lane session recency order
MustafaK99 Jul 12, 2026
db1d898
fix(desktop): no-op branch switch on non-repo project lanes
Inspired-by-Atmosphere Aug 10, 2026
e89532d
fix(desktop): order async session git metadata
embwl0x Aug 2, 2026
f378a8f
fix(projects): dedup project_create by primary_path (#75820)
teknium1 Aug 15, 2026
cab6eb7
test(projects): widen lane-id derivation regression coverage
teknium1 Aug 15, 2026
e0e4d3a
chore(contributors): map salvage-branch contributor emails
teknium1 Aug 15, 2026
d16326b
test: align lost-and-found schema pins with git_metadata_generation c…
teknium1 Aug 15, 2026
f080bc3
fix(tui): steady scrollbar after transcript shrink
LeonSGP43 May 14, 2026
6b39ae4
fix(desktop): let sidebar wheel scrolling chain past the virtualized …
teknium1 Aug 15, 2026
da68ecf
design(kanban): add side-by-side dialog prototype (4 variants)
DavidMetcalfe Jun 22, 2026
7448e7a
feat(plugins): expose Dialog/ConfirmDialog/Toast/useToast/useConfirmD…
DavidMetcalfe Jun 22, 2026
08f32a6
fix(kanban): replace native browser dialogs with in-app ConfirmDialog
DavidMetcalfe Jun 22, 2026
77f35ad
fix(tui): honor destructive slash confirmation config
YuYigeng Jul 26, 2026
7d34d7d
docs(tui): clarify destructive confirm controls
YuYigeng Jul 30, 2026
8e35ff0
fix(desktop): confirm before clearing the entire Enabled Toolsets lis…
PRATHAMESH75 Jul 28, 2026
e6708af
feat(desktop): confirm before deleting a session
RichardGuan1 Aug 6, 2026
4c24629
fix(console): skip the checkpoints prune confirmation the console alr…
briandevans Aug 8, 2026
1025cb0
fix(desktop): stop deleted sessions resurrecting through racing list …
teknium1 Aug 15, 2026
eaaecbc
chore: update contributor attribution map
teknium1 Aug 15, 2026
3c2daf5
i18n(web): add kanban bulk-confirm keys to all locales (English fallb…
teknium1 Aug 15, 2026
6fb6123
test: replace any-casts with typed globalThis narrowing in plugin SDK…
teknium1 Aug 15, 2026
20beee7
fix(desktop): prevent Enter from submitting during IME composition
satotakumi Jun 2, 2026
3d51c40
fix(desktop): prevent IME submit in inline edit composer
izumi0uu Jun 6, 2026
202e5b8
fix(desktop): block Enter keyCode 229 after IME compositionend
Jun 7, 2026
39e7607
fix(desktop): recover from a stale IME composition flag that wedged t…
AIalliAI Jun 11, 2026
9f2e6d0
fix(desktop): ignore IME composition keydowns in keybind combo resolu…
baslam Aug 13, 2026
5877884
fix(desktop): extend stale-flag self-heal and keyCode 229 guard to th…
teknium1 Aug 15, 2026
aa95939
test(desktop): cover IME composition guards in keybind combo resolution
teknium1 Aug 15, 2026
27a22b8
chore: map contributor emails for IME salvage
teknium1 Aug 15, 2026
15e7c56
style: eslint --fix on salvaged IME test (curly + padding rules)
teknium1 Aug 15, 2026
084fca9
fix(tui): clear input after Korean IME submit
sweetcornna Jun 3, 2026
834a9fc
fix(tui): preserve IME text before return submit
InphinitiZ Jun 5, 2026
5dec501
fix(tui): stop Vietnamese Telex IME from dropping characters
hanhvs Jun 30, 2026
e2f7850
fix(tui): tighten IME test per teknium1 review (#55415)
hanhvs Jul 15, 2026
2af4da4
fix(dashboard): prevent React from dropping first keystroke during IM…
liuhao1024 Jun 24, 2026
278c6eb
test(dashboard): reproduce dropped dead-key composition input
dplush Aug 1, 2026
6ece2da
fix(dashboard): forward committed dead-key input to PTY
dplush Aug 1, 2026
0924e33
fix(dashboard): defer IME fallback until xterm input settles
dplush Aug 1, 2026
c066b5a
test(dashboard): cover IME fallback lifecycle
dplush Aug 1, 2026
3d9fdb2
fix(dashboard): avoid duplicate IME fallback input
dplush Aug 1, 2026
874ae74
fix(dashboard): keep mouse input out of IME fallback
dplush Aug 1, 2026
a428531
fix(dashboard): preserve consecutive IME composition input
dplush Aug 1, 2026
434f1e9
fix(dashboard): retain composition after unrelated input
dplush Aug 1, 2026
0d40955
fix(dashboard): handle chunked IME composition input
dplush Aug 8, 2026
00516e6
test(dashboard): cover delayed IME fallback after unrelated input
dplush Aug 12, 2026
daa3f66
chore: map contributor emails for IME TUI salvage
teknium1 Aug 15, 2026
29ce482
style: eslint --fix import ordering in salvaged IME tests
teknium1 Aug 15, 2026
ee9ec61
perf(state): stop selecting full message content in session search
Adolanium Aug 2, 2026
6e1bdc0
perf(session-search): adapt discovery result hydration
blunkjamie-dev Aug 9, 2026
163d7af
fix(session-search): forward detail through agent paths
blunkjamie-dev Aug 9, 2026
888807d
docs(sessions): clarify actual-message retrieval
blunkjamie-dev Aug 9, 2026
4415f91
test(session-search): lock positional parameter prefix
blunkjamie-dev Aug 9, 2026
2162d58
perf(run-agent): reuse the Anthropic request-local client instead of …
JoaoMarcos44 Aug 2, 2026
7e439db
perf: parallelize provider model-list fetches in model picker
lepetitprince716-prog Aug 6, 2026
3806f8f
fix(session-search): forward detail through the public session_search…
teknium1 Aug 15, 2026
7f84de2
chore(contributors): map lepetitprince716@gmail.com -> lepetitprince7…
teknium1 Aug 15, 2026
b587681
fix: keep historical thinking collapsed in tui
LeonSGP43 Jun 8, 2026
2b0b4a2
feat(tui): auto-collapse reasoning blocks only when the reasoning pha…
JElfferich Aug 8, 2026
10bf145
feat(desktop): collapse thinking by default
isak-ialogics Jul 22, 2026
ac0d0f8
fix(desktop): flip zone collapse chevron to action direction
chillerno1 Jul 29, 2026
c6ec8a9
test(desktop): cover docked zone chevron direction
chillerno1 Jul 30, 2026
505f289
feat(web): add collapse toggle for the chat side panel
Eros-ITA Aug 10, 2026
a33ac1e
feat(desktop): add session list density modes
DavidMetcalfe Aug 15, 2026
8ea53d7
chore: map contributor emails for salvage attribution
teknium1 Aug 15, 2026
865e4e7
fix(desktop): default session list density to compact
teknium1 Aug 15, 2026
29c2813
style(desktop): prettier/eslint pass on salvaged files
teknium1 Aug 15, 2026
ddf6456
test: stub virtualizer.measure in virtual-session-list mock (density …
teknium1 Aug 15, 2026
6da30f7
fix(tui_gateway): fall back to session id when session_key is NULL in…
jdgg777 Aug 15, 2026
a654c52
chore: map contributor email (audit_pr_attribution)
teknium1 Aug 15, 2026
1ef7a0b
fix(desktop): recover empty model catalogs
mjolley9 Aug 12, 2026
20e5d78
fix(desktop): recover failed gateway catalogs
mjolley9 Aug 12, 2026
73e9b1a
docs(desktop): align getGateway docstring with $gateway atom subscrip…
mjolley9 Aug 15, 2026
101740e
chore: map contributor email (audit_pr_attribution)
teknium1 Aug 15, 2026
b066f2b
fix(history): isolate branch transcripts from parent updates
DannyFengTianYu Aug 2, 2026
07b9090
fix(desktop): preserve complete history when branching
DannyFengTianYu Aug 2, 2026
8a22220
chore: map contributor email (audit_pr_attribution)
teknium1 Aug 15, 2026
ee1731b
perf(cli): re-export decomposed command modules lazily, ~60ms off eve…
Adolanium Jul 29, 2026
473490a
perf(cli): stop per-keystroke config re-reads in slash completers
spfcraze Aug 3, 2026
4bd746c
perf(cli): memoise default-hermes-root resolution and global auth-sto…
spfcraze Aug 3, 2026
47400fe
test: make memo pins pre-fix-safe (raising=False resets)
spfcraze Aug 3, 2026
2a5093e
docs(auth): note get_default_hermes_root in the global-store memo doc…
spfcraze Aug 3, 2026
7b45d1d
perf(toolsets): memoise resolve_toolset keyed on registry generation
spfcraze Aug 3, 2026
e25cafc
perf(agent): cache per-turn display-flag config reads
spfcraze Aug 3, 2026
b9f7525
test(agent): pin measured-work regression for display-flag config cache
spfcraze Aug 3, 2026
2f54ad4
perf(cli): skip launcher-side plugin discovery for TUI handoff
jackoconner45 Aug 7, 2026
46fe44f
test(cli): stub portable-MCP lookup in completer read test; bound res…
teknium1 Aug 15, 2026
aa27edd
chore(contributors): map jackoconner55@icloud.com
teknium1 Aug 15, 2026
3c570c6
fix(desktop): preserve copy image for large remote media
locker95 Jul 16, 2026
0bc7070
fix(desktop): gate image copy on decoded contents
locker95 Jul 16, 2026
d5a8658
fix(desktop): save remote gateway files natively
PaulBlackSwan Jul 13, 2026
27b0039
fix(desktop): stream native gateway downloads + 404 data-url fallback
PaulBlackSwan Jul 16, 2026
03c85a1
test(desktop): port gateway-file-download tests to vitest electron pr…
teknium1 Aug 15, 2026
0930133
chore: map contributor email for PaulBlackSwan
teknium1 Aug 15, 2026
af585de
fmt(js): `npm run fix` on merge (#86801)
hermes-seaeye[bot] Aug 15, 2026
f2a30fa
test: derive lost-and-found synthetic width from the live schema
teknium1 Aug 15, 2026
006a4a8
fix(desktop): restore full-width chat composer column
infinitycrew39 Jul 22, 2026
2a82c6f
style(desktop): align empty-state width with full chat column
infinitycrew39 Jul 22, 2026
354abd7
fix(desktop): keep empty composer from collapsing
deniqlab Jul 20, 2026
49fbca1
fix(desktop): prevent accidental composer popout
lesterlxt Jul 24, 2026
652ae48
fix(desktop): let the edit composer scroll long prompts
mollusk Jul 12, 2026
47970a9
fix(desktop): clear edit-composer submitting latch after 200ms cooldown
xrwang8 Jul 24, 2026
2245302
fix(desktop): let composer status titles use row width
helix4u Jun 27, 2026
0d44771
fix(desktop): keep composer stable across compression
Johnny-xuan Jul 29, 2026
24fc613
fix(desktop): downscale large images in composer preview to prevent U…
DavidMetcalfe Aug 6, 2026
485e1e8
fix(desktop): keep full-res previewUrl separate from downscaled thumb…
DavidMetcalfe Aug 6, 2026
d345f08
fix(desktop): bound multi-image thumbnail raster cost
frizikk Aug 13, 2026
5e09b40
fix(desktop): serialize composer image previews
frizikk Aug 13, 2026
6dfe63e
fix(desktop): preserve image attachment occurrence ownership
frizikk Aug 13, 2026
7d5e975
fix(desktop): preserve image preview ownership across drafts
frizikk Aug 13, 2026
193c199
fix(desktop): make image attachment updates occurrence-safe
frizikk Aug 13, 2026
462e7d8
fix(desktop): preserve tile attachment ownership
frizikk Aug 13, 2026
e2a2fba
fix(desktop): preserve in-flight attachment replacements
frizikk Aug 13, 2026
d0642e6
fix(desktop): preserve legacy attachment replacements
frizikk Aug 13, 2026
89df391
fix(desktop): keybinds skip IME composition keys; pin draft survival …
teknium1 Aug 15, 2026
32efae9
chore: map contributor emails for salvaged commits
teknium1 Aug 15, 2026
1c9de87
fix: drop duplicate composingRef declaration from rebase weave
teknium1 Aug 15, 2026
13acf77
fix(desktop): remove session.new keybind hijacking typed N keys
baslam Aug 1, 2026
101dfd7
Add PageUp and PageDown keybind support
V0v1kkkAssistant Jun 25, 2026
245efda
fix(desktop): dispose the HUD snap shortcut on native window close
pierrenode Aug 10, 2026
a590321
fix(desktop): show platform commit shortcut
KeroZelvin Aug 1, 2026
f61fb52
fix(desktop): show platform layout modifier
KeroZelvin Aug 1, 2026
34f4845
fix(desktop): show platform Kanban modifier
KeroZelvin Aug 1, 2026
89f9375
feat(desktop): archive the current session via hotkey and ⌥+⇧-click
brian717 Aug 15, 2026
d4fa3f7
feat(desktop): add option to disable F12 DevTools shortcut
Jul 25, 2026
3b5d5e4
fix: address review feedback on Disable F12 DevTools PR
kas-cor Aug 8, 2026
dacb99d
fix(desktop): keep the deliberate mod+N chord for session.new
teknium1 Aug 15, 2026
a9361cf
fix(desktop): add zh locale strings for the Disable F12 toggle
teknium1 Aug 15, 2026
100098e
chore: map salvage contributor emails for attribution audit
teknium1 Aug 15, 2026
aaaea58
test+style: align session.new binding pin with #76185 and eslint --fix
teknium1 Aug 15, 2026
ca77157
fix: create message_metadata module and update chat_completion_helpers
tuck-coe Aug 10, 2026
d615587
fix: stamp user message timestamps in turn_context
tuck-coe Aug 10, 2026
261ed6e
fix: stamp timestamps in model_metadata, turn_finalizer
tuck-coe Aug 10, 2026
79a41c1
fix: convert remaining messages.append() calls to append_message()
tuck-coe Aug 10, 2026
03636ab
test: add message_metadata unit tests
tuck-coe Aug 10, 2026
7f7aefe
fix: restore complete message timestamp coverage
coe0718 Aug 12, 2026
1db9273
fix(gateway): timestamp launchd error log lines
doncazper Jul 5, 2026
6a375a2
fix(gateway): timestamp shared stderr output
doncazper Jul 15, 2026
a896322
feat(desktop): show detailed transcript timestamps
nicochase Aug 11, 2026
5f2a15a
fix(desktop): separate system timestamp text
nicochase Aug 11, 2026
c9d0cba
fix(desktop): show exact timestamps in tooltips (#70450)
Jul 24, 2026
1dbeb47
fix(desktop): timestamp every desktop.log / RECENT LOGS line
Enough1122 Aug 12, 2026
4a663dd
fix(desktop): sort imports to satisfy perfectionist lint (#84508)
Enough1122 Aug 12, 2026
77fcc2e
feat(display): honor display.timestamps across desktop transcript and…
teknium1 Aug 15, 2026
c21dc29
chore(contributors): map salvaged author emails
teknium1 Aug 15, 2026
2108d4b
fix(dashboard): paste on Ctrl+V and word-delete on Ctrl+Backspace/Delete
null-runner Jul 12, 2026
be25039
fix(tui): restore copy and cut shortcuts
null-runner Jul 14, 2026
4e6d863
fix(dashboard): gate shortcut sends on PTY state
null-runner Jul 16, 2026
24af668
fix(tui): word-delete forward and transactional cut
null-runner Jul 20, 2026
2ae7884
fix: make CLI multiline shortcuts work by default
John-Lussier Jul 9, 2026
b3447c2
test: align submit bindings with multiline default
John-Lussier Jul 10, 2026
fef9c53
fix(cli): convert Alt key shortcuts to sequence tuple for prompt_tool…
moisesvalero Jul 29, 2026
180bd4b
chore: map salvage contributor emails for attribution audit
teknium1 Aug 15, 2026
fbe4d73
test: type the WebSocket mock to satisfy docker-build tsc strictness
teknium1 Aug 15, 2026
77be513
fmt(js): `npm run fix` on merge (#86813)
hermes-seaeye[bot] Aug 15, 2026
a5b5043
fix(desktop): key the completed-unread dot on the focused session, no…
Jefftree Jul 29, 2026
d2c2b0b
fix(desktop): persist sidebar unread dots across app restarts
Zeus-Deus Jul 29, 2026
26b4315
fix(desktop): profile-scope persisted unread and stop cold-boot stora…
Zeus-Deus Jul 31, 2026
1abedda
fix(desktop): clear unread dot on tile open + add mark-as-read actions
gitong Aug 2, 2026
71e8c35
fix(desktop): clear unread for the whole conversation family, don't r…
Aug 10, 2026
c75d835
feat(desktop): mark a session as unread/read with a persisted watermark
Nicolas-Formenton Aug 12, 2026
5cf6122
chore: map contributor email
Nicolas-Formenton Aug 13, 2026
b44b99e
fix(desktop): integrate the unread read-state layers — focused-sessio…
teknium1 Aug 15, 2026
e1dd43b
chore: map contributor emails
teknium1 Aug 15, 2026
0ceb739
style: eslint --fix on salvaged unread-dot files
teknium1 Aug 15, 2026
7f92187
test: pass onToggleUnread in wheel-overscroll VirtualSessionList fixt…
teknium1 Aug 15, 2026
eb4f72f
test: satisfy new unread props at remaining sibling fixture (session-…
teknium1 Aug 15, 2026
f0c222c
fmt(js): `npm run fix` on merge (#86820)
hermes-seaeye[bot] Aug 15, 2026
5ed4506
fix(desktop): FindBar no longer overlaps native window controls
teknium1 Aug 15, 2026
ad42ecf
fix(desktop): stream remote media without renderer credentials
0xWhiteMage Aug 10, 2026
3dc3186
fix(main): lazy-import secrets_cli to prevent cryptography._rust self…
Halldrix Aug 15, 2026
abf4dfc
fix(env_loader): defer secret_sources registry import until a source …
Halldrix Aug 15, 2026
a85a981
test(lazy-secrets): fix CI compatibility — run from repo root, avoid …
Halldrix Aug 15, 2026
5a76c8a
fix(update): lazy-import secrets backends + defer registry import — b…
Halldrix Aug 15, 2026
230e5ff
fix(main): revert secrets_cli to upstream, wrap registration in lazy …
Halldrix Aug 15, 2026
5618f5d
fix(env_loader): use 'enabled is True' (explicit) instead of name whi…
Halldrix Aug 15, 2026
3f9150e
fix(secrets_cli): defer bitwarden backend import to first attribute a…
Halldrix Aug 15, 2026
4e8e991
fix(desktop): find bar positioning, overlay guard, and keybind gate
DavidMetcalfe Jul 27, 2026
a1b24c5
fix(desktop): count the right-sidebar toggle in the titlebar tools width
DavidMetcalfe Aug 5, 2026
d0ba405
test(desktop): cover the view.findInPage overlay keybind gate
DavidMetcalfe Aug 5, 2026
16a1ad6
fix(desktop): count the right-sidebar toggle in the controller's titl…
DavidMetcalfe Aug 5, 2026
9032507
style(desktop): satisfy perfectionist import ordering in find-bar PR …
DavidMetcalfe Aug 6, 2026
001e2b0
test(desktop): add archiveSelectedSession to keybind harness deps
teknium1 Aug 15, 2026
fc8ebff
feat(mcp): unify the desktop MCP suggestion directory into the catalog
teknium1 Aug 15, 2026
d059239
fix(desktop): space out find-bar buttons and anchor below titlebar
tyfcontent Aug 13, 2026
467ec92
chore: map content@tyfpro.com -> tyfcontent for #85181 salvage
teknium1 Aug 15, 2026
883b57c
feat(desktop): route backends by (connection, profile) — registry-sco…
teknium1 Aug 15, 2026
23ad35b
feat: Add /export command for session export (Markdown/JSON) to CLI a…
ag9920 Apr 9, 2026
edf6d2a
fix(cli): coalesce None title/model in single-session HTML export
briandevans Jul 10, 2026
26aa123
feat: /save exports the current session as json, md, or html on all p…
teknium1 Aug 15, 2026
e5a2c80
fix: harden /save for test doubles, async session-store boundary, sna…
teknium1 Aug 15, 2026
ca5c048
feat: bare /save shows a usage card instead of exporting
teknium1 Aug 15, 2026
d3193da
fix(desktop): claim Ctrl/Cmd+F in main process so Pop!_OS / GNOME doe…
Enough1122 Aug 8, 2026
2d51f6d
style(desktop): use top-level BrowserWindow type import in find-in-pa…
Enough1122 Aug 8, 2026
75f0602
test(desktop): cover the real macOS Cmd+F chord in the main-process h…
Enough1122 Aug 12, 2026
f5e531d
fix(desktop): gate the Ctrl/Cmd+F main-process hook to Linux only (#8…
Enough1122 Aug 13, 2026
279ec2f
style(desktop): blank line before statement in open-find-bar release …
teknium1 Aug 15, 2026
eaef39d
fix(desktop): position find bar clear of the files pane when open
SongotenU Aug 10, 2026
d853670
fix(desktop): re-measure find-bar offset when the files pane toggles …
teknium1 Aug 15, 2026
e0c73bf
Merge pull request #86847 from NousResearch/salvage/72959-titlebar-to…
teknium1 Aug 15, 2026
174ce87
fix(state): arm the live-DB guard by process ancestry, not env alone
JoaoMarcos44 Aug 9, 2026
3f026fe
test(state): assert the live-DB guard against the real platform root
JoaoMarcos44 Aug 9, 2026
f5163bf
fix(state): import Set for the routing-cleanup annotation
JoaoMarcos44 Aug 10, 2026
c0684e4
fix(state): make the pytest-launcher match platform-independent
JoaoMarcos44 Aug 10, 2026
62d3ef6
fix(tests): subprocess-surviving isolation marker closes the #82770 f…
teknium1 Aug 15, 2026
ca8a47e
fix(desktop): keep find bar out of its results
zyz619963502zyz Jul 28, 2026
0d00ebe
fix(state): bound the state.db repair loop and stop dead-backup accum…
teknium1 Aug 15, 2026
8711f2c
fix(update): make the self-lock deferral honest — fire only when the …
teknium1 Aug 15, 2026
ab3b739
fix(desktop): scope Ctrl+F find to the current chat view (#81726)
Enough1122 Aug 8, 2026
7ebef79
fix(desktop): resume sibling traversal after a fully-consumed text no…
Enough1122 Aug 8, 2026
0ea7349
fix(desktop): case-insensitive fast-path in find-in-page stepping (#8…
Enough1122 Aug 9, 2026
4e86caa
fix(desktop): re-wrap on findNext when stale marks no longer cover al…
Enough1122 Aug 9, 2026
c856c5f
fix(desktop): keep find-in-page highlights consistent across React re…
Enough1122 Aug 12, 2026
041cbb5
style(desktop): add missing trailing newlines to find-in-page files (…
Enough1122 Aug 13, 2026
0d18282
fix(desktop): re-target find scope on a keep-alive surface flip (#81726)
Enough1122 Aug 13, 2026
5b05e51
fmt(js): `npm run fix` on merge (#86876)
hermes-seaeye[bot] Aug 15, 2026
0fc2a10
fix(cron): stop one-shot CLI `cron run` from orphaning the job; reap …
teknium1 Aug 15, 2026
ece3bc7
fix(agent): skip the automatic background review inside delegation su…
PRATHAMESH75 Aug 14, 2026
e729055
test(delegate): regression for #86632 — cron sync fallback must retur…
teknium1 Aug 15, 2026
be08335
feat(tui_gateway): INFO 'prompt accepted / turn finished' records on …
teknium1 Aug 15, 2026
8fdfe04
fix(update): probe gateway loop liveness before drain; bounded escala…
teknium1 Aug 15, 2026
7a16840
fix(compression): couple pruned-skill reload instruction to the prese…
teknium1 Aug 15, 2026
aff19d0
feat(desktop): multi-source agents end-to-end — sockets, roster, SDK,…
teknium1 Aug 15, 2026
6efab28
feat(auth): add key_cmd credential source for custom providers
LordMelkor Aug 13, 2026
4ef56ce
fix(auth): bound the no-TTL key_cmd token cache; docs for key_cmd
teknium1 Aug 15, 2026
22e638d
fix(cron): reap stale execution claims before a one-shot `hermes cron…
ygd58 Aug 15, 2026
bd3a966
fix(cron): log the pre-dispatch stale-claim reap instead of swallowin…
teknium1 Aug 15, 2026
2795b2a
fix(gateway): treat a Running HermesGateway scheduled task as a super…
hutao562 Aug 15, 2026
efdd715
fix(gateway): resolve the profile-aware scheduled-task name in the re…
teknium1 Aug 15, 2026
8f5e5e4
fix(updater): recover deferred installs on update retry
fangliquanflq Aug 15, 2026
9705170
fix(updater): keep recovered retries native-safe
fangliquanflq Aug 15, 2026
d528f4d
fix(updater): defer native parser imports after recovery
fangliquanflq Aug 15, 2026
b70bd03
fix(updater): mark PID probe POSIX-only
fangliquanflq Aug 15, 2026
3671529
feat(sdk): export route-decoupled McpTab + ToolsetConfigPanel for plu…
teknium1 Aug 15, 2026
bfd9cef
fix(worktree): deepen shallow clones so worktree cleanup can verify p…
teknium1 Aug 15, 2026
3d5f450
fmt(js): `npm run fix` on merge (#86915)
hermes-seaeye[bot] Aug 15, 2026
bb4f680
fix(browser): named browser_exec sessions compose with every backend
teknium1 Aug 15, 2026
fe63353
fix(tools-config): stop clobbering image_gen.use_gateway on Nous-mana…
teknium1 Aug 15, 2026
12859e9
docs: add Connecting Desktop to Many Hermes Instances guide
teknium1 Aug 15, 2026
56e5385
fix(desktop): stop blocking the image submit path on vision pre-analysis
teknium1 Aug 15, 2026
f70277b
fix(desktop): arm the turn progress timer at submit instead of waitin…
teknium1 Aug 15, 2026
c9a806e
fix(browser): pin named sessions to their own tab on shared browsers
teknium1 Aug 15, 2026
7fe3bf0
fix(update): self-heal stale git locks and stop false 'update availab…
RGerrish Aug 6, 2026
ed4f91c
fix(update): widen stale-lock self-heal to banner and desktop; align …
teknium1 Aug 15, 2026
07161e1
chore: map contributor email for @RGerrish
teknium1 Aug 15, 2026
bda83a4
style: satisfy desktop eslint (curly braces, import order)
teknium1 Aug 15, 2026
45af7a7
fmt(js): `npm run fix` on merge (#86935)
hermes-seaeye[bot] Aug 15, 2026
165c889
fix(cli): stop pushing Kitty keyboard protocol that breaks Ctrl+C
kshitijk4poor Aug 15, 2026
7346daf
feat(agent): adaptive model routing — content-based profile selection
TechPrototyper Aug 2, 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.
18 changes: 18 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# CodeRabbit configuration.
#
# Auto-review is DISABLED repo-wide: the app was enabled at the org level on
# 2026-08-14 and immediately began reviewing every opened PR. This repo's
# merge gate is CI ("All required checks pass") plus maintainer review —
# CodeRabbit reviews carry no merge weight (protect-main ruleset requires
# 0 approving reviews), so auto-firing on the full PR firehose adds comment
# noise without gating value.
#
# The bot stays installed and summonable on demand: comment
# `@coderabbitai review` on any PR to request a one-off review, or
# `@coderabbitai ignore` to mute it on a PR it has already joined.
#
# To re-enable auto-review, flip `enabled: true` below (or delete this file —
# the app default is on).
reviews:
auto_review:
enabled: false
89 changes: 89 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,103 @@
.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/shared is the dashboard↔desktop websocket helper and is linked from
# web/package.json as a file: workspace dep — keep it in the build context.
apps/
!apps/shared/
!apps/shared/**

# 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/

# Repo-level dotfiles that are git-only or dev-tooling config
.env.example
.envrc
.gitattributes
.hadolint.yaml
.mailmap
160 changes: 139 additions & 21 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# Hermes Agent Environment Configuration
# Copy this file to .env and fill in your API keys

# =============================================================================
# LLM PROVIDER (Fireworks AI)
# =============================================================================
# Get your key at: https://app.fireworks.ai/settings/users/api-keys
# Address models directly by catalog ID, e.g.
# accounts/fireworks/models/kimi-k2p6, accounts/fireworks/models/glm-5p2
# FIREWORKS_API_KEY=
# =============================================================================
# LLM PROVIDER (OpenRouter)
# =============================================================================
Expand All @@ -14,6 +21,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 +39,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 @@ -43,6 +67,15 @@
# KIMI_BASE_URL=https://api.kimi.com/coding/v1 # Default for sk-kimi- keys
# KIMI_BASE_URL=https://api.moonshot.ai/v1 # For legacy Moonshot keys
# 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 @@ -79,8 +112,13 @@
# Get your token at: https://huggingface.co/settings/tokens
# Required permission: "Make calls to Inference Providers"
# HF_TOKEN=
# HF_BASE_URL=https://router.huggingface.co/v1 # Override default base URL
# OPENCODE_GO_BASE_URL=https://opencode.ai/zen/go/v1 # Override default base URL

# DeepInfra — 100+ top open models, pay-per-use.
# Get your key at: https://deepinfra.com/dash/api_keys
# DEEPINFRA_API_KEY=

# =============================================================================
# LLM PROVIDER (Qwen OAuth)
# =============================================================================
Expand All @@ -98,6 +136,15 @@
# Optional base URL override:
# XIAOMI_BASE_URL=https://api.xiaomimimo.com/v1

# =============================================================================
# LLM PROVIDER (Upstage Solar)
# =============================================================================
# Upstage provides access to Upstage Solar models.
# Get your key at: https://console.upstage.ai/api-keys
# UPSTAGE_API_KEY=your_key_here
# Optional base URL override:
# UPSTAGE_BASE_URL=https://api.upstage.ai/v1

# =============================================================================
# TOOL API KEYS
# =============================================================================
Expand Down Expand Up @@ -125,6 +172,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 @@ -136,6 +195,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 @@ -222,6 +285,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 @@ -230,6 +302,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 @@ -267,6 +360,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 @@ -322,24 +416,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 @@ -356,23 +432,65 @@ IMAGE_TOOLS_DEBUG=false
# Groq API key (free tier — used for Whisper STT in voice mode)
# GROQ_API_KEY=

# ElevenLabs API key (cloud STT/TTS — Scribe transcription)
# ELEVENLABS_API_KEY=

# =============================================================================
# STT PROVIDER SELECTION
# =============================================================================
# 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 hermes
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 nix/hermes-agent.nix nix/desktop.nix

use flake
Loading
Loading