Skip to content
Merged
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
e1e472d
fix(kanban): host-level cap accounting, daemon cap resolution, review…
shannonsands Aug 17, 2026
6cca9f3
fix(desktop): validate SSH host input and redact credentials in ssh t…
teknium1 Aug 17, 2026
23a8659
fix(mcp): read the elicitation schema under the SDK's real field name
Aug 2, 2026
ced80b2
fix(tools): preserve user PYTHONPATH entries (#74817 follow-up)
Starfie1d1272 Aug 9, 2026
850686a
fix(tools): sanitize inherited PYTHONHOME (#75018)
Starfie1d1272 Aug 9, 2026
73b49f4
fix(tools): tighten Hermes PYTHONPATH ownership semantics
Starfie1d1272 Aug 9, 2026
6e9eeb5
fix(tools): harden subprocess Python runtime ownership
Starfie1d1272 Aug 9, 2026
ba85da4
test(tools): cover execute_code PYTHONPATH composition with contamina…
Starfie1d1272 Aug 13, 2026
deb4953
test(tools): make subprocess env regressions Windows-portable
Starfie1d1272 Aug 13, 2026
57d94dd
fix(tools): keep junction lexical root across profile re-home
Starfie1d1272 Aug 13, 2026
6456318
test(profiles): cover resolve_profile_env configured-spelling invariants
Starfie1d1272 Aug 13, 2026
d67cd58
fix(tools): recover repo-level junction lexical root via exact identity
Starfie1d1272 Aug 13, 2026
98389e7
refactor(tools): simplify subprocess env isolation coverage
Starfie1d1272 Aug 13, 2026
bbc894b
docs(tools): tighten subprocess env isolation docstrings
Starfie1d1272 Aug 13, 2026
780ede4
chore: map contributor email for PYTHONHOME/junction salvage (Starfie…
teknium1 Aug 17, 2026
19c68e8
fix(desktop): work profile deletion silently reverted after app restart
adurham Jul 26, 2026
70598f5
fix(desktop): tighten shebang-exec script-name match to known console…
adurham Jul 26, 2026
f1dd8d3
test(desktop): extract ProfileRail focus/visibilitychange wiring into…
adurham Jul 31, 2026
e9e3291
ci: touch ci.yml to force workflow re-parse
teknium1 Aug 17, 2026
1ed94d2
Revert "ci: touch ci.yml to force workflow re-parse"
teknium1 Aug 17, 2026
17fa4e2
fix(cron): direct drift remediation to user-owned pins
konsisumer Aug 16, 2026
a9c4e41
fix(test): make lazy-secrets update-check E2E tests network-independent
teknium1 Aug 17, 2026
077a7d5
ci: cache-bust workflow re-parse
teknium1 Aug 17, 2026
7e77d9b
Revert "ci: cache-bust workflow re-parse"
teknium1 Aug 17, 2026
fe8c9f1
fix(matrix): blank bare media filenames from m.audio/m.file/m.video body
AiwendilInTheWoods Aug 17, 2026
26d8bf5
feat: add CommandCode provider plugin
Llovos May 27, 2026
8800ec6
feat(providers): wire CommandCode into doctor/dump/setup surfaces + docs
teknium1 Aug 17, 2026
9adc607
fix(providers): give each CommandCode profile its own base-URL var fo…
teknium1 Aug 17, 2026
382060f
feat(mcp): speak the 2026-07-28 stateless protocol
teknium1 Aug 17, 2026
25c051d
fix(cli): self-heal git health around worktree creation
teknium1 Aug 17, 2026
31fe024
test: make pack fixture deterministic via git pack-objects
teknium1 Aug 17, 2026
5975aff
test: assert sprawl as a behavior contract, not a pack-count snapshot
teknium1 Aug 17, 2026
2c0035d
fix(desktop): bound the pre-start settle hold so a restore/edit arm c…
teknium1 Aug 17, 2026
046a868
fmt(js): `npm run fix` on merge (#88321)
hermes-seaeye[bot] Aug 17, 2026
458f3bf
chore: add kstawiski to AUTHOR_MAP
kshitijk4poor Aug 17, 2026
0b8fd04
fix(agent): keep tool results when a server reuses one tool_call_id
flaviovargasbrandao Jul 24, 2026
df68cc1
test: adapt stale dedup test to outstanding-call semantics, add cross…
teknium1 Aug 17, 2026
bd55656
fix(telegram): try IPv4 API IPs before the dual-stack hostname
kshitijk4poor Aug 17, 2026
b52b725
refactor(telegram): collapse sticky state onto one sentinel
kshitijk4poor Aug 17, 2026
122bfad
fix(cron): persisted-state recovery re-arms recurring job stuck in st…
Aug 15, 2026
8a4b28f
fix: re-arm wedged cron jobs to next legal occurrence, cache cadence
kshitijk4poor Aug 17, 2026
d153bfe
refactor(cron): single cadence-measurement implementation + bounded c…
kshitijk4poor Aug 17, 2026
815934a
fix(cron): scheduler self-heals after EMFILE instead of stalling sile…
webtecnica Aug 16, 2026
80dc183
fix: single-owner fd reclamation, shared backoff helper, clean CLI ti…
kshitijk4poor Aug 17, 2026
0a8e703
refactor(cron): dedup EMFILE tick-failure handling; share the fd-exha…
kshitijk4poor Aug 17, 2026
9b9cfbc
fix(cron): reconcile stale in-flight claim against executions ledger …
Aug 15, 2026
6370134
fix: ledger-terminal release only for rows belonging to THIS claim
kshitijk4poor Aug 17, 2026
55e2dff
refactor(cron): two-phase ledger query + reuse shared terminal-state/…
kshitijk4poor Aug 17, 2026
eb4bc15
fix(telegram): log first-choice IPv4 stick as info, not warning
kshitijk4poor Aug 17, 2026
0c3452b
Merge pull request #88327 from kshitijk4poor/chore/author-map-kstawiski
kshitijk4poor Aug 17, 2026
6d85f21
fix(cron): clear run_claim for one-shot jobs on dispatch failure (#86…
RelaxJonh Aug 16, 2026
70fc5a5
fix: guard claim cleanup best-effort + add #86522 regression tests
kshitijk4poor Aug 17, 2026
baa1cfb
perf(cron): skip run_claim clear for recurring jobs on dispatch failure
kshitijk4poor Aug 17, 2026
3baf6c1
fix: guard against string schedule in _clear_run_claim_best_effort
kshitijk4poor Aug 17, 2026
979ca57
Merge pull request #88244 from kshitijk4poor/fix/handoff-cleanup-race
kshitijk4poor Aug 17, 2026
cf64ca2
fix(compression): stop an aborted rotation from growing the parent it…
jackulau Aug 17, 2026
2b490a0
fix(delegate): keep the worktree when git inspection fails
liuhao1024 Aug 17, 2026
38ea711
fix(delegate): tell the parent when a worktree was preserved un-inspe…
kshitijk4poor Aug 17, 2026
97c4f9e
test(delegate): assert the unproven-state contract, not its prose
kshitijk4poor Aug 17, 2026
ce93a39
refactor(delegate): extract the unproven-payload factory; drop the so…
kshitijk4poor Aug 17, 2026
4323c67
fix(delegate): disclaim only the fields a failed probe actually left …
kshitijk4poor Aug 17, 2026
256d7ef
test(relay): document stream priming boundary
afourniernv Aug 17, 2026
69f6eb5
docs(relay): explain canonical operation migration
afourniernv Aug 17, 2026
1852092
fix(desktop): stop duplicating active-gateway bots in the multi-sourc…
Aug 17, 2026
7dd945b
fix(desktop): deduplicate Bots roster and reuse canonical chats
frizikk Aug 17, 2026
ece487c
fix(bot-mode): live active-connection id for roster classification + …
teknium1 Aug 17, 2026
0ea430a
chore: map contributor email for @29206394
teknium1 Aug 17, 2026
c86197e
fix: make the self-repo git guard Windows-only
teknium1 Aug 17, 2026
7ee68cc
test(relay): cover lazy completion with interceptor
afourniernv Aug 17, 2026
157cf12
Merge pull request #8 from afourniernv/fix/pr85579-review-followup
bbednarski9 Aug 17, 2026
965ea01
Merge pull request #7 from afourniernv/fix/pr85582-review-followup
bbednarski9 Aug 17, 2026
ba2fb19
fix(desktop): bound bot face animation work
digitalbase Aug 17, 2026
ce1f5dd
fix(desktop): park the bot face clock when idle and tear it down on p…
teknium1 Aug 17, 2026
ed20a6f
fix(desktop): preserve Bot Mode source routing
dokterdok Aug 17, 2026
15dd3bf
fix(desktop): route remote sub-profiles through the primary's remote …
ayushnangia Aug 17, 2026
eb63c25
test(desktop): remote-sub-profile routing cases
ayushnangia Aug 17, 2026
36d5dd3
fix(desktop): sleep idle pixel egg animation
frizikk Aug 17, 2026
cb1b1da
fix: surface missed cron fires as last_fire_error on the job record
teknium1 Aug 17, 2026
c776bdd
fix(desktop): pause inactive diffusion rendering
frizikk Aug 17, 2026
ee616b4
fix(desktop): throttle DiffusionCanvas rAF loop and cap concurrent in…
Enough1122 Aug 5, 2026
e3eddbb
test(desktop): cover DiffusionCanvas 15fps budget and instance cap
teknium1 Aug 17, 2026
cf2d28a
fix(desktop): render Markdown in Bot Mode group chat messages (fixes …
negroni334 Aug 17, 2026
577f5cf
fix(desktop): route Bot Mode group-chat Markdown through the plugin SDK
teknium1 Aug 17, 2026
b919dc7
chore: map contributor email for @negroni334
teknium1 Aug 17, 2026
187e5b2
fix(desktop): stop phantom local default on remote-gateway desktops; …
teknium1 Aug 17, 2026
f891d70
feat: project-local skill discovery with per-repo trust gate
teknium1 Aug 17, 2026
d7f5acb
fmt(js): `npm run fix` on merge (#88567)
hermes-seaeye[bot] Aug 17, 2026
4811561
feat: misfire catch-up for external cron providers
teknium1 Aug 17, 2026
7339f5f
chore: release v0.20.3 (2026.8.16.2)
teknium1 Aug 17, 2026
833f0e2
feat(providers): bundle Meta Model API (Muse Spark) provider plugin
albertodepaola Aug 17, 2026
eaa3c72
feat(providers): adapt bundled meta-ai plugin — docstring, tests, docs
teknium1 Aug 17, 2026
d109785
feat(desktop): shared createBudgetedLoop helper for decorative rAF an…
teknium1 Aug 17, 2026
9a86248
feat(models): add Meta Muse Spark 1.2 to OpenRouter curated picker
intellectronica Aug 6, 2026
5de09f7
chore: map contributor email for intellectronica
teknium1 Aug 17, 2026
2454541
fix(providers): route api.meta.ai through Responses API for prompt ca…
Aug 6, 2026
d4658ee
fix(agent): preserve provider-slug rewrite when host mandate fires
Aug 8, 2026
9cf553c
refactor(agent): document meta api_mode fallback intent + review clea…
Aug 10, 2026
f2f6dce
feat(providers): flip bundled meta-ai profile to the Responses wire
teknium1 Aug 17, 2026
9ed4a7c
chore: map contributor email for laviesony
teknium1 Aug 17, 2026
59b1c40
feat(desktop): plugins can render inline components in assistant mess…
OutThisLife Aug 17, 2026
8f2ddc9
feat(plugins): per-plugin durable data directory that survives plugin…
OutThisLife Aug 17, 2026
8425f82
feat(desktop): ::preview renders the page live inside the message, no…
OutThisLife Aug 17, 2026
5c4f1e7
fix(desktop): inline preview frames size to their content instead of …
OutThisLife Aug 17, 2026
d690e02
fix(desktop): drop provider-echoed duplicate text so replies don't re…
OutThisLife Aug 17, 2026
a1fea53
feat(desktop): inline previews read as native widgets — content-sized…
OutThisLife Aug 17, 2026
20ec564
docs: align the ::preview description and storage example with shippe…
OutThisLife Aug 17, 2026
aeabff6
fix(desktop): satisfy the plugin-render and import-order lint rules
OutThisLife Aug 17, 2026
b779fbf
feat(desktop): route the bots face clock through the SDK budgeted loop
teknium1 Aug 17, 2026
a13be69
feat(desktop): warn in About when the app build is out of sync with t…
teknium1 Aug 17, 2026
6e22d26
feat: project-skill quarantine + non-interactive trust inheritance
teknium1 Aug 17, 2026
3ead0f8
feat(desktop): widget clicks reach the agent as hidden user turns — t…
OutThisLife Aug 17, 2026
70f9560
test: accept keyword args in the prompt-submit fallback stub
OutThisLife Aug 17, 2026
851a30d
docs: add a Bot Mode user-guide page
notwitcheer Aug 17, 2026
cf7b3d0
fmt(js): `npm run fix` on merge (#88652)
hermes-seaeye[bot] Aug 17, 2026
39c0bc8
feat(desktop): link the installer from the app-build-out-of-sync warning
teknium1 Aug 17, 2026
bd9c7d8
feat(desktop/bots): add disband (delete) for group chats
teknium1 Aug 17, 2026
4068162
fix(desktop): keep SSH Bot Mode agents visible across local clicks
AL-ZiLLA Aug 17, 2026
89877d1
fix(desktop): drop Bot Mode rows for removed SSH connections
AL-ZiLLA Aug 17, 2026
4afe08f
fix(desktop): retry failed SSH Bot Mode inventory after cooldown
AL-ZiLLA Aug 17, 2026
c2c3058
fix(desktop): never spawn SSH dashboards just to list Bot Mode agents
AL-ZiLLA Aug 17, 2026
30299ef
fix(desktop): open SSH default bots on the remote root profile
AL-ZiLLA Aug 17, 2026
f89f884
fix(desktop): mention Connections bots from this local chat
AL-ZiLLA Aug 17, 2026
e3c9544
chore: map contributor email for @AL-ZiLLA
teknium1 Aug 17, 2026
62f3762
feat(desktop): cross-connection Bot Mode — Create-on picker + multi-m…
teknium1 Aug 17, 2026
bf53915
docs: Bot Mode guide — Create-on picker, cross-machine mentions + gro…
teknium1 Aug 17, 2026
dc2e9dd
fmt(js): `npm run fix` on merge (#88671)
hermes-seaeye[bot] Aug 17, 2026
69a62ce
fix(desktop): keep the Bot Chat pin
Adolanium Aug 17, 2026
8484786
fix(desktop): align BOTS roster preview with the session its click opens
NealZhouPanda Aug 17, 2026
d0b02ef
fix(desktop): don't treat a mid-switch 404 as session deletion (#88540)
teknium1 Aug 17, 2026
4151599
fix(desktop): cross-machine bot DMs — canonical chat, sender attribut…
teknium1 Aug 17, 2026
5033aed
feat(evals): add the Browser Use mode A/B benchmark from PR #81958
teknium1 Aug 17, 2026
21aa327
style: ruff lint + format on the eval scripts (encoding args, formatt…
teknium1 Aug 17, 2026
2c8a2b6
docs(sdk): document profiles.list preferred_session_ids lookup
teknium1 Aug 17, 2026
68a7133
fix(gateway): preserve configured context window
helix4u Aug 17, 2026
976183f
fix(desktop): stop deleted profiles reconnecting
helix4u Aug 17, 2026
26466d0
feat(termux): support apt-managed Hermes installs
adybag14-cyber Aug 15, 2026
d685ea4
docs(termux): document community pkg distribution
adybag14-cyber Aug 15, 2026
9e81a10
chore: map contributor email
adybag14-cyber Aug 15, 2026
51de5c9
fix(termux): preserve Nix update guidance
adybag14-cyber Aug 16, 2026
55e34fb
fix(desktop): avoid local profile REST backend spawns
embwl0x Jul 10, 2026
bb92473
fmt(js): `npm run fix` on merge (#88720)
hermes-seaeye[bot] Aug 17, 2026
6622139
fix(bot-mode): always hide Bot Mode sessions from the global Sessions…
teknium1 Aug 17, 2026
6229683
feat(cli): hermes peer — bot-to-bot DMs across machines and gateways
teknium1 Aug 17, 2026
4b7eb02
fix(hermes-bots): group chats never surface @default — Hermes keeps i…
teknium1 Aug 17, 2026
69abe41
fix(desktop): re-home backend after profile rename
wanglufei-567 Jul 16, 2026
c6a0789
fix(desktop): retire old-name renderer sockets and widen the deletion…
teknium1 Aug 17, 2026
c071712
fix(desktop): await pooled backend teardown
gigashad Jul 11, 2026
9b112e5
refactor(desktop): extract pool teardown into pool-stop.ts with behav…
teknium1 Aug 17, 2026
aa26221
fix(hermes-bots): show profile pics in group chat rooms
teknium1 Aug 17, 2026
399fdea
fix(bot-mode): plugin listener leaks, jsx key prop, OAuth poll overwrite
teknium1 Aug 17, 2026
4f354c2
fix(profiles): release memory-store handles before rmtree on profile …
liuhao1024 Aug 17, 2026
aa8ceed
fix(memory): keep a stale holder's late close() from evicting a fresh…
teknium1 Aug 17, 2026
e3c4bfe
fix(bot-mode): show profile-owned cronjobs
capt-marbles Aug 17, 2026
799d3fe
fix(desktop): show legacy cronjobs in default bot
ScaleLeanChris Aug 17, 2026
6c84c33
fix(bot-mode): explain hidden cronjobs in the Routines pane empty state
BkashJEE Aug 17, 2026
10134bd
chore: map contributor email
teknium1 Aug 17, 2026
17ba992
fix(gateway): resolve the session DB inside the active profile scope
jackulau Aug 17, 2026
6f2dbf3
fix(gateway): widen scope-aware session DB resolution to the runner a…
teknium1 Aug 17, 2026
189de16
fix(peer): live-verified cross-gateway bot DMs — session shape + virt…
teknium1 Aug 17, 2026
91878fb
fix(desktop): visible eye catchlights on dark-bodied Bot Mode avatars
teknium1 Aug 17, 2026
9a85769
feat(desktop): unify Gateway + Connections into one Gateways settings…
teknium1 Aug 17, 2026
76ff060
fix(desktop): clean up Plugins settings — drop Example Plugin, hide b…
teknium1 Aug 17, 2026
d16413e
fix(desktop): stop Skills Hub picker overlaying the installed list an…
teknium1 Aug 17, 2026
ae5c4c1
feat(desktop): Discord-style group-chat rows in Bot Mode, opening in …
teknium1 Aug 17, 2026
77d6c78
fmt(js): `npm run fix` on merge (#88760)
hermes-seaeye[bot] Aug 17, 2026
152b194
fix(api-server): stop persisting the virtual model alias as a session…
loafoe Aug 17, 2026
1352439
fix(api_server): recovery net must never recover the advertised virtu…
k0rnacki Aug 6, 2026
dd6e098
test(api_server): pin the recovery-net alias guards
k0rnacki Aug 6, 2026
54b0a5b
chore: map contributor emails for @loafoe and @k0rnacki
teknium1 Aug 17, 2026
56de3c1
fix(cli): persist one-shot resumed-session turns (Bot Chat bot-to-bot…
teknium1 Aug 17, 2026
7999ac6
feat(desktop): shared 'Applies to' profile scope across settings page…
teknium1 Aug 17, 2026
a30636f
feat(desktop): surface native OS notification on Kanban task completion
nductien Aug 16, 2026
1802620
chore(desktop): remove local markers from kanban notify comments
nductien Aug 16, 2026
9aa1413
feat(desktop): extend kanban native notifications to blocker/failure …
teknium1 Aug 17, 2026
183f18d
feat: advisory NVIDIA SkillEvaluator Tier 1 scan on skill installs
teknium1 Aug 17, 2026
2c2697b
feat: widen Tier 1 advisory scan to license + security checks
teknium1 Aug 17, 2026
3360590
fix: address second-round SkillEvaluator review feedback
teknium1 Aug 17, 2026
b2c8a14
fix(desktop): fail-stop deleted-profile reconnects and evict the stal…
teknium1 Aug 18, 2026
22f0f22
fix(cron): manual runs no longer silently drop media attachments
victor-kyriazakos Aug 17, 2026
8e81e2a
fix(gateway): never construct SessionDB on the event-loop thread
victor-kyriazakos Aug 17, 2026
e997435
fix(state): v25 prompt dedupe degrades gracefully on a contended DB
victor-kyriazakos Aug 17, 2026
c9dbdbc
fix(gateway): grace window keeps first-call goal persistence on healt…
victor-kyriazakos Aug 17, 2026
8b03e65
chore: generalize field-report attribution in code comments
victor-kyriazakos Aug 17, 2026
24f7f9a
docs: reflect the unified Gateways page, settings profile scope, plug…
teknium1 Aug 18, 2026
46c0c6e
fix plugin list provider entries
felix-windsor May 17, 2026
4014eb7
fix(bot-mode): sweep CLI-born Bot Mode sessions out of the global sid…
teknium1 Aug 18, 2026
d89434e
fix(desktop): Bots pane is a Sessions-zone tab again (not stacked bel…
teknium1 Aug 18, 2026
64b7c96
fix(cron): media-send failure logs an empty reason on timeout
AiwendilInTheWoods Aug 16, 2026
d9ec9dd
feat(cron): make the media-send timeout configurable
AiwendilInTheWoods Aug 16, 2026
bc76f62
feat(cron): configurable media-send timeout + non-empty failure reasons
teknium1 Aug 18, 2026
1333815
feat(bot-mode): hide bots from the roster via right-click — header ey…
teknium1 Aug 18, 2026
a3995f8
fmt(js): `npm run fix` on merge (#88813)
hermes-seaeye[bot] Aug 18, 2026
41a80d5
fmt(js): `npm run fix` on merge (#88818)
hermes-seaeye[bot] Aug 18, 2026
75bbc05
Merge pull request #85579 from bbednarski9/codex/fix-relay-canonical-…
jquesnelle Aug 18, 2026
e818025
Merge pull request #85582 from bbednarski9/codex/fix-relay-lazy-compl…
jquesnelle Aug 18, 2026
d127b27
docs(desktop): document the tabbed SESSIONS|BOTS sidebar, Bots-mode-o…
teknium1 Aug 18, 2026
c9ce66e
fix(desktop): one roster row per bot even when a backend is registere…
teknium1 Aug 18, 2026
6170f84
fix(desktop): remove profile scoping from the Gateways settings page
teknium1 Aug 18, 2026
f6667e7
chore: nudge ci.yml blob to bust poisoned workflow-parse cache
teknium1 Aug 18, 2026
f30ea0e
Revert "chore: nudge ci.yml blob to bust poisoned workflow-parse cache"
teknium1 Aug 18, 2026
47eadcc
fix(desktop): SESSIONS | BOTS is always a tab strip — the Bots pane r…
teknium1 Aug 18, 2026
898b423
fix(desktop): force the enforced zone's tab strip visible — repairs t…
teknium1 Aug 18, 2026
bdc9a81
fmt(js): `npm run fix` on merge (#88888)
hermes-seaeye[bot] Aug 18, 2026
30fcf95
fix(bot-mode): group chats no longer lose long-running member turns, …
teknium1 Aug 18, 2026
6680afb
fix(nix): exclude test js files from src
ethernet8023 Aug 18, 2026
62beeee
fix(desktop): finer window translucency steps
nicolasdmolina Aug 3, 2026
374779d
fix(desktop): curve window translucency so the whole lever is usable
nicolasdmolina Aug 3, 2026
eb6f352
feat(desktop): matte glass option for window translucency
SHL0MS Aug 12, 2026
0483133
fix(desktop): even glass field via one painter; raise overlays; darke…
SHL0MS Aug 12, 2026
1eb9cbd
fix(desktop): glass was blocked by the webContents backing and two ap…
SHL0MS Aug 12, 2026
985db37
fix(desktop): glass cold launch — omit backgroundColor instead of alp…
SHL0MS Aug 12, 2026
d6adef6
refactor(desktop): one owner for the translucency mapping
OutThisLife Aug 17, 2026
5851f93
refactor(desktop): one mac check, one translucency atom
OutThisLife Aug 17, 2026
0ae0641
refactor(desktop): surfaces declare their glass role
OutThisLife Aug 17, 2026
113a07f
refactor(desktop): one surface helper for the three chat windows
OutThisLife Aug 17, 2026
efa15b5
feat(desktop): frost picker, sidebar glass, full-range tint and peek
OutThisLife Aug 18, 2026
b86db14
test(desktop): the glass assertions were never running
OutThisLife Aug 18, 2026
f3bfa9a
perf(desktop): stop the translucency slider thrashing the main process
OutThisLife Aug 18, 2026
6eb23c7
fix(desktop): clear-mode fade tracks the drag again
OutThisLife Aug 18, 2026
a1fca9b
fix(desktop): close the glass state and perf leaks
OutThisLife Aug 18, 2026
7a81dd9
refactor(desktop): trim the glass surface
OutThisLife Aug 18, 2026
e9cefa4
feat(desktop): pre-select glass on macOS
OutThisLife Aug 18, 2026
cb337d3
fix: Bot Mode cronjobs panel no longer shows two empty-state markers
teknium1 Aug 18, 2026
7e156c6
fix(desktop): preserve primary remote connection identity
matsvarn Aug 17, 2026
a943895
test(desktop): prove the install_id collapse (#88828) and boot-descri…
teknium1 Aug 18, 2026
8ce8ffd
fix(update): 'hermes update' no longer claims success on a parked fea…
teknium1 Aug 18, 2026
0bb2399
fix(tests): sibling hangup-protection tests tolerate the branch+HEAD …
teknium1 Aug 18, 2026
b95ec1c
fix(delegation): running subagents stay visible to list/steer across …
Rafa-Ross Aug 18, 2026
4bb7e49
fix(desktop): preserve cross-machine group routing
strnadchristopher Aug 18, 2026
d4a72b7
chore: map contributor email for #88807 salvage
teknium1 Aug 18, 2026
ecc7a35
fmt(js): `npm run fix` on merge (#88981)
hermes-seaeye[bot] Aug 18, 2026
7e05e90
chore: release v0.20.4 (2026.8.18)
teknium1 Aug 18, 2026
9bea439
feat(bot-mode): support multiple groups per bot
goktugvatandas Aug 18, 2026
10d6faa
test(bot-mode): verify shared-member room isolation
goktugvatandas Aug 18, 2026
7af25a9
test(bot-mode): favor behavior over source assertions
goktugvatandas Aug 18, 2026
c381aef
fix(bot-mode): fresh-room name uniquify counts every membership, not …
teknium1 Aug 18, 2026
e624e9f
chore: map contributor email for #88864 salvage
teknium1 Aug 18, 2026
acc614e
docs: add CLI symbols glossary reference page
notwitcheer Aug 18, 2026
a75d1b5
fix(tests): de-flake gateway SSE and goal-verdict tests that raced sp…
teknium1 Aug 18, 2026
2d511f5
fix(desktop): closing main in a side-by-side layout promotes the neig…
teknium1 Aug 18, 2026
8505559
feat(bot-mode): group rooms fold older conversations into one-line su…
teknium1 Aug 18, 2026
4bdddf4
docs: escape backslash in cli-symbols glossary so MDX compiles
teknium1 Aug 18, 2026
c91681c
fix(tools): large tool results persist to HERMES_HOME/cache/spillover…
teknium1 Aug 18, 2026
83d451e
test: budget-replacement assertions accept persisted-output blocks
teknium1 Aug 18, 2026
8a770aa
fix(tools): spillover is the canonical home for oversized results on …
teknium1 Aug 18, 2026
7a0cdbc
fix(tests): pin workspace snapshot in plugin-prompt-sections byte-sta…
teknium1 Aug 18, 2026
6abe6ed
feat(bot-mode): real Slack-style threads in group rooms — main compos…
teknium1 Aug 18, 2026
a168237
feat(profiles): rename any agent — the default profile gets a display…
teknium1 Aug 18, 2026
7cae03b
fmt(js): `npm run fix` on merge (#89070)
hermes-seaeye[bot] Aug 18, 2026
daca386
fix(desktop): @-mentions now autocomplete in Bot Mode group composers…
teknium1 Aug 18, 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
86 changes: 86 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +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
138 changes: 117 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 Down Expand Up @@ -97,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 @@ -116,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 @@ -143,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 Down Expand Up @@ -244,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 @@ -252,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 @@ -289,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 @@ -344,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 @@ -378,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
6 changes: 3 additions & 3 deletions .envrc
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
watch_file pyproject.toml uv.lock
watch_file ui-tui/package-lock.json ui-tui/package.json
watch_file flake.nix flake.lock nix/devShell.nix nix/tui.nix nix/package.nix nix/python.nix
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
32 changes: 32 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,34 @@
# 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

# Enforce LF for all source/text files. Windows editors and tools default to
# CRLF; without normalization a Windows contributor's edit turns into a
# whole-file phantom diff (every line "changed" by its ending), breaks
# string-match patch tooling, and pollutes review. `text` normalizes to LF
# at check-in; `eol=lf` also checks out as LF so the working tree matches
# the index on every platform. PowerShell files are the deliberate
# exception (PS 5.1 tooling expects CRLF).
*.py text eol=lf
*.ts text eol=lf
*.tsx text eol=lf
*.js text eol=lf
*.mjs text eol=lf
*.cjs text eol=lf
*.jsx text eol=lf
*.json text eol=lf
*.yaml text eol=lf
*.yml text eol=lf
*.toml text eol=lf
*.md text eol=lf
*.css text eol=lf
*.html text eol=lf
*.svg text eol=lf
*.ps1 text eol=crlf
Loading
Loading