Fix: Claude nutzte eigene native Skills/MCP-Connectors statt injizierter Hermes-Tools

hermes-proxy laeuft mit echter Claude-Code-CLI-Session auf ggf. demselben
Anthropic-Account wie ARIA -> account-weite Connectors (Gmail/Calendar/Drive)
und Claude Codes eigenes Skill-System wurden automatisch mitgeladen und
haben mit den per Prompt injizierten <tool_call>-Tools (Hermes-Plugins wie
Spotify) konkurriert. --safe-mode deaktiviert alle nativen Customizations
fuer diese Session, sodass nur noch die injizierten externen Tools sichtbar
sind.
This commit is contained in:
ARIA
2026-07-19 23:56:37 +00:00
parent cb7bd566e6
commit c2e920f7d6
2 changed files with 53 additions and 1 deletions
+37
View File
@@ -257,6 +257,43 @@ Gilt analog fuer jedes andere Toolset (Kalender, Browser, etc.) — immer
zuerst `hermes tools` (einschalten), dann `hermes auth <name>` falls das zuerst `hermes tools` (einschalten), dann `hermes auth <name>` falls das
Plugin OAuth/Login braucht. Plugin OAuth/Login braucht.
### Toolset aktiviert, Claude sagt trotzdem "kenn ich nicht" / nennt eigene Skills/MCP-Server
Root Cause (20.07.2026, im echten Code + per Live-Test verifiziert, nicht
geraten): `hermes-proxy` laeuft mit einer **echten Claude-Code-CLI-Session**
(npm-Paket `claude-max-api-proxy` wrappt `@anthropic-ai/claude-code`
tatsaechlich als Subprocess). Diese Session hat ein eigenes Volume
(`./hermes-data/claude-config`), kann aber auf **demselben Anthropic-Account**
eingeloggt sein wie ARIA. Ein Account hat aber account-weite claude.ai-
Connectors (z.B. Gmail/Calendar/Drive) und Claude Codes eigenes natives
Skill-System — die werden in JEDER CLI-Session auf diesem Account automatisch
mitgeladen, auch hier. Wenn man Claude dann explizit nach einem "Skill" fragt
(z.B. "nutze Skill spotify_albums"), checkt Claude zuerst sein EIGENES,
natives Skill-/MCP-System (findet dort nichts zu Spotify, dafuer Gmail/
Calendar/Drive) und ignoriert dabei die per Prompt injizierten
`<tool_call>`-Tools (Hermes' eigentliche Plugins wie Spotify) komplett — es
sind zwei parallele, konkurrierende Tool-Konzepte in derselben Session.
**Fix:** `docker-compose.yml` startet die CLI seit `367ff64+` (Sed-Patch auf
`manager.js`) zusaetzlich mit `--safe-mode` — das deaktiviert fuer diese
Session ALLE Customizations (Skills, Plugins, MCP-Server, CLAUDE.md, ...),
eingebaute Tools (Bash/Read/...) bleiben zwar technisch an, werden aber nicht
gebraucht. Danach sieht Claude in der Hermes-Proxy-Session ausschliesslich die
per System-Prompt injizierten externen Tools und sollte sie auch fuer
"Skill"-artige Anfragen (Spotify etc.) nutzen.
```bash
git pull
docker-compose up -d --build hermes-proxy
```
Test: nach dem Neustart erneut nach einem aktivierten Toolset fragen (z.B.
"spiel meine Playlist Fliegen auf dem Handy ab") — Claude sollte jetzt einen
`<tool_call>`-Block ausgeben statt "kenn ich nicht" bzw. eigene Connectors zu
nennen. Falls es weiter hakt: `docker logs hermes-proxy --tail 100 -f`
waehrend der Reproduktion pruefen ob `--safe-mode` tatsaechlich im
gestarteten Prozess ankam (`docker exec -it hermes-proxy ps aux | grep claude`).
## Mobiler Client (Android)? ## Mobiler Client (Android)?
Zwei GRUNDVERSCHIEDENE Richtungen, nicht verwechseln: Zwei GRUNDVERSCHIEDENE Richtungen, nicht verwechseln:
+16 -1
View File
@@ -15,6 +15,21 @@ services:
# - lange Agent-Loops nicht nach 5min timeouten (DEFAULT_TIMEOUT -> 24h) # - lange Agent-Loops nicht nach 5min timeouten (DEFAULT_TIMEOUT -> 24h)
# - der Prompt via stdin statt CLI-Arg uebergeben wird (Arg-Laengenlimit/ # - der Prompt via stdin statt CLI-Arg uebergeben wird (Arg-Laengenlimit/
# Escaping-Probleme bei langen Konversationen) # Escaping-Probleme bei langen Konversationen)
# - Claude NICHT seine eigenen nativen Skill-/MCP-Tools nutzt (--safe-mode,
# seit 20.07.2026): dieser Proxy laeuft mit einer echten Claude-Max-CLI-
# Session (eigenes ./hermes-data/claude-config, aber ggf. DERSELBE
# Anthropic-Account wie ARIA). Dieser Account hat eigene claude.ai-
# Connectors (z.B. Gmail/Calendar/Drive) und ARIAs eigene Skills, die
# OHNE --safe-mode ganz normal in JEDER CLI-Session auf diesem Account
# mitgeladen werden — auch hier im Hermes-Proxy-Container. Symptom war:
# Claude antwortete auf "nutze Skill spotify_albums" mit "kenne ich
# nicht, hab nur Gmail/Calendar/Drive verbunden" — es hat sein EIGENES
# natives Skill-/MCP-System gecheckt statt den hier per Prompt-Text
# injizierten <tool_call>-Tools (Hermes' Spotify-Plugin etc.) zu nutzen.
# --safe-mode deaktiviert alle Customizations (Skills, Plugins, MCP-
# Server, CLAUDE.md, ...) fuer diese Session — eingebaute Tools
# (Bash/Read/...) bleiben an, sind hier aber ungenutzt. Danach sieht
# Claude NUR noch die per Prompt injizierten externen Tools.
# #
# Adapter-Patches (proxy-patches/*.js) sind 1:1 aus dem ARIA-Proxy # Adapter-Patches (proxy-patches/*.js) sind 1:1 aus dem ARIA-Proxy
# uebernommen — sie sind generisch (implementieren nur die # uebernommen — sie sind generisch (implementieren nur die
@@ -38,7 +53,7 @@ services:
npm install -g @anthropic-ai/claude-code claude-max-api-proxy && npm install -g @anthropic-ai/claude-code claude-max-api-proxy &&
DIST=$$(find /usr/local/lib -path '*/claude-max-api-proxy/dist' -type d | head -1) && DIST=$$(find /usr/local/lib -path '*/claude-max-api-proxy/dist' -type d | head -1) &&
sed -i 's/startServer({ port })/startServer({ port, host: process.env.HOST || \"127.0.0.1\" })/' $$DIST/server/standalone.js && sed -i 's/startServer({ port })/startServer({ port, host: process.env.HOST || \"127.0.0.1\" })/' $$DIST/server/standalone.js &&
sed -i 's/\"--no-session-persistence\",/\"--no-session-persistence\",\"--dangerously-skip-permissions\",/' $$DIST/subprocess/manager.js && sed -i 's/\"--no-session-persistence\",/\"--no-session-persistence\",\"--dangerously-skip-permissions\",\"--safe-mode\",/' $$DIST/subprocess/manager.js &&
sed -i 's/\"--dangerously-skip-permissions\",/\"--dangerously-skip-permissions\",\"--system-prompt\",options.systemPrompt,/' $$DIST/subprocess/manager.js && sed -i 's/\"--dangerously-skip-permissions\",/\"--dangerously-skip-permissions\",\"--system-prompt\",options.systemPrompt,/' $$DIST/subprocess/manager.js &&
sed -i 's/const DEFAULT_TIMEOUT = 300000;/const DEFAULT_TIMEOUT = 86400000;/' $$DIST/subprocess/manager.js && sed -i 's/const DEFAULT_TIMEOUT = 300000;/const DEFAULT_TIMEOUT = 86400000;/' $$DIST/subprocess/manager.js &&
sed -i '/prompt, \\/\\/ Pass prompt as argument/d' $$DIST/subprocess/manager.js && sed -i '/prompt, \\/\\/ Pass prompt as argument/d' $$DIST/subprocess/manager.js &&