--- name: create-hat-collection description: Generates new Ralph hat collection presets through guided conversation. Asks clarifying questions, validates against schema constraints, and outputs production-ready YAML files. --- # Create Hat Collection ## Overview This skill generates Ralph hat collection presets through a guided, conversational workflow. It asks clarifying questions about your workflow, validates the configuration against schema constraints, and produces a production-ready YAML preset file. **Output:** A complete `.yml` preset file in the `presets/` directory. ## When to Use - Creating a new multi-agent workflow from scratch - Transforming a workflow idea into a structured preset - Need guidance on hat design patterns and event routing **Not for:** Modifying existing presets (use `/creating-hat-collections` reference instead) ## Workflow ### Phase 1: Understand the Workflow Ask clarifying questions to understand: 1. **Purpose:** What problem does this workflow solve? 2. **Pattern:** Which architecture pattern fits best? - **Pipeline:** A→B→C linear flow (analyze→summarize) - **Critic-Actor:** One proposes, another critiques (code review) - **Supervisor-Worker:** Coordinator delegates to specialists - **Scientific:** Observe→Hypothesize→Test→Fix (debugging) 3. **Roles:** What distinct agent personas are needed? 4. **Handoffs:** When should each role hand off to the next? 5. **Completion:** What signals the workflow is done? ### Phase 2: Design Event Flow Map the workflow as an event chain: ``` task.start → [Role A] → event.a → [Role B] → event.b → [Role C] → LOOP_COMPLETE ↓ event.rejected → [Role A] ``` **Constraints to validate:** - Each trigger maps to exactly ONE hat (no ambiguous routing) - `task.start` and `task.resume` are RESERVED (never use as triggers) - Every hat must publish at least one event - Chain must eventually reach LOOP_COMPLETE ### Phase 3: Generate Preset Create the YAML file with these sections: ```yaml # # Pattern: # # # Usage: # ralph run --config presets/.yml --prompt "" event_loop: starting_event: "" # Ralph publishes this hats: hat_key: name: " Display Name" description: "" triggers: ["event.triggers.this"] publishes: ["event.this.publishes", "alternate.event"] default_publishes: "event.this.publishes" instructions: | ## MODE ### Process 1. 2. 3. Publish appropriate event ### Event Format ``` key: value ``` ### DON'T - - ``` ## Schema Reference ### Required Top-Level Fields | Field | Description | |-------|-------------| | `event_loop.starting_event` | First event Ralph publishes | ### Hat Definition Fields | Field | Required | Description | |-------|----------|-------------| | `name` | Yes | Display name with optional emoji (e.g., "🔍 Analyzer") | | `description` | Yes | Short description of the hat's purpose (one sentence) | | `triggers` | Yes | Events this hat responds to (list) | | `publishes` | Yes | Events this hat can emit (list) | | `default_publishes` | Recommended | Fallback event if hat forgets to publish | | `instructions` | Yes | Role-specific prompt (use `\|` for multiline) | ### Fields That DON'T Exist Never use these—they're not in the schema: - `emoji` (put emoji in `name` instead) - `system_prompt` (use `instructions`) - `subscriptions` / `publications` (use `triggers` / `publishes`) ## Event Naming Conventions ``` .ready / .done # Phase transitions .approved / .rejected # Review gates .found / .missing # Discovery events .request / .complete # Request-response ``` **Examples:** `analysis.complete`, `review.approved`, `build.blocked`, `spec.rejected` ## Validation Checklist Before finalizing the preset, verify: - [ ] Each trigger maps to exactly ONE hat - [ ] No hat uses `task.start` or `task.resume` as triggers - [ ] Every hat has `name`, `description`, `triggers`, `publishes`, and `instructions` - [ ] `default_publishes` is set for hats with multiple publish options - [ ] Event chain can reach LOOP_COMPLETE - [ ] No orphan events that never get handled (warning only) - [ ] Instructions include role definition, process steps, event format, and DON'Ts ## Output Location Save generated presets to: `presets/.yml` For minimal/embedded presets: `presets/minimal/.yml` ## Testing the Preset After generation, test with: ```bash # Dry run to validate config parsing cargo run --bin ralph -- run -c presets/.yml -p "test prompt" --dry-run # Run smoke tests cargo test -p ralph-core smoke_runner ``` Use `/evaluate-presets` for comprehensive validation. ## Example Conversation **User:** I want a preset for doing code reviews with a security focus. **Assistant:** I'll help create a security-focused code review preset. Let me ask a few questions: 1. **Review depth:** Should this be a quick scan or thorough analysis? 2. **Roles needed:** I'm thinking: - Security Analyst (finds vulnerabilities) - Code Reviewer (checks logic/style) - Summarizer (creates final report) Does this cover your needs, or should we add/remove roles? 3. **Iteration:** If issues are found, should the code be fixed, or just reported? **User:** Thorough analysis, those roles work, just report issues don't fix. **Assistant:** Here's the event flow I'm designing: ``` task.start → [Security Analyst] → security.complete ↓ → [Code Reviewer] → review.complete ↓ → [Summarizer] → LOOP_COMPLETE ``` Let me generate the preset... [Generates YAML with three hats following the schema] ## Common Patterns Reference ### Pipeline (Sequential) ``` A → B → C → done ``` Use for: analysis workflows, document processing ### Critic-Actor (Review Loop) ``` Actor → Critic → approved/rejected ↓ rejected → Actor (retry) ``` Use for: code review, quality gates ### Supervisor-Worker ``` Supervisor → worker.task → Worker → work.done → Supervisor ``` Use for: complex task decomposition ### Scientific Method ``` Observe → Hypothesize → Test → confirmed/rejected ↓ rejected → Observe ``` Use for: debugging, investigation