Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2333 commits
Select commit Hold shift + click to select a range
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
ef43938
fix(ci): stop pushing per-commit SHA tags to Docker Hub
ethernet8023 May 20, 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
2a352f9
fix(x_search): surface degraded results + validate dates
kshitijk4poor May 20, 2026
1a7bb98
fix(gateway): harden kanban and provider cleanup races
helix4u May 20, 2026
3ce1cf2
Merge pull request #29484 from kshitijk4poor/kp/x-search-degraded-flag
kshitijk4poor May 20, 2026
fc7e04e
fix(skills-hub): deduplicate search results by identifier, not name
EloquentBrush0x May 20, 2026
8f92327
fix(skills-hub): fix dedup in browse_skills() programmatic API
EloquentBrush0x May 20, 2026
c6a380e
fix(skills-hub): widen identifier-dedup to GitHubSource + fix test pa…
teknium1 May 20, 2026
8ad34db
chore(tui): remove unused Babel build deps
cresslank May 20, 2026
c42edd8
fix(tui): clipboard copy on linux/wayland
May 11, 2026
f7441f9
fix(nix): add xclip and wl-copy
ethernet8023 May 20, 2026
1566d71
Merge pull request #29342 from NousResearch/fix/tui-linux-copy
ethernet8023 May 21, 2026
b9b6e03
fix(gateway): prioritize Telegram command menu
helix4u May 20, 2026
5672772
fix(gateway): reorder telegram menu priority — everyday commands first
teknium1 May 21, 2026
5908822
fix(security): prevent API key leakage to non-authoritative custom en…
erhnysr May 19, 2026
9514ddb
fix(security): address review feedback from pmos69
erhnysr May 20, 2026
c6a992e
fix(security): derive <VENDOR>_API_KEY from host as final credential …
teknium1 May 21, 2026
a9db0e2
Observe unmentioned Telegram group messages
Glucksberg May 20, 2026
3bbe980
chore: add Glucksberg to AUTHOR_MAP
teknium1 May 21, 2026
4ead464
fix(security): guard os.chmod(parent) against / and top-level dirs
liuhao1024 May 14, 2026
127b56a
style: docstring + whitespace cleanup on secure_parent_dir
teknium1 May 21, 2026
b4afc65
fix(xai): restore encrypted reasoning replay across turns
teknium1 May 21, 2026
24c7ce0
feat(agent): allow declaring supports_vision via user config
CNSeniorious000 Apr 30, 2026
1c76689
fix(agent): resolve supports_vision override for named custom providers
CNSeniorious000 Apr 30, 2026
32aea11
fix(agent): consult supports_vision override in auto-mode routing
teknium1 May 21, 2026
975e130
fix(cli): honour image-routing decision in quiet-mode -q --image path
teknium1 May 21, 2026
be0728c
fix: handle Discord typing indicator 429 gracefully
nycomar May 9, 2026
f722ec7
chore: add nycomar to AUTHOR_MAP
teknium1 May 21, 2026
5edb346
security(file-safety): also write-deny <root>/.env when running under…
0xsir0000 Apr 28, 2026
6c26727
fix(gateway): extend observe+attribution to location and media handlers
EloquentBrush0x May 21, 2026
c3a09f7
fix(background_review): propagate parent toolset config to keep tools…
ziliangpeng May 21, 2026
87d9239
chore: trim verbose comments/docstrings, add AUTHOR_MAP entry
alt-glitch May 21, 2026
48be2e0
test: use subprocesses for each test file (#29016)
ethernet8023 May 21, 2026
2fdefca
Merge pull request #28269 from cresslank/chore/tui-remove-unused-babe…
ethernet8023 May 21, 2026
ba9964f
fix(custom): pass custom provider extra body
helix4u May 21, 2026
2ea7cf2
fix(tui): pass --expose-gc as node argv instead of NODE_OPTIONS
YarrowQiao May 8, 2026
2e3f576
chore(release): map yichengqiao21 to YarrowQiao
teknium1 May 21, 2026
3d2f146
fix(tui): also pass --expose-gc on the wheel-bundled launch path
teknium1 May 21, 2026
56b79f1
fix(dashboard): remove country flags from language picker (#29997)
teknium1 May 21, 2026
0ce12a9
fix(nix): auto-refresh npm lockfile hashes
github-actions[bot] May 21, 2026
18cd1e5
fix(computer_use): correct type_text MCP tool name and implement drag…
liuhao1024 May 12, 2026
552e9c7
feat(secrets): Bitwarden Secrets Manager integration with lazy bws in…
teknium1 May 21, 2026
3462b09
fix(voice): chunk oversized CLI recordings
helix4u May 21, 2026
3fde8c1
fix(skills): prune dependency/venv dirs from all skill scanners (#30042)
teknium1 May 21, 2026
4cc1887
fix(computer_use): preserve app context for capture_after; fix elemen…
Bartok9 May 12, 2026
5aa4727
fix(computer-use): surface app=… filter no-match instead of silently …
briandevans May 12, 2026
6dbbf20
perf(termux): speed up non-tui cli startup
adybag14-cyber May 20, 2026
2a474bc
fix(termux): resolve packed-refs and worktree refs in skill-sync fing…
teknium1 May 22, 2026
531efe7
fix(computer_use): add helper to decide capture vision routing
xxxigm May 12, 2026
5ce5fe3
test(computer_use): cover capture vision-routing helper
xxxigm May 12, 2026
e02a7e5
fix(computer_use): route SOM/vision captures via auxiliary.vision (#2…
xxxigm May 12, 2026
bec2250
test(computer_use): end-to-end regression for capture routing (#24015)
xxxigm May 12, 2026
4d58e48
Merge pull request #29387 from NousResearch/fix/no-docker-tag
benbarclay May 22, 2026
a7cd254
feat(tui): mouse_tracking DEC mode presets (salvage of #26681) (#30084)
OutThisLife May 22, 2026
9e30ef2
fix(tui): preserve scrollback when branching sessions (#30162)
OutThisLife May 22, 2026
bb694ba
fix(computer-use): cap AX `elements` array to prevent context blowup …
briandevans May 10, 2026
280dd45
fix(computer-use): address Copilot review on max_elements cap
briandevans May 11, 2026
0e2873a
fix(computer_use): build summary once before aux-vision routing branch
teknium1 May 22, 2026
d08c2a0
fix(tui): termux-gate composer rendering tweaks for Ink TUI
adybag14-cyber May 22, 2026
9896e43
fix(skills): load Linux-tagged skills on Termux (android sys.platform)
teknium1 May 22, 2026
4a2fa77
fix(cli): pre-check CUA release asset for Intel macOS before install
liuhao1024 May 12, 2026
eb51fb6
fix(ssh): keep bulk sync extraction scoped to .hermes
Stark-X May 11, 2026
4e2c66a
chore(release): add AUTHOR_MAP entry for Stark-X
teknium1 May 22, 2026
1264fab
fix(tui): surface verbose tool details (#30225)
OutThisLife May 22, 2026
4c61fb6
fix(agent): gate memory tool injection on enabled_toolsets (#5544)
Lempkey May 22, 2026
e77f1ed
fix(agent): widen toolset gate to context engine tools (#5544 sibling)
teknium1 May 22, 2026
f6f25b9
fix(agent): fail fast on small Ollama runtime context
helix4u May 21, 2026
b5c6d9a
fix: wire STT lazy-install into transcription_tools.py
CipherFrame May 21, 2026
372e9a1
fixup: log lazy-install errors at debug + AUTHOR_MAP for CipherFrame
teknium1 May 22, 2026
c769be3
fix(agent): recover from providers rejecting list-type tool content (…
teknium1 May 22, 2026
d3f62c6
fix(cli): clamp curses color 8 for 8-color terminals (Docker)
Tranquil-Flow Apr 23, 2026
c52cd48
fix(computer-use): add set_value to ComputerUseBackend ABC and _NoopB…
May 9, 2026
07b7cf6
chore(release): add rodrigoeqnit to AUTHOR_MAP
teknium1 May 22, 2026
fbdca64
fix(computer-use): skip capture_after when action failed (ok=False)
May 9, 2026
70d53d8
fix: run computer use post-setup when enabling tool
sgtworkman May 9, 2026
caf0f30
chore(release): add sgtworkman to AUTHOR_MAP
teknium1 May 22, 2026
2d587c5
fix(openviking): store memories via content/write API instead of sess…
chdlc May 21, 2026
d617858
fix(openviking): target-aware mirror subdir, drop private-attr access…
teknium1 May 22, 2026
c25f9d1
feat(secrets): label detected credentials with their source (Bitwarde…
teknium1 May 22, 2026
5dc232a
test(tools): disarm lazy-install probe so _HAS_FASTER_WHISPER patches…
briandevans May 22, 2026
22b0d6d
test(tools): centralize disable_lazy_stt_install fixture in conftest
briandevans May 22, 2026
9c90b3a
fix(security): validate secret in _reload_dynamic_routes to prevent H…
Apr 12, 2026
3fc715d
test(webhook): regression cases for empty-secret HMAC bypass
teknium1 May 22, 2026
8b49012
infographic: PR #8306 webhook HMAC bypass salvage
teknium1 May 22, 2026
c1e93aa
fix: add missing aux model slots to model picker
flooryyyy May 22, 2026
d246f9a
fix(aux-picker): drop stale session_search slot
teknium1 May 22, 2026
7dea333
infographic: PR #30373 aux model picker parity salvage
teknium1 May 22, 2026
3ac2125
refactor(image_gen): port FAL backend to plugins/image_gen/fal
0xDevNinja May 18, 2026
2e50942
fix(security): hash gateway pairing codes instead of storing plaintext
Apr 12, 2026
82c2035
fix(pairing): handle legacy plaintext pending entries during upgrade
teknium1 May 22, 2026
ec2ab5b
infographic: PR #8056 hash pairing codes salvage
teknium1 May 22, 2026
9d61408
refactor: extract 7 helpers from convert_messages_to_anthropic
kshitijk4poor May 11, 2026
6f436a4
infographic: PR #27784 anthropic adapter refactor salvage
teknium1 May 22, 2026
1f5219f
fix(security): protect Hermes control-plane files from prompt injection
PratikRai0101 Apr 22, 2026
4210421
fix(file-safety): also write-deny <root>/control-files in profile mode
teknium1 May 22, 2026
1e71b71
infographic: PR #14157 control-plane write-deny salvage
teknium1 May 22, 2026
09afafb
fix(xai): resolve Grok Build context for OAuth
Julientalbot May 22, 2026
d33c99b
fix(security): validate Nous Portal inference_base_url against host a…
memosr May 17, 2026
e32d2ff
fix(security): wire Nous URL allowlist into refresh / mint persistenc…
teknium1 May 22, 2026
4f98863
infographic: PR #27612 Nous URL allowlist salvage
teknium1 May 22, 2026
cc8e5ec
refactor(gateway): migrate Discord adapter to bundled plugin (full Te…
kshitijk4poor May 12, 2026
7849a3d
fix(gateway,discord-plugin): _platform_status must respect is_connect…
teknium1 May 22, 2026
d11cbb1
infographic: PR #30591 Discord adapter → bundled plugin salvage (#30614)
teknium1 May 22, 2026
6c3fd97
perf(termux): fast-path cli version startup
adybag14-cyber May 22, 2026
a3beee4
perf(termux): speed up bare cli prompt startup
adybag14-cyber May 22, 2026
2233b8b
infographic: PR #30609 Termux cold-start salvage (#30618)
teknium1 May 22, 2026
2f320cb
fix(ci): supply-chain-audit uses two-dot diff, causing false positive…
ethernet8023 May 22, 2026
a84cec6
fix(minimax-oauth): refresh short-lived access tokens per request (#3…
teknium1 May 22, 2026
b689624
feat(ci): 4-way matrix slicing with LPT duration-balanced distribution
ethernet8023 May 21, 2026
510df6e
test: 4-way slice benchmark (with cache save)
ethernet8023 May 22, 2026
f89afdb
fix(test): deflake two intermittent CI failures
ethernet8023 May 22, 2026
e7cb5d4
fix: clean push triggers
ethernet8023 May 22, 2026
dc4b046
feat(ci): use 6-way slicing based on benchmark results
ethernet8023 May 22, 2026
487c398
refactor(web): dashboard typography & contrast pass
austinpickett May 23, 2026
8cf977c
fix(plugins): widen _sanitize_plugin_name for category-namespaced names
teknium1 May 23, 2026
b82608a
fix(skills,pairing): path traversal guard in uninstall, lock list_pen…
aaronlab Apr 9, 2026
3f78d80
fix(skills): make content_hash filename-sensitive too (symmetric with…
teknium1 May 23, 2026
7f7245b
infographic: PR #6656 skill hub safety audit salvage
teknium1 May 23, 2026
056e00a
fix(file-safety): block read_file on HERMES_HOME credential stores (#…
briandevans Apr 29, 2026
567ea61
fix(file-safety): block auth.json read via TERMINAL_CWD relative path
briandevans Apr 30, 2026
97e975e
fix(file-safety): widen read-deny to .env, mcp-tokens/, webhook secre…
teknium1 May 23, 2026
729a778
infographic: PR #17659 read-deny credentials salvage
teknium1 May 23, 2026
4a91e36
fix(gateway): separate observed Telegram group context
Glucksberg May 21, 2026
41d2c75
Fix unsafe gateway media path delivery
egilewski May 22, 2026
11e6dd3
chore(release): add AUTHOR_MAP entry for egilewski (PR #30432) (#30833)
teknium1 May 23, 2026
09f85f2
fix(plugins): apply truthy env semantics to project-plugin gate (#29156)
xxxigm May 20, 2026
da636e9
test(plugins): regression coverage for project-plugin RCE chain (#29156)
xxxigm May 20, 2026
8bf9922
fix(plugins): block plugin-api path traversal + project RCE (#29156)
xxxigm May 20, 2026
6a2df9f
docs(env): clarify HERMES_ENABLE_PROJECT_PLUGINS contract (#29156)
xxxigm May 20, 2026
3127a41
test(acp): pin parse_model_input in slash-command tests
teknium1 May 23, 2026
52a368f
fix(gateway): preserve WhatsApp pairing approvals across JID/LID alia…
QuenVix May 23, 2026
71291d8
test: keep tirith checks hermetic
helix4u May 22, 2026
3589960
fix(provider): expose OpenCode Go reasoning controls
counterposition May 23, 2026
70aaa77
fix(opencode-go): emit Kimi reasoning_effort, match KimiProfile shape
teknium1 May 23, 2026
b2e6fdd
fix(agent): log warning when fallback model normalization fails inste…
sprmn24 May 22, 2026
5772e63
chore: drop in-repo infographic/ directory; keep PR-body URLs only (#…
teknium1 May 23, 2026
99671a8
test(kanban): allow tmp_path artifacts past media-delivery validator
teknium1 May 23, 2026
d21ac57
fix(gateway): honor key_env in auth-failure fallback resolution
QuenVix May 23, 2026
2362cc4
fix(gateway): enforce env variable template expansion on runtime conf…
QuenVix May 23, 2026
66d81f9
fix(gateway): don't swallow expansion errors in runtime config helper
teknium1 May 23, 2026
bbd77d1
fix(qqbot): add INTERACTION intent and expose video/file cached paths
WideLee May 18, 2026
a54f5af
fix(qqbot): handle op 7/9 and expand fatal close code set
WideLee May 18, 2026
0e7448d
fix(qqbot): use original attachment filename for cached files
WideLee May 18, 2026
60b0a0e
fix(qqbot): fix SILK magic byte detection slice length
WideLee May 18, 2026
b183be9
fix(gateway-windows): atomic write for .cmd and startup launcher scripts
sprmn24 May 22, 2026
53cb6d3
fix(agent): use atomic_json_write for request debug dumps instead of …
sprmn24 May 22, 2026
e2a7d73
fix(force_close_tcp_sockets): shutdown only, do not release FD (#29507)
xxxigm May 21, 2026
30c22f1
fix(api-call): defer client.close() to owning worker thread on interr…
xxxigm May 21, 2026
5b6f0b6
test(tls-fd-recycle): pin shutdown-only + thread-aware close contract…
xxxigm May 21, 2026
db489a3
fix(tests): allowlist tmp_path for kanban_notify artifact delivery (#…
teknium1 May 23, 2026
0f8215f
fix(security): correct verdict logic and enforce --force limitation i…
sprmn24 Mar 26, 2026
789043b
fix(security): update tests for verdict and --force changes
sprmn24 Mar 26, 2026
6942b18
fix(skills_guard): explain why --force is rejected on dangerous verdicts
teknium1 May 23, 2026
b4cf5b6
feat(portal): one-shot setup, status CLI, and Nous-included markers (…
teknium1 May 23, 2026
61ac118
fix(webhook): enforce INSECURE_NO_AUTH safety rail on dynamic route r…
Zyrixtrex May 22, 2026
4b6d68b
test(fast-command): stub _load_gateway_runtime_config too
teknium1 May 23, 2026
9acf949
feat(telegram): edit status messages in place instead of appending (#…
teknium1 May 23, 2026
f3fb789
docs: surface 'hermes setup --portal' and 'hermes portal' across user…
teknium1 May 23, 2026
64b3eb0
docs: surface Nous Portal on pages where it solves a real problem the…
teknium1 May 23, 2026
8b3cb93
fix(xai-oauth): honor [WKE=unauthenticated:...] disambiguator in enti…
xxxigm May 20, 2026
b5ea6a5
test(xai-oauth): regression coverage for the bad-credentials disambig…
xxxigm May 20, 2026
cc93053
fix(xai-oauth): apply WKE disambiguator to recovery-path catch-all (#…
teknium1 May 23, 2026
6855d17
fix(memory): guard against external drift in MEMORY.md/USER.md (#2604…
teknium1 May 23, 2026
7f1b2b4
fix(approval): pin 'silence is not consent' contract on timeout/deny …
teknium1 May 23, 2026
7245bc7
fix(fallback): merge fallback_providers with legacy fallback_model co…
QuenVix May 23, 2026
e97a4c8
docs(readme): add Nous Portal section between Getting Started and CLI…
teknium1 May 23, 2026
39fe4ec
fix(kanban): refuse corrupt db auto-init
NickLarcombe May 23, 2026
4f835f7
chore(release): map NickLarcombe author email for #30707 salvage
teknium1 May 23, 2026
c4b8f5e
fix(kanban): harden corrupt-db backup against CodeQL path-injection f…
teknium1 May 23, 2026
cae7537
infographic: kanban.db corruption defense (#30858 + #30862) (#30952)
teknium1 May 23, 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
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@ ui-tui/packages/hermes-ink/dist/

# 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/
90 changes: 72 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 @@ -289,6 +339,7 @@ BROWSER_INACTIVITY_TIMEOUT=120
# TELEGRAM_ALLOWED_USERS= # Comma-separated user IDs
# TELEGRAM_HOME_CHANNEL= # Default chat for cron delivery
# TELEGRAM_HOME_CHANNEL_NAME= # Display name for home channel
# TELEGRAM_CRON_THREAD_ID= # Forum topic ID for cron deliveries; overrides TELEGRAM_HOME_CHANNEL_THREAD_ID for cron so replies work in topic mode

# Webhook mode (optional — for cloud deployments like Fly.io/Railway)
# Default is long polling. Setting TELEGRAM_WEBHOOK_URL switches to webhook mode.
Expand Down Expand Up @@ -344,24 +395,6 @@ IMAGE_TOOLS_DEBUG=false
# CONTEXT_COMPRESSION_THRESHOLD=0.85 # Compress at 85% of context limit
# Model is set via compression.summary_model in config.yaml (default: google/gemini-3-flash-preview)

# =============================================================================
# RL TRAINING (Tinker + Atropos)
# =============================================================================
# Run reinforcement learning training on language models using the Tinker API.
# Requires the rl-server to be running (from tinker-atropos package).

# Tinker API Key - RL training service
# Get at: https://tinker-console.thinkingmachines.ai/keys
# TINKER_API_KEY=

# Weights & Biases API Key - Experiment tracking and metrics
# Get at: https://wandb.ai/authorize
# WANDB_API_KEY=

# RL API Server URL (default: http://localhost:8080)
# Change if running the rl-server on a different host/port
# RL_API_URL=http://localhost:8080

# =============================================================================
# SKILLS HUB (GitHub integration for skill search/install/publish)
# =============================================================================
Expand Down Expand Up @@ -414,3 +447,24 @@ IMAGE_TOOLS_DEBUG=false
# 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
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"
2 changes: 1 addition & 1 deletion .github/workflows/contributor-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
check-attribution:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0 # Full history needed for git log

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ jobs:
name: github-pages
url: ${{ steps.deploy.outputs.page_url }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20
cache: npm
cache-dependency-path: website/package-lock.json

- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.11'

Expand Down
Loading