Browser
create-hat-collection
Generates new Ralph hat collection presets
---
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
# <Preset Name>
# Pattern: <Architecture Pattern>
# <One-line description>
#
# Usage:
# ralph run --config presets/<name>.yml --prompt "<example prompt>"
event_loop:
starting_event: "<first.event>" # Ralph publishes this
hats:
hat_key:
name: "<Emoji> Display Name"
description: "<Short description of the hat's purpose>"
triggers: ["event.triggers.this"]
publishes: ["event.this.publishes", "alternate.event"]
default_publishes: "event.this.publishes"
instructions: |
## <HAT NAME> MODE
<Clear role definition - what this hat does>
### Process
1. <Step one>
2. <Step two>
3. Publish appropriate event
### Event Format
```
<event topic="event.name">
key: value
</event>
```
### DON'T
- <Common mistake to avoid>
- <Another mistake>
```
## 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
```
<phase>.ready / <phase>.done # Phase transitions
<thing>.approved / <thing>.rejected # Review gates
<noun>.found / <noun>.missing # Discovery events
<action>.request / <action>.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/<name>.yml`
For minimal/embedded presets: `presets/minimal/<name>.yml`
## Testing the Preset
After generation, test with:
```bash
# Dry run to validate config parsing
cargo run --bin ralph -- run -c presets/<name>.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
browser
By
Comments
Sign in to leave a comment