sync_state.py bricht den git-Sync ab + alarmiert per Telegram, wenn der
Live-Arbeitsbaum uncommittete Aenderungen oder ungepushte Commits hat,
statt sie per reset --hard FETCH_HEAD zu vernichten. Watchdog laeuft
unabhaengig weiter. Behebt die Ursache von Issue #123.
Rename lief nur beim Download-Abschluss; POST /api/rename_pending
benennt alle Titel_ID.mp4 auf Hetzner um. savetv_rename_nas.py für
bereits kopierte NAS-Dateien. __ wird zu Bindestrich im Titel.
- list_chats output now ends with an explicit instruction to call
chatlog_recent / chatlog_since next (Gemini 2.5 Flash tends to answer
after a single tool call otherwise)
- list_chats description: clarify it only returns metadata, never content
- recent description: marked as PREFERRED for reading actual messages
- chatlogger/api.py — read-only HTTP API (stdlib http.server, bearer-token
auth, bound to 100.123.47.7:8770) with /list_chats, /recent, /search,
/since, /stats, /healthz
- chatlogger/chatlogger-api.service — hardened systemd unit
- chatlogger/api.env.example — env template (token + bind + db)
- mac-clients/chatlog_mcp.py — stdio MCP wrapper for Hermes Agent on the
Mac (4 tools: chatlog_list_chats / recent / search / since), uses only
Python stdlib, talks to the REST API via Tailscale.
Hermes registers as 4th MCP server (chatlog) — verified live with
76 tool(s) from 4 server(s) in gateway.log.
The earlier prompt explicitly named 'mychatarchive' / 'search_brain' as
forbidden, which planted the term in the LLM's memory. Now only the four
real tool names are mentioned positively, plus an instruction to ignore
old session-history that may contain hallucinated tool names.
Live-test showed Grok 4.1 Fast inventing 'mcp_mychatarchive_search_brain'
when asked about Telegram chat history. Fix:
- Tool descriptions explicitly say 'TELEGRAM' and 'NICHT ChatGPT/Memory/RAG'
- SYSTEM_PROMPT_EXTRA lists all 4 exact tool names and forbids inventing
alternatives like 'mychatarchive' or 'search_brain'
- Forbids using rag_search/openmemory_search/web_search for Telegram-
related queries
- Demands honest 'no data' over hallucination
Prevents 'aktueller Stand zur G2010B-Vermietung?' from being routed to
perplexity/sonar (which can't tool-call) just because 'aktuelle' is in
_WEB_TRIGGERS. New triggers: concierge, listing, vermietung, kaution,
G2010B/D1603 apartment codes, etc.