Complete Blueprint + Fix Sequence
Auth Provider Status — Live
| Provider | Status | Error | Reset / Fix |
|---|---|---|---|
| xai-oauth-oauth-3 hermes-admin, researcher, vault, content |
EXPIRED | invalid_grant — refresh token revoked Jun 22 |
Re-run hermes auth xai PKCE flow — fixes 4 profiles at once |
| openai-codex-oauth-1 coder, server-ops |
EXHAUSTED | Usage limit hit — last_error_reset_at: 1784851350 = Jul 21 2026 |
Wait until Jul 21 OR add second ChatGPT Plus account |
| GOOGLE_API_KEY gemini, comms-gemini, auxiliary models |
FREE TIER 429 | 250 req/day free tier exhausted — RESOURCE_EXHAUSTED |
Enable billing at aistudio.google.com/apikey — regen key |
| OPENAI_API_KEY openai-api pool |
401 PERMISSION | Missing api.responses.write scope |
Regenerate API key with correct permissions at platform.openai.com |
| copilot (gh auth token) | OK | No errors | Available as interim fallback — limited model selection |
| nous (active_provider) | EMPTY POOL | Credential pool empty — falls through to stepfun/step-3.7-flash:free | This is the current fallback running all sessions |
active_provider: nous with an empty credential pool. All four xAI profiles (hermes-admin, researcher, vault, content) are hitting the expired token. All Codex profiles (coder, server-ops) are hitting the usage limit. Gemini is 429ing on the main generate endpoint. Every session is falling back to stepfun/step-3.7-flash:free via the Nous passthrough.
Re-authenticate xAI Token
# Re-auth xAI PKCE flow — restores 4 profiles at once hermes auth xai # Verify token is active python3 -c " import json d = json.load(open('/home/hermes/.hermes/auth.json')) for t in d['credential_pool'].get('xai-oauth', []): print(t.get('label'), '|', t.get('last_status'), '|', t.get('last_error_code')) " # Test a profile session hermes run -p hermes-admin "ping — respond with your current model and provider"
discord-ingest-to-gbrain: gbrain Not on PATH
The script calls subprocess.run(["gbrain", "put", slug, str(path)]). The gbrain binary is at /home/hermes/.bun/bin/gbrain but the cron environment does not inherit the full user PATH. All 8 channel ingests fail with [Errno 2] No such file or directory: 'gbrain'. The cron shows last_status: ok because the old version of the script did not exit(1) on failure — this was patched by the nightly-system-optimizer on Jun 23, but the underlying PATH issue remains.
# Confirm gbrain binary location which gbrain || ls -la /home/hermes/.bun/bin/gbrain # Fix Option A — symlink to /usr/local/bin (cleanest) sudo ln -sf /home/hermes/.bun/bin/gbrain /usr/local/bin/gbrain gbrain --version # verify # Fix Option B — add PATH prefix in the script # Add to top of discord_ingest_to_gbrain.py: import os os.environ["PATH"] = f"/home/hermes/.bun/bin:{os.environ.get('PATH', '')}" # After fix — test manually python3 /home/hermes/.hermes/scripts/discord_ingest_to_gbrain.py # Verify GBrain received the pages gbrain list --tag discord-logs | tail -10
vault-daily: Missing frontmatter Module
last_status: ok but erroring internally.The cron logs show: ModuleNotFoundError: No module named 'frontmatter' in vault_lib.py. The vault automation scripts call /home/hermes/vault/automation/cron_daily.py which imports a vault_lib that requires the python-frontmatter package. It is not installed in the Hermes venv.
# Install in the Hermes venv /home/hermes/.hermes/hermes-agent/venv/bin/pip install python-frontmatter # Verify /home/hermes/.hermes/hermes-agent/venv/bin/python -c "import frontmatter; print('ok')" # Test vault-daily manually python3 /home/hermes/.hermes/scripts/vault-daily.py # Check vault automation lint directly python3 /home/hermes/vault/automation/lint.py 2>&1 | tail -10
Skill Bloat — Every Profile Loads Everything
Every profile — including hermes-admin — loads gaming/pokemon-player, mlops/inference/vllm, touchdesigner-mcp, baoyu-comic, academic research paper templates, and ~35 other categories it will never use. This inflates every session's system prompt and competes for context against the actual SOUL.md and skill instructions that matter.
The fix is a skills.include block in each profile's config.yaml. Only whitelisted skill IDs load into the context. Everything else in the directory is ignored at runtime.
# ~/.hermes/profiles/hermes-admin/config.yaml — append this block skills: include: - devops/kanban-orchestrator - devops/kanban-worker - autonomous-ai-agents/hermes-agent - software-development/plan - software-development/spike - software-development/debugging-hermes-tui-commands
# ~/.hermes/profiles/coder/config.yaml skills: include: - devops/kanban-worker - autonomous-ai-agents/codex - autonomous-ai-agents/hermes-agent - github/github-pr-workflow - github/github-issues - github/codebase-inspection - software-development/systematic-debugging - software-development/test-driven-development - software-development/plan - software-development/subagent-driven-development - software-development/hermes-agent-skill-authoring
# ~/.hermes/profiles/server-ops/config.yaml skills: include: - devops/kanban-worker - devops/exposing-local-demos - software-development/hermes-s6-container-supervision - software-development/debugging-hermes-tui-commands - software-development/systematic-debugging - mcp/native-mcp - autonomous-ai-agents/hermes-agent
# ~/.hermes/profiles/researcher/config.yaml skills: include: - devops/kanban-worker - research/arxiv - research/blogwatcher - research/llm-wiki - notebooklm - youtube-channel-research - youtube-story-method-research - social-media/xurl
# ~/.hermes/profiles/vault/config.yaml skills: include: - devops/kanban-worker - mcp/gbrain - mcp/native-mcp - note-taking/obsidian - productivity/notion - media/youtube-content - autonomous-ai-agents/hermes-agent
# ~/.hermes/profiles/content/config.yaml skills: include: - devops/kanban-worker - dark-story-video-prompts - youtube-story-method-research - youtube-channel-research - notebooklm - creative/creative-ideation - creative/ascii-video - creative/manim-video - media/youtube-content
# ~/.hermes/profiles/comms-gemini/config.yaml skills: include: - devops/kanban-worker - email/himalaya - productivity/google-workspace - research/blogwatcher - social-media/xurl - note-taking/obsidian
~/apply-skill-whitelists.sh, run it, then restart the gateway. Safe to run multiple times — checks before appending.
#!/bin/bash # apply-skill-whitelists.sh — patches all profiles at once P=/home/hermes/.hermes/profiles patch() { local name=$1; shift local cfg="$P/$name/config.yaml" if grep -q "^skills:" "$cfg" 2>/dev/null; then echo "SKIP $name (already has skills block)" return fi { echo ""; echo "skills:"; echo " include:"; for s in "$@"; do echo " - $s"; done; } >> "$cfg" echo "PATCHED $name" } patch hermes-admin \ "devops/kanban-orchestrator" "devops/kanban-worker" \ "autonomous-ai-agents/hermes-agent" \ "software-development/plan" "software-development/spike" \ "software-development/debugging-hermes-tui-commands" patch coder \ "devops/kanban-worker" "autonomous-ai-agents/codex" \ "autonomous-ai-agents/hermes-agent" \ "github/github-pr-workflow" "github/github-issues" \ "github/codebase-inspection" \ "software-development/systematic-debugging" \ "software-development/test-driven-development" \ "software-development/plan" "software-development/subagent-driven-development" \ "software-development/hermes-agent-skill-authoring" patch server-ops \ "devops/kanban-worker" "devops/exposing-local-demos" \ "software-development/hermes-s6-container-supervision" \ "software-development/debugging-hermes-tui-commands" \ "software-development/systematic-debugging" \ "mcp/native-mcp" "autonomous-ai-agents/hermes-agent" patch researcher \ "devops/kanban-worker" "research/arxiv" "research/blogwatcher" \ "research/llm-wiki" "notebooklm" \ "youtube-channel-research" "youtube-story-method-research" \ "social-media/xurl" patch vault \ "devops/kanban-worker" "mcp/gbrain" "mcp/native-mcp" \ "note-taking/obsidian" "productivity/notion" \ "media/youtube-content" "autonomous-ai-agents/hermes-agent" patch content \ "devops/kanban-worker" "dark-story-video-prompts" \ "youtube-story-method-research" "youtube-channel-research" \ "notebooklm" "creative/creative-ideation" \ "creative/ascii-video" "creative/manim-video" "media/youtube-content" patch comms-gemini \ "devops/kanban-worker" "email/himalaya" \ "productivity/google-workspace" "research/blogwatcher" \ "social-media/xurl" "note-taking/obsidian" echo "" echo "All patched. Restart gateway:" echo "hermes gateway restart"
Composio MCP — npm E404
# Check current package name (Composio renamed their npm package) npm search composio mcp 2>/dev/null | head -10 # Try the new package name npm install -g @composio/mcp 2>/dev/null # or: npm install -g composio-mcp 2>/dev/null # If no npm package works, switch config to HTTP transport # The URL https://connect.composio.dev/mcp already works as HTTP MCP # Check Hermes docs for http mcp_server type vs npm type # After fix — verify in mcp logs tail -50 /home/hermes/.hermes/profiles/hermes-admin/logs/mcp-stderr.log
Tirith Binary PATH
# Binary is already at ~/.hermes/bin/tirith ls -la /home/hermes/.hermes/bin/tirith # Symlink to system PATH sudo ln -sf /home/hermes/.hermes/bin/tirith /usr/local/bin/tirith tirith --version # OR update root config.yaml security section: # security: # tirith_enabled: true # tirith_path: /home/hermes/.hermes/bin/tirith
Actual Folder Structure — Live System
/home/hermes/ ├── .hermes/ # System machinery. Auth, config, kanban, profiles. │ ├── auth.json # xAI expired, Codex exhausted, Gemini 429 │ ├── config.yaml # Root config — active_provider: nous (fallback) │ ├── .env # GOOGLE_API_KEY, TELEGRAM_BOT_TOKEN, HONCHO_API_KEY │ ├── kanban.db # Task queue — state.db-wal confirms WAL mode active │ ├── state.db + state.db-shm/.wal # Session state │ ├── SOUL.md # Root DISPATCH SOUL (same as default profile) │ ├── MISSION.md # Root mission doc │ ├── misft_style_reference.md # Visual style guide for stickman character system │ ├── bin/ │ │ ├── tirith # Binary here but NOT on PATH │ │ └── hermes-context │ ├── scripts/ # All cron-backing Python scripts │ │ ├── discord_ingest.py # Pulls Discord channels → JSON + MD │ │ ├── discord_ingest_to_gbrain.py # BROKEN — gbrain not on PATH │ │ ├── discord_manager.py # Discord REST API helper │ │ ├── daily-brief.py # Emits daily briefing prompt │ │ ├── container-health.py # Watches 3 Docker containers │ │ ├── vault-daily/weekly/monthly.py # FAILING — calls vault/automation which needs frontmatter │ │ ├── organize_loose_files.py # Nightly .hermes root cleanup │ │ ├── refresh-notebooklm-cookies.py # Cookie keepalive for NotebookLM auth │ │ └── youtube_agent_curator.py # YouTube scraper for daily brief │ ├── cron/ │ │ ├── jobs.json # 10 active jobs with schedules and last status │ │ └── output/ # 109+ cron output files by job ID │ ├── profiles/ │ │ ├── default/ SOUL.md only # DISPATCH reference SOUL │ │ ├── hermes-admin/ config + SOUL + skills (no memories/) # Missing memories/ dir │ │ ├── coder/ config + SOUL + memories/ │ │ ├── content/ config + SOUL + memories/ + auth.json # stale xAI entries │ │ ├── researcher/ config + SOUL + memories/ │ │ ├── server-ops/ config + SOUL + memories/ │ │ ├── vault/ config + SOUL + memories/ + auth.json │ │ └── comms-gemini/ config + SOUL + memories/ │ ├── research/ # GBrain ingest staging files (recent runs) │ │ ├── hermes-ecosystem-gbrain-ingest-2026-06-24.md │ │ ├── youtube-dark-pov-gbrain-ingest-2026-06-23.md │ │ └── hermes-ecosystem/, gbrain-maintenance/ │ ├── outputs/ │ │ ├── Dark_POV_Faceless_Video_Framework.md │ │ └── NotebookLM_InDepth_Analysis_LucasGrant_MrViceRank...md │ ├── discord-ingests/ # Nightly channel snapshots (JSON + MD) │ │ └── 2026-06-22_*.json/.md per channel │ ├── skills/ # Global shared skills dir │ │ └── mcp/gbrain/SKILL.md # GBrain skill — used in all cron prompts │ ├── shared/ │ │ └── nous_auth.json │ └── plugins/hermes-achievements/ # Achievement tracking state ├── vault/ # Durable knowledge. NOT .hermes machinery. │ ├── automation/ # Python automation scripts for vault │ │ ├── cron_daily.py # Called by vault-daily.py │ │ ├── vault_lib.py # FAILING — requires python-frontmatter │ │ ├── lint.py # Vault health check │ │ └── daily-brief-requests.md # Dylan's custom brief topics │ ├── inbox/ │ │ ├── triage/ # Pending review items │ │ └── captured/ │ │ ├── x/ # X/Twitter research captures │ │ ├── youtube/ # YouTube research │ │ └── readwise-import/ # Readwise highlights import │ ├── sources/ # Raw source material (typed MD with frontmatter) │ ├── concepts/ # Synthesized concept pages (in GBrain) │ ├── projects/ # Project-specific knowledge │ ├── entities/ │ │ └── people/ # Person lookup files for comms-gemini │ ├── raw/ # Narration MDs, cleanup logs, phase archives │ └── index.md + dashboard + connections.md ├── bin/ │ ├── docker-compose │ └── notebooklm # nlm CLI binary └── .ssh/ ├── authorized_keys # claude-debug-temp key — REMOVE after session ├── vaultwarden_tunnel + .pub └── known_hosts
All 10 Active Cron Jobs — Live Status
| Job | Schedule | Profile | Status | Notes |
|---|---|---|---|---|
| vault-daily | 0 6 * * * |
default (none set) | ok* — internal fail | vault_lib.py fails: missing frontmatter module. Script reports ok but errors. |
| vault-weekly | 0 7 * * 1 |
default | ok | Same underlying issue — will fail next Monday run |
| vault-monthly | 0 8 1 * * |
default | never run | Next run Jul 1 — will fail same as daily |
| container-health | 30 * * * * |
default | ok | 114 runs, silent when healthy. Watches hindsight-db, searxng, vaultwarden. |
| daily-brief | 0 7 * * * |
default | ok | Posts to #daily-brief. vault/automation/lint.py call inside brief is also failing. |
| notebooklm-cookie-refresh | 0 */12 * * * |
default | ok | 6 runs. Posts to origin Discord thread. Last run 00:01 Jun 24. |
| gbrain-nightly-maintenance | 0 3 * * * |
default | ok | Uses gbrain skill. Reports stats deltas. Currently using gbrain CLI fallback (MCP not exposed in cron context). |
| file-organizer-nightly | 30 4 * * * |
default | ok | Cleans .hermes root clutter. Moves research/story MDs to correct dirs. |
| youtube-competitor-firecrawl-research | 0 2 * * * |
default | ok | Dark POV YouTube research → GBrain ingest. Uses gbrain CLI fallback. |
| discord-ingest-to-gbrain | embedded in discord-ingest |
default | FAILING | All 8 GBrain writes fail: [Errno 2] No such file or directory: 'gbrain' |
default profile (no profile field set in jobs.json). This means they all inherit the default profile's xAI-oauth token — which is currently expired. Agent-mode crons (daily-brief, gbrain-maintenance, research crons) are all falling back to stepfun. The vault-daily cron is no-agent mode, so it bypasses the model issue but hits the frontmatter module issue instead.
GBrain Knowledge Graph — Live State
Active GBrain issues from maintenance logs
- gbrain embed --stale blocked — cron env does not expose
GOOGLE_GENERATIVE_AI_API_KEY. Embeddings for stale pages not updating. Add the key to cron environment or the .env. - gbrain reindex-frontmatter PGLite lock — maintenance cron tries to reindex while
gbrain serve/ MCP has the DB locked. Run reindex in a maintenance window with gbrain serve stopped. - discord-ingest pages missing — last 2 nights of Discord logs never made it to GBrain (PATH issue above). Pages exist in
~/.hermes/discord-ingests/— manual backfill possible after fixing PATH. - Orphan pages — nightly-system-optimizer flagged orphans exist. No cleanup run completed yet.
Known page types in graph
source— YouTube channel analyses, Hormozi PDFs, X researchconcept— hermes/memory-router-gbrain-honcho, hermes/precise-agent-orchestrationproject— youtube-system/project, vorra-story-enginemeta— gbrain-usage-kickoff, gbrain-maintenance-2026-06-23discord-logs— missing last 2 days (PATH bug)
GBrain CLI commands that actually work in the current environment
# Must export PATH first in all shells/crons export PATH="/home/hermes/.bun/bin:$PATH" gbrain list # list all pages gbrain get [slug] # get a page gbrain stats # page/link/timeline counts gbrain doctor # health check gbrain graph --depth 1 # link graph gbrain timeline [slug] # timeline entries for a page # For writes — prefer MCP tools when available # mcp_gbrain_put_page > gbrain CLI for put operations # CLI put sometimes hangs — MCP is reliable # Backfill missing Discord logs export PATH="/home/hermes/.bun/bin:$PATH" python3 /home/hermes/.hermes/scripts/discord_ingest_to_gbrain.py
mcp_gbrain_* tools) is the preferred write path. The gbrain CLI is the fallback used by crons when the MCP is not exposed in the cron context. The cron environment does not get the MCP stdio binding — which is why all crons use gbrain CLI fallback in their logs. This is expected behavior, not a bug. The PATH fix resolves the CLI fallback path.
Vault Structure + Automation State
| Directory | Purpose | Status |
|---|---|---|
vault/inbox/captured/ | Raw incoming captures (X, YouTube, Readwise import) | active — files from Jun 19 |
vault/inbox/triage/ | Items awaiting review and promotion | empty per daily-brief logs |
vault/sources/ | Typed MD source pages with frontmatter after triage | populated |
vault/concepts/ | Synthesized concept pages (mirrors GBrain concept type) | active |
vault/projects/ | Project-specific knowledge | active |
vault/entities/people/ | Person lookup files for comms-gemini person-first protocol | exists, populated from past sessions |
vault/automation/ | Python scripts for daily/weekly/monthly vault processing | vault_lib.py broken — missing frontmatter module |
vault/automation/daily-brief-requests.md | Dylan's custom daily brief topics | exists, currently empty |
vault/raw/ | Narration MDs, cleanup logs, phase archives | active — phaseN cleanup logs present |
vault/index.md + dashboard + connections.md | Vault navigation and graph summary | maintained by vault cron |
vault/automation/lint.py fails: ModuleNotFoundError: No module named 'frontmatter' and vault/inbox/triage/ is empty — meaning no triage happened. Items in captured/ from Jun 19 have not been processed. Fix: install python-frontmatter in the Hermes venv (see Fix above).
Profile Map — Current vs Target
| Profile | Current Model | Auth Status | Target Model | Changes Needed |
|---|---|---|---|---|
| hermes-admin | grok-build-0.1 |
xAI expired | grok-4 xai-oauth |
Re-auth xAI. Add memories/ dir. Add skills.include. Add channel map to SOUL. |
| coder | gpt-5.5 |
Codex exhausted (Jul 21) | gpt-5.5 openai-codex |
Interim: switch fallback to copilot. Add skills.include. |
| server-ops | gpt-5.5 |
Codex exhausted (Jul 21) | gpt-5.5 openai-codex |
Interim: switch fallback to copilot. Add skills.include. |
| researcher | grok-build-0.1 |
xAI expired | gemini-2.5-pro gemini |
Re-auth xAI (short term). Migrate to Gemini after billing enabled. |
| vault | grok-build-0.1 |
xAI expired | gemini-2.5-flash gemini |
Re-auth xAI (short term). Migrate to Gemini after billing enabled. |
| content | grok-build-0.1 |
xAI expired + stale auth entries | grok-4 xai-oauth |
Re-auth xAI. Clean stale entries. Later: rename to content-story. |
| comms-gemini | gemini-3.1-flash-lite |
Free tier 429 | gemini-2.5-flash gemini |
Enable billing, upgrade model string. |
| default | grok-build-0.1 |
xAI expired | Keep as-is | Re-auth xAI. Default is DISPATCH CLI fallback — SOUL is the best in the fleet. |
All SOUL Files — Analysis + What to Keep or Fix
What's strong: Orchestrator-only framing is explicit. "You do NOT execute specialist work directly." Truth hierarchy is there. The Swagger Is Earned section is excellent — "bluntness without context is noise, profanity without evidence is theater." The spawning section correctly documents max_spawn: 0 and the per-profile-dispatcher hook as sole spawner.
Missing: hermes-admin has no memories/ directory — only profile without one. Also missing the Discord channel routing table and kanban lane rules.
# Create missing memories directory mkdir -p /home/hermes/.hermes/profiles/hermes-admin/memories cp /home/hermes/.hermes/profiles/vault/memories/MEMORY.md \ /home/hermes/.hermes/profiles/hermes-admin/memories/MEMORY.md touch /home/hermes/.hermes/profiles/hermes-admin/memories/USER.md # Append channel routing to SOUL.md cat >> /home/hermes/.hermes/profiles/hermes-admin/SOUL.md << 'EOF' ## Discord Channel Routing | Channel | Routes To | Task Type | |---------|-----------|-----------| | #ops | hermes-admin | routing, daily brief, health | | #research | researcher | competitor intel, sources | | #vault | vault | memory, GBrain queries | | #story | content | scripts, 6-beat arcs | | #server | server-ops | infra alerts, cron | | #code | coder | code changes, scripts | | #review | hermes-admin | Approve/Tweak/Decline | Override: prefix any message with @[profile-name] to bypass channel default. ## Kanban Ownership - hermes-admin moves tasks from backlog to ready — no other profile does this - Every worker ends with kanban_complete or kanban_block before exit - Only content outputs enter the review lane - Review tasks expire after 24h (auto-declined) EOF
What's strong: GBrain-first operations are correctly specified. Inbox-first triage before promoting to concepts/projects is the right discipline. The Dreaming Feature section explicitly claims ownership of gbrain dream. The test task example at the bottom is a useful self-check pattern. Anti-sycophancy rules are solid.
One addition needed: Explicit statement that researcher and all other profiles route ingest requests through vault. Vault is sole GBrain writer. Also add the PATH fix note so vault knows to prefix gbrain CLI calls with the correct PATH.
What's strong: Second-person immersive POV spec is exactly right. The 6-beat framework (Cold Open, Stakes, Escalation, The Turn, The Cost, Resolution/Open Loop) is documented clearly. The restriction on glorification is correct. Fictional composites only is enforced.
When you split into content-story + content-visual: content-story keeps this SOUL verbatim plus a note that visual generation routes to content-visual. content-visual needs a new SOUL from scratch built around the stickman character system documented in ~/.hermes/misft_style_reference.md.
The most complete DISPATCH SOUL. Has everything hermes-admin has plus the Single Brain section, the fleet profile routing list, and the memory self-improvement loop. If hermes-admin SOUL ever needs to be rebuilt, use default/SOUL.md as the source of truth.
Coder: terse log-style voice, file:line reference discipline, Codex-specific tooling, anti-sycophancy. Server-ops: scope section cleanly separates machine ownership from product code. "Verify with direct health check before claiming fixed" is exactly right. Researcher: evidence-first, confidence labeling, source attribution rules.
Complete Fix Sequence — Ordered by Impact
Single command. hermes-admin, researcher, vault, content all depend on this token. Do this before anything else.
Unblocks discord-ingest-to-gbrain. Two nights of missed Discord logs can be backfilled immediately after. Also fixes all cron PATH warnings.
One pip install command. vault-daily, vault-weekly, vault-monthly, and the daily-brief vault signal all fail without it.
Highest context leverage change. Every profile currently loads ~40 irrelevant skills. Takes 2 minutes, takes effect on next session start, no restart needed per-profile.
5 minutes at aistudio.google.com/apikey. Unlocks researcher + vault model migrations and removes auxiliary model quota risk under real load.
Both are single-step fixes. Composio: try @composio/mcp or HTTP transport. Tirith: symlink ~/.hermes/bin/tirith to /usr/local/bin/tirith.
mkdir + cp + append to SOUL.md. hermes-admin is the only profile missing its memories directory. Channel map makes Discord routing explicit.
Edit two config.yaml files. Gemini auth already works — auxiliary models confirm the API key path is valid. Change model string and provider only.
Currently every cron runs under default (no profile set). gbrain-maintenance should run under vault. daily-brief should run under hermes-admin. This ensures crons use the right model and skill context.
cp -r + mv + two SOUL.md files. Verify xAI concurrent session behavior first. Run one full story + visual cycle before retiring old content profile.
Target Model Configs — Exact YAML Diffs
# ~/.hermes/profiles/researcher/config.yaml — replace model section model: default: gemini-2.5-pro provider: gemini base_url: https://generativelanguage.googleapis.com/v1beta providers: {} fallback_providers: - provider: gemini model: gemini-2.5-flash - provider: nous model: stepfun/step-3.7-flash:free
# ~/.hermes/profiles/vault/config.yaml — replace model section model: default: gemini-2.5-flash provider: gemini base_url: https://generativelanguage.googleapis.com/v1beta providers: {} fallback_providers: - provider: gemini model: gemini-2.5-flash-lite - provider: nous model: stepfun/step-3.7-flash:free
# ~/.hermes/profiles/comms-gemini/config.yaml — upgrade model string model: default: gemini-2.5-flash provider: gemini base_url: https://generativelanguage.googleapis.com/v1beta # (rest of config unchanged)
# Interim fix for coder + server-ops until Codex resets Jul 21 # Switch fallback to copilot which is currently ok # ~/.hermes/profiles/coder/config.yaml and server-ops/config.yaml fallback_providers: - provider: copilot model: gpt-4.1 - provider: nous model: stepfun/step-3.7-flash:free # Copilot is available (gh auth token shows ok) — better than stepfun for code work
# Assign profiles to cron jobs in ~/.hermes/cron/jobs.json # Use hermes CLI or edit jobs.json directly hermes cron edit gbrain-nightly-maintenance --profile vault hermes cron edit daily-brief --profile hermes-admin hermes cron edit youtube-competitor-firecrawl-research --profile researcher hermes cron edit hermes-ecosystem-research --profile researcher hermes cron edit discord-ingest-to-gbrain --profile vault hermes cron edit notebooklm-cookie-refresh --profile content hermes cron edit vault-daily --profile vault hermes cron edit file-organizer-nightly --profile server-ops hermes cron edit container-health --profile server-ops # Verify cat ~/.hermes/cron/jobs.json | python3 -c " import json,sys d=json.load(sys.stdin) for j in d['jobs']: print(j['name'], '|', j.get('profile','(none)')) "
The SOULs are good. GBrain is healthy at 90%. The cron system is running. The vault structure is correct. The stickman character system is documented. The 6-beat arc engine is defined. Every problem on this system is auth expiry, a missing PATH, a missing Python module, or context bloat from no skill whitelists. None of these require architectural changes — they all have single-command fixes.
1. hermes auth xai — four profiles are dead without this. 2. sudo ln -sf /home/hermes/.bun/bin/gbrain /usr/local/bin/gbrain — two nights of Discord data never hit GBrain. 3. /home/hermes/.hermes/hermes-agent/venv/bin/pip install python-frontmatter — vault automation has been silently failing for four days. Everything else can follow in order.
sed -i '/claude-debug-temp/d' ~/.ssh/authorized_keys