diff --git a/dankclaw/hermes/config.yaml.example b/dankclaw/hermes/config.yaml.example new file mode 100644 index 0000000..afb97ff --- /dev/null +++ b/dankclaw/hermes/config.yaml.example @@ -0,0 +1,55 @@ +# Hermes configuration backup / non-secret baseline. +# +# Source on Dankclaw: /home/dank/hermes-data/config.yaml +# This file is a sanitized Git backup, not a complete replacement for the +# live Hermes state. Do not add dashboard password hashes, phone numbers, +# OAuth credentials, API keys, sessions, memories, or generated state here. +# The live directory is bind-mounted into the containers as /data. + +model: + provider: custom + base_url: http://192.168.0.143:52625/v1 + api_key: not-needed + default: frank-default-large + +providers: + custom: + stale_timeout_seconds: 1800 + request_timeout_seconds: 1800 + dankserver-small: + api: http://192.168.0.235:7770/v1 + discover_models: false + models: + frank-default-small: + context_length: 163840 + +# Auxiliary routing from the live configuration. These use the existing +# custom endpoint shape and are retained here as a settings backup. +auxiliary: + vision: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + web_extract: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + compression: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + skills_hub: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + approval: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + mcp: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + title_generation: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + memory_query_rewrite: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + tts_audio_tags: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + triage_specifier: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + kanban_decomposer: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + profile_describer: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + curator: {provider: custom, model: frank-default-small, base_url: http://192.168.0.235:7770/v1} + +dashboard: + # basic_auth intentionally omitted; its password_hash remains live-only. + font: atkinson-hyperlegible +skills: + disabled: [] +onboarding: + seen: + busy_input_prompt: true +_config_version: 34 +platforms: + signal: + enabled: true + # extra.http_url and account intentionally omitted from the backup. diff --git a/docs/Dankclaw/Hermes-Dashboard.md b/docs/Dankclaw/Hermes-Dashboard.md index 27d90c7..438ba1d 100644 --- a/docs/Dankclaw/Hermes-Dashboard.md +++ b/docs/Dankclaw/Hermes-Dashboard.md @@ -22,7 +22,7 @@ The gateway container runs `hermes gateway run` (the Signal platform). That entr The dashboard refuses to bind to a non-loopback address without an auth provider. There is no unauthenticated public bind. This repo uses basic auth: -- `dashboard.basic_auth.username` and `dashboard.basic_auth.password_hash` live in the git-ignored `/home/dank/hermes-data/config.yaml`. +- `dashboard.basic_auth.username` and `dashboard.basic_auth.password_hash` live in the live `/home/dank/hermes-data/config.yaml`; the tracked backup at `dankclaw/hermes/config.yaml.example` intentionally omits the password hash. - The stored value is a one-way scrypt hash. The plaintext password is never written to a file or the repo. - The hash is generated with `plugins.dashboard_auth.basic.hash_password`. diff --git a/docs/Dankclaw/Hermes.md b/docs/Dankclaw/Hermes.md index d4c6f47..b9ae7ba 100644 --- a/docs/Dankclaw/Hermes.md +++ b/docs/Dankclaw/Hermes.md @@ -4,6 +4,10 @@ Hermes is the self-improving AI agent from Nous Research. It runs in a terminal, **Host:** Dankclaw — **Hostname:** `hermes.dankclaw.local` — **Docs:** https://hermes-agent.nousresearch.com/docs +**Persistent state:** `/home/dank/hermes-data` on Dankclaw, mounted as `/data` in +both containers. The tracked, sanitized configuration baseline is +[`dankclaw/hermes/config.yaml.example`](../../dankclaw/hermes/config.yaml.example). + ## Facts (from research, primary source) | Item | Value | @@ -17,15 +21,20 @@ Hermes is the self-improving AI agent from Nous Research. It runs in a terminal, ## Configuration -- Point Hermes at the local model endpoint (`http://localhost:7770/v1`) or an external provider through its provider config. +- Point Hermes at the local model endpoint or an external provider through its provider config. - The gateway process exposes one port for chat integration; the exact port is set in the Hermes config (`8090` convention in this repo). - The data volume persists skills, memory, and session history. +- The configured `dankserver-small` provider reaches `http://192.168.0.235:7770/v1` + and exposes the `frank-default-small` alias. It is a named provider, so it can + coexist with the existing `custom` provider for the large model. +- The live `config.yaml` contains secrets and user state and is not committed; + the tracked example is the sanitized backup of its non-secret settings. ## Volumes | Container path | Host path (convention) | |----------------|------------------------| -| `/data` | `/opt/hermes/data` | +| `/data` | `/home/dank/hermes-data` | ## Gotchas diff --git a/scripts/test-changed.sh b/scripts/test-changed.sh index c2bbd23..afe3254 100755 --- a/scripts/test-changed.sh +++ b/scripts/test-changed.sh @@ -128,6 +128,9 @@ for path in "${CHANGED[@]}"; do docs/*) add_test tests/docs_completeness.bats ;; + dankclaw/hermes/*) + add_test tests/docs_completeness.bats + ;; *) die "no focused-test mapping for '$path'; add one before committing" ;;