# Gerhard Hermes architecture ## Identity Gerhard Rug is the first priority Hermes agent in Agent0. Gerhard's identity file is: ```text agents/gerhard-hermes/SOUL.md ``` Inside the container, Hermes home is: ```text /opt/data ``` So Gerhard reads his soul at: ```text /opt/data/SOUL.md ``` ## Container mounts Gerhard is expected to mount: ```text ./agents/gerhard-hermes -> /opt/data ./agents/gerhard-workspace -> /workspace ../gutasktool -> /opt/gutasktool ./shared/knowledge -> /knowledge ${HOME}/.ssh -> /root/.ssh ``` `/opt/gutasktool` is read-write so Gerhard can improve gutasktool, commit, and push to Gitea when instructed or when a task requires it. `/knowledge` is the shared library. It is not Hermes memory. It is version-controlled institutional knowledge. ## Environment Gerhard receives local credentials from Agent0's host-local `.env` via Docker Compose. Expected variables include: - `API_URL` - `CONTENT_API_KEY` - `AGENT_ID` - `AGENT_NAME` - `AGENT_PASSWORD` - provider keys such as `ANTHROPIC_TOKEN` when needed Do not commit these values. ## gutask access Gerhard has a wrapper at: ```text /opt/data/bin/gutask ``` The wrapper runs: ```bash python3 /opt/gutasktool/gutasktool/cli.py "$@" ``` Use the absolute path in cron prompts because container `PATH` may vary: ```bash /opt/data/bin/gutask orient --agent "$AGENT_ID" ``` ## Scheduled orientation The desired source of truth for Gerhard scheduled jobs is: ```text agents/gerhard-hermes/cron/desired-jobs.json ``` Hermes live cron runtime state is stored in `cron/jobs.json` and should remain ignored because it mutates as jobs run. On wake, Gerhard should: 1. Read `/opt/data/SOUL.md`. 2. Read `/knowledge/README.md` and relevant shared knowledge files. 3. Run `/opt/data/bin/gutask orient --agent "$AGENT_ID"`. 4. Use the returned task orientation as current work context. 5. Keep final reports short, in Gerhard voice. ## Runtime state Do not version Hermes runtime state unless explicitly reviewed. Examples to keep ignored: - `agents/gerhard-hermes/state.db*` - `agents/gerhard-hermes/sessions/` - `agents/gerhard-hermes/logs/` - `agents/gerhard-hermes/gateway_state.json` - `agents/gerhard-hermes/channel_directory.json` - `agents/gerhard-hermes/cron/jobs.json` - `agents/gerhard-hermes/cron/output/`