From 53f7f99b9dc4825cd09ab5905d1d474be1bbb9fc Mon Sep 17 00:00:00 2001 From: tim Date: Tue, 2 Jun 2026 15:54:35 +0200 Subject: [PATCH] =?UTF-8?q?M4:=20skill-index.md=20=E2=80=94=20Stub=20?= =?UTF-8?q?=E2=86=92=20populated=20mit=20allen=203=20Skills?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Status: stub → populated. Skill-Tabelle mit allen drei Initial-Skills: - main-voice (default-Aktivierung, 17 Tools, hop_budget=6) - kreuzwort-builder (Trigger keyword, 5 Tools, hop_budget=12) - lueckentext-builder (Trigger keyword, 4 Tools, hop_budget=8) Jede Zeile verlinkt auf das Skill-Manifest im Schwester-Repo parsecapere-skills via absolute Gitea-URL. Plus Erklaerungs-Sections: - Aktivierungs-Pfade: default-Skill vs spawn-by-keyword - Discovery-Flow als Ablauf-Diagramm (User-Wunsch → Tool-Dispatch → compose_prompt → Cache-Check → Sub-Agent-Spawn → Erfolgsmeldung) - Hinweis fuer M5-Implementation: Manifest-required_prompt_modules ist Single-Source-of-Truth, kein silent-skip bei fehlenden Modulen. Co-Authored-By: Claude Opus 4.7 (1M context) --- skill-index.md | 116 ++++++++++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 49 deletions(-) diff --git a/skill-index.md b/skill-index.md index 569019f..77f7f2e 100644 --- a/skill-index.md +++ b/skill-index.md @@ -1,78 +1,96 @@ --- purpose: skill-discovery -status: stub +status: populated created: 2026-06-02 -created_by: phase-M2 -populated_in: phase-M4 +populated: 2026-06-02 +populated_by: phase-M4 --- -# Skill Index — parsecapere Prompts +# Skill Index — parsecapere -> **Stub.** Dieser Index wird in **Phase M4** mit Skill-Manifesten gefuellt -> (siehe `2026-06-02 — Master-Synthese — Prompt-Migration-Reihenfolge.md`). -> -> Bis dahin steht hier nur ein Hinweis welche Personas existieren — als -> grober Lageplan fuer Tim's Review. +> Discovery-Index fuer alle Skills die der `mcp-gitea`-Service (Phase M5) +> laden kann. Jeder Eintrag verlinkt auf das Skill-Manifest im Schwester-Repo +> [`parsecapere-skills`](https://gitea.parsecapere.de/tim/parsecapere-skills). -## Vorhandene Personas (nach M2) +--- -| Persona | Quelle (Code) | Trigger (geplant) | -|---------------------------------|---------------------------------------------------|---------------------------------| -| `personas/main-voice.md` | `llm-gateway/llm/gemini.js` | (immer — User-Voice-Entry) | -| `personas/kreuzwort-builder.md` | `llm-gateway/orchestrator/kreuzwort-orchestrator.js` | "Kreuzwort", "Crossword" | -| `personas/lueckentext-builder.md` | `llm-gateway/orchestrator/lueckentext-orchestrator.js` | "Lueckentext", "Vokabel-Drill" | +## Skill-Tabelle -## Was nach M4 hier steht +| Skill-ID | Aktivierung | Trigger-Keywords | Tools | Hop-Budget | Manifest | +|--------------------------|----------------------------|-----------------------------------------------|------:|-----------:|---------------------------------------------------------------------------------------------------------| +| `main-voice` | default (Voice-Entry) | _(keine — direkt geladen)_ | 17 | 6 | [`parsecapere-skills/composite/main-voice.md`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite/main-voice.md) | +| `kreuzwort-builder` | spawn-by-keyword | `kreuzwort` · `kreuzwortraetsel` · `crossword`| 5 | 12 | [`parsecapere-skills/composite/kreuzwort-builder.md`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite/kreuzwort-builder.md) | +| `lueckentext-builder` | spawn-by-keyword | `lueckentext` · `vokabel-drill` · `cloze` | 4 | 8 | [`parsecapere-skills/composite/lueckentext-builder.md`](https://gitea.parsecapere.de/tim/parsecapere-skills/src/branch/main/composite/lueckentext-builder.md) | -Pro Skill ein Eintrag mit: -- `skill_id`, `trigger_keywords`, `required_tools`, `required_prompt_modules` -- `max_tokens` (Composition-Limit) -- Link zum Skill-Manifest (separates Repo `parsecapere-skills`) +--- -Beispiel-Eintrag (Vorgriff): +## Aktivierungs-Pfade -```yaml -- skill_id: kreuzwort-builder - trigger_keywords: [kreuzwort, kreuzwortraetsel, crossword] - required_tools: - - atomic_validate_crossword_grid - - atomic_create_crossword_grid_brick - - atomic_create_letter_palette_brick - - atomic_create_questions_block_brick - - atomic_finalize_kreuzwort_layer - required_prompt_modules: - - base/identity.md - - base/style.md - - workflows/sub-agent-discipline.md - - workflows/self-correction.md - - tools-context/atomic-finalize.md - - personas/kreuzwort-builder.md - max_tokens: 1500 - manifest: parsecapere-skills/composite/kreuzwort-builder.md +### `default` — Voice-Entry-Skill + +`main-voice` wird beim Voice-Entry eines Users direkt geladen — kein Discovery, +kein Keyword-Match. Das `llm-gateway` ruft den Composer: + +``` +const { system_prompt, tools } = await compose_prompt("main-voice"); ``` -## Discovery-Flow (geplant, siehe Note 2026-06-02 Skill-Discovery+CoT) +und uebergibt das an `GoogleGenerativeAI.startChat()`. + +### `spawn-by-keyword` — Sub-Agents + +Wenn die Main-Voice ein Dispatch-Tool (`create_kreuzwort_task`, +`create_lueckentext_task`) aufruft, spawn'd der Backend-Code (Orchestrator-JS +oder spaeter ein generischer Spawner) einen Sub-Agent mit dem passenden Skill: + +``` +const { system_prompt, tools } = await compose_prompt("kreuzwort-builder"); +// → eigener Gemini-Call, eigenes Hop-Budget, eigener Trace-callId +``` + +Die Trigger-Keywords sind heute (M4) noch **dokumentarisch** — sie werden in +M5+ vom Composer als Discovery-Index ausgewertet (Tool `list_skills(trigger="kreuzwort")`). + +--- + +## Discovery-Flow (geplant ab M5) ``` User: "Bau ein Kreuzwort ueber Pflanzen" │ ▼ -main-voice (Main-LLM) ruft Tool: list_skills(trigger="kreuzwort") +main-voice (Main-LLM, schon mit komponiertem Prompt aktiv) erkennt +"kreuzwort" und ruft Tool: create_kreuzwort_task(thema="Pflanzen", lang="de") │ ▼ -mcp-gitea returnt: { skill_id: "kreuzwort-builder", manifest: "..." } +llm-gateway (Tool-Handler) ruft: compose_prompt("kreuzwort-builder") │ ▼ -main-voice ruft Tool: load_skill("kreuzwort-builder") +mcp-gitea (LLM-VPS) checkt STDB-Cache gitea_section_cache: + ├── HIT → returnt assembled prompt aus Cache + └── MISS → fetcht alle 8 Module aus parsecapere-prompts, + komponiert in der Compose-Order (base → workflows → + tools-context → persona), cached, returnt │ ▼ -mcp-gitea komponiert Prompt aus skill.required_prompt_modules -und liefert assembled prompt + tool-defs zurueck. +llm-gateway spawn'd Sub-Agent mit komponiertem Prompt + tools │ ▼ -Sub-Agent wird mit assembled prompt + tools gespawnt. +Sub-Agent fuehrt Self-Correction-Loop + Build-Schritte aus, +liefert Erfolgsmeldung zurueck an Main-Voice + │ + ▼ +Main-Voice erzaehlt User: "Kreuzwort bereit: 7 Woerter ..." ``` -→ Heute (M2) ist davon **nichts implementiert**. Es gibt nur die rohen - Personas, die aktuell weiterhin direkt im JS-Code stehen. M3-M5 baut - den Discovery-Layer. +--- + +## Hinweis fuer M5-Implementation + +Die Manifest-`required_prompt_modules`-Listen sind die **Single-Source-of-Truth** +fuer die Compose-Order. Der Composer (`mcp-gitea`) darf nicht selbst entscheiden +welche Module er laed — er liest exakt was im Manifest steht, in der dortigen +Reihenfolge. + +Falls ein Modul-Pfad nicht existiert oder ein Modul defekt ist: hart fail'en, +nicht silent-skip. Bei einem fehlenden Persona-Modul macht der Compose keinen Sinn.