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) <noreply@anthropic.com>
3.9 KiB
purpose, status, created, populated, populated_by
| purpose | status | created | populated | populated_by |
|---|---|---|---|---|
| skill-discovery | populated | 2026-06-02 | 2026-06-02 | phase-M4 |
Skill Index — parsecapere
Discovery-Index fuer alle Skills die der
mcp-gitea-Service (Phase M5) laden kann. Jeder Eintrag verlinkt auf das Skill-Manifest im Schwester-Repoparsecapere-skills.
Skill-Tabelle
| 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 |
kreuzwort-builder |
spawn-by-keyword | kreuzwort · kreuzwortraetsel · crossword |
5 | 12 | parsecapere-skills/composite/kreuzwort-builder.md |
lueckentext-builder |
spawn-by-keyword | lueckentext · vokabel-drill · cloze |
4 | 8 | parsecapere-skills/composite/lueckentext-builder.md |
Aktivierungs-Pfade
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");
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, schon mit komponiertem Prompt aktiv) erkennt
"kreuzwort" und ruft Tool: create_kreuzwort_task(thema="Pflanzen", lang="de")
│
▼
llm-gateway (Tool-Handler) ruft: compose_prompt("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
│
▼
llm-gateway spawn'd Sub-Agent mit komponiertem Prompt + tools
│
▼
Sub-Agent fuehrt Self-Correction-Loop + Build-Schritte aus,
liefert Erfolgsmeldung zurueck an Main-Voice
│
▼
Main-Voice erzaehlt User: "Kreuzwort bereit: 7 Woerter ..."
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.