Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
467 commits
Select commit Hold shift + click to select a range
1c7c7c3
feat(kanban-dashboard): per-platform home-channel notification toggle…
teknium1 May 4, 2026
a21f364
chore(release): AUTHOR_MAP entries for Tier 1g salvage batch
teknium1 May 4, 2026
d90f73b
fix(gateway): use git HEAD SHA, not file mtimes, for stale-code check…
teknium1 May 4, 2026
8ab9f61
fix(gateway): preserve WSL interop PATH in systemd units
Apr 27, 2026
103f51a
fix(doctor): check gh auth status when GITHUB_TOKEN absent
jjjojoj Apr 26, 2026
20edca7
fix(update): sync bundled skills to all profiles, including active (#…
briandevans Apr 26, 2026
fd9c32c
fix(email): drop non-allowlisted senders before dispatch to prevent m…
albert748 Apr 27, 2026
75bce31
fix(cron): expand \${VAR} refs in config.yaml during job execution (#…
briandevans Apr 26, 2026
6875471
fix(tts): update MiniMax API endpoint to v1/text_to_speech
lhysdl Apr 26, 2026
1c7f47a
fix(cron): add concurrency regression test for parallel job state writes
chinadbo Apr 27, 2026
9e2628e
test(discord): annotate make_attachment content_type as Optional[str]
briandevans Apr 27, 2026
64ad7de
fix(file-ops): allow file search in hidden roots
Apr 27, 2026
fbc477d
fix(run_agent): acquire lock in IterationBudget.used property
Ricardo-M-L Apr 26, 2026
c050ee6
fix(file_ops): resolve search_files path/line collision for hyphenate…
Yoimex Apr 25, 2026
eadf346
fix(models): strip :cloud/-cloud suffix from models.dev Ollama Cloud IDs
briandevans Apr 26, 2026
9cda237
docs(cron): lead with agent-driven setup for no-agent mode (#19871)
teknium1 May 4, 2026
a919269
fix(skills/email/himalaya): document v1.2.0 folder.aliases syntax
stevenchanin Apr 26, 2026
645a2f4
fix(cli): fix shortcut config conflict in hermes_cli
0xharryriddle Apr 26, 2026
60b143e
fix(tui_gateway): guard sys.path against local package shadowing (#15…
briandevans Apr 26, 2026
81cd678
fix(google-workspace): restore required_credential_files in SKILL.md …
briandevans Apr 27, 2026
8fabef9
fix(docs): register cron-script-only guide in sidebar (#19893)
teknium1 May 4, 2026
50aabb9
feat(skill): add hyperframes optional creative skill
jrusso1020 Apr 17, 2026
20859cc
docs(skill): sync hyperframes skill with upstream changes
jrusso1020 Apr 23, 2026
e493b1c
docs(skill): add hyperframes inspect command to cli.md + SKILL.md
May 3, 2026
429b8ec
fix(cli): guard c-S-c key binding with try/except to prevent startup …
nftpoetrist May 4, 2026
56a78e7
feat(kanban-dashboard): sharper home-channel toggle contrast, drop → …
teknium1 May 4, 2026
b8fb927
refactor(cli): drop dead c-S-c key binding (follow-up to #19895) (#19…
teknium1 May 4, 2026
9644b8a
fix(local): recover when persistent_shell cwd is deleted (#17558)
briandevans Apr 29, 2026
9fa3a09
fix(local): test root as ancestor candidate; use real pipe for fake s…
briandevans Apr 29, 2026
109c3e4
fix(terminal): guard background process spawn against deleted cwd (#1…
kshitijk4poor May 4, 2026
20428f5
fix(tui): respect voice.record_key config (supersedes #19028, #19339)…
OutThisLife May 4, 2026
b632290
fix(gateway): handle planned service stops
helix4u May 4, 2026
b816fd4
fix(tui): complete absolute paths as paths
helix4u May 4, 2026
d12f59a
Merge pull request #19866 from NousResearch/fix/clarify-placeholder-c…
jquesnelle May 5, 2026
a1bed18
docs: clarify that the Docker terminal backend is a single persistent…
teknium1 May 5, 2026
f7918c9
test(teams): mock ClientOptions in adapter tests
stephenschoettler May 1, 2026
1d93883
test(kanban): patch dashboard websocket token stub
stephenschoettler May 1, 2026
c77a6e3
chore(security): add OSV-Scanner CI + Dependabot for github-actions o…
teknium1 May 5, 2026
ef94aa2
docs(teams): add Teams to sidebar
May 1, 2026
93869b4
docs: add Microsoft Teams to platform lists across docs
May 1, 2026
10f89d7
docs(teams): add Teams to messaging/index.md
May 1, 2026
69aeba0
feat(teams): implement threading via app.reply()
May 1, 2026
3f02345
fix(teams): fall back to flat send when threading returns 400
May 1, 2026
2333b7a
fix(tests): patch TypingActivityInput after mock on Python <3.12
May 1, 2026
601e5f1
fix(teams): log reply() fallback for diagnostics
teknium1 May 5, 2026
13a7cbc
fix(nix): refresh stale tui npmDepsHash + fix cache-blind detection (…
alt-glitch May 5, 2026
c3112ad
fix(tui): improve clipboard copy fallbacks
bjianhang Apr 26, 2026
2785355
chore(release): map bjianhang@gmail.com → @bjianhang
teknium1 May 5, 2026
8ad5e98
fix(gateway): preserve pending update prompts across restarts
simbam99 May 1, 2026
91ce8fc
fix(setup): offer Keep/Replace/Clear when API key already exists
teknium1 May 5, 2026
ca5595f
fix(kanban): dispatcher skips ready tasks whose assignee is not a rea…
Brecht-H May 5, 2026
f25d3ec
fix(kanban): suppress dispatcher stuck-warn when ready queue holds on…
Brecht-H May 5, 2026
fc4aa66
feat(tips): add 100 new CLI startup tips (#20168)
teknium1 May 5, 2026
542e06c
fix: include default profile in kanban assignees
Interstellar-code May 5, 2026
28f4d6d
fix(tool-schemas): reactive strip of pattern/format on llama.cpp gram…
cdanis May 5, 2026
2a285d5
fix(agent): stateful streaming scrubber for reasoning-block leaks (#1…
teknium1 May 5, 2026
8c82d06
fix(kanban): ignore stale current board pointers
steezkelly May 5, 2026
d472d69
chore(release): map stevekelly622@gmail.com → @steezkelly
teknium1 May 5, 2026
b22b3f5
fix(cli): pin HERMES_KANBAN_BOARD at chat boot to stop subprocess boa…
0xDevNinja May 5, 2026
f8a6db6
test(kanban): isolate HERMES_KANBAN_BOARD writes in pin-env tests
teknium1 May 5, 2026
4a3e3e2
fix(compression): preserve iterative summary continuity
revaraver Apr 28, 2026
fe8dc26
chore: AUTHOR_MAP entry for revaraver noreply
teknium1 May 5, 2026
aacf36e
fix(cli): persist manual compress handoff
revaraver Apr 28, 2026
f6b68f0
fix(gateway): keep DoH-confirmed Telegram IPs that match system DNS (…
0xsir0000 Apr 28, 2026
1a03e3b
fix(kanban): detect darwin zombie workers
LeonSGP43 May 5, 2026
660ce7c
fix(ui-tui): prevent React effect cleanup from killing python TUI gat…
TheEpTic Apr 28, 2026
c725d7d
chore: AUTHOR_MAP entry for TheEpTic
teknium1 May 5, 2026
2eef395
fix(compaction): mark end of context summary in role=user fallback
wmagev Apr 28, 2026
b93643c
chore: AUTHOR_MAP entry for wmagev
teknium1 May 5, 2026
5168226
feat(file_tools): post-write delta lint on write_file + patch, add JS…
teknium1 May 5, 2026
68c1a08
fix(curator): protect hub skills by frontmatter name
LeonSGP43 May 4, 2026
4d0f59f
test(skill_usage): add mark_agent_created to regression test
teknium1 May 5, 2026
cca8587
docs(quickstart): link Onchain AI Garage Hermes tutorials playlist (#…
teknium1 May 5, 2026
354502e
fix(kanban): preserve dashboard completion summaries
LeonSGP43 May 5, 2026
6b76ea4
fix(gateway): load reply_to_mode from config.yaml for Discord and Tel…
ashermorse Apr 28, 2026
4577f39
chore: AUTHOR_MAP entry for ashermorse
teknium1 May 5, 2026
efe1cb0
fix: prevent stale reasoning from being reused across turns
May 5, 2026
9e0ef2a
test: pin per-turn reasoning extraction semantics
teknium1 May 5, 2026
83a07f4
chore: AUTHOR_MAP entry for happy5318
teknium1 May 5, 2026
8f4c0bf
fix(wecom): pad base64 AES key before decode
chengoak Apr 28, 2026
046c293
chore: AUTHOR_MAP entry for chengoak
teknium1 May 5, 2026
0a7cc85
fix(honcho): pass user_message as search_query in get_prefetch_context
qxxaa Apr 28, 2026
4f76166
chore: AUTHOR_MAP entry for qxxaa
teknium1 May 5, 2026
436672d
feat(curator): add archive and prune subcommands (#20200)
teknium1 May 5, 2026
fe8560f
feat(api-server): X-Hermes-Session-Key header for long-term memory sc…
teknium1 May 5, 2026
b10e38e
fix(skills): pin protects against deletion only, not edits (#20220)
teknium1 May 5, 2026
f15b0fb
fix: add PLATFORM_HINTS entry for api_server platform
beardthelion Apr 28, 2026
005b2f4
chore: AUTHOR_MAP entry for beardthelion
teknium1 May 5, 2026
44cf334
fix(mcp): add periodic keepalive to _wait_for_lifecycle_event
vominh1919 May 5, 2026
9e893d1
fix(aux): default Codex reasoning effort to medium when extra_body.re…
briandevans Apr 28, 2026
c1a2710
test(aux): cover effort: 0 fallback in Codex reasoning translation
briandevans Apr 28, 2026
34c6f93
fix: resolve model.aliases from config.yaml in /model alias resolution
nazirulhafiy Apr 28, 2026
7f735b4
fix: return effective session_id after context compression (#16938)
vominh1919 Apr 28, 2026
3143617
test(api_server): _run_agent result now carries session_id for #16938
teknium1 May 5, 2026
80b386a
fix(feishu): refresh bot identity during hydration
Apr 28, 2026
c7fc5af
chore: AUTHOR_MAP entry for tangyuanjc
teknium1 May 5, 2026
96514de
fix(auxiliary): avoid locking into custom path when api_key is empty
vominh1919 Apr 28, 2026
19eebf6
fix(openrouter): treat xiaomi models as reasoning-capable
Apr 28, 2026
f844e51
chore: AUTHOR_MAP entry for agentlinker
teknium1 May 5, 2026
f667774
fix(claw): handle missing dir in _scan_workspace_state
Apr 28, 2026
37b5731
chore: AUTHOR_MAP entry for npmisantosh
teknium1 May 5, 2026
4e6f511
fix(cli): fall back on invalid HERMES_MAX_ITERATIONS
novax635 Apr 28, 2026
349d0da
chore: AUTHOR_MAP entry for novax635
teknium1 May 5, 2026
3b16c59
fix(gateway): ignore malformed custom delay env vars in natural mode
Krionex Apr 28, 2026
285c208
fix(gateway): also tolerate malformed env vars in custom human-delay …
teknium1 May 5, 2026
fb31195
chore: AUTHOR_MAP entry for Krionex
teknium1 May 5, 2026
c46bc92
fix(run_agent): use aux provider for compression context length lookup
rxdxxxx May 5, 2026
8ebb81f
chore: AUTHOR_MAP entry for rxdxxxx
teknium1 May 5, 2026
02147cc
fix(cli): sanitize bracketed paste markers during setup
MaHaoHao-ch Apr 28, 2026
7530ce0
chore: AUTHOR_MAP entry for MaHaoHao-ch
teknium1 May 5, 2026
b7bd177
docs(AGENTS.md): add curator/cron/delegation/toolsets, fix plugin tre…
teknium1 May 5, 2026
7de3c86
feat(i18n): add display.language for static message translation (zh/j…
teknium1 May 5, 2026
de9238d
feat(kanban): hallucination gate + recovery UX for worker-created-car…
teknium1 May 5, 2026
969bfff
fix: merge _get_hermes_home() dynamic resolution and feishu receive_i…
Apr 21, 2026
b014a3d
test(cron): update _isolate_tick_lock fixture for _get_lock_paths
teknium1 May 5, 2026
8e18d10
fix(feishu): force text mode for markdown tables
Apr 22, 2026
db84c15
fix(ssh): add scp availability check to preflight validation
sprmn24 Apr 21, 2026
ecc909d
fix(session): serialize JSONL transcript appends under existing lock
sprmn24 Apr 21, 2026
e805380
Discover plugin commands during CLI dispatch
jkausel-ai Apr 21, 2026
5795b3b
fix(acp): use SessionDB.replace_messages for atomic history rewrite
Junass1 May 5, 2026
e4e0090
test(acp): regression for #13675 — save_session preserves existing me…
teknium1 May 5, 2026
45949e9
chore: AUTHOR_MAP entry for Junass1
teknium1 May 5, 2026
dad62c4
fix(whatsapp): auto-convert mp3/wav to ogg/opus in send-media for nat…
bartokmagic Apr 21, 2026
c62d8c9
chore: AUTHOR_MAP entry for Bartok9
teknium1 May 5, 2026
d8097d5
refactor(env): use shared Hermes dotenv loader
Bongulielmi Apr 21, 2026
269be4e
chore: AUTHOR_MAP entry for Bongulielmi
teknium1 May 5, 2026
6430d67
fix(openrouter): use canonical X-Title attribution header
JTroyerOvermatch May 5, 2026
935cf2f
chore: AUTHOR_MAP entry for JTroyerOvermatch
teknium1 May 5, 2026
247c9d4
fix(gateway): ensure deterministic thread eviction in helpers
hharry11 Apr 21, 2026
d9f0875
chore: AUTHOR_MAP entry for hharry11
teknium1 May 5, 2026
0120d8f
fix: merge plugin tools into builtin toolsets
wysie Apr 21, 2026
12135b4
chore: AUTHOR_MAP entry for wysie
teknium1 May 5, 2026
5267421
Prefer fallback for Gemini CloudCode rate limits
jkausel-ai Apr 21, 2026
77a102b
chore: AUTHOR_MAP entry for jkausel-ai
teknium1 May 5, 2026
a877c3f
fix(feishu): tolerate malformed dedup timestamps
Es1la May 5, 2026
4553e32
chore: AUTHOR_MAP entry for Es1la
teknium1 May 5, 2026
244bacd
fix(skills): support category-qualified local skill names
LeonSGP43 Apr 21, 2026
8c0f254
chore: AUTHOR_MAP entry for LeonSGP43
teknium1 May 5, 2026
f8ba265
fix(aux): trigger fallback on 429 rate-limit errors in auxiliary client
zeejaytan Apr 21, 2026
dbe9b15
chore: AUTHOR_MAP entry for zeejaytan
teknium1 May 5, 2026
e8e9147
fix(acp): preserve assistant reasoning metadata in session persistence
Aslaaen Apr 21, 2026
cc2c820
chore: AUTHOR_MAP entry for Aslaaen
teknium1 May 5, 2026
60235db
feat(cli): add list_picker_providers for credential-filtered picker
Tkander17 Apr 21, 2026
87b113c
chore: AUTHOR_MAP entry for Tkander1715
teknium1 May 5, 2026
0397be5
feat(tui): remove /provider alias for /model (#20358)
teknium1 May 5, 2026
3b75071
fix: resolve lazy session creation regressions (#18370 fallout) (#20363)
alt-glitch May 5, 2026
a628992
docs(web_tools): correct web_extract summarizer timeout comment
beardthelion May 5, 2026
ce9888b
docs(config): fix fallback provider config paths
LeonSGP43 May 5, 2026
27a8ba4
docs(prompt): clarify supported customization surfaces
Beandon13 May 5, 2026
c85a25f
chore: AUTHOR_MAP entry for Beandon13
teknium1 May 5, 2026
2d5f206
docs: remove dead reference links in flash-attention skill
WadydX Apr 23, 2026
58f93fb
docs: remove dead papers.md link from saelens references
WadydX Apr 23, 2026
0664bf9
docs: fix broken nix-setup anchor for container-aware CLI
WadydX Apr 23, 2026
41545f7
fix(telegram): keep DM topic typing scoped
helix4u May 5, 2026
d5357f8
refactor(telegram): make typing thread-id resolver symmetric with send
teknium1 May 5, 2026
c28c2a2
docs(tts): document per-provider max_text_length caps
r266-tech Apr 22, 2026
0dc677f
docs(skill/hermes-agent): sync slash commands + add durable-systems s…
teknium1 May 5, 2026
ee502e5
docs(cli): add --deliver-only flag to hermes webhook subscribe
r266-tech Apr 19, 2026
00d2559
perf(ui-tui): narrow overlay subscriptions to focused selectors
OutThisLife May 5, 2026
ec7f2f2
docs(cli): add skills reset subcommand to CLI reference
r266-tech Apr 17, 2026
f67063b
feat(kanban): generic diagnostics engine for task distress signals (#…
teknium1 May 5, 2026
72c33df
docs(agent): remove stale BuiltinMemoryProvider references from memor…
Bartok9 Apr 23, 2026
91f339b
docs(plugins): document ctx.dispatch_tool() in plugin capabilities table
r266-tech Apr 16, 2026
b6e4e40
docs(guide): add Dispatch tools from slash commands section
r266-tech Apr 16, 2026
e4723f6
docs(cron): add context_from chaining section
May 5, 2026
2b500ed
chore: AUTHOR_MAP entry for asimons81
teknium1 May 5, 2026
20a4f79
feat: provider modules — ProviderProfile ABC, 33 providers, fetch_mod…
kshitijk4poor May 5, 2026
9022804
feat(providers): make all 33 providers pluggable under plugins/model-…
teknium1 May 5, 2026
84ec276
docs(cli): expand hermes import reference — add description, warning,…
Sertug17 Apr 23, 2026
7b05ccd
docs(bedrock): fix IAM permissions, add quickstart entry, add fallbac…
JiaDe-Wu Apr 16, 2026
af312cc
docs: fix Camofox Docker setup instructions
wysie Apr 29, 2026
acca3ec
docs(providers): Together/Groq/Perplexity cookbook via custom_providers
perlowja Apr 25, 2026
794f487
fix(tui): close slash parity gaps with CLI (#20339)
OutThisLife May 5, 2026
b1476c7
docs(gemini): add Google Gemini guide
jethac Apr 28, 2026
8fa5a03
chore: AUTHOR_MAP entry for jethac
teknium1 May 5, 2026
0df80f4
docs: align terminal-backend count and naming across docs and code
deep-name May 3, 2026
7cc0008
chore: AUTHOR_MAP entry for deep-name
teknium1 May 5, 2026
3beef57
docs: refresh stale platform/LOC/test counts; clarify gateway vs plug…
deep-name May 3, 2026
80c579a
docs(skills): explain restoring bundled skills
LeonSGP43 May 3, 2026
398efdb
docs(docker): add section on connecting to local inference servers (v…
Magicray1217 Apr 19, 2026
de0ac21
docs(docker): document API_SERVER_* env vars for exposing the OpenAI-…
May 5, 2026
1b10371
chore: AUTHOR_MAP entry for CES4751
teknium1 May 5, 2026
5f8e59b
docs(discord): fix Server Members Intent + SSRC-mapping drift; add /v…
malaiwah May 5, 2026
15be493
docs(skills): modernize Obsidian file workflows
counterposition May 3, 2026
79902a0
chore: AUTHOR_MAP entry for counterposition
teknium1 May 5, 2026
5bd75c7
docs(kanban): document handoff evidence metadata
Fearvox May 4, 2026
bb2b129
chore: AUTHOR_MAP entry for Fearvox
teknium1 May 5, 2026
f13b349
docs: clarify Telegram group chat troubleshooting
LeonSGP43 May 2, 2026
ca8e688
docs(codex): clarify OAuth auth prerequisite
LeonSGP43 May 2, 2026
39560c9
docs(voice): add Doubao speech integration examples (TTS + STT)
Hypnus-Yuan Apr 30, 2026
391e3ff
chore: AUTHOR_MAP entry for Hypnus-Yuan
teknium1 May 5, 2026
144ba71
docs(faq): use messaging extra for gateway deps
xsfX20 Apr 30, 2026
587ef55
chore: AUTHOR_MAP entry for xsfX20
teknium1 May 5, 2026
1fc8733
fix(kanban): unify failure counter across spawn/timeout/crash outcome…
teknium1 May 5, 2026
9a0a4c5
docs(guides): add guide for running Hermes locally with Ollama
binhnt92 Apr 7, 2026
92a08c6
chore: AUTHOR_MAP entry for binhnt92
teknium1 May 5, 2026
1c42d8f
docs: add Open WebUI bootstrap script
Apr 14, 2026
a860a10
chore: AUTHOR_MAP entry for acesjohnny
teknium1 May 5, 2026
a11234d
docs(browser): document WSL-to-Windows Chrome MCP bridge
liu-collab Apr 12, 2026
a321874
chore: AUTHOR_MAP entry for liu-collab
teknium1 May 5, 2026
74e4f5f
docs(i18n): add zh-Hans Tool Gateway, image gen, and Windows WSL guide
haidao1919 Apr 17, 2026
05cdcac
docs: add Chinese (zh-CN) README translation
zhanggttry Apr 21, 2026
f97d022
chore: AUTHOR_MAP entry for zhanggttry
teknium1 May 5, 2026
0d945d1
docs: update VS Code setup instructions for ACP Client integration
formulahendry Apr 19, 2026
50ab0a8
chore: AUTHOR_MAP entry for formulahendry
teknium1 May 5, 2026
0b9cbc8
test(kanban): cover metadata handoff round-trip
Fearvox May 4, 2026
f0d2784
feat(gateway): respect kanban.max_spawn config to limit concurrent tasks
momowind May 4, 2026
56b4795
guard kanban worker lifecycle by run id
abundance-hl May 4, 2026
1efed67
chore(release): AUTHOR_MAP entries for momowind and misery-hl
teknium1 May 5, 2026
3082fa0
feat(hindsight): probe API for update_mode='append' support, dedupe a…
nicoloboschi May 5, 2026
3188e63
fix(api_server): SSE token batching + error handling for Open WebUI p…
bogerman1 May 5, 2026
ee8edd4
chore: AUTHOR_MAP entry for bogerman1
teknium1 May 5, 2026
0d41e94
feat(i18n): add French (fr) locale support
May 5, 2026
c4b287b
feat(i18n): add Ukrainian locale
olisikh May 5, 2026
735349c
chore: AUTHOR_MAP entry for olisikh
teknium1 May 6, 2026
2d4eaed
arcee temperature + compression
rob-maron May 5, 2026
f0b95cc
test(arcee): cover Trinity Large Thinking temperature + compression o…
teknium1 May 6, 2026
eda326d
fix(doctor): report Kanban worker tools as runtime-gated
suncokret12 May 1, 2026
6d302b3
fix(kanban): accept created_cards linked as child of completing task
LeonSGP43 May 5, 2026
b28ab4f
fix(kanban): measure max runtime from current run
mioimotoai-lgtm May 4, 2026
8a1a42d
test(kanban): backdate task_runs.started_at alongside tasks.started_at
teknium1 May 5, 2026
d2c6ece
fix(kanban): prevent child task dispatch when parent is not done
SimbaKingjoe May 4, 2026
3f97297
feat(kanban): surface task_runs.summary on dashboard cards + ``kanban…
Brecht-H May 5, 2026
a49670c
fix(kanban): wire dependency selects
LeonSGP43 May 5, 2026
fab3ad9
chore(release): AUTHOR_MAP entries for suncokret12 and mioimotoai-lgtm
teknium1 May 5, 2026
9851338
feat(i18n): add Turkish (tr) locale
etherman-os May 5, 2026
39f451f
fix: add Turkish locale references in config, tests, and docs
etherman-os May 5, 2026
e598e18
docs: document custom model aliases for /model command (#20475)
teknium1 May 6, 2026
477e4a2
feat(models): add deepseek/deepseek-v4-pro to OpenRouter + Nous Porta…
teknium1 May 6, 2026
f27fcb6
feat(models): add x-ai/grok-4.3 to OpenRouter + Nous Portal curated l…
teknium1 May 6, 2026
aa88dcc
fix: salvage batch — compaction guidance, memory authority, cache evi…
kshitijk4poor May 6, 2026
395dbcc
feat(browser): add Lightpanda engine support with automatic Chrome fa…
kshitijk4poor May 4, 2026
3ebdd26
fix(browser): surface Lightpanda Chrome fallback warnings
kshitijk4poor May 6, 2026
d78c349
feat(tui): collapsible sections in startup banner (skills, system pro…
kshitijk4poor May 6, 2026
68162eb
fix(tui): collapse long system messages in transcript with expand toggle
kshitijk4poor May 6, 2026
629d8b8
fix(browser): tighten Lightpanda fallback edge cases
kshitijk4poor May 6, 2026
466f3a1
fix(gateway): preserve model picker current context
helix4u May 6, 2026
a6f5f9c
fix(update): drop pip --quiet so slow installs don't look hung (#20679)
teknium1 May 6, 2026
e70e490
fix(cli): guard logger.debug in signal handler (#13710 regression) (#…
teknium1 May 6, 2026
043a118
fix: harden install.sh against inherited Python env leakage
adybag14-cyber May 5, 2026
a869a52
chore: AUTHOR_MAP entry for adybag14-cyber
teknium1 May 6, 2026
e45df2e
fix(ui): reduce status-line jitter while scrolling
adybag14-cyber May 5, 2026
ca5febf
fix(tui): stabilize FaceTicker elapsed width to prevent composer drift
adybag14-cyber May 6, 2026
a0556b8
fix(tui): restore gap before duration when verb segment is hidden
teknium1 May 6, 2026
b1e0ef8
chore(release): map liuguangyong@hellobike -> liuguangyong93
teknium1 May 6, 2026
1768791
fix(kanban): reset code element background inside board
May 6, 2026
76074d9
fix(cli): recover classic CLI output after resize
helix4u May 5, 2026
b045e7a
feat(skills): add shop-app personal shopping assistant (optional) (#2…
teknium1 May 6, 2026
a0fedfb
feat(checkpoints): v2 single-store rewrite with real pruning + disk g…
teknium1 May 6, 2026
43707a5
chore: sync with upstream main (2026-05-06)
bot-ted May 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -244,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
204 changes: 195 additions & 9 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,17 @@ hermes-agent/
│ ├── platforms/ # Adapter per platform (telegram, discord, slack, whatsapp,
│ │ # homeassistant, signal, matrix, mattermost, email, sms,
│ │ # dingtalk, wecom, weixin, feishu, qqbot, bluebubbles,
│ │ # webhook, api_server, ...). See ADDING_A_PLATFORM.md.
│ │ # yuanbao, webhook, api_server, ...). See ADDING_A_PLATFORM.md.
│ └── builtin_hooks/ # Extension point for always-registered gateway hooks (none shipped)
├── plugins/ # Plugin system (see "Plugins" section below)
│ ├── memory/ # Memory-provider plugins (honcho, mem0, supermemory, ...)
│ ├── context_engine/ # Context-engine plugins
│ └── <others>/ # Dashboard, image-gen, disk-cleanup, examples, ...
│ ├── kanban/ # Multi-agent board dispatcher + worker plugin
│ ├── hermes-achievements/ # Gamified achievement tracking
│ ├── observability/ # Metrics / traces / logs plugin
│ ├── image_gen/ # Image-generation providers
│ └── <others>/ # disk-cleanup, example-dashboard, google_meet, platforms,
│ # spotify, strike-freedom-cockpit, ...
├── optional-skills/ # Heavier/niche skills shipped but NOT active by default
├── skills/ # Built-in skills bundled with the repo
├── ui-tui/ # Ink (React) terminal UI — `hermes --tui`
Expand All @@ -53,7 +58,7 @@ hermes-agent/
├── environments/ # RL training environments (Atropos)
├── scripts/ # run_tests.sh, release.py, auxiliary scripts
├── website/ # Docusaurus docs site
└── tests/ # Pytest suite (~15k tests across ~700 files as of Apr 2026)
└── tests/ # Pytest suite (~17k tests across ~900 files as of May 2026)
```

**User config:** `~/.hermes/config.yaml` (settings), `~/.hermes/.env` (API keys only).
Expand Down Expand Up @@ -289,9 +294,9 @@ registry.register(
)
```

**2. Add to `toolsets.py`** — either `_HERMES_CORE_TOOLS` (all platforms) or a new toolset.
**2. Add to `toolsets.py`** — either `_HERMES_CORE_TOOLS` (all platforms) or a new toolset. **This step is required:** auto-discovery imports the tool and registers its schema, but the tool is only *exposed to an agent* if its name appears in a toolset. `_HERMES_CORE_TOOLS` is not dead code — it's the default bundle every platform's base toolset inherits from.

Auto-discovery: any `tools/*.py` file with a top-level `registry.register()` call is imported automatically — no manual import list to maintain.
Auto-discovery: any `tools/*.py` file with a top-level `registry.register()` call is imported automatically — no manual import list to maintain. Wiring into a toolset is still a deliberate, manual step.

The registry handles schema collection, dispatch, availability checking, and error wrapping. All handlers MUST return a JSON string.

Expand All @@ -313,6 +318,22 @@ The registry handles schema collection, dispatch, availability checking, and err
section is handled automatically by the deep-merge and does NOT require
a version bump.

### Top-level `config.yaml` sections (non-exhaustive):

`model`, `agent`, `terminal`, `compression`, `display`, `stt`, `tts`,
`memory`, `security`, `delegation`, `smart_model_routing`, `checkpoints`,
`auxiliary`, `curator`, `skills`, `gateway`, `logging`, `cron`, `profiles`,
`plugins`, `honcho`.

`auxiliary` holds per-task overrides for side-LLM work (curator, vision,
embedding, title generation, session_search, etc.) — each task can pin
its own provider/model/base_url/max_tokens/reasoning_effort. See
`agent/auxiliary_client.py::_resolve_auto` for resolution order.

`curator` holds the background skill-maintenance config —
`enabled`, `interval_hours`, `min_idle_hours`, `stale_after_days`,
`archive_after_days`, `backup` (nested).

### .env variables (SECRETS ONLY — API keys, tokens, passwords):
1. Add to `OPTIONAL_ENV_VARS` in `hermes_cli/config.py` with metadata:
```python
Expand Down Expand Up @@ -519,11 +540,176 @@ niche skills belong in `optional-skills/`.

### SKILL.md frontmatter

Standard fields: `name`, `description`, `version`, `platforms`
(OS-gating list: `[macos]`, `[linux, macos]`, ...),
Standard fields: `name`, `description`, `version`, `author`, `license`,
`platforms` (OS-gating list: `[macos]`, `[linux, macos]`, ...),
`metadata.hermes.tags`, `metadata.hermes.category`,
`metadata.hermes.config` (config.yaml settings the skill needs — stored
under `skills.config.<key>`, prompted during setup, injected at load time).
`metadata.hermes.related_skills`, `metadata.hermes.config` (config.yaml
settings the skill needs — stored under `skills.config.<key>`, prompted
during setup, injected at load time).

Top-level `tags:` and `category:` are also accepted and mirrored from
`metadata.hermes.*` by the loader.

---

## Toolsets

All toolsets are defined in `toolsets.py` as a single `TOOLSETS` dict.
Each platform's adapter picks a base toolset (e.g. Telegram uses
`"messaging"`); `_HERMES_CORE_TOOLS` is the default bundle most
platforms inherit from.

Current toolset keys: `browser`, `clarify`, `code_execution`, `cronjob`,
`debugging`, `delegation`, `discord`, `discord_admin`, `feishu_doc`,
`feishu_drive`, `file`, `homeassistant`, `image_gen`, `kanban`, `memory`,
`messaging`, `moa`, `rl`, `safe`, `search`, `session_search`, `skills`,
`spotify`, `terminal`, `todo`, `tts`, `video`, `vision`, `web`, `yuanbao`.

Enable/disable per platform via `hermes tools` (the curses UI) or the
`tools.<platform>.enabled` / `tools.<platform>.disabled` lists in
`config.yaml`.

---

## Delegation (`delegate_task`)

`tools/delegate_tool.py` spawns a subagent with an isolated
context + terminal session. Synchronous: the parent waits for the
child's summary before continuing its own loop — if the parent is
interrupted, the child is cancelled.

Two shapes:

- **Single:** pass `goal` (+ optional `context`, `toolsets`).
- **Batch (parallel):** pass `tasks: [...]` — each gets its own subagent
running concurrently. Concurrency is capped by
`delegation.max_concurrent_children` (default 3).

Roles:

- `role="leaf"` (default) — focused worker. Cannot call `delegate_task`,
`clarify`, `memory`, `send_message`, `execute_code`.
- `role="orchestrator"` — retains `delegate_task` so it can spawn its
own workers. Gated by `delegation.orchestrator_enabled` (default true)
and bounded by `delegation.max_spawn_depth` (default 2).

Key config knobs (under `delegation:` in `config.yaml`):
`max_concurrent_children`, `max_spawn_depth`, `child_timeout_seconds`,
`orchestrator_enabled`, `subagent_auto_approve`, `inherit_mcp_toolsets`,
`max_iterations`.

Synchronicity rule: delegate_task is **not** durable. For long-running
work that must outlive the current turn, use `cronjob` or
`terminal(background=True, notify_on_complete=True)` instead.

---

## Curator (skill lifecycle)

Background skill-maintenance system that tracks usage on agent-created
skills and auto-archives stale ones. Users never lose skills; archives
go to `~/.hermes/skills/.archive/` and are restorable.

- **Core:** `agent/curator.py` (review loop, auto-transitions, LLM review
prompt) + `agent/curator_backup.py` (pre-run tar.gz snapshots).
- **CLI:** `hermes_cli/curator.py` wires `hermes curator <verb>` where
verbs are: `status`, `run`, `pause`, `resume`, `pin`, `unpin`,
`archive`, `restore`, `prune`, `backup`, `rollback`.
- **Telemetry:** `tools/skill_usage.py` owns the sidecar
`~/.hermes/skills/.usage.json` — per-skill `use_count`, `view_count`,
`patch_count`, `last_activity_at`, `state` (active / stale /
archived), `pinned`.

Invariants:
- Curator only touches skills with `created_by: "agent"` provenance —
bundled + hub-installed skills are off-limits.
- Never deletes; max destructive action is archive.
- Pinned skills are exempt from every auto-transition and from the
LLM review pass.
- `skill_manage(action="delete")` refuses pinned skills; patch/edit/
write_file/remove_file go through so the agent can keep improving
pinned skills.

Config section (`curator:` in `config.yaml`):
`enabled`, `interval_hours`, `min_idle_hours`, `stale_after_days`,
`archive_after_days`, `backup.*`.

Full user-facing docs: `website/docs/user-guide/features/curator.md`.

---

## Cron (scheduled jobs)

`cron/jobs.py` (job store) + `cron/scheduler.py` (tick loop). Agents
schedule jobs via the `cronjob` tool; users via `hermes cron <verb>`
(`list`, `add`, `edit`, `pause`, `resume`, `run`, `remove`) or the
`/cron` slash command.

Supported schedule formats:
- Duration: `"30m"`, `"2h"`, `"1d"`
- "every" phrase: `"every 2h"`, `"every monday 9am"`
- 5-field cron expression: `"0 9 * * *"`
- ISO timestamp (one-shot): `"2026-06-01T09:00:00Z"`

Per-job fields include `skills` (load specific skills), `model` /
`provider` overrides, `script` (pre-run data-collection script whose
stdout is injected into the prompt; `no_agent=True` turns the script
into the entire job), `context_from` (chain job A's last output into
job B's prompt), `workdir` (run in a specific directory with its
`AGENTS.md`/`CLAUDE.md` loaded), and multi-platform delivery.

Hardening invariants:
- **3-minute hard interrupt** on cron sessions — runaway agent loops
cannot monopolize the scheduler.
- Catchup window: half the job's period, clamped to 120s–2h.
- Grace window: 120s for one-shot jobs whose fire time was missed.
- File lock at `~/.hermes/cron/.tick.lock` prevents duplicate ticks
across processes.
- Cron sessions pass `skip_memory=True` by default; memory providers
intentionally do not run during cron.

Cron deliveries are **not** mirrored into the target gateway session —
they land in their own cron session with a header/footer frame so the
main conversation's message-role alternation stays intact.

---

## Kanban (multi-agent work queue)

Durable SQLite-backed board that lets multiple profiles / workers
collaborate on shared tasks. Users drive it via `hermes kanban <verb>`;
workers spawned by the dispatcher drive it via a dedicated `kanban_*`
toolset so their schema footprint is zero when they're not inside a
kanban task.

- **CLI:** `hermes_cli/kanban.py` wires `hermes kanban` with verbs
`init`, `create`, `list` (alias `ls`), `show`, `assign`, `link`,
`unlink`, `comment`, `complete`, `block`, `unblock`, `archive`,
`tail`, plus less-commonly-used `watch`, `stats`, `runs`, `log`,
`assignees`, `heartbeat`, `notify-*`, `dispatch`, `daemon`, `gc`.
- **Worker toolset:** `tools/kanban_tools.py` exposes `kanban_show`,
`kanban_complete`, `kanban_block`, `kanban_heartbeat`, `kanban_comment`,
`kanban_create`, `kanban_link` — gated by `HERMES_KANBAN_TASK` so
the schema only appears for processes actually running as a worker.
- **Dispatcher:** long-lived loop that (default every 60s) reclaims
stale claims, promotes ready tasks, atomically claims, and spawns
assigned profiles. Runs **inside the gateway** by default via
`kanban.dispatch_in_gateway: true`.
- **Plugin assets:** `plugins/kanban/dashboard/` (web UI) +
`plugins/kanban/systemd/` (`hermes-kanban-dispatcher.service` for
standalone dispatcher deployment).

Isolation model:
- **Board** is the hard boundary — workers are spawned with
`HERMES_KANBAN_BOARD` pinned in their env so they can't see other
boards.
- **Tenant** is a soft namespace *within* a board — one specialist
fleet can serve multiple businesses with workspace-path + memory-key
isolation.
- After ~5 consecutive spawn failures on the same task the dispatcher
auto-blocks it to prevent spin loops.

Full user-facing docs: `website/docs/user-guide/features/kanban.md`.

---

Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<a href="https://discord.gg/NousResearch"><img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white" alt="Discord"></a>
<a href="https://github.com/NousResearch/hermes-agent/blob/main/LICENSE"><img src="https://img.shields.io/badge/License-MIT-green?style=for-the-badge" alt="License: MIT"></a>
<a href="https://nousresearch.com"><img src="https://img.shields.io/badge/Built%20by-Nous%20Research-blueviolet?style=for-the-badge" alt="Built by Nous Research"></a>
<a href="README.zh-CN.md"><img src="https://img.shields.io/badge/Lang-中文-red?style=for-the-badge" alt="中文"></a>
</p>

**The self-improving AI agent built by [Nous Research](https://nousresearch.com).** It's the only agent with a built-in learning loop — it creates skills from experience, improves them during use, nudges itself to persist knowledge, searches its own past conversations, and builds a deepening model of who you are across sessions. Run it on a $5 VPS, a GPU cluster, or serverless infrastructure that costs nearly nothing when idle. It's not tied to your laptop — talk to it from Telegram while it works on a cloud VM.
Expand All @@ -21,7 +22,7 @@ Use any model you want — [Nous Portal](https://portal.nousresearch.com), [Open
<tr><td><b>A closed learning loop</b></td><td>Agent-curated memory with periodic nudges. Autonomous skill creation after complex tasks. Skills self-improve during use. FTS5 session search with LLM summarization for cross-session recall. <a href="https://github.com/plastic-labs/honcho">Honcho</a> dialectic user modeling. Compatible with the <a href="https://agentskills.io">agentskills.io</a> open standard.</td></tr>
<tr><td><b>Scheduled automations</b></td><td>Built-in cron scheduler with delivery to any platform. Daily reports, nightly backups, weekly audits — all in natural language, running unattended.</td></tr>
<tr><td><b>Delegates and parallelizes</b></td><td>Spawn isolated subagents for parallel workstreams. Write Python scripts that call tools via RPC, collapsing multi-step pipelines into zero-context-cost turns.</td></tr>
<tr><td><b>Runs anywhere, not just your laptop</b></td><td>Six terminal backends — local, Docker, SSH, Daytona, Singularity, and Modal. Daytona and Modal offer serverless persistence — your agent's environment hibernates when idle and wakes on demand, costing nearly nothing between sessions. Run it on a $5 VPS or a GPU cluster.</td></tr>
<tr><td><b>Runs anywhere, not just your laptop</b></td><td>Seven terminal backends — local, Docker, SSH, Singularity, Modal, Daytona, and Vercel Sandbox. Daytona and Modal offer serverless persistence — your agent's environment hibernates when idle and wakes on demand, costing nearly nothing between sessions. Run it on a $5 VPS or a GPU cluster.</td></tr>
<tr><td><b>Research-ready</b></td><td>Batch trajectory generation, Atropos RL environments, trajectory compression for training the next generation of tool-calling models.</td></tr>
</table>

Expand Down
Loading
Loading