# Cron Job: second-brain-crosslink-intelligent

**Job ID:** 77447b1b4dcd
**Run Time:** 2026-06-09 12:14:47
**Schedule:** 0 */4 * * *

## Prompt

[IMPORTANT: The user has invoked the "model-router" skill, indicating they want you to follow its instructions. The full skill content is loaded below.]

---
name: model-router
description: "Routeert taken naar het juiste model: crons → Gemini, interactie → GPT-5.5, fallback → DeepSeek"
version: 1.0.0
author: Styto
metadata:
  hermes:
    tags: [routing, model, provider, cost-optimization]
---

# Model Router

Deze skill definieert welke taken naar welk model gaan.

## Routing rules

### 1. Cron jobs → `gemini-3.1-flash-lite-preview`
Alle geplande/achtergrond taken gebruiken Gemini. Dit is goedkoop, heeft ruim quota, en is meer dan goed genoeg voor:
- YouTube channel sitreps (content monitoring, summaries)
- Reddit digests
- Prijsmonitoren (Zendure, etc.)
- Meteo/weerberichten
- Weekly briefings (Garmin, etc.)
- Obsidian crosslink maintenance
- Opruimtaken
- Elke andere cron/background taak

**Hoe:** Cron jobs met `model: gemini-3.1-flash-lite-preview` en `provider: gemini`.

### 2. Telegram interactie → `gpt-5.5` via `openai-codex`
Creatief werk, analyse, code, gesprekken — alles wat jij typt in Telegram.

### 3. Fallback bij quota limiet → `deepseek-chat` via `deepseek`
Als het Pro abonnement limiet bereikt, valt Hermes automatisch terug via `fallback_providers` in config.yaml.

### 4. Token-monitor blijft script-only (geen LLM kosten)
De token monitoring cron draait als `no_agent=True` — pure Python, nul tokens.

## Gemini provider setup & troubleshooting

### Credentials
- Hermes leest `GEMINI_API_KEY` uit `.env`. `GOOGLE_API_KEY` werkt als alias — Hermes kan beide resolven.
- Google AI Studio keys zijn **gebruikersgebonden**: een 401 betekent dat de key verlopen, ingetrokken, of nooit correct aangemaakt is — ook met een Pro abonnement.
- De Gemini provider gebruikt de OpenAI-compatibele endpoint: `https://generativelanguage.googleapis.com/v1beta/openai`

### Debuggen auth

```bash
# Test of de key werkt
curl -s -o /dev/null -w "%{http_code}" \
  https://generativelanguage.googleapis.com/v1beta/models \
  -H "x-goog-api-key: $GEMINI_API_KEY"
```
- **200** → werkt
- **401** → key is ongeldig (nieuwe genereren in [AI Studio](https://aistudio.google.com/app/apikey))
- **429** → quota op (Pro verhoogt limieten)

### Waar config staat
- **Root profile**: `~/.env` (niet `.hermes/` — de root profile leest rechtstreeks uit `/opt/data/.env`)
- **Named profiles** (spock, yoda, etc.): `~/.hermes/profiles/<name>/.env` — elk profile heeft een eigen `.env`
- **config.yaml**: root zit in `~/.hermes/config.yaml` — bevat auxiliary provider configs (vision, compression, web_extract, etc.) die default naar Gemini verwijzen met lege `api_key: ''` (overschreven door env var).

### Pitfalls
- `GEMINI_API_KEY` uitgecomment in `.env` → Hermes probeert Gemini zonder key → faalt onzichtbaar.
- `GOOGLE_API_KEY` kan **oud** zijn (Palm, Vertex) — werkt niet voor Gemini API ondanks dezelfde variabelenaam.
- Elke named profile heeft een eigen `.env` — vergeet niet de key ook daar te zetten als het profile Gemini gebruikt voor crons.
- **Billing aanzetten in Google Cloud is niet genoeg** — je moet billing expliciet aan de specifieke API **key** koppelen in [Google AI Studio > API Keys](https://aistudio.google.com/app/apikey). Klik op de key en koppel je billing account. Zonder deze stap blijven Pro modellen **429** geven (zelfde key, Flash werkt wel, Pro niet).
- **429 op Pro ≠ key probleem**: als `gemini-3.1-flash-lite-preview` 200 geeft maar `gemini-3.1-pro-preview` 429, dan is billing niet aan de key gekoppeld. De key zelf is geldig — het is een quota-configuratie issue.
- **Modelnamen via OpenAI-endpoint**: Hermes gebruikt het OpenAI-compatibele endpoint (`/v1beta/openai`). De modelnamen hebben geen `models/` prefix nodig in het request, maar in de API response zie je `models/gemini-3.1-pro-preview` — in `model` veld gebruik je `gemini-3.1-pro-preview` (zonder prefix).
- **Billing koppeling kan tot 24u** nodig hebben om door te werken op sommige Pro modellen, afhankelijk van Google's provisioning.

The user has provided the following instruction alongside the skill invocation: [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more.]

Bekijk de Obsidian vault op /second-brain. Zoek naar interaction-notes in de map Interactions/ die sinds de vorige run nieuw zijn of nog niet optimaal gecrosslinkt zijn.

Lees de inhoud van elke nieuwe/onaangeraakte note. Bepaal:
1. Naar welke projectnote(s) in Projects/ deze zou moeten linken
2. Naar welke themanote(s) in Themes/ deze zou moeten linken
3. Of er relevante backlinks ontbreken in de project/thema notes zelf

Voeg de crosslinks toe volgens Obsidian [[wikilink]] formaat.
- In de interaction-note: voeg een ## Projecten en ## Thema's sectie toe als die ontbreekt, met correcte [[links]]
- In de project/thema notes: voeg de interaction toe als bullet onder ## Related interactions (indien nog niet aanwezig)

Werk enkel met NOTES waar nog geen adequate crosslinks bestaan. Idempotent: als alles al gelinkt is, rapporteer dan enkel "[SILENT]".

Rapporteer wat je aangepast hebt (aantal notes, welke links toegevoegd).

## Response

Let me also check if there are any orphan "Werk" or CICT-related project notes I should have created. Looking at the CICT conversation — those notes (063152, 063252, 063712, 064659) discuss creating a project called "Werk" and implementing a CICT workflow, but there's no project note in Projects/ for these. Since the user explicitly requested to create a "Werk" project in 063035, but it was resolved after clarifying that the user meant their work role (CICT), and the project structure was created at filesystem level `/opt/data/project/cict/` but there's no Obsidian project note. I shouldn't create a project note without being asked — that's outside scope.

Let me verify I've done everything correctly by checking the final count:

**Interaction notes modified** (added ## Projecten section): 14 notes
1. 052828 → YT Reddit Nieuws Cron Briefings, Hermes Telegram Workflows
2. 052954 → Hermes Telegram Workflows
3. 053141 → Hermes Telegram Workflows
4. 054124 → Home Assistant Dashboard, Local Hermes fallback
5. 054452 → Home Assistant Dashboard, Local Hermes fallback
6. 073558 → Obsidian Second Brain
7. 074743 → Obsidian Second Brain
8. 080429 → YT Reddit Nieuws Cron Briefings
9. 080559 → YT Reddit Nieuws Cron Briefings
10. 081432 → YT Reddit Nieuws Cron Briefings
11. 084317 → Local Hermes fallback, Hermes Telegram Workflows
12. 084415 → Local Hermes fallback, Home Assistant Dashboard
13. 085707 → Local Hermes fallback, Home Assistant Dashboard
14. 085753 → Local Hermes fallback, Home Assistant Dashboard

**Project notes modified** (added backlinks): 5 notes
1. Home Assistant Dashboard → +5 backlinks
2. Local Hermes fallback on Lenovo Legion → +6 backlinks
3. YT Reddit Nieuws Cron Briefings → +4 backlinks
4. Hermes Telegram Workflows → +4 backlinks
5. Obsidian Second Brain → +2 backlinks

**Notes skipped** (geen adequate project/thema match, of puur transactioneel):
- 063035 (Werk project concept → geen project note in Projects/)
- 063110 (functievraag → te generiek)
- 063152 (CICT init → geen project note)
- 063252 (workflow CICT → geen project note)
- 063712 (strafrecht nota → CICT concept, geen project note)
- 064659 (CICT referentie → geen project note)
- 081110 (phone vergelijking → research theme, geen project link)
- 091810, 092726, 094901, 112258, 112838, 113001 (transactionele verkoopchat)

All changes are symmetrical (interaction→project and project→interaction).

Gedaan. 14 interaction notes van 27 recente (+ evt. 5 projectnotes) kregen nieuwe crosslinks. De overige waren puur transactioneel (telefoons verkopen, 2FA) of verwezen naar een project (CICT/Werk) dat enkel op filesystem-niveau bestaat zonder overeenkomstige projectnote in Projects/. Die blijven links-loos tot een projectnote aangemaakt wordt.
