Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1821 commits
Select commit Hold shift + click to select a range
e3f0a88
feat(web): extend ABC with supports_crawl and async-extract semantics
kshitijk4poor May 13, 2026
ec8449e
feat(web): exa plugin — first multi-capability migration (search + ex…
kshitijk4poor May 13, 2026
4816646
feat(web): parallel plugin — first async-extract plugin
kshitijk4poor May 13, 2026
31fcde8
feat(web): tavily plugin — first three-capability plugin (search + ex…
kshitijk4poor May 13, 2026
143184e
feat(web): firecrawl plugin — largest migration (search + async extra…
kshitijk4poor May 13, 2026
b05253c
refactor(web): dispatch all three tools through web_search_registry
kshitijk4poor May 13, 2026
5e54330
fix(web): preserve firecrawl crawl + website-policy gate after migration
kshitijk4poor May 13, 2026
748f3e0
refactor(web): delete inline vendor helpers, re-export from plugins
kshitijk4poor May 13, 2026
24fe60f
refactor(tools): drop hardcoded web picker rows + skiplist; plugins a…
kshitijk4poor May 13, 2026
39b4ebf
refactor(web): delete legacy tools/web_providers/ directory + migrate…
kshitijk4poor May 13, 2026
e8cee87
test(plugins): tests/plugins/web/ — coverage for the 7-plugin migration
kshitijk4poor May 13, 2026
21e3a86
feat(web): firecrawl plugin natively supports crawl; delete legacy in…
kshitijk4poor May 13, 2026
657e6d8
fix(web): align _LEGACY_PREFERENCE with legacy 7-provider order + doc…
kshitijk4poor May 13, 2026
4ca5e72
fix(web): preserve top-level error envelope on unconfigured systems
kshitijk4poor May 13, 2026
d18618f
fix(honcho): respect HOME-anchored default profile fallback
iacker Apr 8, 2026
c872f07
fix(tests): exercise profile-mode HERMES_HOME for honcho fallback
teknium1 May 14, 2026
8db544b
fix(clipboard): reject non-png clipboard images when png normalizatio…
Dusk1e Apr 8, 2026
d110ce4
fix(clipboard): only read PNG signature bytes, not entire file
teknium1 May 14, 2026
8f19078
feat(goals): /subgoal — user-added criteria appended to active /goal …
teknium1 May 14, 2026
5f234d4
fix(cli): harden skin yaml parsing for invalid section types
Dusk1e Apr 8, 2026
35ce94a
fix(tests): correct skin engine test API call
teknium1 May 14, 2026
31b4721
fix: simplify ACP approval bridging
mrshu Apr 8, 2026
16796ac
chore(release): add AUTHOR_MAP entry for mrshu
teknium1 May 14, 2026
2ff744a
chore(release): add AUTHOR_MAP entries for 25-PR new-contributor batch
teknium1 May 14, 2026
796c8a2
docs(user-guide): point tirith link to correct repo
domtriola May 14, 2026
8de26e2
docs(lsp): replace "git worktree" with "git repository" in LSP docs
freqyfreqy May 14, 2026
efa97af
fix(agent): add Xiaomi MiMo to reasoning_content echo-back providers
ephron-ren May 14, 2026
b59ed9c
fix(discord): handle forwarded messages via message_snapshots
1RB May 14, 2026
057f5a3
fix(auxiliary): skip providers without credentials immediately
AllynSheep May 14, 2026
fd9c150
fix: gateway PID detection fails on Windows (two issues)
Tianyu199509 May 14, 2026
bd33a48
feat(whatsapp): surface quoted reply metadata
kfa-ai May 14, 2026
00ad3d3
fix: show context compaction status
raymaylee May 14, 2026
71191b7
fix(gateway): make Feishu ws connect override sync to preserve contex…
pearjelly May 14, 2026
f0e46c5
fix: do not inherit api_mode when delegating across providers
fu576 May 14, 2026
8199ec3
fix(gateway): keep QQBot reconnect loop alive
magic524 May 14, 2026
7becb19
fix(auxiliary): forward custom_providers to compression model context…
PaTTeeL May 14, 2026
55ba02b
fix(background-review): silence memory provider teardown output leak
ayushere May 14, 2026
c76e879
feat: add NovitaAI as LLM provider
Alex-yang00 Apr 10, 2026
1551ce4
docs: update NovitaAI description to "90+ models, pay-per-use"
Alex-yang00 Apr 13, 2026
0f0e20e
test(novita): cache pricing, add provider test coverage, AUTHOR_MAP e…
kshitijk4poor May 14, 2026
ddb8d8f
docs: update NovitaAI provider positioning (#25532)
Alex-yang00 May 14, 2026
c75e1a0
fix(install): preserve pip entry point when re-running on symlinked i…
Tranquil-Flow May 7, 2026
1dca6a6
feat(discord): render clarify choices as buttons
teknium1 May 14, 2026
17e0e9d
fix(cli): allow rotating broken OpenRouter / AI Gateway key in `herme…
teknium1 May 14, 2026
524490a
fix(install.ps1): pin uv sync to venv\, verify baseline imports on Wi…
teknium1 May 14, 2026
a694040
fix(telegram): escape dynamic markdown in callback flows
phuongvm May 13, 2026
26deeea
fix(telegram): restore model-switch success path + author map
teknium1 May 14, 2026
63991bb
fix(memory): skip OpenViking upload symlinks
binhnt92 May 12, 2026
12f755c
fix(codex-runtime): retire wedged sessions + post-tool watchdog + OAu…
teknium1 May 14, 2026
d8fdec1
chore(release): add AUTHOR_MAP entries for second new-contributor batch
teknium1 May 14, 2026
8ae65d5
fix: read approvals.timeout from config in CLI approval callback
Arkmusn May 14, 2026
c03acca
fix: use AUTOINCREMENT id for message ordering instead of timestamp
yifengingit May 14, 2026
1dd3398
docs: clarify media impact on session context
evgyur May 14, 2026
1247ff2
fix: stop retrying initial MCP auth failures
AsoTora May 14, 2026
f26098e
fix(gateway): enable text-intercept for multi-choice clarify fallback…
zccyman May 14, 2026
a952ca3
fix: restrict .env file permissions to 0600
vanthinh6886 May 14, 2026
3adde24
fix(gateway): forward image attachments to background agent tasks
oxngon May 14, 2026
364ddd4
fix(terminal): prevent safety filter false positives on keywords insi…
wesleysimplicio May 14, 2026
529ec85
chore(release): map oswaldb22 noreply email for AUTHOR_MAP
wesleysimplicio May 14, 2026
436a0a2
test(toolsets): lock web search into default platform coverage
wesleysimplicio May 14, 2026
72b5dd8
fix(update): refresh lazy-installed backends on hermes update (#25766)
teknium1 May 14, 2026
26933c2
fix(agent/gemini-cloudcode): seed delta defaults for reasoning-only s…
EthanGuo-coder May 14, 2026
78b842c
fix(install): support non-sudo service-user installs on apt distros (…
teknium1 May 14, 2026
b08f53a
skill(comfyui): add template-integrity reference from @purzbeats (#25…
teknium1 May 14, 2026
9ed751b
fix(whatsapp): drop status broadcasts and channel newsletters before …
teknium1 May 14, 2026
cd64bed
Merge pull request #21012 from stephenschoettler/fix/ci-pr-check-unblock
ethernet8023 May 14, 2026
5ce0067
fix(ci): stabilize shared test state after 21012
stephenschoettler May 14, 2026
d44dafd
fix(telegram): set REQUIRES_EDIT_FINALIZE so final MarkdownV2 edit is…
luyao618 May 14, 2026
b4b8509
fix(gateway): load streaming config from nested gateway.streaming key
luyao618 May 14, 2026
bc42e62
fix(gateway): prevent duplicate final send when only cosmetic edit fa…
VTRiot Apr 21, 2026
a28add1
fix(agent): keep image tool results from poisoning text-only sessions
helix4u May 14, 2026
fe83c40
fix(codex-app-server): attach redacted stderr tail to generic failure…
teknium1 May 14, 2026
06c6c1f
fix(cli): batch resize history replay
1000Delta May 13, 2026
7bf66a0
chore(release): map @1000Delta in AUTHOR_MAP
teknium1 May 14, 2026
6244535
fix(voice): remove per-tool-call beep in CLI voice mode (#25967)
teknium1 May 14, 2026
ac64d0c
fix: preserve ansi output history on resize replay
LeonSGP43 May 12, 2026
f491b07
chore(release): map @LeonSGP43 commit email in AUTHOR_MAP
teknium1 May 14, 2026
2844c88
fix(cli): clamp scrollback box widths + suppress status bar after res…
teknium1 May 14, 2026
4813aaf
fix(ui-tui): heal same-dimension alt-screen resize drift
May 1, 2026
34fc94d
chore(release): map @luoyuctl in AUTHOR_MAP
teknium1 May 14, 2026
ccb5aae
feat(proxy): local OpenAI-compatible proxy for OAuth providers (#25969)
teknium1 May 14, 2026
e84fe48
feat(discord): channel history backfill for multi-user sessions
simpolism May 14, 2026
4abfb6b
feat(discord): default history backfill on, expand to per-user + threads
teknium1 May 14, 2026
ed84637
fix(web): make sync-assets script cross-platform
HxT9 May 14, 2026
1907152
fix(lsp): shift baseline diagnostics into post-edit coordinates (#25978)
teknium1 May 14, 2026
0854640
fix(web): cross-platform sync-assets + surface build errors on failure
johnisag May 14, 2026
38ea2a5
fix(web): handle non-UTF8 Windows console encodings in _build_web_ui
johnisag Apr 21, 2026
db82c45
chore(release): map agorgianitisj@hotmail.com -> johnisag
teknium1 May 14, 2026
09d9701
fix(proxy): suppress false-positive windows-footgun on guarded add_si…
teknium1 May 14, 2026
d6c488f
fix(cli): wire /sessions slash command in the classic CLI
explainanalyze May 13, 2026
74e47c0
chore(release): map phil.thomas@gametime.co -> explainanalyze
teknium1 May 14, 2026
55622b5
chore(release): map phil.thomas@gametime.co -> explainanalyze
teknium1 May 14, 2026
1702a94
Merge pull request #25957 from stephenschoettler/fix/main-ci-unblocke…
ethernet8023 May 15, 2026
8ed2ef6
fix(browser): use correct env var for --no-sandbox bypass
Jaggia May 13, 2026
4695d27
fix(browser): honor pre-set AGENT_BROWSER_ARGS and document the bypass
teknium1 May 14, 2026
ad7d3bc
test(e2e): fix Discord mock exception surface
stephenschoettler May 15, 2026
e8a4c85
test(run-agent): isolate Nous provider parity model
stephenschoettler May 15, 2026
eabd8c1
fix(cli): fall back to SelectSelector when kqueue can't watch stdin
geocaching-jeremy May 6, 2026
d3d5916
chore(release): add AUTHOR_MAP entry for outdoorsea
teknium1 May 15, 2026
e8b9f5f
fix(aux): surface Nous auth-unavailable warning in auxiliary client
0xharryriddle May 15, 2026
4c94396
feat: add ACP registry metadata for Zed
am423 May 14, 2026
d364132
chore(release): bump ACP Registry assets in lockstep with pyproject
teknium1 May 15, 2026
5af672c
chore: remove Atropos RL environments and tinker-atropos integration …
alt-glitch May 15, 2026
c8c6ce1
feat(acp-registry): switch to uvx distribution, drop npm launcher
teknium1 May 15, 2026
bcca5ed
fix(deps): pin brotlicffi so aiohttp can decode Discord's Brotli atta…
teknium1 May 15, 2026
f8745f5
fix(cli): kill resize scrollback duplication + light-mode visibility
OutThisLife May 15, 2026
cbd1f8e
test(cli): cover light-mode detection + SkinConfig.get_color remap
teknium1 May 15, 2026
965ae7f
revert(cli): drop scrollback box width clamp (#25975), restore full-w…
teknium1 May 15, 2026
f9ad740
fix(goals): raise judge max_tokens 200 → 4096, make configurable
teknium1 May 15, 2026
6bdad1f
ci: add PyPI publish workflow (salvaged from #25901) (#26148)
alt-glitch May 15, 2026
d57a4b3
feat(yuanbao): add _parse_resource_id and update _extract_text for yb…
libo1106 May 9, 2026
80efe66
feat(yuanbao): add quote_media_refs extraction to QuoteContextMiddleware
libo1106 May 9, 2026
3df26b9
feat(yuanbao): prioritize quote media refs over history backfill in D…
libo1106 May 9, 2026
fc2754d
fix(yuanbao): resolve quoted file/image via transcript lookup when qu…
libo1106 May 9, 2026
0086cda
refactor(yuanbao): improve quote media fallback — move to DispatchMid…
libo1106 May 9, 2026
e0e4856
feat(skills-hub): add huggingface/skills as trusted default tap (#2549)
kshitijk4poor May 15, 2026
e0e7397
fix(session): persist auto-reset state across gateway restarts
teyrebaz33 Mar 22, 2026
23ac522
fix(gateway): isinstance-guard string-form 429 error body
KiraKatana May 15, 2026
814c600
fix: clean stale conversation mappings on response eviction/deletion
CoinTheHat Mar 23, 2026
0161d4b
chore(release): add AUTHOR_MAP entry for CoinTheHat
teknium1 May 15, 2026
681778a
fix(whatsapp): fail fast when Baileys sendMessage hangs
wysie May 15, 2026
04b1fda
security(deps): add upper bounds to 5 loose deps + document supply ch…
alt-glitch May 15, 2026
9329e06
feat(image-gen): actionable setup message when no FAL backend is reac…
teknium1 May 15, 2026
05d9f64
docs(cron): worked recipes for the wakeAgent pre-run gate (#26229)
teknium1 May 15, 2026
6682f91
feat(cron): support name-based lookup for job operations
kpmfyi May 15, 2026
9f57f22
chore(release): add AUTHOR_MAP entry for buntingszn
teknium1 May 15, 2026
85782a4
feat(acp): hermes acp --setup-browser bootstraps browser tools for re…
teknium1 May 15, 2026
09d9724
feat(gateway): add SimpleX Chat platform plugin
Mibayy May 15, 2026
47614db
chore: wire simplex docs into sidebar + AUTHOR_MAP
teknium1 May 15, 2026
b6e0741
feat(cli): show YOLO mode warning in banner and status bar
Mibayy May 15, 2026
4f8aaf1
perf(run_agent): accumulate length-continuation prefix via list+join
InB4DevOps May 15, 2026
647cc0b
chore(release): add AUTHOR_MAP entries for InB4DevOps
teknium1 May 15, 2026
5360b54
fix(providers): set User-Agent on ProviderProfile.fetch_models
teknium1 May 15, 2026
55f3262
fix(mcp): pre-compile env-var regex and unify interpolation
amethystani Mar 24, 2026
59c7cc6
chore(release): add AUTHOR_MAP entry for amethystani
teknium1 May 15, 2026
c4a21d7
fix(cli): log swallowed exception in runtime model auto-detection
nidhi-singh02 Mar 24, 2026
5301cc2
chore(release): add AUTHOR_MAP entry for nidhi-singh02
teknium1 May 15, 2026
eacb398
fix(tools): add return_exceptions to asyncio.gather in web_tools
nidhi-singh02 May 15, 2026
94bdc63
chore(release): add AUTHOR_MAP entry for nidhi-singh02
teknium1 May 15, 2026
8373956
fix(slack): guard split()[0] against whitespace-only command text
nidhi-singh02 May 15, 2026
6af9942
fix(url-safety): allow only http and https schemes
aydnOktay Mar 24, 2026
13c72fb
fix(tools): wrap browser provider network calls with error handling
nidhi-singh02 May 15, 2026
2742173
fix(codex-runtime): keep migrated root keys top-level
steezkelly May 14, 2026
7727607
fix(codex-runtime): de-dup [plugins.X] tables and stop leaking HERMES…
kshitijk4poor May 15, 2026
f199cd9
chore(release): map brian@dralth.com to btorresgil for #22345 salvage…
kshitijk4poor May 15, 2026
db84a78
fix(langfuse): complete observability fix — trace I/O, tool outputs, …
kshitijk4poor May 15, 2026
d541628
fix(tui): autonomous background process completion notifications (#26…
alt-glitch May 15, 2026
9fb40e6
fix(tui): restrict fast-echo bypass to ASCII so Vietnamese/CJK/IME in…
OutThisLife May 15, 2026
b62c997
feat(xai-oauth): add xAI Grok OAuth (SuperGrok Subscription) provider
Jaaneek May 15, 2026
e4d7a5d
fix(tools): video_gen picker reflects active xAI selection and runs x…
Jaaneek May 15, 2026
9eef53b
chore(release): map Jaaneek@users.noreply.github.com to Jaaneek
Jaaneek May 15, 2026
e13c1b8
fix(xai-http): preserve ~/.hermes/.env fallback and XAI_STT_BASE_URL …
Jaaneek May 15, 2026
7fdc16d
refactor(transports/codex): trim duplicated cache-key comments
Jaaneek May 15, 2026
1e4801b
docs(xai-oauth): correct logout command (was hermes auth remove)
Jaaneek May 15, 2026
7d7cdd4
test(xai-oauth): use grok-4.3 instead of retiring grok-code-fast-1
Jaaneek May 15, 2026
aac6d97
chore(xai-oauth): trim CORS allowlist to xAI auth origins
teknium1 May 15, 2026
4ad5fa7
docs(xai-oauth): add xai-oauth to provider enumeration pages (#26542)
teknium1 May 15, 2026
734aa0f
fix(cronjob): require explicit truthy session env values
aydnOktay Mar 24, 2026
931caf2
fix(env-flags): widen truthy-only session env checks to sibling sites
teknium1 May 15, 2026
4e89c53
fix(async): close unscheduled coroutines in all threadsafe bridges (#…
teknium1 May 15, 2026
13c3d4b
feat(nvidia): add NIM billing origin header
nv-kasikritc May 13, 2026
6fc0fa6
chore(release): add AUTHOR_MAP entry for kchantharuan@nvidia.com
teknium1 May 15, 2026
4444d5f
fix(acp): emit native plan updates for todo
HenkDz May 15, 2026
bd3a587
fix(acp): replay native todo plans
HenkDz May 15, 2026
622c27e
fix(install.ps1): restore EAP=Continue around uv python install, skip…
teknium1 May 15, 2026
9e67c8e
Merge pull request #26048 from stephenschoettler/fix/discord-e2e-hist…
ethernet8023 May 15, 2026
3b9368a
fix(auth): point SSH OAuth users at the tunnel they actually need (#2…
teknium1 May 15, 2026
518f395
fix(gateway): keep running when platforms fail; add per-platform circ…
teknium1 May 15, 2026
032fb84
docs(hermes_tools_mcp_server): align scope docstring with EXPOSED_TOO…
teknium1 May 15, 2026
3215ef1
ci(pypi): build web dashboard + TUI bundle before creating wheel
alt-glitch May 15, 2026
384ec96
feat(banner): check PyPI for updates when not a git install
alt-glitch May 15, 2026
cc07e30
feat(install): add --ensure and --postinstall modes for targeted dep …
alt-glitch May 15, 2026
c4bda3f
fix(doctor): generate config from defaults when template file is missing
alt-glitch May 15, 2026
d69eab1
fix(gateway): build service PATH from existing dirs only, include ~/.…
alt-glitch May 15, 2026
b2bf658
feat(tui): find bundled entry.js from wheel before falling back to np…
alt-glitch May 15, 2026
624ce11
feat(config): detect pip install method and recommend correct update …
alt-glitch May 15, 2026
79afa50
feat(update): support pip install --upgrade for PyPI installs
alt-glitch May 15, 2026
bea96e5
chore(config): expand ensure_hermes_home to create full directory sca…
alt-glitch May 15, 2026
259ae84
feat: add ensure_dependency() wrapper + ship install.sh in wheel
alt-glitch May 15, 2026
96917fb
refactor: fix review findings — remove duplicate imports and deduplic…
alt-glitch May 15, 2026
55a7c45
fix(update): handle --check for pip installs (missed code path)
alt-glitch May 15, 2026
e38a478
chore(ci): pin actions/setup-node to SHA for supply-chain consistency
alt-glitch May 15, 2026
c57709a
feat: wire ensure_dependency into TUI and browser tool call sites
alt-glitch May 15, 2026
b1edf3d
chore: gitignore hermes_cli/scripts/ (bundled at wheel build time)
alt-glitch May 15, 2026
99b81cd
feat: add `hermes postinstall` command for pip users
alt-glitch May 15, 2026
164a77d
docs: add pip install path to installation, quickstart, updating, and…
alt-glitch May 15, 2026
47c0efe
refactor: DRY cleanup from code review
alt-glitch May 15, 2026
a480d34
docs: add hermes postinstall to installation + quickstart, fix update…
alt-glitch May 15, 2026
233d417
docs(xai): link OAuth-over-SSH guide from xAI provider surfaces (#26610)
teknium1 May 15, 2026
887ba1f
ci: reject PRs with no common ancestor on main (#26611)
teknium1 May 15, 2026
42070ec
feat(skills/notion): overhaul for Notion Developer Platform (May 2026…
teknium1 May 15, 2026
2d7182f
fix(delegate): move heartbeat thread start inside try block to preven…
sprmn24 May 15, 2026
6068363
fix(delegate): guard heartbeat join against unstarted thread
teknium1 May 15, 2026
7fee1f6
fix(memory): eliminate TOCTOU race in Windows file lock creation
sprmn24 May 15, 2026
4aec25b
fix(windows): stop spamming cwd-missing + tirith-spawn warnings on ev…
teknium1 May 15, 2026
31ba2b0
fix(xai-oauth): recover from prelude SSE errors, gate reasoning repla…
teknium1 May 15, 2026
068c24f
feat(deepseek): add thinking.type + reasoning_effort mapping for Deep…
twebefy28 Apr 24, 2026
cd9470f
fix(deepseek): wire thinking-mode via DeepSeekProfile, not legacy fal…
teknium1 May 15, 2026
dc4cde2
feat(docs): show per-skill pages in the left sidebar (#26646)
teknium1 May 16, 2026
ce0e189
fix(xai-oauth): break entitlement-403 credential-refresh loop, bump g…
teknium1 May 16, 2026
9818b9a
fix(xai-oauth): rewrite entitlement-403 hint to not accuse subscriber…
teknium1 May 16, 2026
6784c80
fix(xai-oauth): lead entitlement-403 hint with X Premium+ gotcha (#26…
teknium1 May 16, 2026
566d8f0
fix(tui): keep DECSTBM scroll region off bottom row (#26683)
OutThisLife May 16, 2026
006937f
fix(tui): handle timeout/error subagent statuses in /agents (#26687)
OutThisLife May 16, 2026
55c9f32
fix(tui): width-aware markdown table rendering with vertical fallback…
alt-glitch May 16, 2026
86a368d
remove pip installation method from docs
jquesnelle May 16, 2026
c7db6a5
Merge pull request #26702 from NousResearch/remove-pip-docs
jquesnelle May 16, 2026
63503eb
fix(dashboard): clarify Kanban Ready vs assignment
austinpickett May 16, 2026
97a32af
fix(auxiliary): resolve xai oauth compression from pool
helix4u May 16, 2026
44b63fc
fix(tui): allow transcript scroll + Esc during approval/clarify/confi…
OutThisLife May 16, 2026
a31191c
fix(docs): unique sidebar keys for duplicate skill categories (#26726)
teknium1 May 16, 2026
c5dc970
fix(windows): silence tirith-unavailable banner + skip install/spawn …
teknium1 May 16, 2026
ca413c6
fix(dashboard): align Ukrainian Kanban Ready column help
austinpickett May 16, 2026
965610f
fix(cli): tolerate unreadable dirs when building systemd PATH
austinpickett May 16, 2026
16ff946
Revert "fix(cli): tolerate unreadable dirs when building systemd PATH"
austinpickett May 16, 2026
e377833
Merge pull request #26711 from NousResearch/austin/fix/dashboard-kanban
austinpickett May 16, 2026
c9b32a6
feat(skill): darwinian-evolver optional skill
teknium1 May 16, 2026
53637fb
chore(skills/darwinian-evolver): AUTHOR_MAP + docs regen
teknium1 May 16, 2026
9c304a7
fix(agent): retry malformed anthropic stream parser errors
helix4u May 16, 2026
016c772
feat(plugins): tool override flag for replacing built-in tools (close…
teknium1 May 16, 2026
afb97db
docs: add Programmatic Integration overview (closes #360)
teknium1 May 16, 2026
559c6ad
feat(skills): add optional pinggy-tunnel skill
teknium1 May 16, 2026
70b6635
fix(tui): keep Ink displayCursor in sync with fast-echo writes so cur…
OutThisLife May 16, 2026
627f8a5
security: sanitize tool error strings before injecting into model con…
teknium1 May 16, 2026
74d0b39
feat(x_search): gated X (Twitter) search tool with OAuth-or-API-key a…
teknium1 May 16, 2026
c445f48
fix(delegation): honor api_mode + auto-detect anthropic_messages URLs…
teknium1 May 16, 2026
395e9dd
feat: add supports_parallel_tool_calls for MCP servers (#26825)
teknium1 May 16, 2026
6ba35ec
Inspired by Claude Code: tighten dangerous-command detection (#26829)
teknium1 May 16, 2026
d725407
security(deps): bump aiohttp, anthropic, cryptography to CVE-fixed ve…
teknium1 May 16, 2026
5f91b1a
feat(skills): add osint-investigation optional skill (closes #355) (#…
teknium1 May 16, 2026
d0a183c
fix(doctor): suppress stale direct-key issues when oauth is healthy
worlldz May 16, 2026
7bb97b9
chore: add worlldz to AUTHOR_MAP for #26704 salvage
kshitijk4poor May 16, 2026
4ded3ed
fix: detect gh-copilot deprecation and improve GitHub Models 413 erro…
konsisumer Apr 16, 2026
b85b938
test: add tests for copilot ACP deprecation detection and Azure URL m…
konsisumer Apr 16, 2026
374dc81
fix(copilot-acp): tighten deprecation detection + sharpen GitHub Mode…
teknium1 May 16, 2026
585d6b6
fix(gateway): merge rapid TEXT follow-ups during active sessions (#44…
teknium1 May 16, 2026
fcd9011
fix(security): separate OAuth PKCE state from code_verifier
shaun0927 Apr 16, 2026
345821b
style: move secrets import alongside other function-level imports
shaun0927 Apr 16, 2026
72f94f4
test(security): regression guard for OAuth PKCE state/verifier separa…
teknium1 May 16, 2026
a91a57f
chore: release v0.14.0 (2026.5.16) (#26862)
teknium1 May 16, 2026
f3a4af9
fix(acp): replay assistant reasoning as agent_thought_chunk on sessio…
kshitijk4poor May 16, 2026
3034eee
fix(acp): replay session history before responding to session/load (#…
kshitijk4poor May 16, 2026
6836987
docs(release): rewrite v0.14.0 highlights for excitement framing (#27…
teknium1 May 16, 2026
35f2552
docs(tools): add video_generate / video_gen toolset to user-facing to…
teknium1 May 16, 2026
6c2406c
fix(signal): read groupV2.id in envelope, fall back to legacy groupIn…
teknium1 May 16, 2026
8a2b2b9
docs(release): expand v0.14.0 highlights with newcomer-friendly conte…
teknium1 May 16, 2026
05af78c
fix(update): make Camofox lazy-installed instead of eager (#27055)
teknium1 May 16, 2026
c844d15
fix(update): stream npm install output so postinstall progress is vis…
briandevans May 2, 2026
baf8cc4
fix(kanban): enforce completion-evidence invariant — block phantom-done
May 16, 2026
3216fd2
fix(kanban): catch CompletionEvidenceError in bulk endpoint with mach…
May 16, 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
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ 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 @@ -19,3 +25,7 @@ node_modules

# 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/
105 changes: 87 additions & 18 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 @@ -143,6 +151,18 @@
# Also requires ~/.honcho/config.json with enabled=true (see README).
# HONCHO_API_KEY=

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

# =============================================================================
# TERMINAL TOOL CONFIGURATION
# =============================================================================
Expand Down Expand Up @@ -244,6 +264,15 @@ BROWSERBASE_PROXIES=true
# Uses custom Chromium build to avoid bot detection altogether
BROWSERBASE_ADVANCED_STEALTH=false

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

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

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

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

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

# =============================================================================
# SESSION LOGGING
# =============================================================================
Expand Down Expand Up @@ -344,24 +394,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 Down Expand Up @@ -398,3 +430,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
47 changes: 47 additions & 0 deletions .github/actions/hermes-smoke-test/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Hermes smoke test
description: >
Run the image's built-in entrypoint against `--help` and `dashboard --help`
to catch basic runtime regressions before publishing. Requires the image
to already be loaded into the local Docker daemon under `image`.

Works identically on amd64 and arm64 runners.

inputs:
image:
description: Fully-qualified image tag (e.g. nousresearch/hermes-agent:test)
required: true

runs:
using: composite
steps:
- name: Ensure /tmp/hermes-test is hermes-writable
shell: bash
run: |
# The image runs as the hermes user (UID 10000). GitHub Actions
# creates /tmp/hermes-test root-owned by default, which hermes
# can't write to — chown it to match the in-container UID before
# bind-mounting. Real users doing `docker run -v ~/.hermes:...`
# with their own UID hit the same issue and have their own
# remediations (HERMES_UID env var, or chown locally).
mkdir -p /tmp/hermes-test
sudo chown -R 10000:10000 /tmp/hermes-test

- name: hermes --help
shell: bash
run: |
docker run --rm \
-v /tmp/hermes-test:/opt/data \
--entrypoint /opt/hermes/docker/entrypoint.sh \
"${{ inputs.image }}" --help

- name: hermes dashboard --help
shell: bash
run: |
# Regression guard for #9153: dashboard was present in source but
# missing from the published image. If this fails, something in
# the Dockerfile is excluding the dashboard subcommand from the
# installed package.
docker run --rm \
-v /tmp/hermes-test:/opt/data \
--entrypoint /opt/hermes/docker/entrypoint.sh \
"${{ inputs.image }}" dashboard --help
14 changes: 12 additions & 2 deletions .github/actions/nix-setup/action.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
name: 'Setup Nix'
description: 'Install Nix with DeterminateSystems and enable magic-nix-cache'
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: DeterminateSystems/magic-nix-cache-action@565684385bcd71bad329742eefe8d12f2e765b39 # v13
- 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"
10 changes: 10 additions & 0 deletions .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,16 @@ jobs:
run: |
mkdir -p _site/docs
cp -r website/build/* _site/docs/
# 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