Eigener Fork von NousResearch/hermes-agent: Upstream + Iris-Patches als echte Commits, ersetzt das Laufzeit-Patching.
  • Python 70.7%
  • TypeScript 25.7%
  • JavaScript 1.8%
  • Shell 0.4%
  • PowerShell 0.3%
  • Other 0.9%
Find a file
User 4178d092d0
Some checks failed
CI / Detect affected areas (pull_request) Has been cancelled
Docker Build, Test, and Publish / Resolve release phase (pull_request) Has been cancelled
Nix flake check / Detect affected areas (pull_request) Has been cancelled
CI / Detect affected areas (push) Has been cancelled
Docker Build, Test, and Publish / Resolve release phase (push) Has been cancelled
Nix flake check / Detect affected areas (push) Has been cancelled
CI / OS-specific tests (pull_request) Has been cancelled
CI / install.ps1 protocol surface (pull_request) Has been cancelled
CI / Playwright E2E (Linux) (pull_request) Has been cancelled
CI / Python tests (pull_request) Has been cancelled
CI / Python lints (pull_request) Has been cancelled
CI / JS & TS checks (pull_request) Has been cancelled
CI / Rust tests (pull_request) Has been cancelled
CI / Catalog tests (pull_request) Has been cancelled
CI / Remote terminal backends (pull_request) Has been cancelled
CI / Bootstrap installer (pull_request) Has been cancelled
CI / Desktop E2E (pull_request) Has been cancelled
CI / Desktop core E2E (pull_request) Has been cancelled
CI / Desktop update E2E (pull_request) Has been cancelled
CI / Docs Site (pull_request) Has been cancelled
CI / Deny unrelated histories (pull_request) Has been cancelled
CI / Check contributors (pull_request) Has been cancelled
CI / Check uv.lock (pull_request) Has been cancelled
CI / Check no committed infographics (pull_request) Has been cancelled
CI / Profile artifact check (pull_request) Has been cancelled
CI / Icon assets freshness (pull_request) Has been cancelled
CI / Check no case-colliding filenames (pull_request) Has been cancelled
CI / Check no large binaries (pull_request) Has been cancelled
CI / No production imports of the tools.lazy_deps stub (pull_request) Has been cancelled
CI / package-lock.json diff (pull_request) Has been cancelled
CI / Prompt surface diff (pull_request) Has been cancelled
CI / Lint Docker scripts (pull_request) Has been cancelled
CI / Supply-chain scan (pull_request) Has been cancelled
CI / All required checks pass (v2) (pull_request) Has been cancelled
CI / CI timing report (pull_request) Has been cancelled
CI / JS & TS checks-1 (pull_request) Has been cancelled
CI / cargo test (bootstrap installer) (pull_request) Has been cancelled
CI / Catalog tests-1 (pull_request) Has been cancelled
CI / SSH + Docker backends (real sshd, real daemon) (pull_request) Has been cancelled
CI / install.sh protocol + small fresh-install E2E (pull_request) Has been cancelled
CI / Desktop core E2E (Linux) (pull_request) Has been cancelled
CI / Desktop install/update E2E (Linux, app-update) (pull_request) Has been cancelled
CI / Desktop install/update E2E (Linux, build-fail) (pull_request) Has been cancelled
CI / Desktop install/update E2E (Linux, first-run) (pull_request) Has been cancelled
CI / Desktop install/update E2E (Linux, update-concurrency) (pull_request) Has been cancelled
CI / docs-site-checks (pull_request) Has been cancelled
CI / check-common-ancestor (pull_request) Has been cancelled
CI / check-attribution (pull_request) Has been cancelled
CI / python -m pm.build_env --source . --check-lock (pull_request) Has been cancelled
CI / check-no-committed-infographics (pull_request) Has been cancelled
CI / Reject profile archives (pull_request) Has been cancelled
CI / Regenerate icons + diff against committed (pull_request) Has been cancelled
CI / check-case-collisions (pull_request) Has been cancelled
CI / Reject large binaries (pull_request) Has been cancelled
CI / No production imports of the tools.lazy_deps stub-1 (pull_request) Has been cancelled
CI / package-lock.json semantic diff (pull_request) Has been cancelled
CI / Prompt surface summary (pull_request) Has been cancelled
CI / Lint Dockerfile (hadolint) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Detect affected areas (pull_request) Has been cancelled
Docker Build, Test, and Publish / Build and test image (desktop/amd64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Build and test image (slim/amd64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Build and test image (desktop/arm64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Build and test image (slim/arm64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / publish (amd64, linux/amd64, blacksmith-32vcpu-ubuntu-2404, desktop) (pull_request) Has been cancelled
Docker Build, Test, and Publish / publish (amd64, linux/amd64, blacksmith-32vcpu-ubuntu-2404, slim) (pull_request) Has been cancelled
Docker Build, Test, and Publish / publish (arm64, linux/arm64, blacksmith-32vcpu-ubuntu-2404-arm, desktop) (pull_request) Has been cancelled
Docker Build, Test, and Publish / publish (arm64, linux/arm64, blacksmith-32vcpu-ubuntu-2404-arm, slim) (pull_request) Has been cancelled
Docker Build, Test, and Publish / merge (, slim) (pull_request) Has been cancelled
Docker Build, Test, and Publish / merge (-desktop, desktop) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (desktop/amd64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (slim/amd64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (desktop/arm64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (slim/arm64) (pull_request) Has been cancelled
Docker Build, Test, and Publish / Assemble versioned manifest and digest receipt (pull_request) Has been cancelled
Docker Build, Test, and Publish / Docker phase requirements met (pull_request) Has been cancelled
Nix flake check / nix flake check (pull_request) Has been cancelled
CI / Python tests (push) Has been cancelled
CI / OS-specific tests (push) Has been cancelled
CI / Remote terminal backends (push) Has been cancelled
CI / Python lints (push) Has been cancelled
CI / JS & TS checks (push) Has been cancelled
CI / Rust tests (push) Has been cancelled
CI / Catalog tests (push) Has been cancelled
CI / Bootstrap installer (push) Has been cancelled
CI / Desktop E2E (push) Has been cancelled
CI / Desktop core E2E (push) Has been cancelled
CI / Desktop update E2E (push) Has been cancelled
CI / Docs Site (push) Has been cancelled
CI / Deny unrelated histories (push) Has been cancelled
CI / Check contributors (push) Has been cancelled
CI / Check uv.lock (push) Has been cancelled
CI / Check no committed infographics (push) Has been cancelled
CI / Profile artifact check (push) Has been cancelled
CI / Icon assets freshness (push) Has been cancelled
CI / Check no case-colliding filenames (push) Has been cancelled
CI / Check no large binaries (push) Has been cancelled
CI / No production imports of the tools.lazy_deps stub (push) Has been cancelled
CI / package-lock.json diff (push) Has been cancelled
CI / Prompt surface diff (push) Has been cancelled
CI / Lint Docker scripts (push) Has been cancelled
CI / Supply-chain scan (push) Has been cancelled
CI / All required checks pass (v2) (push) Has been cancelled
CI / CI timing report (push) Has been cancelled
CI / JS & TS checks-1 (push) Has been cancelled
CI / cargo test (bootstrap installer) (push) Has been cancelled
CI / Catalog tests-1 (push) Has been cancelled
CI / SSH + Docker backends (real sshd, real daemon) (push) Has been cancelled
CI / install.sh protocol + small fresh-install E2E (push) Has been cancelled
CI / install.ps1 protocol surface (push) Has been cancelled
CI / Playwright E2E (Linux) (push) Has been cancelled
CI / Desktop core E2E (Linux) (push) Has been cancelled
CI / Desktop install/update E2E (Linux, app-update) (push) Has been cancelled
CI / Desktop install/update E2E (Linux, build-fail) (push) Has been cancelled
CI / Desktop install/update E2E (Linux, first-run) (push) Has been cancelled
CI / Desktop install/update E2E (Linux, update-concurrency) (push) Has been cancelled
CI / docs-site-checks (push) Has been cancelled
CI / check-common-ancestor (push) Has been cancelled
CI / check-attribution (push) Has been cancelled
CI / python -m pm.build_env --source . --check-lock (push) Has been cancelled
CI / check-no-committed-infographics (push) Has been cancelled
CI / Reject profile archives (push) Has been cancelled
CI / Regenerate icons + diff against committed (push) Has been cancelled
CI / check-case-collisions (push) Has been cancelled
CI / Reject large binaries (push) Has been cancelled
CI / No production imports of the tools.lazy_deps stub-1 (push) Has been cancelled
CI / package-lock.json semantic diff (push) Has been cancelled
CI / Prompt surface summary (push) Has been cancelled
CI / Lint Dockerfile (hadolint) (push) Has been cancelled
Docker Build, Test, and Publish / Detect affected areas (push) Has been cancelled
Docker Build, Test, and Publish / Build and test image (desktop/amd64) (push) Has been cancelled
Docker Build, Test, and Publish / Build and test image (slim/amd64) (push) Has been cancelled
Docker Build, Test, and Publish / Build and test image (desktop/arm64) (push) Has been cancelled
Docker Build, Test, and Publish / Build and test image (slim/arm64) (push) Has been cancelled
Docker Build, Test, and Publish / publish (amd64, linux/amd64, blacksmith-32vcpu-ubuntu-2404, desktop) (push) Has been cancelled
Docker Build, Test, and Publish / publish (amd64, linux/amd64, blacksmith-32vcpu-ubuntu-2404, slim) (push) Has been cancelled
Docker Build, Test, and Publish / publish (arm64, linux/arm64, blacksmith-32vcpu-ubuntu-2404-arm, desktop) (push) Has been cancelled
Docker Build, Test, and Publish / publish (arm64, linux/arm64, blacksmith-32vcpu-ubuntu-2404-arm, slim) (push) Has been cancelled
Docker Build, Test, and Publish / merge (, slim) (push) Has been cancelled
Docker Build, Test, and Publish / merge (-desktop, desktop) (push) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (desktop/amd64) (push) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (slim/amd64) (push) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (desktop/arm64) (push) Has been cancelled
Docker Build, Test, and Publish / Publish tested Docker image (slim/arm64) (push) Has been cancelled
Docker Build, Test, and Publish / Assemble versioned manifest and digest receipt (push) Has been cancelled
Docker Build, Test, and Publish / Docker phase requirements met (push) Has been cancelled
Nix flake check / nix flake check (push) Has been cancelled
docs(porting-notes): Live-Nachzug 2026-11-06 dokumentiert — Prod grün, zwei Betriebsbefunde
2026-11-06 04:01:06 +01:00
.github ci(docs): keep retained Pages assets 3 hours and fail fast on oversize artifacts 2026-11-05 10:13:26 -08:00
acp_adapter fix(acp): defer attach notices until options are ready 2026-11-04 15:43:42 +00:00
agent Merge remote-tracking branch 'upstream/main' into chore/sync-upstream-20261105 2026-11-06 00:53:33 +01:00
apps test(desktop): assert the tile shows each turn once after a late snapshot 2026-11-05 17:44:19 -05:00
assets feat(icons): custom drive artwork as the volume icon of both installer DMGs 2026-10-02 10:33:44 -04:00
contributors chore: map contributor email for christofilojohn 2026-11-05 12:16:41 -08:00
cron fix(cron): scheduled posts reach a room the root gateway imported 2026-11-03 10:28:21 -08:00
docker fix(docker): supervise profile gateways outside the root s6 scandir 2026-11-04 23:37:25 -05:00
evals refactor(cli): remove the unused one-shot agent that ran outside the gateway 2026-11-05 17:59:21 -05:00
gateway Merge remote-tracking branch 'upstream/main' into chore/sync-upstream-20261105 2026-11-06 00:53:33 +01:00
hermes_cli Merge remote-tracking branch 'upstream/main' into chore/sync-upstream-20261105 2026-11-06 00:53:33 +01:00
hermes_platform refactor(desktop): find vswhere through hermes_platform 2026-10-20 15:50:30 -04:00
locales feat(desktop): Daybreak control in the model route editor 2026-11-05 15:44:58 -05:00
native/fts5_cjk fix activation of devenv, use /usr/bin/env bash everywhere 2026-09-11 11:17:18 -04:00
nix feat(nix): pass the token as HERMES_DASHBOARD_SESSION_TOKEN=file:<path> 2026-10-28 12:22:11 -04:00
optional-mcps feat(plugin-catalog): add courier-by-autolane 2026-11-02 14:24:27 -08:00
optional-skills fix(docker): keep root out of the hermes-owned gateway scandir 2026-11-04 23:37:25 -05:00
plugin-catalog chore(plugin-catalog): pin the advanced-delegation card image to the same commit 2026-11-05 15:45:18 -05:00
plugins fix(webapp): the gated Webapp accepts the deployment session token 2026-11-05 18:26:06 -05:00
pm fix(pm): judge a build's hermes-agent markers on its own interpreter 2026-11-03 00:28:04 -08:00
providers fix(providers): bundled_profiles loads no plugin code in a safe worker 2026-10-30 11:13:02 -04:00
scripts feat(plugins): one published list of what plugins may import 2026-11-05 18:47:10 -05:00
skills chore(skills): drop optional skills that catalog MCPs, plugins and vendor repos cover 2026-11-03 13:28:32 -08:00
tests Merge remote-tracking branch 'upstream/main' into chore/sync-upstream-20261105 2026-11-06 00:53:33 +01:00
tests-js test(js): fail the lockfile and workspace contracts when their input is missing 2026-11-05 14:08:26 -08:00
tools Merge upstream/main: Re-Sync (43 eigene vs. 5.097 Upstream-Commits) 2026-11-06 00:52:46 +01:00
tui_gateway fix(tui_gateway): queue a global model pick that only keeps a pinned context length 2026-11-05 18:27:43 -05:00
ui-tui fix: resolve electron, vite and playwright from the workspaces that declare them 2026-11-05 14:08:26 -08:00
web fix(web): build the compiler preset without mutating it, from the config dir 2026-11-05 14:08:26 -08:00
website feat(plugins): one published list of what plugins may import 2026-11-05 18:47:10 -05:00
.coderabbit.yaml ci: version the required check so CI greens from before a new required job stop counting 2026-10-06 03:57:34 -07:00
.dockerignore fix(docker): hermes webapp reuses the baked bundle, and local Desktop files stay out of the image 2026-10-27 08:41:33 -04:00
.env.example docs(browser): drop references to deleted browser tools 2026-10-23 01:42:14 -07:00
.envrc fix(direnv): watch nix/ and pm/ recursively 2026-10-23 17:20:39 -04:00
.fork-upstream-base chore(sync): .fork-upstream-base auf 79658be93b (Nachzug-Merge), PORTING-NOTES nachgezogen 2026-11-06 00:54:42 +01:00
.gitattributes fix(release): close publication custody gaps 2026-09-22 02:19:38 -04:00
.gitignore fix(secrets): move secret caches and the Photon token to the profile home root 2026-10-29 22:21:46 -04:00
.hadolint.yaml feat(docker): remove gosu from bundled image; s6-setuidgid handles privilege drop 2026-05-24 18:05:33 -07:00
.mailmap chore: mailmap kshitijkapoorr@gmail.com to kshitijk4poor's canonical noreply 2026-08-26 16:17:34 +05:30
.npmrc refactor(desktop): tighten the diagram theme store and accessible name 2026-11-03 03:41:16 +05:30
.nvmrc feat: add .nvmrc w/ node 26 2026-08-01 21:17:51 -04:00
.prettierignore fix(ci): js-autofix pushes via PR instead of direct push to main (#65186) 2026-07-15 17:19:19 -04:00
.prettierrc refactor(lint): hoist shared eslint + prettier config to root 2026-07-16 01:42:02 +05:30
.python-version feat(python): move first-party runtime to 3.14; swap wake engine to pyopen-wakeword 2026-09-07 14:03:27 -04:00
activate feat(activate): add activate.fish for the fish shell 2026-10-02 18:43:30 -04:00
activate.fish feat(activate): add activate.fish for the fish shell 2026-10-02 18:43:30 -04:00
activate.ps1 chore: restore executable bits on root launcher scripts (unrelated to the rename) 2026-09-27 12:33:44 -07:00
AGENTS.md docs: root AGENTS.md becomes a hub; area rules move where they load 2026-10-04 23:05:42 -07:00
batch_runner.py refactor: move the Singularity terminal backend out of core into the singularity catalog plugin 2026-10-22 05:26:10 -07:00
CLAUDE.md docs(claude-md): Bericht-Issue nach jedem Upstream-Update-Lauf 2026-10-22 12:24:41 +02:00
cli-config.yaml.example docs(stt): clarify language inheritance and auto-detection 2026-11-04 23:16:10 -08:00
cli.py feat(cli): backtrack picker — Esc Esc / /rewind to edit & resend or fork from an earlier prompt 2026-11-04 23:06:14 -08:00
CONTRIBUTING.es.md chore(memory): holographic leaves core for its community catalog plugin (re-land #136424) 2026-10-10 21:18:25 -07:00
CONTRIBUTING.md chore(skills): move niche built-in skills to optional 2026-10-28 21:24:43 -07:00
docker-compose.windows.yml feat(docker): add Windows Docker Desktop compatible compose file 2026-05-23 21:52:34 +05:30
docker-compose.yml docs(compose): update entrypoint comment for s6-overlay 2026-05-24 18:05:33 -07:00
Dockerfile fix(docker): supervise profile gateways outside the root s6 scandir 2026-11-04 23:37:25 -05:00
eslint.config.shared.mjs fix(ci): eslint ignores *.generated.ts; restore the contract file's header 2026-09-21 08:19:52 -07:00
flake.lock chore(nix): nix flake update 2026-10-23 17:20:39 -04:00
flake.nix feat(nix): home-manager module, shared with the NixOS module 2026-08-18 20:42:06 -04:00
hermes chore: restore executable bits on root launcher scripts (unrelated to the rename) 2026-09-27 12:33:44 -07:00
hermes_bootstrap.py ci: UP007, UP022, UP028, UP031, UP041 linter fixes 2026-10-09 17:31:52 +02:00
hermes_constants.py fix(scratch): run the due scratch prune in a detached child so it always finishes 2026-10-25 17:50:36 -07:00
hermes_constants_scratch.py fix(process-identity): old-format ledger entries keep main's epoch match 2026-10-25 20:27:10 -07:00
hermes_constants_scratch_detach.py fix(scratch): the detached prune spares the launcher's whole ancestry and fails closed 2026-10-25 17:50:36 -07:00
hermes_constants_scratch_stuck.py fix(scratch): stuck-entry records recover from nested fixes, survive concurrent pruners 2026-10-18 01:32:18 -07:00
hermes_dir_acl.py refactor(windows): one TokenElevation probe for grants, refusal naming and the service installer 2026-10-17 08:03:54 -07:00
hermes_logging.py fix(redact): the log formatter reads no config 2026-10-30 11:13:02 -04:00
hermes_startup_watchdog.py ci: ruff UP037 fixes 2026-10-09 17:34:38 +02:00
hermes_state.py feat(sessions): refresh-prompts lets continuing sessions adopt updated prompt sources 2026-10-28 19:30:48 -07:00
hermes_state_api_content.py fix(sessions): proactive prune rewrites only the changed rows, in place (#124273) 2026-10-18 19:44:32 -04:00
hermes_state_common.py fix(cli): a session with a pending first admission is not an empty launch stub 2026-10-20 14:13:35 +05:30
hermes_state_compaction_display.py fix(state): a compacted tool result paints once, as its archived original 2026-10-27 11:49:40 -07:00
hermes_state_compression.py fix(sessions): refresh epoch survives compression rotation; --session targets the tip 2026-10-28 19:30:48 -07:00
hermes_state_coverage.py fix(state): a dedupe claim needs the occurrence, its version and its replay bytes 2026-10-27 11:49:40 -07:00
hermes_state_dbfile.py fix(state): recognise old FTS layouts by name; stamp only the exact current one 2026-10-21 04:14:08 -07:00
hermes_state_detached_results.py refactor(state): move the detached-result writers out of hermes_state_messages 2026-10-16 17:42:48 -04:00
hermes_state_errors.py fix(sessions): proactive prune rewrites only the changed rows, in place (#124273) 2026-10-18 19:44:32 -04:00
hermes_state_fts.py fix(sessions): optimize-storage paces for a writer that opens state.db mid-run; failed runs exit 1 2026-10-25 18:25:29 -07:00
hermes_state_gateway.py fix(state): session reads on the gateway loop never wait on the token writer 2026-10-27 12:35:50 -07:00
hermes_state_guard.py fix(state): count the test runner only when a Python interpreter runs it 2026-11-04 02:01:54 +05:30
hermes_state_health.py ci: apply all automatic linter fixes available 2026-10-08 17:22:54 +02:00
hermes_state_holders.py ci: apply all automatic linter fixes available 2026-10-08 17:22:54 +02:00
hermes_state_identity.py ci: apply all automatic linter fixes available 2026-10-08 17:22:54 +02:00
hermes_state_ids.py docs(state): trim derived-id recognizer comments to the contract 2026-10-04 12:05:37 +05:30
hermes_state_keys.py fix(cron): pair output docs with attempts after sessions are known 2026-10-15 16:33:44 -04:00
hermes_state_local.py perf(state): reuse unchanged local lineage projections 2026-10-27 07:26:36 -07:00
hermes_state_local_lineage.py fix(gateway): commit a local receipt's compression catch-up off the owner loop 2026-10-17 13:29:51 -04:00
hermes_state_local_migration.py fix(sessions): bundled platforms and automation labels stay read-only; adopt scan stays fast 2026-11-01 21:30:21 -08:00
hermes_state_lockguard.py ci: apply all automatic linter fixes available 2026-10-08 17:22:54 +02:00
hermes_state_lockowners.py ci: apply all automatic linter fixes available 2026-10-08 17:22:54 +02:00
hermes_state_maintenance.py fix(plugins): on_session_delete review findings 2026-10-18 02:11:06 -07:00
hermes_state_media.py fix(tools): spill pointers in structured content and Windows paths count as references (#126351) 2026-10-16 15:03:56 -07:00
hermes_state_messages.py fix(hooks): a blocked prompt is stored only as the withheld placeholder 2026-10-31 22:59:20 -07:00
hermes_state_mutation_binding.py fix(sessions): old phone-app chats continue in Desktop instead of opening read-only 2026-11-01 21:30:21 -08:00
hermes_state_mutation_branch.py fix(state): a branch of an ACP session starts at the Default edit mode 2026-10-18 20:49:56 -07:00
hermes_state_mutation_chat_pick.py fix: fence a messaging chat pick with a mutation receipt and revision bump 2026-10-20 03:09:11 -07:00
hermes_state_mutation_compress.py fix(compress): report the canonical /compress outcome like native /compress 2026-09-27 14:46:19 -07:00
hermes_state_mutation_guards.py fix(gateway,desktop): keep compression busy refusals at debug, share the busy mapping, check the reason on Desktop 2026-10-19 14:40:07 +02:00
hermes_state_mutation_prepared.py fix(gateway): keep a deferred level across a direct model pick; show it in Desktop 2026-10-25 11:32:44 -04:00
hermes_state_mutation_reset.py fix(state): exclude workers across the complete conversation lineage 2026-10-08 09:10:26 -07:00
hermes_state_mutation_retirement.py fix(gateway): fence a route whose retirement value is not valid JSON 2026-10-18 01:47:07 -04:00
hermes_state_mutation_transcript.py feat: reuse transactional rewind with generation and receipt fences 2026-09-08 17:14:54 -07:00
hermes_state_mutations.py fix(hooks): /retry and /undo after a block use the typed text, not the placeholder 2026-10-31 22:59:20 -07:00
hermes_state_pidns.py refactor(state): hoist pidns imports and trim duplicated call-site prose 2026-10-03 17:44:58 +05:30
hermes_state_portability.py feat(plugins): on_session_delete covers Desktop deletes and deliberate archives 2026-10-18 02:11:06 -07:00
hermes_state_profile_repair.py feat(plugins): on_session_delete covers Desktop deletes and deliberate archives 2026-10-18 02:11:06 -07:00
hermes_state_prompt_refresh.py feat(sessions): refresh-prompts lets continuing sessions adopt updated prompt sources 2026-10-28 19:30:48 -07:00
hermes_state_prune_rewrite.py fix(agent): a tool-row rewrite commits only while this process owns the turn 2026-10-25 22:28:45 -07:00
hermes_state_readpool.py fix: core modules import again on Python 3.11-3.13 (re-quote eager forward references) 2026-10-09 14:25:07 -07:00
hermes_state_reconcile.py chore(sessions): meet code-health on the round-3 browse catch-up 2026-10-17 07:59:39 -07:00
hermes_state_registry.py ci: ruff UP037 fixes 2026-10-09 17:34:38 +02:00
hermes_state_repair.py fix(state): a WAL sidecar unlinked mid-preflight is gone, not read-only 2026-10-21 04:01:20 -07:00
hermes_state_rewind.py fix(gateway): /retry's rewrite commits in its re-send's own admission 2026-10-16 20:26:14 -07:00
hermes_state_runtime.py fix(desktop): a retry refused because its id is already admitted settles as delivered 2026-10-27 12:56:31 -07:00
hermes_state_runtime_workers.py fix(managed-worker): delegated children build, close and settle off Relay's loop 2026-10-20 03:22:11 -07:00
hermes_state_schema.py fix(state): keep the store opening when the realign meets a trigram index without its tokenizer 2026-10-21 04:14:08 -07:00
hermes_state_search.py fix(sessions): optimize-storage counts backfill rows from an index; no VACUUM over a live writer 2026-10-25 18:25:29 -07:00
hermes_state_session_list.py fix(sessions): pin the page-first list contract, keep the facade under its cap 2026-10-27 07:26:36 -07:00
hermes_state_sessions.py fix(state): session reads on the gateway loop never wait on the token writer 2026-10-27 12:35:50 -07:00
hermes_state_sessions_model_config.py fix: what the main merge left broken outside its conflict hunks 2026-10-14 06:09:56 -07:00
hermes_state_telegram.py ci: apply all automatic linter fixes available 2026-10-08 17:22:54 +02:00
hermes_state_terminal.py fix(desktop): a retry refused because its id is already admitted settles as delivered 2026-10-27 12:56:31 -07:00
hermes_state_timeline.py fix(state): a compacted tool result paints once, as its archived original 2026-10-27 11:49:40 -07:00
hermes_state_titles.py fix(state): never transfer a title off a parent across a branch edge 2026-10-25 19:21:41 -04:00
hermes_state_todo.py fix(state): a Todo plan undone in a compression child stays gone on an omitted resume 2026-10-27 12:11:20 -07:00
hermes_state_usage.py fix(state): session reads on the gateway loop never wait on the token writer 2026-10-27 12:35:50 -07:00
hermes_state_user_copy.py fix(agent): user copy for the session_row_missing persistence cause 2026-09-26 22:39:42 +05:30
hermes_state_wal.py Merge origin/main (#27: 19 commits to 517b5e10fe) into feat/unified-gateway-runtime 2026-10-08 12:09:24 -07:00
hermes_state_worker_compression.py fix(state): a compacted tool result paints once, as its archived original 2026-10-27 11:49:40 -07:00
hermes_state_worker_context.py fix(delegation): managed workers accept the tool pin's delegation_backend 2026-10-23 00:37:14 -07:00
hermes_state_worker_lifecycle.py fix(hooks): a blocked prompt is stored only as the withheld placeholder 2026-10-31 22:59:20 -07:00
hermes_time.py docs(config): document HERMES_CONFIG_BACKEND; correct the hermes_time fallback comment 2026-10-25 18:54:09 -07:00
hermes_yaml.py ci: fix PLC0206, PLC0414 linter errors 2026-10-10 15:20:14 +02:00
justfile chore: pin specific js dependency versions 2026-10-10 23:58:48 +02:00
lefthook.yml chore(hooks): web lint hook no longer grabs website/ files 2026-10-11 04:41:20 -07:00
LICENSE fix: restore missing MIT license file 2026-03-07 13:43:08 -08:00
mini_swe_runner.py ci: RUF013, RUF015 2026-10-08 21:29:48 +02:00
model_tools.py fix(tools): expire the tool-definitions memo with its check_fn verdicts 2026-11-02 14:54:42 -08:00
package-lock.json chore(desktop): drop the duplicate ws dependency 2026-11-05 14:08:26 -08:00
package.json fix(deps): bump undici to 6.29.1 and 7.30.1 2026-11-03 21:06:29 +01:00
PORTING-NOTES.md docs(porting-notes): Live-Nachzug 2026-11-06 dokumentiert — Prod grün, zwei Betriebsbefunde 2026-11-06 04:01:06 +01:00
pyproject.toml fix(deps): bump setuptools to 84.1.0 2026-11-03 21:06:30 +01:00
README.es.md refactor: OpenClaw migration leaves core too; first-time setup offers the agent-importers plugin 2026-10-22 11:22:12 -07:00
README.md Merge upstream/main: Re-Sync (43 eigene vs. 5.097 Upstream-Commits) 2026-11-06 00:52:46 +01:00
README.ur-pk.md refactor: OpenClaw migration leaves core too; first-time setup offers the agent-importers plugin 2026-10-22 11:22:12 -07:00
README.zh-CN.md refactor: OpenClaw migration leaves core too; first-time setup offers the agent-importers plugin 2026-10-22 11:22:12 -07:00
registration_lifecycle.py ci: ruff UP037 fixes 2026-10-09 17:34:38 +02:00
ruff.pre-commit.toml ci: don't enforce CC in pre commit 2026-10-10 23:58:48 +02:00
ruff.toml ci: limit python cyclomatic complexity to pre-commit hook 2026-10-10 16:37:15 +02:00
run_agent.py perf(mem): timer trims run one full collection per quiet period, never during a turn 2026-11-01 22:07:56 -08:00
SECURITY.es.md feat: consolidate 'hermes version' into 'hermes --version', remove the subcommand 2026-08-20 03:05:46 -07:00
SECURITY.md feat: consolidate 'hermes version' into 'hermes --version', remove the subcommand 2026-08-20 03:05:46 -07:00
session-kontext.md docs(porting-notes): Live-Nachzug 2026-11-06 dokumentiert — Prod grün, zwei Betriebsbefunde 2026-11-06 04:01:06 +01:00
setup-hermes.ps1 fix(install): preserve Unicode Python paths in developer setup 2026-10-04 13:23:25 -05:00
setup-hermes.sh chore: restore executable bits on root launcher scripts (unrelated to the rename) 2026-09-27 12:33:44 -07:00
setup.py refactor(pm): own group-only builds and finish dependency hints 2026-09-11 18:25:05 -04:00
SOUL.md refactor(skills): shipped-set slim — 15 to optional, github 6-way merge, pdf absorbs OCR, channel-gated teams pipeline (index −26%) (#98539) 2026-08-30 04:53:39 -07:00
toolset_distributions.py ci: apply all automatic linter fixes available 2026-10-08 17:22:54 +02:00
toolsets.py fix(tools): key the tools[] freeze on generation and selection, hold flips on pin restore 2026-11-02 14:54:42 -08:00
trajectory_compressor.py ci: fix remaining ASYNCXXX linter errors 2026-10-10 15:20:14 +02:00
UPSTREAM-README.md docs: preserve upstream's original README.md as UPSTREAM-README.md 2026-09-07 12:09:49 +02:00
utils.py fix: a too-deeply nested tool result no longer drops tool.complete 2026-11-04 13:26:30 -08:00
uv.lock fix(deps): bump setuptools to 84.1.0 2026-11-03 21:06:30 +01:00

Hermes-Agent-Fork

Eigener, dauerhaft gepflegter Fork von NousResearch/hermes-agent für Iris. Dieses Dokument erklärt das Update-Konzept, den Ablauf und wie du selbst — auch nach Monaten Pause — wieder sicher ein Update durchführen kannst.

Warum dieser Fork existiert

Iris bettet hermes-agent als Kern-Agent-Runtime ein, sowohl auf dem Mac (~/.hermes/hermes-agent) als auch auf dem Linux-Server (Docker-Container iris-hermes/iris-hermes-scheduled). Iris braucht dabei einige eigene Anpassungen am hermes-agent-Quellcode — Bugfixes für Probleme, die Iris kritisch treffen, und Iris-eigene Integrationsfeatures (z. B. target: server|client für Terminal-/Datei-Tools, Docker-outside-of-Docker-Pfadübersetzung).

Bisher liefen diese Anpassungen als 18 textuelle Laufzeit-Patches (linux-server/iris-server/hermes/patch_hermes.py), die bei JEDEM Container-Boot bzw. jeder Mac-Installation frisch auf einen neuen GitHub-Klon angewendet wurden. Das war fragil: ein git pull auf eine neuere hermes-agent-Version konnte einen Patch unbemerkt brechen — nur eine ✗-Zeile im Log, kein harter Fehler. Am 2026-09-05 führte genau das zu einem Totalausfall: der Patch, der verhindert, dass jeder Hermes-Job für immer auf "running" hängt, griff nach einem Upstream-Update nicht mehr, unbemerkt bis zum Live-Betrieb.

Jetzt existieren dieselben Anpassungen als echte, einzelne Git-Commits auf diesem Fork, oben auf der echten Upstream-Historie. Ein Update ist damit ein normaler, sichtbarer Git-Vorgang (Merge, ggf. mit Konflikten, die du siehst und lösen musst) statt eines stillen Text-Matchings, das unbemerkt scheitern kann.

Der Update-Zyklus im Überblick

flowchart TD
    GH["GitHub upstream<br/>NousResearch/hermes-agent"]

    subgraph LOCAL["Lokaler Fork — ~/Documents/2ndbrain/hermes/"]
        direction TB
        FETCH["1. git fetch upstream"]
        MERGE["2. git merge upstream/main<br/>Konflikte mit Patch-Commits von Hand loesen"]
        BUILD["3. uv venv (3.14) + uv pip install -e .<br/>Smoke-Test: Imports, hermes --help"]
        LIVE["4. Live-Test auf dem Mac<br/>echten Job durch den Gateway laufen lassen"]
    end

    PUSH["5. git push origin main"]
    FORGEJO["Forgejo origin<br/>iris/hermes-agent : main"]

    subgraph PROD["Produktion"]
        direction TB
        MAC["Mac-Iris<br/>~/.hermes/hermes-agent"]
        LINUX["Linux-Iris<br/>iris-hermes + iris-hermes-scheduled"]
    end

    GH -->|fetch| FETCH --> MERGE
    MERGE -->|Konflikt| MERGE
    MERGE -->|sauber gemergt| BUILD
    BUILD -->|Fehler| MERGE
    BUILD -->|ok| LIVE
    LIVE -->|haengt oder schlaegt fehl| MERGE
    LIVE -->|completed| PUSH
    PUSH --> FORGEJO
    FORGEJO -->|Iris-Server aktualisieren| MAC
    FORGEJO -->|Iris-Server aktualisieren| LINUX

Der zentrale Punkt: alles links von "5. push" passiert lokal auf deinem Rechner, unter deiner Kontrolle, bevor irgendeine Produktionsinstanz etwas davon sieht. Erst ein git push origin main macht einen neuen Stand für "Iris-Server aktualisieren" sichtbar — und das nur, weil du ihn vorher selbst gebaut und getestet hast, nicht weil ein Cron-Job oder ein Container-Boot blind git pull gegen GitHub gemacht hat.

Komponenten

Komponente Was es ist
upstream (Remote) https://github.com/NousResearch/hermes-agent.git — das echte Original. Nur fetch, nie push.
origin (Remote) https://forgejo.lewerken.duckdns.org/iris/hermes-agent.git — dein Forgejo-Fork. Der einzige Stand, den Produktionsinstanzen sehen.
Lokales Arbeitsverzeichnis ~/Documents/2ndbrain/hermes/ — hier findet Merge, Build und Test statt. Kein Teil des 2ndbrain-Git-Repos (eigenes Repo, siehe CLAUDE.md).
PORTING-NOTES.md Dokumentiert, welche der ursprünglich 18 Laufzeit-Patches wie übernommen wurden — Referenz bei Merge-Konflikten.
.fork-upstream-base Der Commit-Hash des Merge-Base-Punkts zwischen origin/main und upstream/main (git merge-base origin/main upstream/main). Iris' "Hermes-Agent-Version"-Anzeige nutzt ihn, um über GitHubs Compare-API zu ermitteln, wie viele echte Upstream-Commits dem Fork fehlen, ohne dass die Produktivinstallation selbst einen upstream-Remote braucht. Muss nach jedem git merge upstream/main neu berechnet und mitcommittet werden (siehe CLAUDE.md).
Mac-Produktivinstanz ~/.hermes/hermes-agent — der tatsächlich von deinem Companion-Panel genutzte Hermes.
Linux-Produktivinstanzen iris-hermes/iris-hermes-scheduled-Container auf alf@iris-server (und jedem weiteren deployten Linux-Server).
"Iris-Server aktualisieren" Menüpunkt in Iris/IrisClient — löst POST /hermes/agent/update aus (Mac: IrisRemoteServer.swift, Linux: linux-server/iris-server/app/hermes_agent_update.py), die intern git pull gegen den jeweils konfigurierten Remote macht.

Ein Update durchführen

Alles im lokalen Arbeitsverzeichnis:

cd ~/Documents/2ndbrain/hermes

# 1. Upstream-Stand holen
git fetch upstream

# 2. In main mergen
git merge upstream/main
# Bei Konflikten: git log -p -- <datei> zeigt dir den ursprünglichen Patch-Commit und seine
# Begründung. Löse den Konflikt aus dieser Absicht heraus, nicht durch blindes "unsere/ihre
# Version nehmen". PORTING-NOTES.md hilft bei der Einordnung, welche Änderung wofür da ist.
git add <konfliktdatei>
git commit

Wenn ein Patch beim Mergen komplett verschwindet (Upstream hat die Zeilen, die er ändert, selbst entfernt/umgebaut), prüfe wie in PORTING-NOTES.mds "moot"-Fällen beschrieben: löst Upstream das ursprüngliche Problem jetzt selbst? Wenn ja, lass den Patch einfach weg und trage das in PORTING-NOTES.md nach. Wenn nein, baue die gleiche Absicht gegen die neue Code-Struktur neu — kein Commit einfach fallenlassen, ohne zu verstehen warum.

Testen

1. Smoke-Test (schnell, immer machen)

# Python 3.14 ist Pflicht: die Kern-Dependencies sind in pyproject.toml per Marker an
# >=3.14 gebunden (älter installiiert faktisch nichts ein — die Editable-Installation bleibt leer). Und der Installer muss uv sein —
# plain pip scheitert am Pillow-Pin-Konflikt mit browser-harness, den Upstream nur über
# [tool.uv] override-dependencies löst.
uv venv --python 3.14 /tmp/hermes-fork-test-venv
uv pip install --python /tmp/hermes-fork-test-venv/bin/python -e .
/tmp/hermes-fork-test-venv/bin/python -c "import gateway"   # oder welches Modul dein aktueller Patch berührt hat
/tmp/hermes-fork-test-venv/bin/hermes --help                # CLI-Entry-Point funktioniert

Regressionstests (bei jedem Sync mindestens die Fork-eigenen unter tests/ + die Upstream- Tests der Konfliktdateien; dafür zusätzlich uv pip install --python .../bin/python pytest pytest-asyncio mcp httpx2 starlette aiohttp pytest-timeout in denselben venv): ein Teil der Upstream-Suite schlägt auf diesem Mac umgebungsbedingt fehl — vor dem Einordnen immer gegen einen sauberen upstream/main-Worktree mit eigenem venv gegenprüfen (gleiche Failures = nicht die Schuld des Merges).

Reicht NICHT aus, um den kritischen "Job hängt für immer"-Fall auszuschließen — dafür braucht es einen echten Lauf gegen einen echten Gateway (nächster Abschnitt).

2. Live-Test auf dem Mac (der eigentlich aussagekräftige Test)

Testet den Fork im echten Zusammenspiel mit deinem laufenden Companion-Panel-Hermes, ohne etwas dauerhaft zu verändern — alles über Git-Branches, jederzeit reversibel.

cd ~/.hermes/hermes-agent

# Einmalig (überspringen, falls der Remote schon existiert):
git remote add fork-test /Users/alflewerken/Documents/2ndbrain/hermes

# Aktuellen Fork-Stand holen
git fetch fork-test

# Lokale Mac-spezifische Änderungen wegsichern (Shebang-Fix, ggf. von Hermes selbst
# generierte Skill-Notizen) — siehe unten "Rückbau" zum Wiederherstellen
git stash push -m "pre-fork-test"

# Auf den Fork-Stand wechseln (neuer Branch, falls noch nicht vorhanden)
git checkout -b fork-test-main fork-test/main
# ...oder falls der Branch schon existiert:
# git checkout fork-test-main && git merge fork-test/main

# Mac-lokalen Shebang wieder auf die eigene venv setzen (kommt nie aus dem Fork,
# siehe PORTING-NOTES.md "Nicht portierbar" — `hermes_hermes_cli_shebang`)

Öffne hermes (die Datei im Repo-Root) und setze die erste Zeile auf:

#!/Users/alflewerken/.hermes/hermes-agent/venv/bin/python3
# Gateway neu starten, damit er den neuen Code lädt
source venv/bin/activate
python -m hermes_cli.main gateway restart

# Bearer-Token für die lokale Gateway-API holen
grep API_SERVER_KEY ~/.hermes/.env

# Echten Testjob starten
TOKEN="<der Wert von oben>"
curl -s -X POST http://127.0.0.1:8642/v1/runs \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"input":[{"role":"user","content":"Antworte nur mit dem Wort OK."}]}'
# → liefert {"run_id": "run_...", "status": "started", ...}

# Status pollen, bis "completed" ODER "failed" (NIE dauerhaft "running")
curl -s http://127.0.0.1:8642/v1/runs/<run_id> -H "Authorization: Bearer $TOKEN"

Wichtige Stolperfalle: ~/.hermes/config.yamls model:-Block (das global konfigurierte Standard-Backend, das der Gateway für einen Lauf ohne explizite Modellangabe nutzt) kann vom Backend abweichen, das gerade in Iris' Einstellungen ("Agent LLM") ausgewählt ist — beide werden nicht immer synchron gehalten. Prüfe vor dem Test, welches Backend in Iris tatsächlich aktiv läuft ("Server läuft"-Anzeige in den Einstellungen), und stelle sicher, dass model.base_url in config.yaml dorthin zeigt — sonst schlägt der Testjob mit "Connection error" fehl, was nichts mit dem Fork zu tun hat, sondern nur mit einem falsch konfigurierten Backend. Bei mlx-vlm/LM Studio: der default-Modellname muss exakt der id aus GET <base_url>/models entsprechen (oft ein voller Dateipfad, kein Kurzname).

Ergebnis lesen: "status": "completed" mit einem "output"-Feld = Erfolg, der Job ist NICHT hängengeblieben. "status": "failed" mit einer klaren "error"-Meldung ist ebenfalls ein akzeptables Testergebnis (der Run-Lifecycle selbst funktioniert, das eigentliche Problem liegt woanders, z. B. Backend nicht erreichbar). Bleibt der Status über mehrere Minuten bei "running" hängen, obwohl das Backend nachweislich erreichbar ist — das ist der Fehlerfall, den dieser ganze Fork verhindern soll. Dann: NICHT pushen, den Merge-Commit nochmal prüfen, insbesondere ob gateway/platforms/api_server_runs.py (der SSE-Broadcast-Fix) den Merge überstanden hat.

Nach Forgejo pushen

Erst wenn Smoke-Test UND Live-Test beide grün sind:

cd ~/Documents/2ndbrain/hermes
git push origin main

Damit "Iris-Server aktualisieren" den Fork tatsächlich nutzt

✅ Vollständig umgestellt, verifiziert 2026-09-07. Die beiden /hermes/agent/update-Routen (Mac + Linux) machen nur noch einen reinen git pull origin main — kein patch_hermes.py- Reapply-Schritt mehr, die Datei selbst ist gelöscht.

  • Mac: Iris/Resources/install_hermes.sh repointet ~/.hermes/hermes-agents origin auf den Forgejo-Fork und setzt hart auf dessen main zurück — sowohl VOR einem erneuten Lauf (damit der Installer-eigene interne git pull schon den Fork trifft) als auch DANACH (deckt eine frische Neuinstallation ab, die zwangsläufig erst von GitHub klont).
  • Linux: linux-server/iris-server/hermes/Dockerfile macht denselben Repoint+Hard-Reset nach dem offiziellen NousResearch-Installer — jedes gebaute Image landet damit direkt auf dem gepatchten Fork-Stand.
  • Beide bereits laufenden Produktivinstanzen (Mac-Lokalinstallation, alf@iris-servers iris-hermes/iris-hermes-scheduled) wurden am selben Tag manuell nachsynchronisiert (nicht nur künftige Neuinstallationen) — origin zeigt überall nachweislich auf den Fork, ein echter Regressionsjob läuft durch statt für immer auf "running" zu hängen.
  • Ein erster Deploy-Versuch traf dabei kurzzeitig den ungepatchten Fork-Baseline-Stand (d8a07768c5), weil die 13 portierten Patch-Commits lokal committet, aber noch nicht nach Forgejo gepusht waren — gefixt durch git push origin main, danach alle Instanzen erneut synchronisiert. Lehre: ein lokaler Commit in diesem Arbeitsverzeichnis ist erst wirksam, sobald er tatsächlich git push origin main durchlaufen hat, nicht schon beim Committen.

Rückbau / Notausstieg (Mac-Live-Test)

Falls der Live-Test schiefgeht oder du zurück auf den bekannten guten Stand willst:

cd ~/.hermes/hermes-agent
git checkout main                    # zurück auf den ursprünglichen, unveränderten Stand
git stash pop                        # lokale Mac-Änderungen (Shebang etc.) wiederherstellen
source venv/bin/activate
python -m hermes_cli.main gateway restart

git remote remove fork-test und git branch -D fork-test-main räumen den Test-Remote/-Branch komplett weg, falls gewünscht — nicht nötig, beide sind harmlos, wenn sie einfach liegen bleiben.

Offene Punkte

  • Upstream-Stand: Dieser Fork-Zustand enthält den 2026-11-05er Re-Sync (davor der von 2026-10-22, dessen Verlauf in PORTING-NOTES.md steht) — ab diesem Merge ist der Fork nicht mehr hinter NousResearch/hermes-agent zurück. Der Abstand wächst neu, sobald Upstream weiterentwickelt, und der nächste Re-Sync wird mit jedem weiteren Upstream-Commit teurer; Iris zeigt ihn live an (.fork-upstream-base + GitHubs Compare-API, ohne vollen git fetch upstream).
  • Nach jedem künftigen git merge upstream/main nicht vergessen, .fork-upstream-base neu zu berechnen und mitzucommitten (siehe dessen Eintrag oben) — sonst zeigt die Commits-Behind-Zahl in der GUI einen veralteten, zu hohen Wert weiter an.