feat(brain): API-Heuristik — Cross-Session-Counter fuer Skill-Drift
Variante B: scaffold-reflex Regel allein reicht nicht weil jede Chat- Anfrage eine eigene claude-CLI-Session ist. ARIA sieht in der aktuellen Session nicht dass sie gestern auch schon 10x dieselbe API gecurled hat. Beobachtung: 5+ Spotify-Bash-Calls hintereinander, kein Skill angelegt. Loesung: Brain trackt server-side aus dem persistierten agent_stream.jsonl. Bei jedem chat() wird der Log gescanned (cache 5min), Bash-curl-Calls nach Hostname aggregiert. Hosts mit >=3 Calls in 24h ohne passenden Skill landen als '## API-Heuristik'-Block im System-Prompt mit konkretem skill_scaffold-Vorschlag. Neue Module: - aria-brain/api_heuristic.py: - compute_hints(existing_skills, force): Aggregiert + filtert - build_section(hints): formatiert als kompakten Markdown-Block - Smart suggestions mapping (api.spotify.com → oauth-api template etc.) - Ignoriert interne Hosts (aria-brain, localhost, docker-bridge) - 5-min Cache damit nicht jeder Turn die JSONL parst - aria-brain/prompts.py: build_system_prompt nimmt api_heuristic_section als optionalen Block direkt nach Skills-Section. - aria-brain/agent.py: vor build_system_prompt Heuristik berechnen mit aktueller Skill-Liste, Block durchreichen. - 11. seed_rule scaffold-reflex umgeschrieben: kein 'in einer Session' mehr (das ergab keinen Sinn — jeder Turn neue Session). Stattdessen: '## API-Heuristik'-Block ist Dein Cross-Session-Gedaechtnis. Wenn da was steht: scaffolden BEVOR Du Bash machst. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+23
-21
@@ -211,32 +211,34 @@ SEED_RULES: List[dict] = [
|
||||
{
|
||||
"migration_key": "seed/skill-rule/scaffold-reflex",
|
||||
"type": "rule",
|
||||
"title": "Skill-Regel: skill_scaffold-Reflex bei wiederholten API-Calls",
|
||||
"title": "Skill-Regel: skill_scaffold-Reflex (mit Cross-Session-Counter)",
|
||||
"category": "skills",
|
||||
"content": (
|
||||
"Wenn Du dieselbe externe API in einer Session 2x oder oefter "
|
||||
"via Bash-curl angerufen hast: HOER AUF und rufe SOFORT "
|
||||
"`skill_scaffold` auf. Drei Spotify-Calls hintereinander, "
|
||||
"drei Wetter-Abfragen, drei Calendar-Events — JEDES dieser "
|
||||
"Pattern schreit nach einem Skill.\n"
|
||||
"Brain trackt server-side wie oft Du in den letzten 24h dieselbe "
|
||||
"externe API per Bash-curl angerufen hast (Cross-Session-Counter, "
|
||||
"siehe '## API-Heuristik'-Block im System-Prompt). Sobald da "
|
||||
"ein Eintrag steht: das ist KEINE Empfehlung sondern eine "
|
||||
"Aufforderung. RUFE als ALLERERSTES `skill_scaffold` mit dem "
|
||||
"vorgeschlagenen Template und params auf, BEVOR Du wieder Bash-"
|
||||
"curl machst. Dann nutze den frischen Skill via `run_<name>`.\n"
|
||||
"\n"
|
||||
"skill_scaffold ist die niedrige Hürde: Du musst keinen "
|
||||
"kompletten Python-Skill schreiben. Du waehlst nur:\n"
|
||||
" - oauth-api fuer OAuth2-Services (Spotify, GitHub, Reddit, "
|
||||
"Google, Discord) -- Token kommt vom Brain mit Auto-Refresh\n"
|
||||
" - apikey-api fuer statische Keys (OpenWeather, OpenAI, "
|
||||
"Twilio) -- Key landet im config_schema, Stefan setzt ihn in "
|
||||
"Diagnostic\n"
|
||||
" - file-process fuer Datei-In/Datei-Out (PDF, Bild, Daten)\n"
|
||||
"Warum: jede Chat-Anfrage ist eine eigene Claude-CLI-Session — "
|
||||
"Du siehst nicht dass Du gestern auch schon 10x Spotify gecurled "
|
||||
"hast. Der API-Heuristik-Block ist Dein Cross-Session-Gedaechtnis. "
|
||||
"Wenn er leer ist: alles OK, weitermachen. Wenn nicht: scaffolden.\n"
|
||||
"\n"
|
||||
"Brain expandiert das Template in ~1s zu einem fertigen Skill. "
|
||||
"Falls Du was Spezielles brauchst: erst Scaffold, dann "
|
||||
"`skill_update` mit Anpassung. NICHT umgekehrt — und schon gar "
|
||||
"nicht das fuenfte Mal das gleiche Bash-Skript bauen.\n"
|
||||
"Templates (ausfuehrliche Doku siehe skill_scaffold-Tool):\n"
|
||||
" - **oauth-api**: Spotify/GitHub/Reddit/Google/Discord. Token "
|
||||
"kommt vom Brain mit Auto-Refresh.\n"
|
||||
" - **apikey-api**: OpenWeather/OpenAI/Twilio. Key landet im "
|
||||
"config_schema → CFG_<NAME> ENV. Stefan setzt ihn in Diagnostic.\n"
|
||||
" - **file-process**: PDF/Bild/JSON-Wandler. process()-Stub, "
|
||||
"danach `skill_update` mit echtem Code.\n"
|
||||
"\n"
|
||||
"Belohnung: ein Spotify-Skill macht 'welches lied laeuft' in "
|
||||
"1 Tool-Call (~3s) statt 5 Bash-Roundtrips (~20s). Stefan "
|
||||
"merkt das sofort und ist zufriedener."
|
||||
"Belohnung konkret: ein Spotify-Skill macht 'welches lied laeuft' "
|
||||
"in 1 Tool-Call (~3s) statt 3-5 Bash-Roundtrips (~13-20s). Stefan "
|
||||
"merkt das sofort. Ein einmaliger Scaffold-Aufwand spart hunderte "
|
||||
"Bash-Roundtrips."
|
||||
),
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user