diff --git a/README.md b/README.md index 2561dea..b365111 100644 --- a/README.md +++ b/README.md @@ -388,7 +388,7 @@ Chat-Turn an die richtigen Patterns. ### Skill-Regeln (seed_rules) -`aria-brain/seed_rules.py` enthaelt 16 `type=rule, pinned=true, +`aria-brain/seed_rules.py` enthaelt 17 `type=rule, pinned=true, source=seed`-Memories, die bei jedem Brain-Start idempotent in die Vector-DB geschrieben werden (`migration_key`-basiert). Sie tauchen in jedem Chat-Turn im Hot-Memory-Block auf: diff --git a/aria-brain/agent.py b/aria-brain/agent.py index d1ec291..ad654cc 100644 --- a/aria-brain/agent.py +++ b/aria-brain/agent.py @@ -107,9 +107,13 @@ META_TOOLS = [ "entry_code": { "type": "string", "description": ( - "Python-Code. Args lesen via os.environ['ARG_NAME']. " - "Resultat per print() (stdout) zurueck. Bei Fehler: " - "non-zero exit (sys.exit(1) o.ae.)." + "Python-Code. Args lesen via os.environ['ARG_']. " + "WICHTIG: der Präfix `ARG_` ist Pflicht (Konvention vom " + "Skill-Runner). NIEMALS direkt PATH/METHOD/BODY etc. " + "abrufen — das sind reservierte System-ENV (PATH = " + "Executable-Suchpfad, nicht Dein arg!). Resultat per " + "print() (stdout) zurueck. Bei Fehler: non-zero exit " + "(sys.exit(1) o.ae.)." ), }, "readme": {"type": "string", "description": "Markdown — was macht der Skill, Beispiel-Aufrufe"}, diff --git a/aria-brain/seed_rules.py b/aria-brain/seed_rules.py index bd5a24f..ad5097c 100644 --- a/aria-brain/seed_rules.py +++ b/aria-brain/seed_rules.py @@ -330,6 +330,40 @@ SEED_RULES: List[dict] = [ "Beim ersten Versuch direkt XML-Tag ergibt 3-5s statt 30s+." ), }, + { + "migration_key": "seed/skill-rule/arg-env-convention", + "type": "rule", + "title": "Skill-Regel: Args kommen als ARG_ ENV — die Konvention NIEMALS aendern", + "category": "skills", + "content": ( + "Skill-Args werden vom Brain-Runner als Environment-Variablen " + "mit PRÄFIX `ARG_` ueber `os.environ` an den Skill durchgereicht. " + "Beispiel: arg `path=\"/v1/me/player\"` → " + "`ARG_PATH=/v1/me/player` im Skill-ENV.\n" + "\n" + "Beim skill_update MUSST Du diese Konvention beibehalten:\n" + " RICHTIG: os.environ.get('ARG_PATH', '')\n" + " RICHTIG: os.environ.get('ARG_METHOD', 'GET')\n" + " RICHTIG: os.environ.get('ARG_BODY', '')\n" + "\n" + " FALSCH: os.environ.get('PATH', '') ← System-PATH " + "(Executable-Suchpfad)!\n" + " FALSCH: os.environ.get('METHOD', '')\n" + " FALSCH: os.environ.get('BODY', '')\n" + "\n" + "Antipattern (30.05.2026): ARIA hat beim skill_update des " + "spotify-Skills die Args von `ARG_PATH` auf `PATH` umbenannt. " + "Folge: Skill las `/usr/local/sbin:/usr/local/bin:...` als " + "URL-Pfad → Spotify gab 404 zurück. Stefan dachte Spotify sei " + "kaputt. Rollback noetig.\n" + "\n" + "Andere reservierte ENV-Namen die Du NICHT nehmen darfst: " + "PATH, HOME, USER, SHELL, LANG, TERM, PWD, OLDPWD, " + "BRAIN_INTERNAL_URL, SKILL_DIR, SHARED_UPLOADS, CFG_* " + "(letztere sind Config-Schema-Werte). Bei Skill-Args IMMER " + "den Praefix ARG_ verwenden, dann hast Du keine Kollision." + ), + }, { "migration_key": "seed/skill-rule/skills-are-editable-python", "type": "rule",