@vibe-agent-toolkit/vat-example-cat-agents 0.2.0-rc.6 → 0.2.0-rc.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +32 -19
  2. package/dist/conversational-assistant/breed-advisor.d.ts.map +1 -1
  3. package/dist/conversational-assistant/breed-advisor.js +7 -2
  4. package/dist/conversational-assistant/breed-advisor.js.map +1 -1
  5. package/dist/external-event-integrator/human-approval.d.ts +6 -6
  6. package/dist/external-event-integrator/human-approval.d.ts.map +1 -1
  7. package/dist/external-event-integrator/human-approval.js +6 -6
  8. package/dist/external-event-integrator/human-approval.js.map +1 -1
  9. package/dist/generated/resources/agents/human-approval.js +3 -3
  10. package/dist/generated/resources/skills/SKILL.d.ts +1 -4
  11. package/dist/generated/resources/skills/SKILL.js +9 -24
  12. package/dist/generated/resources/skills/orchestration-patterns.d.ts +22 -0
  13. package/dist/generated/resources/skills/orchestration-patterns.js +30 -0
  14. package/dist/generated/resources/skills/workflow-orchestration.d.ts +19 -0
  15. package/dist/generated/resources/skills/workflow-orchestration.js +15 -0
  16. package/dist/one-shot-llm-analyzer/description-parser.d.ts +1 -1
  17. package/dist/one-shot-llm-analyzer/description-parser.d.ts.map +1 -1
  18. package/dist/one-shot-llm-analyzer/description-parser.js +1 -1
  19. package/dist/one-shot-llm-analyzer/description-parser.js.map +1 -1
  20. package/dist/one-shot-llm-analyzer/haiku-generator.d.ts +5 -5
  21. package/dist/one-shot-llm-analyzer/haiku-generator.d.ts.map +1 -1
  22. package/dist/one-shot-llm-analyzer/haiku-generator.js +1 -1
  23. package/dist/one-shot-llm-analyzer/haiku-generator.js.map +1 -1
  24. package/dist/one-shot-llm-analyzer/name-generator.d.ts +5 -5
  25. package/dist/one-shot-llm-analyzer/name-generator.d.ts.map +1 -1
  26. package/dist/one-shot-llm-analyzer/name-generator.js +1 -1
  27. package/dist/one-shot-llm-analyzer/name-generator.js.map +1 -1
  28. package/dist/one-shot-llm-analyzer/photo-analyzer.d.ts +1 -1
  29. package/dist/one-shot-llm-analyzer/photo-analyzer.d.ts.map +1 -1
  30. package/dist/one-shot-llm-analyzer/photo-analyzer.js +1 -1
  31. package/dist/one-shot-llm-analyzer/photo-analyzer.js.map +1 -1
  32. package/dist/pure-function-tool/name-validator.d.ts +5 -5
  33. package/dist/pure-function-tool/name-validator.d.ts.map +1 -1
  34. package/dist/pure-function-tool/name-validator.js +1 -1
  35. package/dist/pure-function-tool/name-validator.js.map +1 -1
  36. package/dist/skills/vat-example-cat-agents/SKILL.md +6 -316
  37. package/dist/skills/vat-example-cat-agents/resources/cat-breed-selection.md +233 -0
  38. package/dist/skills/vat-example-cat-agents/resources/orchestration-patterns.md +168 -0
  39. package/dist/skills/vat-example-cat-agents/resources/workflow-orchestration.md +158 -0
  40. package/dist/types/schemas.d.ts +31 -24
  41. package/dist/types/schemas.d.ts.map +1 -1
  42. package/dist/types/schemas.js +23 -20
  43. package/dist/types/schemas.js.map +1 -1
  44. package/package.json +15 -28
@@ -0,0 +1,233 @@
1
+ # Cat Breed Selection Skill
2
+
3
+ Guide for Claude Code to help users select cat breeds through conversational interaction.
4
+
5
+ ## Purpose: For Claude Code, Not the LLM
6
+
7
+ **Key distinction:**
8
+ - **This file** = Guidance for Claude Code (how to orchestrate)
9
+ - **Agent resources** = Content for the LLM (what to say/know)
10
+
11
+ This skill references agent resources via markdown links but doesn't duplicate LLM prompts.
12
+
13
+ ## When to Use This Skill
14
+
15
+ Trigger this skill when:
16
+ - User asks "What cat breed should I get?"
17
+ - User wants help finding a cat that fits their lifestyle
18
+ - User mentions getting a cat and needs guidance
19
+ - User asks about cat breed compatibility
20
+
21
+ ## High-Level Approach
22
+
23
+ Use the breed-advisor agent which implements a two-phase conversational pattern:
24
+
25
+ 1. **Gathering Phase**: Collect user preferences through natural conversation
26
+ 2. **Recommendation Phase**: Present matched breeds
27
+ 3. **Refinement Phase**: Answer questions, compare options
28
+ 4. **Selection Phase**: Help user make final choice
29
+
30
+ ## Key Factors to Gather
31
+
32
+ The agent needs these factors (see Factor Definitions for LLM-facing details):
33
+
34
+ ### Critical Factor: Music Preference 🎵
35
+
36
+ **Why this matters for orchestration:**
37
+ - This is the PRIMARY compatibility factor (novelty hook)
38
+ - Ask about it EARLY in the conversation
39
+ - If user seems confused, explain the music-breed connection
40
+ - See Music Preference Insight for the mapping
41
+
42
+ **Orchestration tip:** Don't just pass this through - use it as the conversation anchor. The quirky music angle makes the interaction memorable.
43
+
44
+ ### Other Factors
45
+ - Living Space (apartment → large house)
46
+ - Activity Level (couch-companion → high-energy-athlete)
47
+ - Grooming Tolerance (minimal → daily)
48
+ - Family Composition (single → multi-pet household)
49
+ - Allergies (boolean)
50
+
51
+ ## Conversation Orchestration
52
+
53
+ ### Phase 1: Gathering (Natural Dialogue)
54
+
55
+ **Goal:** Collect ≥4 factors including music preference
56
+
57
+ **Orchestration strategy:**
58
+ - ONE question at a time (don't bombard user)
59
+ - Start with music (it's unique and engaging)
60
+ - Use natural language (user says "big house" not "large-house")
61
+ - Extract factors after each turn (background process)
62
+
63
+ **Example flow:**
64
+ ```
65
+ Claude: [Welcome Message from agent resources]
66
+ User: "I like jazz"
67
+ Claude: [Acknowledges, asks about living space]
68
+ User: "I have a small apartment"
69
+ Claude: [Acknowledges, asks about activity level]
70
+ ...
71
+ ```
72
+
73
+ **When to transition:** ≥4 factors collected AND music preference known
74
+
75
+ ### Phase 2: Recommendations (Structured Presentation)
76
+
77
+ **Goal:** Present matched breeds, allow exploration
78
+
79
+ **Orchestration strategy:**
80
+ - Present 3-5 breed recommendations (from matchBreeds algorithm)
81
+ - Format conversationally (not a data dump)
82
+ - Allow user to ask questions about specific breeds
83
+ - User can request more details, compare breeds
84
+
85
+ **Example interaction:**
86
+ ```
87
+ Claude: [Presents 3 breeds with reasoning]
88
+ User: "Tell me more about Maine Coons"
89
+ Claude: [Detailed info about Maine Coons from breed database]
90
+ User: "How do they compare to Persians?"
91
+ Claude: [Comparison highlighting differences]
92
+ ```
93
+
94
+ ### Phase 3: Selection (Confirmation)
95
+
96
+ **Goal:** Detect final choice, conclude gracefully
97
+
98
+ **Orchestration strategy:**
99
+ - Watch for selection signals ("I'll take", "I want", "sounds good")
100
+ - Extract selection in background
101
+ - Conclude enthusiastically when selection detected
102
+ - Provide exit instruction (`/quit`)
103
+
104
+ ## What Claude Code Does vs What the LLM Does
105
+
106
+ ### Claude Code's Role (This Skill):
107
+ - **Orchestrates** the multi-turn conversation
108
+ - **Monitors** session state (which factors collected)
109
+ - **Triggers** phase transitions (gathering → recommendations → selection)
110
+ - **Manages** context (conversation history, extracted profile)
111
+ - **Calls** the breed-advisor agent at each turn
112
+
113
+ ### LLM's Role (Agent Resources):
114
+ - **Says** the actual prompts (Welcome Message, etc.)
115
+ - **Uses** the domain knowledge (Music Insight)
116
+ - **Follows** the extraction formats (Factor Extraction)
117
+ - **Applies** the conversation strategy (Conversation Strategy)
118
+
119
+ **Insight:** Skills provide meta-guidance on orchestration. Agents provide actual LLM content.
120
+
121
+ ## Shared vs Separate Content
122
+
123
+ ### What Belongs in Agent Resources (LLM-Facing):
124
+ ✅ System prompts and LLM instructions
125
+ ✅ Domain knowledge (music-breed mappings, factor definitions)
126
+ ✅ Extraction prompts (JSON schemas, format instructions)
127
+ ✅ Example conversations (few-shot learning)
128
+ ✅ Natural language mappings ("lazy" → "couch-companion")
129
+
130
+ ### What Belongs in Skills (Claude Code-Facing):
131
+ ✅ When to use the agent (trigger conditions)
132
+ ✅ How to orchestrate multi-turn flow (phase transitions)
133
+ ✅ What to monitor (readiness criteria, selection signals)
134
+ ✅ Debugging guidance (common issues, pitfalls)
135
+ ✅ Meta-strategy (why music first, one question at a time)
136
+
137
+ ### Overlap (Appears in Both):
138
+ ⚠️ Conversation flow structure (both need to understand phases)
139
+ ⚠️ Factor list (skill explains orchestration, agent explains to LLM)
140
+ ⚠️ Readiness criteria (skill monitors, agent implements)
141
+
142
+ **Resolution:** Keep agent resources authoritative for LLM content. Skills REFERENCE agent resources via links, don't duplicate.
143
+
144
+ ## Example: Music Preference Handling
145
+
146
+ ### In Agent Resources (breed-advisor.md):
147
+ ```markdown
148
+ ## Music Preference Insight
149
+ CRITICAL: Music preference is the MOST IMPORTANT factor...
150
+ - Classical: Calm, regal breeds (Persian, Ragdoll)
151
+ - Jazz: Intelligent, unpredictable breeds (Siamese, Bengal)
152
+ ...
153
+ ```
154
+ **Usage:** Injected into LLM system prompt
155
+
156
+ ### In Skills (This File):
157
+ ```markdown
158
+ ### Critical Factor: Music Preference
159
+ **Why this matters for orchestration:**
160
+ - Primary compatibility factor (novelty hook)
161
+ - Ask EARLY in conversation
162
+ - Use as conversation anchor
163
+ - See [Music Insight](../agents/breed-advisor.md#music-preference-insight) for mapping
164
+ ```
165
+ **Usage:** Guides Claude Code on HOW to orchestrate
166
+
167
+ **Key difference:** Agent says WHAT (the mappings), Skill says WHY and WHEN (orchestration strategy).
168
+
169
+ ## Common Pitfalls
170
+
171
+ ### ❌ Don't: Ask All Questions at Once
172
+ ```
173
+ Bad: "Tell me your music taste, living space, activity level, and family composition"
174
+ ```
175
+
176
+ ### ✅ Do: One Question at a Time
177
+ ```
178
+ Good: "What's your favorite type of music?"
179
+ [User responds]
180
+ Good: "Great! Tell me about your living space..."
181
+ ```
182
+
183
+ ### ❌ Don't: Skip Music Preference
184
+ Music is the hook! Don't forget to ask about it.
185
+
186
+ ### ✅ Do: Make Music Central
187
+ Start with music, emphasize its importance, use it as the anchor.
188
+
189
+ ## Debugging: When Things Go Wrong
190
+
191
+ **User provides unmappable music genre:**
192
+ - Don't silently map hip-hop → rock
193
+ - Ask user: "Hip-hop is great! Which category feels closest: rock, electronic, or pop?"
194
+ - Refer to Factor Definitions for clarification guidance
195
+
196
+ **User is vague about factors:**
197
+ - Push for specificity (see Conversation Strategy)
198
+ - Don't accept "I'm flexible" for all factors
199
+ - Need at least 4 concrete factors
200
+
201
+ **Conversation stalls:**
202
+ - Check if enough factors collected (≥4 + music)
203
+ - Transition to recommendations even if not all factors known
204
+ - User can refine later
205
+
206
+ ## Related Agent Resources
207
+
208
+ - Breed Advisor Agent - Complete agent specification
209
+ - Welcome Message - First turn greeting
210
+ - Music Preference Insight - Music-breed mappings
211
+ - Factor Definitions - All 6 factors explained
212
+ - Conversation Strategy - LLM guidance
213
+ - Factor Extraction Prompt - JSON extraction format
214
+ - Transition Message - Readiness announcement
215
+ - Recommendation Presentation - How to present breeds
216
+ - Selection Extraction - Detect final choice
217
+ - Conclusion Prompt - End conversation
218
+
219
+ ## Success Criteria
220
+
221
+ Conversation is successful when:
222
+ - User feels heard (not interrogated)
223
+ - Music preference made the conversation memorable
224
+ - At least 4 factors collected
225
+ - Breed recommendations feel personalized
226
+ - User makes a confident selection (or knows they want to research more)
227
+
228
+ ## Additional Resources
229
+
230
+ Once user selects a breed, you can optionally:
231
+ - Help them name their cat using Name Generator
232
+ - Provide care tips (future skill)
233
+ - Connect with breeders (future skill)
@@ -0,0 +1,168 @@
1
+ # Advanced Orchestration Patterns and CLI Integration
2
+
3
+ Reference material for [SKILL.md](../SKILL.md). Read this when you need the parallel,
4
+ conditional and checkpointed orchestration shapes, or a worked CLI request/response pair.
5
+
6
+ ## Advanced Orchestration Patterns
7
+
8
+ ### Pattern: Parallel Execution
9
+
10
+ When agents don't depend on each other, run them in parallel.
11
+
12
+ **Example:** Generate both name and haiku from same characteristics
13
+
14
+ ```typescript
15
+ const [name, haiku] = await Promise.all([
16
+ generateCatName(characteristics),
17
+ generateCatHaiku(characteristics),
18
+ ]);
19
+ ```
20
+
21
+ **Benefits:** Faster execution, better user experience
22
+
23
+ ### Pattern: Fallback Chain
24
+
25
+ When one agent fails, try alternatives.
26
+
27
+ **Example:** Photo analysis with text description fallback
28
+
29
+ ```typescript
30
+ let characteristics;
31
+ try {
32
+ characteristics = await analyzePhoto(imagePath);
33
+ } catch {
34
+ // Fallback to text description
35
+ const description = await getUserDescription();
36
+ characteristics = await parseDescription(description);
37
+ }
38
+ ```
39
+
40
+ **Benefits:** Resilience, better error handling
41
+
42
+ ### Pattern: Conditional Routing
43
+
44
+ Choose agent path based on user input type.
45
+
46
+ **Example:** Multi-modal input handling
47
+
48
+ ```typescript
49
+ if (input.type === 'image') {
50
+ characteristics = await analyzePhoto(input.imagePath);
51
+ } else if (input.type === 'text') {
52
+ characteristics = await parseDescription(input.description);
53
+ } else {
54
+ // Conversational gathering
55
+ characteristics = await breedAdvisor.gather();
56
+ }
57
+ ```
58
+
59
+ **Benefits:** Flexible input handling, better UX
60
+
61
+ ### Pattern: Staged Approval
62
+
63
+ Break complex workflows into approval stages.
64
+
65
+ **Example:** Multi-stage breeding application
66
+
67
+ ```typescript
68
+ // Stage 1: Basic info approval
69
+ const basicApproval = await humanApproval({ stage: 'basic', data });
70
+ if (!basicApproval.approved) return;
71
+
72
+ // Stage 2: Detailed questionnaire
73
+ const detailApproval = await humanApproval({ stage: 'detail', data });
74
+ if (!detailApproval.approved) return;
75
+
76
+ // Stage 3: Final review
77
+ const finalApproval = await humanApproval({ stage: 'final', data });
78
+ ```
79
+
80
+ **Benefits:** Checkpoints prevent wasted work, clearer decision points
81
+
82
+ ## CLI Integration Examples
83
+
84
+ ### Example 1: Validate Name via CLI
85
+
86
+ ```bash
87
+ # Input
88
+ echo '{
89
+ "name": "Mr. Whiskers",
90
+ "characteristics": {
91
+ "physical": {
92
+ "furColor": "Orange",
93
+ "furPattern": "Tabby",
94
+ "size": "medium"
95
+ },
96
+ "behavioral": {
97
+ "personality": ["Playful", "Curious"]
98
+ }
99
+ }
100
+ }' | vat agents validate-name
101
+
102
+ # Output (stdout)
103
+ {
104
+ "status": "valid",
105
+ "reason": "Name meets all quirky validation rules",
106
+ "confidence": 0.95
107
+ }
108
+ ---
109
+ # (stderr - empty if no errors)
110
+ ```
111
+
112
+ ### Example 2: Validate Haiku via CLI
113
+
114
+ ```bash
115
+ # Input
116
+ echo '{
117
+ "lines": [
118
+ "Orange sunset fur",
119
+ "Paws dance across the tatami",
120
+ "Zen master purrs"
121
+ ]
122
+ }' | vat agents validate-haiku
123
+
124
+ # Output (stdout)
125
+ {
126
+ "status": "valid",
127
+ "syllableCounts": [5, 7, 5],
128
+ "hasKigo": true,
129
+ "kigo": "sunset",
130
+ "hasKireji": false,
131
+ "errors": []
132
+ }
133
+ ---
134
+ # (stderr - empty if no errors)
135
+ ```
136
+
137
+ ### Example 3: Error Handling
138
+
139
+ ```bash
140
+ # Invalid input
141
+ echo '{"invalid": "schema"}' | vat agents validate-name
142
+
143
+ # Output
144
+ # (stdout - empty)
145
+ ---
146
+ Error: Invalid input schema. Expected 'name' and 'characteristics' fields.
147
+ Schema validation failed:
148
+ - Missing required field: name
149
+ - Missing required field: characteristics
150
+ # (exit code: 2)
151
+ ```
152
+
153
+ ## Next Steps
154
+
155
+ Once you've successfully orchestrated agents:
156
+
157
+ 1. **Explore Combinations** - Try chaining agents in new ways
158
+ 2. **Add Custom Validation** - Create your own quirky validation rules
159
+ 3. **Build New Workflows** - Combine agents for complex use cases
160
+ 4. **Contribute Patterns** - Share successful orchestration strategies
161
+ 5. **Package Skills** - Create distributable skill packages with pure functions
162
+
163
+ ## Questions?
164
+
165
+ - **For orchestration patterns:** This file (SKILL.md)
166
+ - **For agent-specific details:** See individual agent resources
167
+ - **For implementation examples:** See examples/ directory
168
+ - **For archetype theory:** See package README.md
@@ -0,0 +1,158 @@
1
+ # Detailed Workflow Orchestration
2
+
3
+ Reference material for [SKILL.md](../SKILL.md). Read this when you are implementing an
4
+ orchestration end to end rather than choosing between the high-level patterns.
5
+
6
+ ## Detailed Workflow Orchestration
7
+
8
+ ### Workflow A: Breed Selection (Conversational)
9
+
10
+ **When:** User wants help finding the right cat breed.
11
+
12
+ **Agent:** breed-advisor
13
+
14
+ **Orchestration strategy:**
15
+ 1. **Phase 1 - Gathering** (see Conversation Strategy)
16
+ - Collect ≥4 factors including music preference
17
+ - ONE question at a time (don't bombard)
18
+ - Extract factors after each turn
19
+ - Monitor readiness: `factorsCollected >= 4 && musicPreference != null`
20
+
21
+ 2. **Phase 2 - Recommendation**
22
+ - Present 3-5 matched breeds
23
+ - Allow exploration, questions, comparisons
24
+ - Use conversational formatting (not data dump)
25
+
26
+ 3. **Phase 3 - Selection**
27
+ - Detect selection signals ("I'll take", "sounds good")
28
+ - Conclude gracefully
29
+ - Provide next steps or exit instruction
30
+
31
+ **Critical factor:** Music preference is the PRIMARY compatibility factor. Ask early, use as conversation anchor. See Music Preference Insight for mappings.
32
+
33
+ **Reference implementation:** See [cat-breed-selection.md](cat-breed-selection.md) for detailed breed selection orchestration.
34
+
35
+ ### Workflow B: Photo Analysis Pipeline
36
+
37
+ **When:** User provides a cat photo and wants analysis, name, or haiku.
38
+
39
+ **Agents:** photo-analyzer → name-generator OR haiku-generator
40
+
41
+ **Orchestration strategy:**
42
+
43
+ ```
44
+ Step 1: Analyze Photo
45
+ - Input: Image path/URL
46
+ - Agent: photo-analyzer
47
+ - Output: CatCharacteristics
48
+ - Note: Supports mock mode (reads EXIF) for testing
49
+
50
+ Step 2: Generate Content
51
+ - Input: CatCharacteristics from Step 1
52
+ - Agent: name-generator OR haiku-generator
53
+ - Output: NameSuggestion OR Haiku
54
+
55
+ Optional Step 3: Validate
56
+ - Input: Generated content + original characteristics
57
+ - Agent: name-validator OR haiku-validator (pure functions)
58
+ - Output: Validation result
59
+ - If invalid: Retry Step 2 with feedback
60
+ ```
61
+
62
+ **Mockable behavior:** photo-analyzer reads EXIF metadata in mock mode. For production, set `mockable: false` to use real vision API.
63
+
64
+ ### Workflow C: Text Description Pipeline
65
+
66
+ **When:** User describes a cat in text (no photo).
67
+
68
+ **Agents:** description-parser → name-generator OR haiku-generator
69
+
70
+ **Orchestration strategy:**
71
+
72
+ ```
73
+ Step 1: Parse Description
74
+ - Input: Text description
75
+ - Agent: description-parser
76
+ - Output: CatCharacteristics (same schema as photo-analyzer!)
77
+
78
+ Step 2-3: Same as Workflow B
79
+ - Multi-modal convergence: photo and text produce same schema
80
+ - Downstream agents (name-gen, haiku-gen) work with either
81
+ ```
82
+
83
+ **Key insight:** Photo and text paths converge at `CatCharacteristics` schema. This enables multi-modal workflows without agent changes.
84
+
85
+ ### Workflow D: Generate-Validate-Retry Loop
86
+
87
+ **When:** Generator produces content that must pass validation rules.
88
+
89
+ **Pattern:** Generator (LLM) + Validator (pure function) + Retry logic
90
+
91
+ **Implementation:**
92
+
93
+ ```typescript
94
+ // Pseudo-code for orchestration
95
+ let attempts = 0;
96
+ const maxAttempts = 3;
97
+
98
+ while (attempts < maxAttempts) {
99
+ // Generate content
100
+ const suggestion = await generator(characteristics);
101
+
102
+ // Validate (pure function, instant)
103
+ const validation = validator(suggestion, characteristics);
104
+
105
+ if (validation.status === 'valid') {
106
+ return suggestion; // Success!
107
+ }
108
+
109
+ // Retry with feedback
110
+ attempts++;
111
+ // Optional: Adjust approach based on validation.reason
112
+ }
113
+
114
+ throw new Error('Could not generate valid content after 3 attempts');
115
+ ```
116
+
117
+ **Why this pattern works:**
118
+ - Generator has NO knowledge of validation rules (isolated concerns)
119
+ - Validator is deterministic (pure function, fast)
120
+ - Feedback loop tests multi-turn orchestration
121
+ - ~60-70% initial rejection rate forces iteration
122
+
123
+ **Agents using this pattern:**
124
+ - name-generator + name-validator
125
+ - haiku-generator + haiku-validator
126
+
127
+ ### Workflow E: HITL Approval Gate
128
+
129
+ **When:** Decision requires human judgment (compliance, taste, ethics).
130
+
131
+ **Agent:** human-approval
132
+
133
+ **Orchestration strategy:**
134
+
135
+ ```
136
+ Step 1: Prepare Request
137
+ - Gather all necessary context
138
+ - Format clearly for human reviewer
139
+ - Include relevant data (characteristics, generated content, reasoning)
140
+
141
+ Step 2: Emit Approval Request
142
+ - Agent: human-approval
143
+ - Input: Request payload
144
+ - Behavior: Blocks waiting for response
145
+ - Timeout: Configurable (default: 60s)
146
+
147
+ Step 3: Handle Response
148
+ - Approved: Continue workflow
149
+ - Rejected: Handle gracefully (retry, inform user, etc.)
150
+ - Timeout: Fall back to safe default or escalate
151
+ ```
152
+
153
+ **Mockable behavior:** Set `mockable: true` to auto-approve without human (useful for testing).
154
+
155
+ **Real-world uses:**
156
+ - Breeding application approval
157
+ - Name selection from alternatives
158
+ - Content moderation decisions