Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
4013 commits
Select commit Hold shift + click to select a range
86f2946
fix(dashboard): recover the Chat tab when the agent session ends (NS-…
benbarclay Jun 18, 2026
020e59d
fix(agent): dampen empty-name phantom tool-call loop (#47967) (#48109)
teknium1 Jun 18, 2026
4b7a186
fix(desktop): retry the self-update rebuild once so the app relaunche…
OutThisLife Jun 18, 2026
6f89e17
fix(xai): OAuth Responses native web_search, incomplete guard, grok-c…
Jun 11, 2026
c5eb64b
fix(xai): scope native web_search to swap-only + reconcile composer c…
teknium1 Jun 17, 2026
fcf6cb3
fix(docker): supervised gateway uses --replace to take over stale hol…
benbarclay Jun 18, 2026
c276b01
feat(relay): connector⇄gateway channel auth + signed-HTTP inbound rec…
benbarclay Jun 18, 2026
3769dff
fix(approval): honor glob command allowlist entries (#43051)
helix4u Jun 18, 2026
a657397
test(cron): characterize in-process + desktop ticker contract before …
benbarclay Jun 18, 2026
e6ff41c
feat(cron): CronScheduler ABC + InProcessCronScheduler (provider #1)
benbarclay Jun 18, 2026
ae8fa11
feat(cron): cron.provider config + plugins/cron discovery + resolver
benbarclay Jun 18, 2026
4440d77
fix(update): scope install-method stamp to the code tree, not $HERMES…
benbarclay Jun 18, 2026
abbd864
feat(gateway,desktop): start cron via resolved CronScheduler provider
benbarclay Jun 18, 2026
bfb6e0b
docs(cron): document CronScheduler provider + cron.provider key
benbarclay Jun 18, 2026
58b19a4
refactor(cron): extract run_one_job shared firing helper from tick
benbarclay Jun 18, 2026
6ff5fd3
feat(cron): additive CronScheduler hooks (on_jobs_changed/fire_due/re…
benbarclay Jun 18, 2026
b01eee0
feat(cron): store-level CAS claim for multi-machine at-most-once fire
benbarclay Jun 18, 2026
4c8bbe6
feat(cron): Chronos NAS-mediated managed-cron provider (scale-to-zero)
benbarclay Jun 18, 2026
3fc7b62
feat(cron,gateway): NAS-JWT fire verifier + /api/cron/fire webhook (C…
benbarclay Jun 18, 2026
b75757d
feat(cron): wire on_jobs_changed, cron.chronos config, docs + agent↔N…
benbarclay Jun 18, 2026
0ddd21c
feat(relay): managed-boot self-provision client (Phase 3, gateway sid…
benbarclay Jun 18, 2026
9c3c5da
fix(backup): hermes import never overwrites volatile gateway runtime …
benbarclay Jun 18, 2026
28531b6
Merge remote-tracking branch 'origin/main' into hermes/hermes-6fe26723
benbarclay Jun 18, 2026
c661634
fix(dashboard): stream file uploads via multipart instead of base64 J…
benbarclay Jun 18, 2026
1153b42
Merge upstream/main into OpenViking setup-UX (salvage #32445)
kshitijk4poor Jun 18, 2026
6752da9
fix(dashboard): clean up upload temp file on client disconnect + pin …
kshitijk4poor Jun 18, 2026
eaa0984
chore: drop committed PR-infographic assets from the repo (#48261)
benbarclay Jun 18, 2026
832d596
Merge pull request #48262 from kshitijk4poor/salvage-32445
kshitijk4poor Jun 18, 2026
5494c1e
refactor(openviking): reuse atomic_json_write for ovcli config; drop …
kshitijk4poor Jun 18, 2026
edcde6b
Merge pull request #48265 from kshitijk4poor/chore/ov-atomic-json-write
kshitijk4poor Jun 18, 2026
e1e53bf
Merge remote-tracking branch 'origin/main' into hermes/hermes-6fe26723
benbarclay Jun 18, 2026
085fc5d
feat(skills): find & diff user-modified bundled skills
xxxigm Jun 17, 2026
481f041
test(skills): cover list-modified + diff for bundled skills
xxxigm Jun 17, 2026
6777916
fix(skills): surface list-modified hint on both update paths + disamb…
kshitijk4poor Jun 18, 2026
737007e
Merge pull request #48286 from kshitijk4poor/salvage/skills-list-modi…
kshitijk4poor Jun 18, 2026
0b54a33
fix(langfuse): scope trace state by turn/request ids
infinitycrew39 Jun 17, 2026
40ed67c
test(langfuse): cover turn/api trace-key scoping
infinitycrew39 Jun 17, 2026
b435613
test(langfuse): add end-to-end turn-isolation regression
kshitijk4poor Jun 18, 2026
f6fac60
refactor(skills): dedupe file-listing, share user-modified predicate,…
kshitijk4poor Jun 18, 2026
860cf51
Merge pull request #48293 from kshitijk4poor/chore/skills-diff-cleanup
kshitijk4poor Jun 18, 2026
e1d10ec
refactor(langfuse): extract _scope_prefix from _trace_key
kshitijk4poor Jun 18, 2026
f4fbaa6
fix(langfuse): bound _TRACE_STATE growth from non-finalizing turns
kshitijk4poor Jun 18, 2026
0787ea0
test(langfuse): pin exact surviving key in turn-isolation test
kshitijk4poor Jun 18, 2026
9b2f7d2
Merge pull request #48292 from NousResearch/fix/langfuse-trace-scope-…
kshitijk4poor Jun 18, 2026
ca28c63
chore(release): map infinitycrew39 author email
kshitijk4poor Jun 18, 2026
426f321
Merge pull request #48299 from NousResearch/chore/author-map-infinity…
kshitijk4poor Jun 18, 2026
2a5d51c
fix(openviking): adapt memory provider for current api
qin-ctx Jun 15, 2026
a14bae6
fix(install): resolve PowerShell host instead of bare `powershell` fo…
xxxigm Jun 18, 2026
feff283
test(install): lock uv installer to a resolved PowerShell host
xxxigm Jun 18, 2026
67316fd
fix(install): relax native stderr handling in install.ps1 (#48352)
Tranquil-Flow Jun 18, 2026
b892ee2
fix(agent): summarize non-retryable API errors so raw HTML never leaks
xxxigm Jun 16, 2026
f18f31e
test(agent): cover non-retryable error HTML summarization
xxxigm Jun 18, 2026
d0622ca
refactor(agent): reuse hoisted summary in content-policy branch
kshitijk4poor Jun 18, 2026
8abdab2
fix(tui): MCP headline counts connected servers, not disabled ones (#…
teknium1 Jun 18, 2026
2f7c485
fix(tui): refresh tool snapshot when MCP discovery lands after agent …
teknium1 Jun 18, 2026
92e6d8c
fix(desktop): dispose open PTY sessions in before-quit handler
srojk34 Jun 18, 2026
ef4b897
chore(release): map srojk34 author email
teknium1 Jun 18, 2026
646cd1b
fix(nix): refresh npmDepsHash after the Electron 40.10.2 pin (#47792)…
alt-glitch Jun 18, 2026
b39ec2f
Merge pull request #48341 from xxxigm/fix/install-ps1-powershell-host…
kshitijk4poor Jun 18, 2026
2e5c04a
fix(#37878): scrub operator environment before launching cua-driver MCP
iamlukethedev Jun 7, 2026
3c3ac19
fix(#37878): Address review feedback — fix trailing whitespace and ad…
iamlukethedev Jun 8, 2026
41babc7
chore(release): map iamlukethedev to AUTHOR_MAP
teknium1 Jun 18, 2026
f1254c8
fix(skills): rmtree scope guard + default pre_update_backup to true (…
Kewe63 Jun 18, 2026
25c590c
fix(skills): refuse SKILLS_DIR root in rmtree guard, not just outside…
teknium1 Jun 18, 2026
58ad694
fix(tui): don't make Enter swallow trailing-space-only slash completi…
xxxigm Jun 18, 2026
5ffbfed
feat(mcp-catalog): add official Unreal Engine 5.8 MCP server
teknium1 Jun 18, 2026
4af16b5
Merge pull request #48206 from ehz0ah/fix/openviking-current-api-rebased
kshitijk4poor Jun 18, 2026
c37fdec
feat(dashboard): surface full per-MCP catalog detail; fix pip-install…
teknium1 Jun 18, 2026
fd12e59
fix(install): fail fast when uv venv genuinely fails under relaxed EAP
kshitijk4poor Jun 18, 2026
2fa16ec
Merge pull request #48529 from kshitijk4poor/salvage-48372-eap
kshitijk4poor Jun 18, 2026
38c8a9c
feat(memory): batch operations for single-turn memory updates (#48507)
teknium1 Jun 18, 2026
0fa7d6f
fix(desktop): never persist or restore a named custom provider as bar…
teknium1 Jun 18, 2026
07e785d
fix(prompt): dedupe parallel-tool-call steer; correct its rationale
OutThisLife Jun 18, 2026
51ee5b2
fix(desktop,tui): surface self-improvement review summary + honor mem…
OutThisLife Jun 18, 2026
81eaedd
Merge pull request #48533 from NousResearch/hermes/hermes-4061c6a8
OutThisLife Jun 18, 2026
d573e7c
fix(dashboard): use DS Button prefix/size API instead of inline icons
jquesnelle Jun 18, 2026
73cd862
feat(billing): /billing terminal billing — interactive TUI + CLI clie…
alt-glitch Jun 18, 2026
81ff916
fix(agent): flush un-persisted messages before session rotation (#47202)
kyssta-exe Jun 16, 2026
0879d5c
fix(gateway): preserve original transcript when /compress rotation is…
teknium1 Jun 18, 2026
4ed2f33
fix(thread): allow scrolling long user messages in chat history (#48619)
alelpoan Jun 18, 2026
9705e79
fix(picker): remove max_models=50 cap in interactive model pickers
Jun 18, 2026
3042045
fix(picker): keep max_models=0 distinct from unlimited; lock cap sema…
teknium1 Jun 18, 2026
49596b7
fix(gateway): resume follows the compression tip so post-compression …
OutThisLife Jun 18, 2026
c23c370
test: narrow db._conn before raw SQL so ty stops flagging None-union …
OutThisLife Jun 18, 2026
1ea2b27
Merge pull request #48633 from NousResearch/fix/resume-follows-compre…
OutThisLife Jun 18, 2026
f8d8f04
feat(kanban): auto-subscribe calling session on kanban_create
flooryyyy Jun 15, 2026
2944b3c
fix(desktop): make session delete idempotent and id-resolving (#48641)
OutThisLife Jun 18, 2026
3ead2bd
feat(prompt): configurable per-platform system-prompt hint overrides
victor-kyriazakos Jun 18, 2026
f1ff845
docs(prompt): document platform_hints config override
teknium1 Jun 18, 2026
769f307
fix(npm): lock react-simple-icons to 13.11.1
ethernet8023 Jun 18, 2026
cbe44bf
Merge pull request #48657 from NousResearch/hermes-icons
ethernet8023 Jun 18, 2026
03d9a95
fix(desktop): show Hindsight memory provider (#37546)
benfrank241 Jun 18, 2026
d2c53ff
feat(relay): WS-only inbound on the gateway adapter (Phase 3) (#48294)
benbarclay Jun 18, 2026
36851fa
fix(docker): support WebUI installs from read-only sources (#48541)
r266-tech Jun 19, 2026
2c6e266
fix(relay): trigger self-provision on relay-config + NAS token, not i…
benbarclay Jun 19, 2026
0403f41
fix(agent): handle missing trigram tokenizer without disabling FTS5
liuhao1024 Jun 16, 2026
c10aa5d
fix(agent): address review feedback on trigram tokenizer fallback
liuhao1024 Jun 16, 2026
9ae98e0
fix(agent): rebuild base fts without trigram
channkim Jun 16, 2026
1d2e359
fix(cli): surface a visible warning when the session store is unavail…
teknium1 Jun 18, 2026
62c71eb
chore(release): map chanyoung.kim@nota.ai -> channkim for #47049 salvage
teknium1 Jun 18, 2026
e48554a
feat(cli): lock hermes worktrees so concurrent processes can't clobbe…
JoaoMarcos44 Jun 18, 2026
8568988
chore: add JoaoMarcos44 to AUTHOR_MAP
teknium1 Jun 18, 2026
d06104a
fix(dashboard): resolve chat TUI argv off event loop (#48561)
kshitijk4poor Jun 19, 2026
c34840e
fix(cron): serve /api/cron/fire on the dashboard app (hosted-agent su…
benbarclay Jun 19, 2026
28d887c
Merge pull request #48615 from NousResearch/fix/dashboard-ds-button-api
jquesnelle Jun 19, 2026
620fd59
feat(model-picker): add Refresh Models control to bust stale model ca…
teknium1 Jun 19, 2026
e4452ff
fix(agent): summarize structured provider error messages
helix4u Jun 18, 2026
cfb55de
Update Stripe Projects skill docs (#48673)
colinwren-stripe Jun 19, 2026
c02192f
feat(image-gen): add image-to-image / editing to image_generate (#48705)
teknium1 Jun 19, 2026
637aff4
Merge remote-tracking branch 'origin/main' into hermes/hermes-6fe26723
benbarclay Jun 19, 2026
245b95b
fix(terminal): block gateway lifecycle commands from inside the gatew…
AhmetArif0 Jun 2, 2026
a64fc49
fix(relay): make hosted gateways actually connect AND complete the in…
benbarclay Jun 19, 2026
12dfcfd
fix(tui): restart dashboard chat on idle exit hotkeys
shannonsands Jun 19, 2026
6278bca
Merge pull request #48259 from NousResearch/fix/ns501-multipart-uploa…
kshitijk4poor Jun 19, 2026
f741e70
Add Slack allowed users setup field
shannonsands Jun 19, 2026
d919049
Add Slack setup hints and field validation
shannonsands Jun 19, 2026
83c034b
fix(dashboard): accept Slack allow-all wildcard in allowed-users vali…
kshitijk4poor Jun 19, 2026
1ab6f34
refactor(dashboard): align Slack allowlist validation with gateway parse
kshitijk4poor Jun 19, 2026
3485bc7
Merge pull request #48880 from kshitijk4poor/salvage-48824-slack-allo…
kshitijk4poor Jun 19, 2026
c7b7f92
fix(openviking): sync structured turns with tool parts
Jun 2, 2026
d7cd0bc
fix(openviking): preserve structured sync attribution
ehz0ah Jun 19, 2026
15e3b64
fix(tui): keep hosted dashboard chat alive on exit
shannonsands Jun 19, 2026
3f0e984
refactor(tui): reuse DASHBOARD_TUI_MODE for hosted /exit guard
kshitijk4poor Jun 19, 2026
5a856bd
chore(release): add OpenViking contributor attribution
ehz0ah Jun 19, 2026
9362ce2
feat(skills): add html-artifact skill, fold in sketch + architecture-…
alt-glitch Jun 19, 2026
fcac0f9
fix(openviking): guard empty tool_id in batch skip set; reuse env_var…
kshitijk4poor Jun 19, 2026
3ca0ef7
fix(nix): hashless npm deps via importNpmLock (#48883)
alt-glitch Jun 19, 2026
27a6e18
refactor(openviking): derive recall-tool name set from canonical schemas
kshitijk4poor Jun 19, 2026
2d4046c
refactor(openviking): reuse pre-scanned tool_input for pending tool c…
kshitijk4poor Jun 19, 2026
be2c2be
refactor(openviking): name tool_status constants and alias sets
kshitijk4poor Jun 19, 2026
527a47f
Merge pull request #48924 from kshitijk4poor/salvage-48894-structured…
kshitijk4poor Jun 19, 2026
226ec28
Merge pull request #48367 from kshitijk4poor/salvage-47289
kshitijk4poor Jun 19, 2026
e738c08
fix(backup): exclude regeneratable dependency and cache dirs
xxxigm Jun 19, 2026
db57a1a
Merge pull request #48941 from kshitijk4poor/salvage-48887-backup-exc…
kshitijk4poor Jun 19, 2026
1699525
fix(tui): route pending-input commands via command.dispatch (#48848)
kyssta-exe Jun 19, 2026
df4ca2c
Merge pull request #48953 from kshitijk4poor/salvage/issue-48848
kshitijk4poor Jun 19, 2026
fd27c90
chore: add tt-a1i to AUTHOR_MAP
kshitijk4poor Jun 19, 2026
5378b94
Merge pull request #48966 from kshitijk4poor/chore/authmap-tt-a1i
kshitijk4poor Jun 19, 2026
ab8f063
fix(tui): disable fast-echo bypass inside tmux to prevent cursor drift
fyzanshaik Jun 19, 2026
e52fffb
harden(tui): also disable fast-echo for tmux-flavored TERM (SSH-from-…
kshitijk4poor Jun 19, 2026
5e93075
Merge pull request #48982 from NousResearch/salvage/48965-tmux-fast-echo
kshitijk4poor Jun 19, 2026
dc5cb0a
fix(dashboard): refresh Sessions list in real time when new sessions …
yatesjalex Jun 19, 2026
f37bb21
chore(dashboard): wire vitest into npm test script
kshitijk4poor Jun 19, 2026
46f9d53
fix(agent): aggregate anthropic aux calls via stream
tt-a1i Jun 19, 2026
6ad0bc2
fix(sessions): let a compression continuation reclaim its base title
xxxigm Jun 19, 2026
65d050c
test(sessions): cover title reclaim across a compression lineage
xxxigm Jun 19, 2026
8c70346
refactor(sessions): express compression-ancestor check as one recursi…
kshitijk4poor Jun 19, 2026
ce0ac9b
Merge pull request #49000 from kshitijk4poor/salvage/session-title-li…
kshitijk4poor Jun 19, 2026
f9ffe0b
fix(desktop): resume stored session id on notification click
xxxigm Jun 19, 2026
069011d
test(desktop): cover runtime->stored notification id resolution
xxxigm Jun 19, 2026
bce1e36
fix(discord): unwrap dict choices + soft-boundary truncate clarify bu…
johnjacobkenny Jun 2, 2026
2c3aebc
fix(clarify): unwrap dict choices at the source so every surface gets…
teknium1 Jun 19, 2026
460b1e5
fix(gateway): refresh max_turns before resolving runtime budget
infinitycrew39 Jun 18, 2026
dcac719
test(gateway): cover runtime max_turns refresh
infinitycrew39 Jun 18, 2026
ca92e9a
fix(gateway): refresh cached agent max_iterations from current config
infinitycrew39 Jun 19, 2026
144834b
test(gateway): real cached-agent max_iterations regression test
teknium1 Jun 19, 2026
fd92a3a
fix(gateway): Windows restart no longer causes a silent outage
salesondemandio Jun 8, 2026
b12c0cd
test(windows): run pytest-timeout in thread mode on Windows
salesondemandio Jun 8, 2026
715fa9e
fix(gateway): harden gateway command-line matcher (review findings)
salesondemandio Jun 8, 2026
b922d7d
chore(release): add salesondemandio to AUTHOR_MAP for PR #42664
teknium1 Jun 19, 2026
9cd7b8c
Merge pull request #48950 from kshitijk4poor/salvage/dashboard-sessio…
kshitijk4poor Jun 19, 2026
9245115
Revert "feat(skills): add html-artifact skill, fold in sketch + archi…
teknium1 Jun 19, 2026
9a2f275
fix(desktop): allow selecting slash output and shell logs in thread (…
OutThisLife Jun 19, 2026
a7b4fbc
fix(tui): guard /update against hosted dashboard mode
srojk34 Jun 19, 2026
160bb56
feat(tts): expose speaker_id on built-in Piper provider
Cdddo Jun 19, 2026
ddca590
chore: add Cdddo to AUTHOR_MAP
teknium1 Jun 19, 2026
01a6f11
fix(debug): include gui.log (dashboard/TUI/pty/websocket) in hermes d…
kshitijk4poor Jun 19, 2026
c1ffd4c
fix(cli): make refresh_interval configurable, default to 0 (disabled)
OYLFLMH Jun 18, 2026
1cc9157
test(cli): cover cli_refresh_interval default; map salvaged author
teknium1 Jun 19, 2026
fad4b40
fix(model): persist /model switch by default across sessions
yatesjalex Jun 19, 2026
5a506da
feat(tts): add auxiliary-model auto speech tags for xAI
Cdddo Jun 18, 2026
8ae6bd0
test(tts): cover xAI auto speech-tags auxiliary rewrite path
Cdddo Jun 18, 2026
4128c69
chore: add carlos.dddo to AUTHOR_MAP
teknium1 Jun 19, 2026
cb3d903
Fix model picker and autorefresh on change
IAvecilla Jun 17, 2026
054b8c8
feat: unified provider_catalog() — one source for CLI picker and desk…
austinpickett Jun 19, 2026
3be1326
feat(desktop): /api/env derives provider key membership from unified …
austinpickett Jun 19, 2026
60dfa0f
feat(desktop): Accounts tab derives membership from unified provider …
austinpickett Jun 19, 2026
6cb04be
feat(desktop): Keys tab groups by backend provider identity
austinpickett Jun 19, 2026
8fe7b52
test(desktop): lock GUI⊇`hermes model` provider parity; surface Bedrock
austinpickett Jun 19, 2026
ee0de63
feat(desktop): add API-keys search; keep provider lists priority-sorted
austinpickett Jun 19, 2026
d91b8d8
test(desktop): make keyVar a typed EnvVarInfo factory
austinpickett Jun 19, 2026
1d59d2d
feat(desktop): resolve OAuth status for catalog-only account providers
teknium1 Jun 19, 2026
06c7c25
test(desktop): lock generic OAuth status fallthrough for catalog-only…
teknium1 Jun 19, 2026
8b7c89b
feat(dashboard): session switcher panel on the Chat tab (#49077)
teknium1 Jun 19, 2026
e00b965
feat(tts): add xAI TTS speed and optimize_streaming_latency config knobs
Cdddo Jun 19, 2026
b936f92
fix(desktop): render send/prefill directive notices (/goal, /undo) (#…
teknium1 Jun 19, 2026
caaa916
fix(gateway): don't let delayed Discord status messages partition his…
simpolism Jun 10, 2026
df2420f
fix(gateway): keep non-Discord home-channel startup send byte-identical
teknium1 Jun 19, 2026
9e1f616
fix(clarify): docstring — put options in choices[] only, never enumer…
alt-glitch Jun 15, 2026
d82f9fa
feat(gateway): multiplex phase 0 — config flag, profile enumeration, …
benbarclay Jun 18, 2026
f538470
feat(gateway): multiplex phase 2 — fail-closed profile credential iso…
benbarclay Jun 18, 2026
f35abb1
feat(gateway): multiplex phase 1 — HTTP-inbound /p/<profile>/ routing…
benbarclay Jun 18, 2026
d5d02ea
feat(gateway): multiplex phase 3 — secondary-profile adapter registry…
benbarclay Jun 18, 2026
1e70df5
feat(gateway): multiplex phase 4 — lifecycle guard + per-profile obse…
benbarclay Jun 18, 2026
2dd285f
docs(gateway): document multiplexing opt-in + contract changes
benbarclay Jun 19, 2026
d7bff94
fix(cli): default cli_refresh_interval to 1.0 to keep status bar aliv…
teknium1 Jun 19, 2026
1958208
chore(release): add Sahil-SS9 to AUTHOR_MAP for PRs #48466/#44919/#44…
teknium1 Jun 19, 2026
a5e0607
fix(cron): compact cron failure messages + repair bare repo dirs afte…
Sahil-SS9 Jun 18, 2026
dfa5610
fix(kanban): machine-global singleton lock for the embedded dispatche…
Sahil-SS9 Jun 12, 2026
226e932
fix(kanban): cross-platform dispatcher lock + explicit release
Sahil-SS9 Jun 12, 2026
ba50e86
fix: open dispatcher lock file with explicit utf-8 encoding
teknium1 Jun 19, 2026
db744e7
feat(simplify-code): add risk-tiered application, Chesterton's Fence,…
Sahil-SS9 Jun 8, 2026
6c44471
fix(hindsight): lazy-install cloud client dependency
benfrank241 Jun 19, 2026
13d4b5f
fix(hindsight): align client version to 0.6.1 across all sources
teknium1 Jun 19, 2026
b9e521d
fix(kanban): hold reclaim while the worker is still alive
Sahil-SS9 Jun 12, 2026
35e7ca0
fix(kanban): treat already-gone worker as terminated, not survived
teknium1 Jun 19, 2026
a58287a
Merge remote-tracking branch 'origin/main' into pr48275-rebase
teknium1 Jun 19, 2026
bf9a048
test(config): pin config/env load behavior before managed scope
benbarclay Jun 18, 2026
9cbcc0c
feat(managed-scope): add managed_scope module (resolver, loaders, key…
benbarclay Jun 18, 2026
b5ddd6e
feat(managed-scope): managed config layer wins over user config
benbarclay Jun 18, 2026
81a663a
feat(managed-scope): apply managed .env last with override
benbarclay Jun 18, 2026
4f9e15d
feat(managed-scope): guard writes to managed config/env keys
benbarclay Jun 18, 2026
ddd519e
feat(managed-scope): surface managed scope in config show and doctor
benbarclay Jun 18, 2026
9a24e41
docs: add managed scope admin guide + cross-link from configuration
benbarclay Jun 18, 2026
732293c
fix(managed-scope): apply managed layer in cli.py's standalone config…
benbarclay Jun 19, 2026
b0e47a9
fix(managed-scope): honor managed scope in all standalone config loaders
benbarclay Jun 19, 2026
1928aa0
fix(managed-scope): honor managed scope in config→env bridges too
benbarclay Jun 19, 2026
2a5e9d9
Merge pull request #48275 from NousResearch/feat/cron-scheduler-provi…
teknium1 Jun 19, 2026
9026a8c
feat(gateway): add Raft bundled platform plugin with activity hooks
Jun 18, 2026
22ccb12
chore(release): map skyzh@mail.build to xxchan for Raft salvage
teknium1 Jun 18, 2026
7d86178
fix(raft): set stdin=DEVNULL on bridge subprocess
teknium1 Jun 18, 2026
1b04e4e
fix(cli): status bar no longer stays hidden after resize during idle …
teknium1 Jun 19, 2026
0d7abd5
fix(dashboard): sort chat session switcher by most-recent activity (#…
teknium1 Jun 19, 2026
6308d34
fix(desktop): rename "Restart messaging" -> "Restart gateway"
OutThisLife Jun 19, 2026
553cf4f
feat(desktop): restart the gateway from Cmd+K, with statusbar spinner…
OutThisLife Jun 19, 2026
a163992
fix(desktop): offer a Restart gateway action on messaging save/toggle…
OutThisLife Jun 19, 2026
929dbf7
fix(desktop): make rendered logs selectable so they can be copied
OutThisLife Jun 19, 2026
0e8b765
fix(desktop): rename "Restart messaging" → "Restart gateway", surface…
OutThisLife Jun 19, 2026
b266ad7
chore(deps): npm audit fix — bump transitive undici to clear advisori…
teknium1 Jun 19, 2026
c068980
fix(cli): clear viewport on width-change resize so the status bar can…
teknium1 Jun 19, 2026
ac00e73
feat(dashboard): add a reasoning-effort picker to the chat sidebar (#…
teknium1 Jun 19, 2026
990273d
fix(agent): accept pixel-correct image downscale when bytes grow (#48…
alt-glitch Jun 19, 2026
26e76a7
feat(telegram): opt-in Online/Offline bot status indicator (#49134)
teknium1 Jun 19, 2026
da72532
fix(cron): sanitize env for job script subprocesses
0z1-ghb Jun 19, 2026
239740a
feat(tools): MCP elicitation handler with gateway-aware approval routing
lgalabru Jun 9, 2026
746c46d
chore: add lgalabru to AUTHOR_MAP for PR #43112 salvage
teknium1 Jun 19, 2026
2d978bf
test(cron): make env-sanitize probe var deterministic
kshitijk4poor Jun 19, 2026
93d6e73
fix(mcp): expose late-connecting MCP tools to the agent (TUI/CLI/gate…
alt-glitch Jun 19, 2026
3713483
fix(mcp): refresh agent tool snapshot between turns (cache-safe late-…
alt-glitch Jun 19, 2026
b6e2a54
fix(mcp): address adversarial review round 1 (cache parity, gates, ra…
alt-glitch Jun 19, 2026
88d5232
fix(mcp): address adversarial review round 2 (stale-publish race, par…
alt-glitch Jun 19, 2026
f3e967a
fix(mcp): round-3 polish — generation capture adjacency + gateway con…
alt-glitch Jun 19, 2026
16642e2
fix(mcp): revert ACP rebuild to original; harden generation guard
alt-glitch Jun 19, 2026
8dc0b18
refactor(cron): copy os.environ before sanitizing for subprocess
kshitijk4poor Jun 19, 2026
f065088
docs(security): enumerate cron job scripts in §2.3 credential scoping
kshitijk4poor Jun 19, 2026
ba49fb5
fix(discord): hydrate channel context when replying to a message (#49…
teknium1 Jun 19, 2026
4c5217b
Merge pull request #49207 from kshitijk4poor/fix/cron-script-env-sani…
kshitijk4poor Jun 19, 2026
4072205
fix(mcp): keep short-TTL HTTP sessions alive with configurable ping k…
jquesnelle Jun 19, 2026
2bd1977
chore: release v0.17.0 (2026.6.19)
teknium1 Jun 19, 2026
47a7755
Merge upstream v2026.6.19 (Hermes v0.17.0) into feature/slack-http-mode
Jun 22, 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.
73 changes: 73 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,30 @@
.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
Expand All @@ -20,12 +39,66 @@ ui-tui/packages/hermes-ink/dist/

# 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
42 changes: 21 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 Down Expand Up @@ -273,6 +281,13 @@ 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.
Expand Down Expand Up @@ -324,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 @@ -379,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 @@ -419,20 +417,22 @@ 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
Expand Down
2 changes: 1 addition & 1 deletion .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 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
7 changes: 5 additions & 2 deletions .github/actions/hermes-smoke-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,13 @@ runs:
- name: hermes --help
shell: bash
run: |
# Use the image's real ENTRYPOINT (/init + main-wrapper.sh) so
# this exercises the actual production startup path. PR #30136
# review caught that an --entrypoint override here had been
# silently neutered by the s6-overlay migration — stage2-hook
# ignores its CMD args, so the smoke test was a no-op.
docker run --rm \
-v /tmp/hermes-test:/opt/data \
--entrypoint /opt/hermes/docker/entrypoint.sh \
"${{ inputs.image }}" --help

- name: hermes dashboard --help
Expand All @@ -43,5 +47,4 @@ runs:
# installed package.
docker run --rm \
-v /tmp/hermes-test:/opt/data \
--entrypoint /opt/hermes/docker/entrypoint.sh \
"${{ inputs.image }}" dashboard --help
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/pr-screenshots/39327/tools-collapsed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/pr-screenshots/39327/tools-expanded.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/pr-screenshots/45449/billing-confirm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
100 changes: 100 additions & 0 deletions .github/workflows/build-windows-installer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
name: Build Windows Installer

on:
workflow_dispatch:

permissions:
contents: read

jobs:
# Gate: workflow_dispatch is already restricted to users with write access,
# but we want ADMIN-only. Explicitly check the triggering actor's repo
# permission via the API and fail fast for anyone below admin.
authorize:
name: Authorize (admins only)
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Check actor is a repo admin
env:
GH_TOKEN: ${{ github.token }}
ACTOR: ${{ github.actor }}
run: |
set -euo pipefail
perm=$(gh api \
"repos/${{ github.repository }}/collaborators/${ACTOR}/permission" \
--jq '.permission')
echo "Actor '${ACTOR}' has permission: ${perm}"
if [ "${perm}" != "admin" ]; then
echo "::error::'${ACTOR}' is not a repo admin (permission=${perm}). Refusing to build/sign."
exit 1
fi
echo "Authorized: '${ACTOR}' is an admin."

build:
name: Hermes-Setup.exe
needs: authorize
runs-on: windows-latest
timeout-minutes: 30
permissions:
contents: read
# Required for OIDC auth to Azure (azure/login federated credentials).
id-token: write

steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 22
cache: npm

- name: Install npm dependencies
run: npm ci

- name: Setup Rust
uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable

- name: Cache Rust targets
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
workspaces: apps/bootstrap-installer/src-tauri

- name: Build installer
run: npm run tauri:build
working-directory: apps/bootstrap-installer

- name: Azure login (OIDC)
uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: Sign Hermes-Setup.exe with Azure Artifact Signing
uses: azure/artifact-signing-action@c7ab2a863ab5f9a846ddb8265964877ef296ee82 # v2
with:
endpoint: ${{ vars.AZURE_SIGNING_ENDPOINT }}
signing-account-name: ${{ vars.AZURE_SIGNING_ACCOUNT_NAME }}
certificate-profile-name: ${{ vars.AZURE_SIGNING_CERTIFICATE_PROFILE }}
# Sign both the raw exe and the bundled NSIS installer.
files-folder: ${{ github.workspace }}\apps\bootstrap-installer\src-tauri\target\release
files-folder-filter: exe
files-folder-recurse: true
file-digest: SHA256
timestamp-rfc3161: http://timestamp.acs.microsoft.com
timestamp-digest: SHA256

- name: Upload NSIS installer
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: Hermes-Setup-installer
path: apps/bootstrap-installer/src-tauri/target/release/bundle/nsis/*.exe

- name: Upload raw exe
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: Hermes-Setup-exe
path: apps/bootstrap-installer/src-tauri/target/release/Hermes-Setup.exe
25 changes: 18 additions & 7 deletions .github/workflows/contributor-check.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,37 @@
name: Contributor Attribution Check

on:
# No paths filter — the job must always run so the required check
# reports a status (path-gated workflows leave checks "pending" forever
# when no matching files change, which blocks merge).
pull_request:
branches: [main]
paths:
# Only run when code files change (not docs-only PRs)
- '*.py'
- '**/*.py'
- '.github/workflows/contributor-check.yml'

permissions:
contents: read

jobs:
check-attribution:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0 # Full history needed for git log

- name: Check if relevant files changed
id: filter
run: |
BASE="${{ github.event.pull_request.base.sha }}"
HEAD="${{ github.event.pull_request.head.sha }}"
CHANGED=$(git diff --name-only "$BASE"..."$HEAD" -- '*.py' '**/*.py' '.github/workflows/contributor-check.yml' || true)
if [ -n "$CHANGED" ]; then
echo "run=true" >> "$GITHUB_OUTPUT"
else
echo "run=false" >> "$GITHUB_OUTPUT"
echo "No Python files changed, skipping attribution check."
fi

- name: Check for unmapped contributor emails
if: steps.filter.outputs.run == 'true'
run: |
# Get the merge base between this PR and main
MERGE_BASE=$(git merge-base origin/main HEAD)
Expand Down
Loading
Loading