Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
7183 commits
Select commit Hold shift + click to select a range
713c231
docs(kanban): document worker protocol auto-blocks
helix4u May 19, 2026
666b66a
fix(oneshot): pass fallback_providers from profile config to AIAgent
uzunkuyruk May 19, 2026
e8ce7b8
fix(kanban): reject direct running transitions in dashboard bulk updates
kronexoi May 19, 2026
fb96208
feat(kanban): add initial-status for human-ops cards
shunsuke-hikiyama May 19, 2026
9f008bc
fix(kanban): release scratch workspace and tmux session on task compl…
LeonJS May 19, 2026
a94ddd8
fix(kanban): honor severity thresholds in diagnostics
LeonSGP43 May 19, 2026
d3345cc
test: isolate Kanban env pins in hermetic fixture
steezkelly May 19, 2026
5fdcfd8
feat(kanban): add max_in_progress config to cap concurrent running tasks
SimbaKingjoe May 19, 2026
3a7ed7b
fix(packaging): ship bundled skills in wheel
LeonSGP43 May 19, 2026
365da2d
fix: 4 small surgical bugs
Bartok9 May 19, 2026
206f595
perf(prompt): cache kanban worker guidance at session init
RyanRana May 19, 2026
a846e50
feat(kanban): add --sort option to 'hermes kanban list'
LizerAIDev May 19, 2026
b65dfbb
docs: add kanban codex lane skill
tchanee May 19, 2026
02efad7
feat(kanban): worker visibility endpoints (workers/active, runs/{id},…
Interstellar-code May 19, 2026
9d9f316
chore(release): map contributor email for attribution check
eloklam May 19, 2026
e215558
test(kanban-dashboard): pin enriched 409 detail and inline error wiri…
xxxigm May 19, 2026
78da7ef
docs(codex_app_server): document multi-root Kanban writable_roots (#2…
xxxigm May 19, 2026
d375747
fix(gateway): quiet corrupt kanban dispatcher boards
aqilaziz May 19, 2026
8158494
docs: align kanban readiness docs and smoke tests
bensargotest-sys May 19, 2026
79f6654
feat(kanban): surface per-task model_override in show + tool output
loicnico96 May 19, 2026
3ee7a55
feat(cli): add kanban swarm topology helper
Niraven May 19, 2026
8e193cf
feat(kanban): add optional board parameter to all MCP tools
nnnet May 19, 2026
31fe229
feat(kanban): stamp originating ACP session_id on tasks
awizemann May 19, 2026
f55d94a
feat(kanban): wire dispatcher to dispatch review agents from review c…
thewillhuang May 19, 2026
e286e68
feat(kanban): stale detection for running tasks in dispatcher
thewillhuang May 19, 2026
341912c
feat(kanban): filter tasks by workflow fields and runs by status/outcome
nehaaprasaad May 19, 2026
264e85b
feat(kanban): add respawn guard to block repeat worker storms
fardoche6 May 19, 2026
1a51727
feat(kanban): show dashboard cron jobs across profiles
SerenityTn May 19, 2026
1a883b4
fix(kanban): remove orphan conflict markers from config.py (#28458)
teknium1 May 19, 2026
53cf82a
fix(kanban): remove orphan conflict markers from kanban.py (#28459)
teknium1 May 19, 2026
1733cb3
feat(kanban): configure worktree paths and branches
aqilaziz May 19, 2026
b5c1fe7
feat(skills): add skill bundles — alias /<name> loads multiple skills…
teknium1 May 19, 2026
e382365
feat(kanban): add scheduled status for delayed follow-ups
roycepersonalassistant May 19, 2026
dfcf48b
feat(kanban): drag-to-delete trash zone + bulk delete for task cards
Jpalmer95 May 19, 2026
c4c45f1
docs: add Korean Kanban documentation
pochi-gio May 19, 2026
1912810
fix(tests): catch up six stale tests after compression/aux/kanban cha…
teknium1 May 19, 2026
6fb57bc
fix(telegram): render full clarify choice text in message body, use s…
asdlem May 18, 2026
ab11d09
chore(release): map @asdlem for PR #27852 salvage
teknium1 May 19, 2026
7fad501
fix(telegram): default streaming transport to edit
LeonSGP43 May 15, 2026
21a15b6
fix(telegram): respect reply_to_mode for DM topic reply fallback
liuhao1024 May 11, 2026
b93996c
fix(gateway): route Telegram audio file attachments away from STT pip…
Bartok9 May 13, 2026
785993b
chore(release): map bartok9 noreply for PR #24879 salvage
teknium1 May 19, 2026
edce8a5
fix(send_message): route standalone Telegram sends through TELEGRAM_P…
pepelax May 14, 2026
b58b418
chore(release): map @pepelax for PR #25419 salvage
teknium1 May 19, 2026
362ef91
fix(kanban-dashboard): restore implementations dropped during salvage…
teknium1 May 19, 2026
f55c67a
fix(gateway): roll over Telegram tool progress bubbles
Qwinty May 15, 2026
256c4c1
fix(gateway): scope audio_file_paths outside media_urls guard
teknium1 May 19, 2026
1b3c51b
fix(gateway): keep tool-progress edits alive after Telegram flood con…
erhnysr May 13, 2026
32435df
chore(release): map @erhnysr for PR #25198 salvage
teknium1 May 19, 2026
6be579f
fix(telegram): preserve can_edit after transient network errors in pr…
Bartok9 May 18, 2026
f260aa6
fix(telegram): recover from post-update polling conflict without ente…
CryptoByz May 14, 2026
17f3254
fix(test+release): update conflict retry count for MAX=5; map @CryptoByz
teknium1 May 19, 2026
fbabd56
fix(gateway): route background-process notifications into Telegram DM…
fabiosiqueira May 17, 2026
2994bf4
chore(release): map @fabiosiqueira for PR #27212 salvage
teknium1 May 19, 2026
de4cb55
fix(telegram): route resumed DM topic sends directly
Qwinty May 18, 2026
db50af9
fix(telegram): enforce TELEGRAM_ALLOWED_USERS allowlist on inbound me…
ygd58 May 11, 2026
89d3205
fix(telegram): fail-closed auth fallback when TELEGRAM_ALLOWED_USERS …
liuhao1024 May 12, 2026
8439ddc
test(telegram): stub _is_callback_user_authorized in trigger-gating f…
teknium1 May 19, 2026
5c4b43c
fix(telegram): reset sticky fallback IP on connect failure, retry pri…
falconexe May 12, 2026
e7a3e99
test+release: align stale sticky-IP test for #24511; map @falconexe
teknium1 May 19, 2026
434d508
fix(telegram): propagate extra base_url config
LeonSGP43 May 15, 2026
cf814c9
feat(send_message): auto-detect @username mentions and create Telegra…
fonhal May 18, 2026
9a444a9
test+release: align send_message mocks for MessageEntity import; map …
teknium1 May 19, 2026
ba2572e
fix(telegram): resume typing indicator after inline approval click (#…
briandevans May 18, 2026
d69f0c1
fix(gateway): mark final voice reply as notify-worthy so Telegram del…
briandevans May 18, 2026
7b2bcba
fix: avoid Telegram group reply thread session splits
eliteworkstation94-ai May 18, 2026
b46ef2e
chore(release): map @eliteworkstation94-ai for PR #28157 salvage
teknium1 May 19, 2026
f8eeb57
fix(gateway): avoid duplicate Telegram text after auto-TTS voice replies
Zyrixtrex May 16, 2026
35781ba
chore(release): map @Zyrixtrex for PR #26754 salvage
teknium1 May 19, 2026
4b6d35b
fix(telegram): escape send_slash_confirm preview with format_message
nftpoetrist May 14, 2026
bf6a287
chore(release): map @nftpoetrist for PR #25856 salvage
teknium1 May 19, 2026
af381ef
fix(telegram): retry wrapped connect timeouts
samahn0601 May 18, 2026
e19f4c1
chore(release): map @samahn0601 for PR #27887 salvage
teknium1 May 19, 2026
ed9087f
fix(tts): keep native audio outside Telegram voice delivery
aqilaziz May 15, 2026
470edfa
chore(release): map @aqilaziz for PR #26406 salvage
teknium1 May 19, 2026
ede47a5
fix(gateway): pin Telegram DM-topic routing to user's current topic
karthikeyann May 15, 2026
fc42bb9
chore(release): map @karthikeyann for PR #26609 salvage
teknium1 May 19, 2026
df530b4
fix(send_message): add thread-not-found retry for Telegram forum topi…
kunci115 May 16, 2026
2bb04f6
test(send_message): add thread-not-found retry tests for Telegram for…
kunci115 May 16, 2026
4abaec1
test(send_message): add thread-not-found retry tests for Telegram topics
kunci115 May 16, 2026
38356cc
chore(release): map @kunci115 for PR #27098 salvage
teknium1 May 19, 2026
7682198
fix(gateway): register Telegram commands for groups
chromalinx May 15, 2026
efc3740
test+release: fix test fixture for forum_commands; map @chromalinx
teknium1 May 19, 2026
46ce345
fix(telegram): gate profile bots by allowed topics
booker1207 May 13, 2026
032d4ca
chore(release): map @booker1207 for PR #25132 salvage
teknium1 May 19, 2026
a4fb0a3
fix(cron): route Telegram cron deliveries to a dedicated topic via TE…
konsisumer May 13, 2026
77c4675
fix(telegram): route image documents (.png/.jpg/.webp/.gif) through v…
kiranvk-2011 May 13, 2026
1d37860
test+release: stub auth in test_telegram_documents fixture; map @kira…
teknium1 May 19, 2026
417a653
fix(gateway): prevent Windows Telegram /restart leaving gateway stopped
May 14, 2026
c66efcf
chore(release): map @rak135 for PR #25960 salvage
teknium1 May 19, 2026
3ec28f3
fix(telegram): preserve topic metadata on overflow edits
Qwinty May 17, 2026
9d789f3
feat(telegram): add disable_topic_auto_rename gateway flag
B0Tch1 May 17, 2026
5734c3f
chore(release): map @B0Tch1 for PR #27634 salvage
teknium1 May 19, 2026
95a0955
fix(gateway): restore Telegram DM topic thread_id after session split…
jackjin1997 May 17, 2026
721d47f
chore(release): map @jackjin1997 for PR #27239 salvage
teknium1 May 19, 2026
b38140e
fix(gateway): allow chat-scoped telegram auth without sender user_id
soynchux May 18, 2026
15e89e1
chore(release): map @soynchux for PR #27806 salvage
teknium1 May 19, 2026
16d8e44
fix(telegram): add DM topic typing fallback when message_thread_id re…
fonhal May 18, 2026
d81b888
fix(telegram): report cron topic fallback
el-analista May 14, 2026
4f6fef1
chore(release): map @el-analista for PR #25368 salvage
teknium1 May 19, 2026
1891bee
fix(telegram): wire gt: callback dispatch for gmail-triage buttons
khungate May 14, 2026
e80d308
chore(release): map @khungate for PR #25829 salvage
teknium1 May 19, 2026
b1acf80
feat(telegram): support quick-command-only menus
stevehq26-bot May 18, 2026
17b8121
chore(release): map @stevehq26-bot for PR #28015 salvage
teknium1 May 19, 2026
704872a
fix(telegram): handle channel post updates
brndnsvr May 14, 2026
84a9b81
test: address telegram channel post review
brndnsvr May 14, 2026
f1cefad
test+release: stub auth in channel_posts fixture; map @brndnsvr
teknium1 May 19, 2026
8a80eee
Quiet noisy Telegram gateway errors
May 11, 2026
bb8e9ea
chore(release): map oracle@jarviss-mbp.home for PR #24014 salvage
teknium1 May 19, 2026
ce4d857
Route Telegram multi-bot mentions exclusively
OCWC22 May 12, 2026
e90869e
Document Telegram multi-profile gateway commands
OCWC22 May 12, 2026
fbfe294
fix: ignore Telegram messages for other bots
OCWC22 May 14, 2026
da48be1
chore(release): map @OCWC22 for PR #24581 salvage
teknium1 May 19, 2026
c931dad
feat(telegram): ignore_root_dm with system command lobby
ai-hana-ai May 12, 2026
6d66ad2
docs(telegram): document ignore_root_dm feature
ai-hana-ai May 12, 2026
ce46e6b
chore(release): map @ai-hana-ai for PR #23928 salvage
teknium1 May 19, 2026
a724c3b
feat(telegram): pin incoming user message for duration of agent turn
indigokarasu May 15, 2026
6265b3a
chore(release): map @indigokarasu for PR #26636 salvage
teknium1 May 19, 2026
ad2531b
feat(telegram): skip-STT audio path + 2GB cap via local Bot API server
alber70g May 13, 2026
69b1d31
chore(release): map @alber70g for PR #25280 salvage
teknium1 May 19, 2026
1335ce9
fix(web): add scheduled column to i18n type definitions (#28549)
alt-glitch May 19, 2026
eacce70
docs: comprehensive 2-week sweep of feature/PR coverage gaps (#28497)
teknium1 May 19, 2026
6dd0b35
chore(release): pre-stage AUTHOR_MAP for May 2026 LHF batch group 9 (…
teknium1 May 19, 2026
7f40767
feat(signal): add require_mention filter for group chats
jdelmerico May 19, 2026
03f7bc0
Revert "feat(telegram): pin incoming user message for duration of age…
teknium1 May 19, 2026
22120ef
Revert "feat(telegram): support quick-command-only menus"
teknium1 May 19, 2026
bbd2b46
Revert "feat(send_message): auto-detect @username mentions and create…
teknium1 May 19, 2026
4d44304
Revert "fix(telegram): enforce TELEGRAM_ALLOWED_USERS allowlist on in…
teknium1 May 19, 2026
e2a1a2b
fix(gateway): pre-mark sessions as resume_pending before drain to pre…
LifeJiggy May 19, 2026
276e6cc
fix(matrix): implement thread_require_mention to prevent multi-agent …
justemu May 19, 2026
8c3b065
fix(cli): show active profile in TUI prompt
burjorjee May 19, 2026
6cac56f
fix(tui): preserve dunder identifiers in markdown
helix4u May 19, 2026
0b89628
test(file_ops): add regression tests for git baseline warning in writ…
LifeJiggy May 19, 2026
afffb8d
fix(dashboard): use browser scrollback for chat wheel
YuanHanzhong May 19, 2026
425aba7
fix(cli): ignore stale HERMES_TUI_RESUME env
noctilust May 19, 2026
663ee14
fix(cron): allow emoji ZWJ sequences in prompts
outsourc-e May 19, 2026
b8a9cbd
fix: tolerate unreadable gateway JSONL transcripts
MoonJuhan May 19, 2026
87c6edc
fix(skills): add timeout to Google OAuth urlopen calls
Zyrixtrex May 19, 2026
d759a67
fix: add recovery hints to loop guard warnings
ooovenenoso May 19, 2026
62573f4
fix: guard yaml.safe_load, flock unlock, TOCTOU races, and atomic writes
vanthinh6886 May 19, 2026
4039e2a
chore(release): alias xxxigm noreply for upcoming #27986 salvage (#28…
teknium1 May 19, 2026
12c3983
fix(doctor): attach codex CLI hint to OpenAI Codex auth warning for #…
xxxigm May 19, 2026
a0bd11d
fix(tests): catch up 25 stale tests after recent merges (#28626)
teknium1 May 19, 2026
aedb8ac
feat(update): syntax-validate critical files post-pull, auto-rollback…
teknium1 May 19, 2026
58591d9
feat: show names of user-modified skills in bundled skill sync summary
zccyman May 19, 2026
7f253f5
fix(acp): use tempfile.gettempdir() in workspace auto-approve
Zyrixtrex May 19, 2026
88ee58f
fix(kanban): stale reclaim must not tick failure counter (#28680)
teknium1 May 19, 2026
a3c7531
fix(telegram): address post-merge audit follow-ups (#28670, #28672, #…
teknium1 May 19, 2026
424f2cc
chore(actions)(deps): bump the actions-minor-patch group across 1 dir…
dependabot[bot] May 18, 2026
2692457
chore(actions)(deps): bump docker/login-action from 3.7.0 to 4.1.0
dependabot[bot] May 13, 2026
bbee1dd
chore(actions)(deps): bump docker/build-push-action from 6.19.2 to 7.1.0
dependabot[bot] May 8, 2026
b10b783
chore(actions)(deps): bump actions/setup-python from 5.3.0 to 6.2.0
dependabot[bot] May 15, 2026
7bcdced
fix(kanban): respawn guard defers blocker_auth instead of auto-blocki…
teknium1 May 19, 2026
c498116
chore(actions)(deps): bump actions/checkout from 4.3.1 to 6.0.2
dependabot[bot] May 18, 2026
709e37e
fix(dashboard): add scheduled kanban i18n strings (#28534)
helix4u May 19, 2026
f1254b1
fix(cli): exit prompt_toolkit cleanly on SIGTERM/SIGHUP instead of ra…
teknium1 May 19, 2026
fc90f1b
chore(deps): bump dompurify from 3.3.3 to 3.4.2 in /website
dependabot[bot] May 5, 2026
0b75d24
chore(deps): bump follow-redirects from 1.15.11 to 1.16.0 in /website
dependabot[bot] May 5, 2026
c4bcc77
chore(deps): bump lodash from 4.17.23 to 4.18.1 in /website
dependabot[bot] May 5, 2026
7f1d124
chore(deps): bump lodash-es and langium in /website
dependabot[bot] May 5, 2026
dffcb6f
chore(deps): bump python-multipart from 0.0.22 to 0.0.27
dependabot[bot] May 6, 2026
a9c38c7
chore(deps): bump python-dotenv from 1.2.1 to 1.2.2
dependabot[bot] May 12, 2026
43f8edb
chore(deps): bump fast-uri from 3.1.0 to 3.1.2 in /website
dependabot[bot] May 8, 2026
070eeaa
chore(deps): bump @babel/plugin-transform-modules-systemjs in /website
dependabot[bot] May 9, 2026
ff0a703
fix(web): consume bundled design system assets (#26391)
austinpickett May 19, 2026
ec244e5
chore(deps): bump webpack-dev-server from 5.2.3 to 5.2.4 in /website …
dependabot[bot] May 19, 2026
a3ef217
chore(deps): bump ws in /ui-tui/packages/hermes-ink (#28183)
dependabot[bot] May 19, 2026
39c41d0
chore(deps): bump mermaid from 11.13.0 to 11.15.0 in /website (#24011)
dependabot[bot] May 19, 2026
7c622b6
fix(kanban): migrate task session index after columns
quocanh261997 May 19, 2026
7552e0f
fix(kanban): also hoist idx_events_run + drop redundant inner create
kshitijk4poor May 19, 2026
5a33176
fix(discord): define view classes after lazy discord.py install
EloquentBrush0x May 19, 2026
b0af1d0
Merge pull request #28829 from NousResearch/bb/tui-no-history-truncation
OutThisLife May 19, 2026
ae74b15
chore: add erikengervall to AUTHOR_MAP (#28855)
daimon-nous[bot] May 19, 2026
273ff5c
feat(firecrawl): add integration tag for Hermes usage in browser and …
erikengervall May 19, 2026
ebe0b77
fix(model-switch): mark bare custom provider as current
LeonSGP43 May 11, 2026
57af46f
Revert "feat(firecrawl): add integration tag for Hermes usage in brow…
teknium1 May 19, 2026
2a7308b
fix(update): quarantine hermes.exe vs concurrent Windows instance (#2…
teknium1 May 19, 2026
f007ef8
fix(windows): hide cron script subprocess consoles
nekwo May 16, 2026
95683c0
fix(windows): hide local subprocess consoles
nekwo May 16, 2026
d948de3
fix(gateway): harden Windows gateway install lifecycle
nekwo May 16, 2026
a19eb54
test(gateway-windows): make ctypes.windll monkeypatch tolerant on non…
teknium1 May 19, 2026
a614209
fix(agent): set tool_name on tool-result messages at construction time
justinccdev May 19, 2026
7c2ff74
fix(tui): termux-gate scrollback preservation, touch-friendly defaults
adybag14-cyber May 19, 2026
2b41f9d
Merge pull request #28914 from justincc/fix/fix-blank-tool-names-at-m…
ethernet8023 May 19, 2026
57145ca
feat: add BrowseShSource adapter for browse.sh skills catalog
Kylejeong2 May 19, 2026
90be1be
fix: register browse-sh in per-source limits and --source choices
Kylejeong2 May 19, 2026
890b2eb
fix(browse-sh): fetch SKILL.md via /api/skills/{slug}+skillMdUrl
teknium1 May 19, 2026
3f55256
docs(skills): document browse.sh source (#28939)
teknium1 May 19, 2026
e13f242
fix(cli): preserve setup config picker writes
stepanov1975 May 8, 2026
6a159be
fix(runtime): treat 'ollama'/'vllm'/'llamacpp' aliases like 'custom' …
teknium1 May 19, 2026
784febe
perf(cli): defer openai._base_client import via sys.meta_path finder …
teknium1 May 19, 2026
544c31b
perf(agent-loop): cut 47% of per-conversation function calls via 3 ta…
teknium1 May 19, 2026
aa4e492
chore(deps): bump ws from 8.20.0 to 8.20.1 in /ui-tui
dependabot[bot] May 19, 2026
60bb98e
fix(install.ps1): pin PortableGit instead of hitting rate-limited Git…
teknium1 May 19, 2026
d9829ab
fix(model): match custom provider by active base url
helix4u May 19, 2026
28ab420
🐛 fix(cli): handle no-remote worktree cleanup
BlackishGreen33 Apr 17, 2026
c9d5ef2
🐛 fix(cli): handle missing remote tracking refs
BlackishGreen33 Apr 17, 2026
64a9a19
fix(xai-oauth): pin inference base_url to x.ai origin (#28952)
teknium1 May 19, 2026
34120a0
fix(kanban): worker-initiated block must not be auto-promoted (#28712)
xxxigm May 19, 2026
d35f893
test(kanban): cover sticky blocks for worker-initiated kanban_block (…
xxxigm May 19, 2026
448a3f9
fix(discord): transcribe native voice notes
helix4u May 19, 2026
93734c2
fix(dingtalk): transcribe native voice notes
teknium1 May 20, 2026
6cb9917
perf(compression): defer feasibility check to first compression attem…
teknium1 May 20, 2026
e2fd462
ci(tests): add pytest-timeout 60s hard cap to break suite-teardown de…
teknium1 May 20, 2026
a0c0312
feat(web): add xAI Web Search provider plugin
Jaaneek May 20, 2026
6bd4311
perf(terminal): adaptive subprocess poll cuts ~195ms off every tool c…
teknium1 May 20, 2026
43c7a1b
docs(web-search): document xAI Web Search backend (#29052)
teknium1 May 20, 2026
05f0264
fix(windows): drop duplicate creationflags kwarg in LocalEnvironment.…
jquesnelle May 20, 2026
c2a4782
fix(nix): refresh npm lockfile hashes
github-actions[bot] May 20, 2026
62713c8
Merge pull request #29059 from NousResearch/jq/fix-windows-creationfl…
jquesnelle May 20, 2026
0c6eb96
Merge pull request #28947 from NousResearch/dependabot/npm_and_yarn/u…
ethernet8023 May 20, 2026
340d2b6
docs(xai-oauth): note X Premium+ also unlocks Grok OAuth (#29055)
teknium1 May 20, 2026
697d38a
feat: auto-launch Chromium-family browser for CDP
H-Ali13381 May 8, 2026
6a6766f
test(cli): cover Brave binary CDP launch detection
H-Ali13381 May 19, 2026
5e74355
fix(lint): skip per-file shell linter when LSP will handle the file (…
OutThisLife May 20, 2026
2589656
fix(chat_completions): strip tool_name from messages for strict provi…
savanne-kham May 19, 2026
42c4288
fix(chat_completions): broaden tool_name strip docstring + AUTHOR_MAP
teknium1 May 20, 2026
edb2d91
feat(web): migrate dashboard checkboxes to @nous-research/ui + DS pol…
austinpickett May 20, 2026
6f3a020
feat(xai): detect retired xAI models (May 15, 2026)
julientalbot-ergonomia May 10, 2026
b4ba425
feat(doctor): surface xAI model retirement in hermes doctor
julientalbot-ergonomia May 10, 2026
a8a05c8
feat(cli): warn about retired xAI models at chat startup
julientalbot-ergonomia May 10, 2026
9ff98da
feat(xai): apply_migration — rewrite config.yaml in-place via ruamel …
julientalbot-ergonomia May 10, 2026
12842d3
feat(cli): hermes migrate xai [--apply] [--no-backup]
julientalbot-ergonomia May 10, 2026
5af4b73
fix(xai): align migrate retirement map with docs
Julientalbot May 10, 2026
ca192cf
Add opt-in xAI TTS speech tag pauses
julientalbot-ergonomia Apr 28, 2026
c29b4f5
perf(termux): speed up tui cold start
adybag14-cyber May 20, 2026
ce26785
refactor(session-log): delete _save_session_log and all callers
yoniebans May 20, 2026
c547392
refactor(session-log): stop initializing session_log_file attribute
yoniebans May 20, 2026
cebd480
refactor(session-log): drop branch/compress re-point of session_log_file
yoniebans May 20, 2026
9d793e8
docs(session-log): state.db is canonical; ~/.hermes/sessions/ is legacy
yoniebans May 20, 2026
6f1a5f8
refactor(session-log): delete dead _clean_session_content helper
yoniebans May 20, 2026
b6c6f65
test(session-log): pin no-session_json regression + drop trailing whi…
yoniebans May 20, 2026
6fc1989
chore(release): correct AUTHOR_MAP for jonny@nousresearch.com
teknium1 May 20, 2026
eeb747d
feat(sessions): opt-in per-session JSON snapshot writer
teknium1 May 20, 2026
88f5186
fix(tui): anchor splitReasoning unclosed-tag regex to start of input …
OutThisLife May 20, 2026
27506cc
chore(deps): bump ws from 8.20.0 to 8.20.1 in /scripts/whatsapp-bridg…
dependabot[bot] May 20, 2026
fee8810
chore(deps): bump protobufjs in /scripts/whatsapp-bridge (#28889)
dependabot[bot] May 20, 2026
419910e
chore(deps): bump idna from 3.11 to 3.15 (#28883)
dependabot[bot] May 20, 2026
57a6105
fix(deps): bump pydantic to 2.13.4 to avoid pydantic-core thread segf…
fabiosiqueira May 20, 2026
4d2df86
docs(skills): clarify external dir mutations
helix4u May 20, 2026
1d27be0
test(gateway): pin SQLite-only load_transcript behaviour
yoniebans May 20, 2026
024a8e3
refactor(gateway): drop JSONL fallback in load_transcript
yoniebans May 20, 2026
971cfaa
refactor(yuanbao): migrate recall to load_transcript()
yoniebans May 20, 2026
351fdcc
refactor(gateway): stop writing JSONL in append_to_transcript / rewri…
yoniebans May 20, 2026
b4b118c
refactor(gateway): drop _append_to_jsonl from mirror
yoniebans May 20, 2026
33a3cf5
docs(sessions): state.db is canonical for gateway messages
yoniebans May 20, 2026
c634c07
test(gateway): pin DEFAULT_DB_PATH in fixtures to prevent real state.…
yoniebans May 20, 2026
0cc1a1d
refactor(yuanbao): drop dead branch A1 message_id loop + pin missing …
yoniebans May 20, 2026
31a0100
feat(state.db): persist platform_message_id; restore yuanbao exact-id…
teknium1 May 20, 2026
e957ab0
docs(AGENTS): add quick reference section for common tasks and archit…
Kartalops May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
31 changes: 31 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Git
.git
.gitignore
.gitmodules

# 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

# Environment files
.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/
235 changes: 202 additions & 33 deletions .env.example

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Auto-generated files — collapse diffs and exclude from language stats
web/package-lock.json linguist-generated=true
30 changes: 24 additions & 6 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ body:
**Before submitting**, please:
- [ ] Search [existing issues](https://github.com/NousResearch/hermes-agent/issues) to avoid duplicates
- [ ] Update to the latest version (`hermes update`) and confirm the bug still exists
- [ ] Run `hermes debug share` and paste the links below (see Debug Report section)

- type: textarea
id: description
Expand Down Expand Up @@ -82,6 +83,25 @@ body:
- Slack
- WhatsApp

- type: textarea
id: debug-report
attributes:
label: Debug Report
description: |
Run `hermes debug share` from your terminal and paste the links it prints here.
This uploads your system info, config, and recent logs to a paste service automatically.

If you're in an interactive chat session, you can also use the `/debug` slash command — it does the same thing.

If the upload fails, run `hermes debug share --local` and paste the output directly.
placeholder: |
Report https://paste.rs/abc123
agent.log https://paste.rs/def456
gateway.log https://paste.rs/ghi789
render: shell
validations:
required: true

- type: input
id: os
attributes:
Expand All @@ -97,23 +117,21 @@ body:
label: Python Version
description: Output of `python --version`
placeholder: "3.11.9"
validations:
required: true

- type: input
id: hermes-version
attributes:
label: Hermes Version
description: Output of `hermes version`
placeholder: "2.1.0"
validations:
required: true

- type: textarea
id: logs
attributes:
label: Relevant Logs / Traceback
description: Paste any error output, traceback, or log messages. This will be auto-formatted as code.
label: Additional Logs / Traceback (optional)
description: |
The debug report above covers most logs. Use this field for any extra error output,
tracebacks, or screenshots not captured by `hermes debug share`.
render: shell

- type: textarea
Expand Down
12 changes: 12 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,15 @@ body:
label: Contribution
options:
- label: I'd like to implement this myself and submit a PR

- type: textarea
id: debug-report
attributes:
label: Debug Report (optional)
description: |
If this feature request is related to a problem you're experiencing, run `hermes debug share` and paste the links here.
In an interactive chat session, you can use `/debug` instead.
This helps us understand your environment and any related logs.
placeholder: |
Report https://paste.rs/abc123
render: shell
20 changes: 16 additions & 4 deletions .github/ISSUE_TEMPLATE/setup_help.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ body:
Sorry you're having trouble! Please fill out the details below so we can help.

**Quick checks first:**
- Run `hermes doctor` and include the output below
- Run `hermes debug share` and paste the links in the Debug Report section below
- If you're in a chat session, you can use `/debug` instead — it does the same thing
- Try `hermes update` to get the latest version
- Check the [README troubleshooting section](https://github.com/NousResearch/hermes-agent#troubleshooting)
- For general questions, consider the [Nous Research Discord](https://discord.gg/NousResearch) for faster help
Expand Down Expand Up @@ -74,10 +75,21 @@ body:
placeholder: "2.1.0"

- type: textarea
id: doctor-output
id: debug-report
attributes:
label: Output of `hermes doctor`
description: Run `hermes doctor` and paste the full output. This will be auto-formatted.
label: Debug Report
description: |
Run `hermes debug share` from your terminal and paste the links it prints here.
This uploads your system info, config, and recent logs to a paste service automatically.

If you're in an interactive chat session, you can also use the `/debug` slash command — it does the same thing.

If the upload fails or install didn't get that far, run `hermes debug share --local` and paste the output directly.
If even that doesn't work, run `hermes doctor` and paste that output instead.
placeholder: |
Report https://paste.rs/abc123
agent.log https://paste.rs/def456
gateway.log https://paste.rs/ghi789
render: shell

- type: textarea
Expand Down
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
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"
73 changes: 73 additions & 0 deletions .github/workflows/contributor-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Contributor Attribution Check

on:
pull_request:
branches: [main]
paths:
# Only run when code files change (not docs-only PRs)
- '*.py'
- '**/*.py'
- '.github/workflows/contributor-check.yml'

permissions:
contents: read

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

- name: Check for unmapped contributor emails
run: |
# Get the merge base between this PR and main
MERGE_BASE=$(git merge-base origin/main HEAD)

# Find any new author emails in this PR's commits
NEW_EMAILS=$(git log ${MERGE_BASE}..HEAD --format='%ae' --no-merges | sort -u)

if [ -z "$NEW_EMAILS" ]; then
echo "No new commits to check."
exit 0
fi

# Check each email against AUTHOR_MAP in release.py
MISSING=""
while IFS= read -r email; do
# Skip teknium and bot emails
case "$email" in
*teknium*|*noreply@github.com*|*dependabot*|*github-actions*|*anthropic.com*|*cursor.com*)
continue ;;
esac

# Check if email is in AUTHOR_MAP (either as a key or matches noreply pattern)
if echo "$email" | grep -qP '\+.*@users\.noreply\.github\.com'; then
continue # GitHub noreply emails auto-resolve
fi

if ! grep -qF "\"${email}\"" scripts/release.py 2>/dev/null; then
AUTHOR=$(git log --author="$email" --format='%an' -1)
MISSING="${MISSING}\n ${email} (${AUTHOR})"
fi
done <<< "$NEW_EMAILS"

if [ -n "$MISSING" ]; then
echo ""
echo "⚠️ New contributor email(s) not in AUTHOR_MAP:"
echo -e "$MISSING"
echo ""
echo "Please add mappings to scripts/release.py AUTHOR_MAP:"
echo -e "$MISSING" | while read -r line; do
email=$(echo "$line" | sed 's/^ *//' | cut -d' ' -f1)
[ -z "$email" ] && continue
echo " \"${email}\": \"<github-username>\","
done
echo ""
echo "To find the GitHub username for an email:"
echo " gh api 'search/users?q=EMAIL+in:email' --jq '.items[0].login'"
exit 1
else
echo "✅ All contributor emails are mapped in AUTHOR_MAP."
fi
Loading
Loading