# Cron Job: second-brain-crosslink-intelligent

**Job ID:** 77447b1b4dcd
**Run Time:** 2026-06-10 00:18:11
**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: per-job overrides voor crons, fallback chain via config.yaml"
version: 1.1.0
author: Styto + Cato
metadata:
  hermes:
    tags: [routing, model, provider, cost-optimization]
---

# Model Router

Deze skill definieert welke taken naar welk model gaan.

## Routing rules

### 1. Cron jobs → per-job `deepseek-chat` via `deepseek`
Alle geplande/achtergrond taken gebruiken DeepSeek (goedkoop, 1M context, betrouwbaar):
- YouTube channel sitreps (content monitoring, summaries)
- Reddit digests (50 subreddits)
- Prijsmonitoren (Zendure, Motorola, etc.)
- Meteo/weerberichten
- Weekly briefings (Garmin, etc.)
- Obsidian crosslink maintenance
- Opruimtaken
- Elke andere cron/background taak

**Hoe:** Elke cron job krijgt een individuele model override:
```
model: deepseek-chat
provider: deepseek
```

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

### 3. Fallback chain (globale config)
In `config.yaml` staat een fallback chain die actief wordt als de primary provider faalt:
```
fallback_providers:
  - provider: deepseek
    model: deepseek-chat
  - provider: openai-codex
    model: gpt-5.5
```
Als DeepSeek faalt (quota, outage) → OpenAI Codex vangt het op.
Deze fallback geldt voor **alle** provider calls (crons + Telegram + delegatie).

### 4. Gemini — historisch, niet meer in gebruik
Gemini was voorheen default voor crons (`gemini-3.1-flash-lite-preview`), maar de Gemini API key staat uitgecomment in `.env`. Gemini OAuth (`google-gemini-cli` provider) heeft policy-risico's en wordt afgeraden voor cron gebruik. **Nieuwe crons krijgen geen Gemini model override meer.**

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

## Hoe een cron job opzetten met model override

```
cronjob(
    action="create",
    name="<naam>",
    schedule="...",
    prompt="...",
    model={"provider": "deepseek", "model": "deepseek-chat"},
    deliver="origin",  # of "local" voor mail-only
    skills=["content-monitoring-briefings", "long-output-to-email"],
    enabled_toolsets=["web", "terminal", "file"],
)
```

## Hoe bestaande crons migreren van Gemini naar DeepSeek

```python
cronjob(action="update", job_id="...", model={"provider": "deepseek", "model": "deepseek-chat"})
```

Geen andere aanpassingen nodig — de fallback chain vangt eventuele DeepSeek-fouten op.

## Relationship to model-auto-switcher

The `model-auto-switcher` cron (07:00 daily) is the **upstream** voor Telegram model — it writes to `config.yaml`:
- `model.default` → the top-ranked free OpenRouter model
- `fallback_providers[0].model` → the second-ranked

**Cron jobs zijn NIET afhankelijk van de auto-switcher** — ze hebben hardcoded per-job model overrides (deepseek-chat). Alleen de Telegram interactie volgt wat de auto-switcher die ochtend heeft gezet.

## Provider notes

### DeepSeek
- API key in `/opt/data/.env` als `DEEPSEEK_API_KEY`
- Model: `deepseek-chat` (snelle, goedkope inference, 1M context)
- Geen OAuth — enkel API key
- Fallback naar OpenAI Codex bij fouten

### OpenAI Codex (openai-codex)
- OAuth via `hermes auth add openai-codex` (device code flow)
- Model: `gpt-5.5`
- Maandelijks abonnement, reset op 11e van de maand
- Wordt gebruikt voor: Telegram interactie + fallback voor crons

### Gemini
- Niet meer in gebruik voor crons (zie #4 hierboven)
- API key zou via `GOOGLE_API_KEY` of `GEMINI_API_KEY` in `.env` werken
- OAuth provider `google-gemini-cli` bestaat maar heeft policy-risico's (Google kan gebruik door third-party software als schending zien)

## Cron job aanmaken met skills + long-output-to-email (beproefd recept)

Wanneer een cron job lange output produceert (>50 regels / 3000 chars):

1. Maak de cron met `deliver: "origin"` (korte Telegram samenvatting)
2. Voeg skills `["content-monitoring-briefings", "long-output-to-email"]` toe
3. In de prompt: schrijf uitvoer naar `/opt/data/cron/output/<slug>/YYYY-MM-DD.md`
4. Prompt stuurt mail via AgentMail naar `styto@duck.com`
5. Eindoutput in Telegram = korte samenvatting (3-8 regels) + "Volledige digest gemaild"

Zie `content-monitoring-briefings` voor de complete prompt template.

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

**Crosslink run voltooid.**

### Wat aangepast (idempotent: enkel notes zonder bestaande crosslinks bewerkt):

**Interaction notes → `## Projecten` sectie toegevoegd (20 notes):**
- Model routing notes (2026-06-09-202545, -202335, -202047, -201617) → [[Hermes Telegram Workflows]]
- YT cron failure notes (2026-06-09-201913, -201508) → [[YT Reddit Nieuws Cron Briefings]] + [[Hermes Telegram Workflows]]
- Vakantieplanning (2026-06-09-173637) → [[Zomervakantie 2026 Mobilhome Roadtrip]] + [[Hermes Telegram Workflows]]
- Mnemosyne/Obsidian SSOT (2026-06-09-171821) → [[Obsidian Second Brain]] + [[Hermes Telegram Workflows]]
- Mnemosyne MCP (2026-06-09-172654) → [[Hermes Telegram Workflows]]
- Obsidian vault location (2026-06-09-162820) → [[Obsidian Second Brain]]
- Hermes cron/planning (2026-06-09-164428, -164625) → [[Hermes Telegram Workflows]] + [[YT Reddit Nieuws Cron Briefings]]
- HA token notes ×7 (2026-06-09-161022, -161914, -162042, -162202, -162234, -162319, -162507) → [[Home Assistant Dashboard]]
- Health/Garmin note (2026-06-09-201247) → "Geen specifiek project" (enkel theme health)

**Project notes → backlinks toegevoegd (4 projects):**
- **Hermes Telegram Workflows** → +10 nieuwe interaction backlinks
- **YT Reddit Nieuws Cron Briefings** → +3 nieuwe backlinks
- **Home Assistant Dashboard** → +8 nieuwe backlinks
- **Zomervakantie 2026** → +1 nieuwe backlink
- **Obsidian Second Brain** → +2 nieuwe backlinks (171821, 162820)

**Niet bewerkt (reeds adequaat gelinkt):**
- Notes die al `## Projecten` hadden (50 notes vooraf) — onveranderd
- Notes uit eerdere dagen (7-8 juni) die al gelinkt waren in de project notes
- Theme notes — ongewijzigd (de interaction notes linken correct naar thema's)
