Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3363 commits
Select commit Hold shift + click to select a range
906881c
fix(cli): catch OSError in _resolve_attachment_path to prevent ENAMET…
curiouscleo May 5, 2026
3ce1233
chore(release): map cleo@edaphic.xyz → curiouscleo
teknium1 May 6, 2026
90a7adc
docs(wsl2): expand Windows (WSL2) guide — filesystem, networking, ser…
teknium1 May 6, 2026
b62a82e
docs: pluggable surfaces coverage — model-provider guide, full plugin…
teknium1 May 6, 2026
63c51d8
change: enable ruff/ty
ethernet8023 May 4, 2026
9627ee7
feat(ci): add typecheck (warnings only in CI)
ethernet8023 May 4, 2026
ad7aad2
feat(skills/linear): add Documents support + Python helper script (#2…
teknium1 May 6, 2026
773cf48
docs(plugins): close the gaps \u2014 image-gen-provider-plugin guide …
teknium1 May 6, 2026
09a4914
feat(tui): add /sessions slash command for browsing and resuming prev…
austinpickett May 6, 2026
a24789d
fix(opencode-go): keep users on opencode-go instead of hijacking to n…
teknium1 May 6, 2026
6388aaf
feat(dashboard): add 'default-large' built-in theme with 18px base si…
teknium1 May 6, 2026
cd2cbc7
refactor(web): per-capability backend selection for search/extract split
kshitijk4poor May 6, 2026
5c906d7
feat(web): add SearXNG as a native search-only backend
kshitijk4poor May 6, 2026
94016dd
docs+skill: add searxng-search optional skill and documentation
kshitijk4poor May 6, 2026
48c2418
docs: add Web Search + Extract feature page with SearXNG setup guide
kshitijk4poor May 6, 2026
441ef75
fix(feishu): keep topic replies in threads
yuqianma May 4, 2026
28299af
chore: follow-up cleanup for Feishu topic thread fix
kshitijk4poor May 6, 2026
b1d420e
fix(kanban): avoid fragile failure-column renames
helix4u May 6, 2026
a2ff193
chore: follow-up cleanup for Kanban migration fix
kshitijk4poor May 6, 2026
a345f7b
Merge pull request #19908 from NousResearch/typecheck
ethernet8023 May 6, 2026
946ef0e
fix(tui): bound virtual history offset searches
asheriif May 5, 2026
f4031df
ci(docker): don't cancel overlapping builds, guard :latest
ethernet8023 May 6, 2026
d514dd4
docs(tool-gateway): rewrite as pitch-first marketing page (#20827)
teknium1 May 6, 2026
33bf5f6
fix(auth): fall back to global-root auth.json for providers missing i…
teknium1 May 6, 2026
b71f80e
feat(gateway): per-platform gateway_restart_notification flag
guillaumemeyer May 6, 2026
7df6115
feat(gateway): also gate pre-restart "Gateway restarting" notification
guillaumemeyer May 6, 2026
d8b85bf
chore: add guillaumemeyer to AUTHOR_MAP
teknium1 May 6, 2026
5044e1c
fix(cli): submit LF enter in thin PTYs (#20896)
OutThisLife May 6, 2026
da60198
fix(tui): refresh virtual offsets after row resize (#20898)
OutThisLife May 6, 2026
f1a8e99
fix(tui): honor skin highlight colors (#20895)
OutThisLife May 6, 2026
53a0249
Merge pull request #20890 from NousResearch/fix/docker-push
ethernet8023 May 6, 2026
5ccab51
fix(tui): steady transcript scrollbar (#20917)
OutThisLife May 6, 2026
04cf478
fix(tui): restore voice push-to-talk parity (#20897)
OutThisLife May 6, 2026
3cdbf33
fix(gateway): don't dead-end setup wizard when only system-scope unit…
teknium1 May 6, 2026
65c762b
fix(tui): preserve session when switching personality
austinpickett May 6, 2026
d797755
fix(gateway): wait for systemd restart readiness
helix4u May 6, 2026
5a3cadf
fix(discord): narrow rate-limit catch and move sync state under gateway/
teknium1 May 7, 2026
45cbf93
docs(kanban): fix orchestrator skill setup instructions (#20958)
helix4u May 7, 2026
49c3c2e
docs(kanban): fix worker skill setup instructions too (#20960)
teknium1 May 7, 2026
51f9953
feat(profiles): --no-skills flag for empty profile creation (#20986)
teknium1 May 7, 2026
bd0c54d
fix: route Telegram image documents through photo handling
mrcoferland May 2, 2026
e7eb07c
chore: AUTHOR_MAP entry for mrcoferland
teknium1 May 7, 2026
033e533
test(docker): align Dockerfile contract tests with simplified TUI flow
Sanjays2402 May 2, 2026
595bcc8
test(update): patch isatty on real streams to fix xdist-flaky --yes t…
Sanjays2402 May 2, 2026
a5c9c83
fix(web): force light color-scheme on docs iframe
counterposition May 4, 2026
7d36e83
fix(security): close TOCTOU window when saving MCP OAuth credentials
Gutslabs May 7, 2026
aa56903
chore(release): add Gutslabs to AUTHOR_MAP for PR #21148 salvage
teknium1 May 7, 2026
1f27ca6
test(update): teach restart-mocks about the post-update survivor sweep
Sanjays2402 May 2, 2026
11b9b14
fix(image-routing): expose attached image paths in native multimodal …
briandevans May 3, 2026
fce58cb
feat(optional-skills): port Anthropic financial-services skills as op…
teknium1 May 7, 2026
d4de7d4
test(skills): cover additional rescan paths in skill_commands cache (…
Tranquil-Flow May 3, 2026
7c0766e
fix(gateway): translate inbound document host paths to container path…
ambition0802 May 2, 2026
bf843ad
feat(gateway): opt-in cleanup of temporary progress bubbles (#21186)
teknium1 May 7, 2026
40b51c9
fix(kanban): heartbeat tool extends claim TTL, not just last_heartbea…
stephen0110 May 7, 2026
63bd690
chore(release): map stephen0110 noreply email
teknium1 May 7, 2026
06f2435
fix(kanban): stop reclaimed workers before retry
LeonSGP43 May 7, 2026
b49a3f8
fix(kanban): reap completed worker children in dispatch_once
sonic-netizen May 7, 2026
595e906
chore(release): map sonic-netizen noreply email
teknium1 May 7, 2026
411cfa2
fix: auto-block repeated kanban retries
mwnickerson May 6, 2026
233bfd3
chore(release): map mwnickerson noreply email
teknium1 May 7, 2026
fad684b
feat(gateway): auto-resume interrupted sessions after restart
kyan12 May 6, 2026
961a353
fix(gateway): preserve resume marker on interrupted restart
kyan12 May 6, 2026
38b1c7d
refactor(gateway): simplify auto-resume + extend to crash recovery
teknium1 May 7, 2026
a84e56d
fix(auth): sync shared Nous refresh tokens
quocanh261997 May 5, 2026
429e785
refactor(auth): dedupe file-lock helper; document Nous lock order
teknium1 May 7, 2026
8a96fa4
fix(gateway): avoid duplicated responses history
thelumiereguy May 2, 2026
73d6371
chore: add AUTHOR_MAP entries for thelumiereguy and counterposition
teknium1 May 7, 2026
6e8f1e0
fix(gateway): use monotonic deadlines in QR onboarding flows
Zyproth May 5, 2026
2e00bca
fix(oauth,gateway): monotonic deadlines for polling/timeout loops
teknium1 May 7, 2026
3a0d52d
fix(weixin): replace all aiohttp ClientTimeout with asyncio.wait_for()
May 3, 2026
ecaafe5
test(weixin): update timeout assertion for asyncio.wait_for migration
teknium1 May 7, 2026
d856f45
chore: AUTHOR_MAP entry for chenlinfeng@ruije / @noOne-list
teknium1 May 7, 2026
fb1ce79
feat(security): enable secret redaction by default (#17691, #20785) (…
teknium1 May 7, 2026
8b32a9d
feat: add Discord message deletion action
May 3, 2026
991df4e
chore: AUTHOR_MAP entry for @likejudy
teknium1 May 7, 2026
042eb93
fix(security): close TOCTOU window in hermes_cli/auth.py credential w…
teknium1 May 7, 2026
6969203
fix(delegate): correct ACP docs — Claude Code CLI has no --acp flag
liuhao1024 May 3, 2026
5bf12eb
fix: exclude hidden and archive dirs from _find_skill rglob
Kailigithub May 3, 2026
176b935
fix(gateway): preserve thread routing from cached live session sources
Zyproth May 5, 2026
333598c
fix(gateway): cap cached session sources with LRU eviction
teknium1 May 7, 2026
4f364c4
fix(mcp): give 'mcp add --command' a distinct argparse dest
discodirector May 4, 2026
f0dd5b9
chore: add discodirector email to AUTHOR_MAP
teknium1 May 7, 2026
8d363f8
fix(bedrock): preserve reasoningContent across converse normalization
molvikar May 5, 2026
d34f03c
feat(gateway): support [[as_document]] directive for skill media routing
leon7609 May 3, 2026
e82f3b0
test: update send_message_tool mocks for force_document kwarg
teknium1 May 7, 2026
4e27e4e
chore: AUTHOR_MAP entry for @leon7609
teknium1 May 7, 2026
abe5a3c
fix(model_switch): live model discovery for custom_providers in /mode…
0oAstro May 3, 2026
7137ccc
fix(memory): support OpenViking local resource uploads
ggnnggez Apr 15, 2026
187951e
test(memory): harden OpenViking local upload coverage
ehz0ah May 4, 2026
2b6345c
fix(memory): harden OpenViking local path uploads
ehz0ah May 4, 2026
aa9a209
chore(release): add AUTHOR_MAP entries for ggnnggez and ehz0ah
teknium1 May 7, 2026
699c770
docs(readme): drop misleading RL install-extras claim, defer to CONTR…
deep-name May 3, 2026
fdb9e0f
fix(kanban): auto-block workers that exit without completing (#20894)…
teknium1 May 7, 2026
a0758cd
fix(dashboard): stabilize embedded chat resume and scrollback
nouseman666 May 3, 2026
8aceef5
fix(dashboard): let embedded chat use a single scroll system
nouseman666 May 3, 2026
7cbef2b
fix(dashboard): route browser wheel into inner TUI scrolling
nouseman666 May 3, 2026
eef2335
chore: AUTHOR_MAP entry for @nouseman666
teknium1 May 7, 2026
6d9b306
fix(cli): honor positive tool preview length
GinWU05 May 3, 2026
3c8154e
chore: AUTHOR_MAP entry for @GinWU05
teknium1 May 7, 2026
e38ea38
fix(credential_pool): resolve key mix-up when custom providers share …
May 3, 2026
103e119
feat(cli): show context compression count in status bar
TruaShamu May 1, 2026
f5a232a
refactor: replace 'cmp' text with 🗜️ emoji in status bar
TruaShamu May 2, 2026
3a82172
feat(tui): surface compression count in Ink status bar
teknium1 May 7, 2026
bda7b24
chore(release): map altriatree@gmail.com -> @TruaShamu
teknium1 May 7, 2026
6b9f714
fix(curator): make manual runs synchronous
LeonSGP43 May 6, 2026
6b3a9b4
docs(curator): update CLI docs for synchronous-by-default manual run
teknium1 May 7, 2026
d8d57fb
fix(install): remove uv exclude-newer cutoff
LeonSGP43 May 4, 2026
43a6645
docs: clarify API server tool execution locality
pingchesu May 3, 2026
36ad973
fix(kanban): treat dashboard event-stream cancellation as normal shut…
SandroHub013 May 6, 2026
a5f116f
chore(release): map SandroHub013 email
teknium1 May 7, 2026
fe4748e
test(kanban): regression for CancelledError swallow in stream_events
teknium1 May 7, 2026
61d9e33
fix(model_tools): log plugin hook exceptions instead of silently swal…
sprmn24 May 4, 2026
3c439ec
feat(gateway): add `hermes gateway list` to show all profiles' gatewa…
cixuuz May 3, 2026
c4a7992
fix(mcp-oauth): persist OAuth server metadata across process restarts…
teknium1 May 7, 2026
12289c2
feat: add SSE transport support for MCP client
andrewhosf May 3, 2026
0214858
fix(browser): enforce cloud-metadata SSRF floor in hybrid routing (#1…
teknium1 May 7, 2026
0d3593e
fix: WhatsApp bridge process leak and disable config asymmetry
liuhao1024 May 3, 2026
647f95b
docs(contributing): align tool discovery and test runner with AGENTS.md
xxxigm May 6, 2026
b9f1ac8
fix(kanban): make dashboard board pin authoritative over server curre…
teknium1 May 7, 2026
e9685a5
fix: avoid unsupported anthropic context beta by default
abhinav11082001-stack May 3, 2026
b12a5a7
Follow latest child session on dashboard resume
CCClelo May 3, 2026
6e250a5
fix(openviking): add Bearer auth header and omit empty/legacy tenant …
teknium1 May 7, 2026
c3be6ec
feat: add transform_llm_output plugin hook
JezzaHehn May 6, 2026
47bf5d7
test+docs: cover transform_llm_output hook + release author map
teknium1 May 7, 2026
ae1f058
feat(curator): add `hermes curator list-archived` command (#21236)
teknium1 May 7, 2026
5b24c0f
fix: require memory schema fields by action
altmazza0-star May 3, 2026
2c14d3b
fix(tui): refresh scroll height at cached bottom
counterposition May 6, 2026
8308d18
fix(gateway): preserve max turns after env reload
altmazza0-star May 3, 2026
ef1e565
fix(discord): scope DISCORD_ALLOWED_ROLES to originating guild (CVSS …
0xyg3n Apr 18, 2026
5c045b8
fix(discord): extend role-scope fix to slash surface + fixture update
teknium1 May 7, 2026
80717a1
fix(discord): route DM role-auth opt-in through config.yaml (not env …
teknium1 May 7, 2026
e735089
fix(agent): avoid persisting empty-response recovery scaffolding
wxst May 3, 2026
2021c18
fix(agent): drop terminal empty-response sentinels
wxst May 3, 2026
8dcdc3c
fix(auth): keep Spotify logout from resetting model config
LeonSGP43 May 3, 2026
6e46f99
fix(tui): surface backend error as visible text when final_response i…
teknium1 May 7, 2026
14f3882
fix(models): prefer image modalities for vision routing
LeonSGP43 May 3, 2026
5ead126
fix(doctor): retry DashScope China endpoint
LeonSGP43 May 3, 2026
5cf7032
fix(image-routing): sniff magic bytes for image MIME, ignore misleadi…
shashwatgokhe May 3, 2026
afbcca0
chore: AUTHOR_MAP entry for @shashwatgokhe
teknium1 May 7, 2026
84287b0
fix(docker): refuse root gateway runs in official image
LeonSGP43 May 3, 2026
9442a8f
fix(update): migrate config in non-interactive updates
stevenchouai May 3, 2026
8cef149
chore: AUTHOR_MAP entry for @stevenchouai
teknium1 May 7, 2026
31f2289
fix(matrix): defer reaction cleanup redactions
LeonSGP43 May 3, 2026
a494a61
fix(tui): avoid main-screen scrollback reset loops
LeonSGP43 May 3, 2026
7244a1f
fix(weixin): wrap long copy-unfriendly lines
LeonSGP43 May 3, 2026
c2d6b38
fix(windows): terminal drain and cwd path conversion for native Windows
alanxchen85 May 3, 2026
d12be46
fix(skills): lock usage telemetry updates
LeonSGP43 May 3, 2026
f648c2e
fix: use max_completion_tokens for GitHub Copilot
stormhierta May 3, 2026
4876959
fix(auth): shorten credential 401 cooldown
LeonSGP43 May 3, 2026
2f2f654
fix: add dashboard to CLI help epilogue and Docker CI smoke test
luoyuctl May 3, 2026
498c014
fix(docker): chown runtime node_modules trees to hermes user (#18800)
nudiltoys-cmyk May 3, 2026
b93c9f6
feat(kanban): convert inline-create title input to multiline textarea
JezzaHehn May 7, 2026
fa58274
fix(kanban): restore Enter=submit, Shift+Enter=newline in inline-crea…
teknium1 May 7, 2026
6ea4a6a
fix(vision): Z.AI vision model compatibility — endpoint routing and m…
agilejava May 3, 2026
fd13b7d
chore: AUTHOR_MAP entry for @agilejava
teknium1 May 7, 2026
5533ad7
fix(auxiliary): enforce Codex Responses stream timeout
acc001k May 7, 2026
cfe019c
chore: AUTHOR_MAP entry for @acc001k
teknium1 May 7, 2026
b739fcd
fix(security): require explicit allowlist or TEAMS_ALLOW_ALL_USERS op…
memosr May 3, 2026
a9c7bda
feat(image-gen): honor image_gen.model from config.yaml in plugin dis…
kowenhao May 3, 2026
fcd619c
chore: AUTHOR_MAP entry for @kowenhaoai
teknium1 May 7, 2026
98ca069
fix(gateway): log agent task failures instead of silently losing usag…
wabrent May 7, 2026
b7a97cd
chore: AUTHOR_MAP entry for wabrent
teknium1 May 7, 2026
9575bce
fix(mcp): clear stale thread interrupt before MCP discovery
AJV20 Apr 15, 2026
46d1fc1
chore(release): add AJV20 to AUTHOR_MAP for PR #10287 salvage
teknium1 May 7, 2026
5909526
fix(security): support SRI integrity verification for dashboard plugi…
memosr May 3, 2026
926402d
fix(gateway): surface bootstrap failures to stderr instead of silentl…
wabrent May 7, 2026
4d32f40
fix(gateway): include exception detail in bootstrap warning output
teknium1 May 7, 2026
a9ebee5
Fix WhatsApp long message splitting
hedirman May 3, 2026
25187ca
chore: AUTHOR_MAP entry for @hedirman
teknium1 May 7, 2026
80548f9
fix(mcp): report configured timeout in MCP call errors
masonjames Apr 15, 2026
8aa3040
chore(release): add masonjames to AUTHOR_MAP for PR #10439 salvage
teknium1 May 7, 2026
f7b71aa
fix: use configured model for gateway auth fallback
LucianoSP May 3, 2026
755b74f
chore: AUTHOR_MAP entry for @LucianoSP
teknium1 May 7, 2026
5d90611
fix(gateway): log platform status write failures instead of silently …
wabrent May 7, 2026
0efc547
fix(gateway): consolidate runtime-status writes + rate-limit failure …
teknium1 May 7, 2026
4d48075
fix(gateway): honor configured goal turn budget
paul-tian May 3, 2026
33563df
chore: AUTHOR_MAP entry for @paul-tian
teknium1 May 7, 2026
8ad117a
fix(models): add alibaba-coding-plan to _PROVIDER_MODELS curated list
TakeshiSawaguchi May 4, 2026
a1f85ef
fix(mcp): retry stale pipe transport failures
May 4, 2026
f481395
chore(release): add subtract0 to AUTHOR_MAP for PR #19935 salvage
teknium1 May 7, 2026
f9b4b8a
fix(mcp): include exception type in error messages when str(exc) is e…
liuhao1024 May 3, 2026
2c19212
feat(models): add paid tencent/hy3-preview route on OpenRouter (#21077)
Contentment003111 May 7, 2026
edbbc96
fix(cli): replace get_event_loop() with get_running_loop() to silence…
oluwadareab12 May 4, 2026
30c9990
chore: correct AUTHOR_MAP for oluwadareab12 (was mismapped to bennytimz)
teknium1 May 7, 2026
ec9d0e2
fix(tui): render structured content on resume
glesperance May 4, 2026
6769060
chore: AUTHOR_MAP entry for @glesperance
teknium1 May 7, 2026
52e2777
feat(dashboard): support serving under URL prefix via X-Forwarded-Prefix
cmcgrabby-hue May 4, 2026
a78e622
fix(agent): honor configured model max tokens
LeonSGP43 May 4, 2026
e795b7e
fix(delegate): expand composite toolsets before intersection in deleg…
luyao618 May 4, 2026
fc88eec
fix(compressor): soften summary prompt for content filters
LeonSGP43 May 4, 2026
76d2dcd
fix(kanban): make code/pre styling theme-immune across all themes (#2…
teknium1 May 7, 2026
6a4ecc0
fix(whatsapp): reject strangers by default, never respond in self-cha…
teknium1 May 7, 2026
cd3ef68
feat(slack): add allowed_channels whitelist config
CashWilliams Apr 10, 2026
f5c9bb5
chore(release): add CashWilliams to AUTHOR_MAP
teknium1 May 7, 2026
69d025e
feat(gateway): add allowed_{chats,channels,rooms} whitelist to Telegr…
teknium1 May 7, 2026
3924cb4
fix: strip Codex-hostile top-level schema combinators
hrkzogw May 7, 2026
5a3e5b2
fix(memory): remove dead allOf schema block at the source
teknium1 May 7, 2026
e0a2b08
fix(mcp): re-raise CancelledError explicitly in MCPServerTask.run (#2…
teknium1 May 7, 2026
12a0f59
fix(dashboard): finish resumeId -> resumeParam rename in ChatPage (#2…
teknium1 May 7, 2026
d5fcc83
fix(tests): avoid asyncio DeprecationWarning in event loop fixture on…
xxxigm May 7, 2026
4ee6c33
chore(release): map tuancanhnguyen706@gmail.com → xxxigm
teknium1 May 7, 2026
dd2dc2b
fix(mcp): forward OAuth auth and bump sse_read_timeout on SSE transpo…
teknium1 May 7, 2026
c8e3e39
fix(mcp): surface image tool results as MEDIA tags instead of droppin…
teknium1 May 7, 2026
af9336d
feat(gateway): generic plugin hooks for env enablement + cron delivery
teknium1 May 7, 2026
44cd79e
feat(plugins/google_chat): Google Chat platform adapter as a bundled …
donramon77 May 7, 2026
be87a96
refactor(plugins/platforms): migrate IRC + Teams to new env_enablemen…
teknium1 May 7, 2026
43cf72a
chore(release): map donramon77 to AUTHOR_MAP for PR #18425 salvage
teknium1 May 7, 2026
62c2f5d
fix(mcp): coerce numeric tool args defensively
qWaitCrypto May 7, 2026
1baab87
chore(release): add qWaitCrypto to AUTHOR_MAP for PR #21055 salvage
teknium1 May 7, 2026
145e8ec
fix(pairing): enforce lockout on approve_code, not just generate_code…
teknium1 May 7, 2026
ff09853
docs(readme): prefer .venv to match AGENTS.md and scripts/run_tests.s…
xxxigm May 7, 2026
ac51c4c
feat(kanban): per-task max_retries override (#20263 follow-up, supers…
teknium1 May 7, 2026
9feaeb6
feat(qqbot): add chunked upload with structured error types
WideLee May 7, 2026
de584cd
feat(qqbot): add inline-keyboard approvals and update prompts
WideLee May 7, 2026
5b121c6
feat(qqbot): process attachments in quoted (reply) messages
WideLee May 7, 2026
5c08b85
docs(platforms): document env_enablement_fn + cron_deliver_env_var ho…
teknium1 May 7, 2026
fb4f953
fix: block INSECURE_NO_AUTH on non-localhost webhook bindings
0z1-ghb May 7, 2026
898b6d7
fix(webhook): widen INSECURE_NO_AUTH loopback check + tests + docs
teknium1 May 7, 2026
74c9c0e
fix(mcp): gate utility stubs on server-advertised capabilities (#21347)
teknium1 May 7, 2026
f4de381
test(kanban): cover dashboard select filter wiring
maciekczech May 4, 2026
162ad3d
fix(kanban): filter dashboard board by selected tenant
maciekczech May 4, 2026
bbff2f6
chore(release): map maciekczech noreply email
teknium1 May 7, 2026
a1fe5f4
fix(cron): scan assembled prompt including skill content (#3968) (#21…
teknium1 May 7, 2026
4de3ef3
feat(qqbot): wire native tool-approval UX via inline keyboards
WideLee May 7, 2026
0491834
fix(cron): initialize MCP servers before constructing the cron AIAgen…
teknium1 May 7, 2026
1d2029b
fix(update): reset-failed before every fallback restart so the gatewa…
teknium1 May 7, 2026
812ce0b
fix(run_agent): break permanent empty-response loop from orphan tool-…
teknium1 May 7, 2026
2564132
fix(telegram): preserve thread_id=1 for forum General typing indicato…
teknium1 May 7, 2026
498bfc7
chore: release v0.13.0 (2026.5.7) (#21406)
teknium1 May 7, 2026
733e297
fix(acp): inline file attachment resources
HenkDz May 7, 2026
7e2af0c
feat(acp): pass image file attachments through as image_url parts
teknium1 May 7, 2026
cdc0a47
test(hermes_constants): cover parse_reasoning_effort()
xxxigm May 7, 2026
04193cf
feat(web): add Brave Search (free tier) and DDGS search providers
Abd0r May 7, 2026
54c0b10
fix(update): add heartbeat during dependency install
adybag14-cyber May 7, 2026
da18fd0
fix: strengthen termux install network prerequisites
adybag14-cyber May 7, 2026
dc5ef1a
fix: add termux-all install profile and safe fallbacks
adybag14-cyber May 7, 2026
732a6c4
feat: add termux doctor fallback guidance for blocked extras
adybag14-cyber May 7, 2026
24d48ff
feat(kanban): add `specify` — auxiliary LLM fleshes out triage tasks …
teknium1 May 7, 2026
9076a2e
fix(agent): keep Nous GPT-5 fallback on chat completions
voteblake May 4, 2026
2214ab1
chore: fix AUTHOR_MAP for johnsonblake1@gmail.com → voteblake
teknium1 May 7, 2026
cff821e
docs: register triage_specifier in the aux-models enumerations (#21494)
teknium1 May 7, 2026
d87c7b9
fix(analytics): prevent silent token loss and add Claude 4.5–4.7 pric…
austinpickett May 7, 2026
292f468
fix(mcp): unwrap platforms key in channels_list
teknium1 May 7, 2026
c80fa72
fix(installer): set UV_NO_CONFIG=1 to avoid permission denied under s…
hllqkb May 7, 2026
7f369bf
chore(release): add hllqkb to AUTHOR_MAP for PR #21288 salvage
teknium1 May 7, 2026
b0393af
Merge pull request #20805 from NousResearch/austin-feat-sessions-skil…
austinpickett May 7, 2026
7f92e55
Merge pull request #20942 from NousResearch/austin/fix/personality
austinpickett May 7, 2026
7d66d30
feat(kanban): add tooltips and docs link across dashboard (#21541)
teknium1 May 7, 2026
383fe21
Merge remote-tracking branch 'origin/main' into local/dev-runtime
May 8, 2026
021b1f1
fix: bound slack approval block text
May 17, 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
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,15 @@

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

# 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
Expand All @@ -14,3 +22,10 @@ node_modules
.env

*.md

# Runtime data (bind-mounted at /opt/data; must not leak into build context)
data/

# Compose/profile runtime state (bind-mounted; avoid ownership/secret issues)
hermes-config/
runtime/
55 changes: 55 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,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 Down Expand Up @@ -235,6 +244,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 Down Expand Up @@ -389,3 +407,40 @@ IMAGE_TOOLS_DEBUG=false
# Override STT provider endpoints (for proxies or self-hosted instances)
# GROQ_BASE_URL=https://api.groq.com/openai/v1
# STT_OPENAI_BASE_URL=https://api.openai.com/v1

# =============================================================================
# MICROSOFT TEAMS INTEGRATION
# =============================================================================
# Register a Bot in Azure: https://dev.botframework.com/ → "Register a bot"
# Or use Azure Portal: Azure Active Directory → App registrations → New registration
# Then add the bot to Teams via the Bot Framework or App Studio.
#
# TEAMS_CLIENT_ID= # Azure AD App (client) ID
# TEAMS_CLIENT_SECRET= # Azure AD client secret value
# TEAMS_TENANT_ID= # Azure AD tenant ID (or "common" for multi-tenant)
# TEAMS_ALLOWED_USERS= # Comma-separated AAD object IDs or UPNs
# TEAMS_ALLOW_ALL_USERS=false # Set true to skip the allowlist
# TEAMS_HOME_CHANNEL= # Default channel/chat ID for cron delivery
# TEAMS_HOME_CHANNEL_NAME= # Display name for the home channel
# TEAMS_PORT=3978 # Webhook listen port (Bot Framework default)

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

use flake
18 changes: 18 additions & 0 deletions .github/actions/nix-setup/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: 'Setup Nix'
description: 'Install Nix and configure Cachix binary cache'

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

runs:
using: composite
steps:
- uses: DeterminateSystems/nix-installer-action@ef8a148080ab6020fd15196c2084a2eea5ff2d25 # v22
- uses: cachix/cachix-action@1eb2ef646ac0255473d23a5907ad7b04ce94065c # v17
with:
name: hermes-agent
authToken: ${{ inputs.cachix-auth-token }}
continue-on-error: true
44 changes: 44 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Dependabot configuration for hermes-agent.
#
# Deliberately scoped to github-actions only.
#
# We do NOT enable Dependabot for pip / npm / any source-dependency ecosystem
# because we pin source dependencies exactly (uv.lock, package-lock.json) as
# part of our supply-chain posture. Automatic version-bump PRs against those
# pins would undermine the strategy — pins are moved deliberately, after
# review, not on a schedule.
#
# github-actions is the exception: action pins (we use full commit SHAs per
# supply-chain policy) must be updated when upstream actions publish
# patches — usually themselves security fixes. Dependabot opens a PR with
# the new SHA and release notes; we review and merge like any other PR.
#
# Security-update PRs for source dependencies (opened ONLY when a CVE is
# published affecting a currently-pinned version) are enabled separately
# via the repo's Dependabot security updates setting
# (Settings → Code security → Dependabot → Dependabot security updates).
# Those are CVE-only, not schedule-driven, and do not conflict with our
# pinning strategy — they fire when a pinned version becomes known-bad,
# which is exactly when we want to move the pin.

version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "github-actions"
commit-message:
prefix: "chore(actions)"
include: "scope"
groups:
# Batch routine action bumps into one PR per week to reduce noise.
# Security updates still open individually and bypass grouping.
actions-minor-patch:
update-types:
- "minor"
- "patch"
31 changes: 23 additions & 8 deletions .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
name: Deploy Site

on:
release:
types: [published]
push:
branches: [main]
paths:
- 'website/**'
- 'landingpage/**'
- 'skills/**'
- 'optional-skills/**'
- '.github/workflows/deploy-site.yml'
Expand All @@ -20,8 +21,14 @@ concurrency:
cancel-in-progress: false

jobs:
build-and-deploy:
# Only run on the upstream repository, not on forks
deploy-vercel:
if: github.event_name == 'release'
runs-on: ubuntu-latest
steps:
- name: Trigger Vercel Deploy
run: curl -X POST "${{ secrets.VERCEL_DEPLOY_HOOK }}"

deploy-docs:
if: github.repository == 'NousResearch/hermes-agent'
runs-on: ubuntu-latest
environment:
Expand All @@ -46,6 +53,9 @@ jobs:
- name: Extract skill metadata for dashboard
run: python3 website/scripts/extract-skills.py

- name: Regenerate per-skill docs pages + catalogs
run: python3 website/scripts/generate-skill-docs.py

- name: Build skills index (if not already present)
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -65,12 +75,17 @@ jobs:
- name: Stage deployment
run: |
mkdir -p _site/docs
# Landing page at root
cp -r landingpage/* _site/
# Docusaurus at /docs/
cp -r website/build/* _site/docs/
# CNAME so GitHub Pages keeps the custom domain between deploys
echo "hermes-agent.nousresearch.com" > _site/CNAME
# llms.txt / llms-full.txt are also published at the site root
# (https://hermes-agent.nousresearch.com/llms.txt) because some
# agents and IDE plugins probe the classic root-level path rather
# than /docs/llms.txt. Same file, two URLs, one source of truth.
if [ -f website/build/llms.txt ]; then
cp website/build/llms.txt _site/llms.txt
fi
if [ -f website/build/llms-full.txt ]; then
cp website/build/llms-full.txt _site/llms-full.txt
fi

- name: Upload artifact
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
Expand Down
Loading
Loading