M4: initial skill manifests for parsecapere-skills
Drei Skill-Manifeste angelegt — Rezepte die der mcp-gitea-Service (Phase
M5) auslesen wird um System-Prompts zu komponieren:
- composite/main-voice.md
Default-Skill beim Voice-Entry. Kein Trigger — wird direkt geladen.
17 Tools (volles Brick-Set + Sub-Agent-Dispatcher + Trace-Reducer).
required_prompt_modules: 6 (base/* + workflows/plan-before-action +
workflows/error-recovery + tools-context/brick-creation + persona).
- composite/kreuzwort-builder.md
Sub-Agent, Trigger ["kreuzwort", "kreuzwortraetsel", "crossword"].
5 atomic_* Tools. atomic_set_kreuzwort_solution bewusst NICHT exponiert
(nur via atomic_finalize_kreuzwort_layer erlaubt — verhindert
erfundene layerIds).
hop_budget: 12 (Self-Correction-Loop braucht mehrere Iterationen).
required_prompt_modules: 8 (inkl. workflows/self-correction +
tools-context/atomic-finalize).
- composite/lueckentext-builder.md
Sub-Agent, Trigger ["lueckentext", "vokabel-drill", "cloze"].
4 atomic_* Tools, strikt linear a→b→c→d.
hop_budget: 8 (kein Self-Correction).
required_prompt_modules: 8 (inkl. workflows/error-recovery +
tools-context/atomic-chain).
Plus README.md komplett umgeschrieben — erklaert was ein Skill ist,
die Ordner-Topologie (composite/ vs zukuenftiges atomic/), die
Compose-Order und den Cross-Repo-Bezug zu parsecapere-prompts +
parsecapere-knowledge.
Reference notes:
arch-flow/brainstorm/Sprache/
2026-06-02 — Master-Synthese — Prompt-Migration-Reihenfolge.md
2026-06-02 — Prompt-Modularisierung — Architektur und Composition.md
2026-06-02 — Skill-Discovery und Chain-of-Thought im Trace.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
---
|
||||
skill_id: kreuzwort-builder
|
||||
version: 0.1.0
|
||||
description: Sub-Agent fuer Kreuzwort-Layer-Aufbau mit Self-Correction-Loop.
|
||||
activation: keyword
|
||||
trigger_keywords:
|
||||
- kreuzwort
|
||||
- kreuzwortraetsel
|
||||
- crossword
|
||||
|
||||
persona: personas/kreuzwort-builder
|
||||
|
||||
required_prompt_modules:
|
||||
# base/ — immer dabei
|
||||
- base/identity
|
||||
- base/style
|
||||
- base/constraints
|
||||
# workflows/ — Sub-Agent-spezifisch
|
||||
- workflows/sub-agent-discipline # KEIN record_*, keine Voice-Tools
|
||||
- workflows/tool-scope-lock # nur die 5 unten erlaubt
|
||||
- workflows/self-correction # Validate-Loop (max 4 Versuche)
|
||||
# tools-context/ — atomic-finalize statt atomic-chain
|
||||
- tools-context/atomic-finalize
|
||||
# persona zuletzt
|
||||
- personas/kreuzwort-builder
|
||||
|
||||
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
|
||||
|
||||
max_tokens_estimate: 1500
|
||||
hop_budget: 12 # Self-Correction-Loop kann mehrere Validation-Iterationen brauchen
|
||||
|
||||
source_orchestrator: llm-gateway/orchestrator/kreuzwort-orchestrator.js
|
||||
spawned_by_tool: create_kreuzwort_task (Main-Voice)
|
||||
---
|
||||
|
||||
# Skill: kreuzwort-builder
|
||||
|
||||
Sub-Agent der vom Main-LLM via `create_kreuzwort_task({thema, lang})` gespawned wird.
|
||||
|
||||
## Workflow auf einen Blick
|
||||
|
||||
```
|
||||
1. Woerter ausdenken + im Grid positionieren
|
||||
2. atomic_validate_crossword_grid ← Self-Correction-Loop (max 4 Versuche)
|
||||
3. atomic_create_crossword_grid_brick
|
||||
4. atomic_create_letter_palette_brick
|
||||
5. atomic_create_questions_block_brick
|
||||
6. atomic_finalize_kreuzwort_layer ← Layer + Solution ATOMAR
|
||||
```
|
||||
|
||||
Details: `personas/kreuzwort-builder` + `workflows/self-correction`.
|
||||
|
||||
## Erfolgsmeldung
|
||||
|
||||
```
|
||||
"Kreuzwort bereit: <N> Woerter zum Thema '<thema>'."
|
||||
```
|
||||
|
||||
## Was bewusst NICHT im Tool-Set ist
|
||||
|
||||
- `atomic_set_kreuzwort_solution` — separates Solution-Tool. Wird im
|
||||
Sub-Agent ausgefiltert damit Reihenfolge nicht kollidiert und keine
|
||||
erfundenen `layerId`s entstehen (siehe Kommentar in
|
||||
`kreuzwort-orchestrator.js` Zeile 21-25). Stattdessen ist nur das
|
||||
All-in-One `atomic_finalize_kreuzwort_layer` exponiert.
|
||||
|
||||
- Alle Voice-Tools (`update_brick_text`, `delete_brick`, `clear_view_bricks`, ...)
|
||||
— das ist Main-Voice-Sache, nicht Sub-Agent.
|
||||
|
||||
- `record_thought` / `record_reflection` — das ist Main-LLM-Sache. Sub-Agent
|
||||
wird via `voice_tool_call` automatisch getraced.
|
||||
|
||||
## Was M5+ noch leisten muss
|
||||
|
||||
- Wenn `compose_prompt("kreuzwort-builder")` aufgerufen wird, MUSS der Composer
|
||||
pruefen ob `self-correction` und `atomic-finalize` mit `applies_to` dieses
|
||||
Skills kompatibel sind. Heute manuell verifiziert — spaeter via Frontmatter-Check.
|
||||
- `hop_budget: 12` ist hoeher als die `6` der Main-Voice. Wenn der Composer
|
||||
einem Sub-Agent ein anderes Hop-Limit als der Main-Voice setzt: das hier
|
||||
ist der Wert.
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
skill_id: lueckentext-builder
|
||||
version: 0.1.0
|
||||
description: Sub-Agent fuer Lueckentext-Layer-Aufbau (strikt linear, kein Self-Correction).
|
||||
activation: keyword
|
||||
trigger_keywords:
|
||||
- lueckentext
|
||||
- lueckentexte
|
||||
- vokabel-drill
|
||||
- cloze
|
||||
|
||||
persona: personas/lueckentext-builder
|
||||
|
||||
required_prompt_modules:
|
||||
# base/ — immer dabei
|
||||
- base/identity
|
||||
- base/style
|
||||
- base/constraints
|
||||
# workflows/ — Sub-Agent-spezifisch
|
||||
- workflows/sub-agent-discipline # KEIN record_*, keine Voice-Tools
|
||||
- workflows/tool-scope-lock # nur die 4 unten erlaubt
|
||||
- workflows/error-recovery # max 3 Versuche pro Tool (unstrukturierte Fehler)
|
||||
# tools-context/ — atomic-chain statt atomic-finalize
|
||||
- tools-context/atomic-chain
|
||||
# persona zuletzt
|
||||
- personas/lueckentext-builder
|
||||
|
||||
required_tools:
|
||||
- atomic_create_sentence_text_brick
|
||||
- atomic_create_word_palette_brick
|
||||
- atomic_create_layer
|
||||
- atomic_set_lueckentext_solution
|
||||
|
||||
max_tokens_estimate: 1300
|
||||
hop_budget: 8
|
||||
|
||||
source_orchestrator: llm-gateway/orchestrator/lueckentext-orchestrator.js
|
||||
spawned_by_tool: create_lueckentext_task (Main-Voice)
|
||||
---
|
||||
|
||||
# Skill: lueckentext-builder
|
||||
|
||||
Sub-Agent der vom Main-LLM via `create_lueckentext_task({thema, lang})` gespawned wird.
|
||||
|
||||
## Workflow auf einen Blick
|
||||
|
||||
```
|
||||
a) atomic_create_sentence_text_brick(sentenceTemplate, gapIds) → stbId
|
||||
b) atomic_create_word_palette_brick(words) → wpbId
|
||||
c) atomic_create_layer({ layoutTemplate, brickZones }) → layerId
|
||||
d) atomic_set_lueckentext_solution(layerId, correctMapping)
|
||||
```
|
||||
|
||||
Details: `personas/lueckentext-builder` + `tools-context/atomic-chain`.
|
||||
|
||||
## Subtle Diff zum kreuzwort-builder
|
||||
|
||||
| Aspekt | lueckentext-builder | kreuzwort-builder |
|
||||
|-----------------------|----------------------------|--------------------------------|
|
||||
| Validation-Schritt | nein — strikt linear | ja — Self-Correction-Loop |
|
||||
| Atomic-Pattern | `atomic-chain` (a→b→c→d) | `atomic-finalize` (atomar) |
|
||||
| Recovery-Workflow | `error-recovery` (3 Tries) | `self-correction` (4 Validates)|
|
||||
| Hop-Budget | 8 | 12 |
|
||||
| Tool-Count | 4 | 5 |
|
||||
|
||||
## Erfolgsmeldung
|
||||
|
||||
```
|
||||
"Lueckentext-Aufgabe bereit: '<sentenceTemplate>' mit Loesung gespeichert."
|
||||
```
|
||||
|
||||
## Was bewusst NICHT im Tool-Set ist
|
||||
|
||||
- Alle Voice-Tools (Main-Voice-Sache).
|
||||
- `record_thought` / `record_reflection` (Main-LLM-Sache, Trace-Layer macht den Rest).
|
||||
- Brick-Loesch-Tools — Orphan-Cleanup macht der Orchestrator-Wrapper
|
||||
(`cleanupOrphanLueckentextBricks()` vor jedem Run), nicht der Sub-Agent selber.
|
||||
|
||||
## Migrations-Hinweis
|
||||
|
||||
Wenn das Backend kuenftig ein `atomic_finalize_lueckentext_layer`-Tool bekommt
|
||||
(All-in-One Layer + Solution), kann dieser Skill auf das `atomic-finalize`-
|
||||
Pattern umgestellt werden — siehe Vergleich in `tools-context/atomic-chain.md`.
|
||||
Heute (2026-06-02) gibt's das Tool noch nicht.
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
skill_id: main-voice
|
||||
version: 0.1.0
|
||||
description: User-Facing Voice / Session-Orchestrator — Default-Skill beim Voice-Entry.
|
||||
activation: default
|
||||
trigger_keywords: []
|
||||
note_on_activation: |
|
||||
main-voice wird nicht ueber list_skills/load_skill aktiviert sondern direkt
|
||||
beim Eintritt eines Users in die Voice-Loop. Trigger-Keywords leer.
|
||||
Der mcp-gitea-Service stellt das Manifest aber trotzdem unter dem
|
||||
selben Composer-Aufruf bereit fuer Konsistenz.
|
||||
|
||||
persona: personas/main-voice
|
||||
|
||||
required_prompt_modules:
|
||||
# base/ — immer dabei
|
||||
- base/identity
|
||||
- base/style
|
||||
- base/constraints
|
||||
# workflows/ — Main-Voice-spezifisch
|
||||
- workflows/plan-before-action
|
||||
- workflows/error-recovery
|
||||
# tools-context/ — Main-Voice braucht das volle Brick-Set
|
||||
- tools-context/brick-creation
|
||||
# persona zuletzt (Tie-Breaker)
|
||||
- personas/main-voice
|
||||
|
||||
required_tools:
|
||||
# Read-Operations
|
||||
- list_view_bricks
|
||||
- list_source_items
|
||||
# Wortpool-Operations
|
||||
- add_source_item
|
||||
- remove_word_from_row
|
||||
# View-Brick-Operations
|
||||
- add_word_to_row
|
||||
- create_row_brick
|
||||
- create_pool_view
|
||||
- delete_view_brick
|
||||
- clear_view_bricks
|
||||
# Pulse-Brick-Operations
|
||||
- update_brick_text
|
||||
- update_brick_color
|
||||
- update_brick_mode
|
||||
- delete_brick
|
||||
- toggle_brick
|
||||
# Sub-Agent-Dispatchers
|
||||
- create_sentence_shuffle
|
||||
- create_lueckentext_task
|
||||
- create_kreuzwort_task # noch geplant — heute via High-Level-Tool im JS
|
||||
# Trace-Reducer
|
||||
- record_thought
|
||||
- record_reflection
|
||||
# Escalation
|
||||
- wishlist_feature
|
||||
|
||||
max_tokens_estimate: 1800
|
||||
hop_budget: 6
|
||||
|
||||
source_orchestrator: llm-gateway/llm/gemini.js (handleVoice)
|
||||
---
|
||||
|
||||
# Skill: main-voice
|
||||
|
||||
Default-Persona beim Voice-Entry eines Users in die Stream-Box.
|
||||
|
||||
## Aktivierung
|
||||
|
||||
`main-voice` wird **nicht** ueber Trigger-Keywords entdeckt. Sie wird **direkt**
|
||||
am Anfang jedes `handleVoice()`-Calls von `llm-gateway/llm/gemini.js` geladen.
|
||||
|
||||
Der Composer-Endpoint `compose_prompt("main-voice")` liefert den fertig
|
||||
zusammengesetzten System-Prompt + die `functionDeclarations` fuer alle
|
||||
`required_tools`. Filter `mutates !== "delete" || canDelete` (Rolle-basiert)
|
||||
passiert im aufrufenden Code (siehe `gemini.js` Zeile 244-245).
|
||||
|
||||
## Spezialfall: Intro-Run
|
||||
|
||||
`generateIntro()` braucht einen kleineren, anderen Prompt — heute in
|
||||
`personas/main-voice.md` als "Spezialfall: Intro-Run"-Section. Bei
|
||||
Bedarf in M5+ als eigenes Skill-Manifest `composite/main-voice-intro.md`
|
||||
auslagern.
|
||||
|
||||
## Sub-Agent-Dispatch
|
||||
|
||||
`create_lueckentext_task` und `create_kreuzwort_task` spawn'en je einen
|
||||
Sub-Agent-Skill (`lueckentext-builder` / `kreuzwort-builder`). Der
|
||||
Sub-Agent laeuft mit eigenem System-Prompt (eigenes `load_skill`) und
|
||||
eigenem Hop-Budget. Sein Ergebnis kommt als Tool-Response zurueck zur
|
||||
Main-Voice.
|
||||
Reference in New Issue
Block a user