name: review-story
description: >
Multi-provider creative writing critique for stories, screenplays, and narratives.
Analyzes structural, emotional, craft, and persona dimensions. Integrates with
Horus's Theory of Mind for voice consistency validation.
allowed-tools: [Bash, Read, Write, Task]
triggers:
- review story
- critique story
- story review
- review screenplay
- critique screenplay
- review narrative
- review my story
- review draft
- story feedback
- writing critique
metadata:
short-description: Multi-provider creative writing critique with ToM alignment
author: "Horus"
version: "0.1.0"
provides:
- review-story
composes: [, task-monitor]
review-story
Multi-provider creative writing critique for Horus persona. Analyzes stories across four dimensions and returns structured feedback for iterative refinement.
Critique Dimensions
| Dimension |
What It Analyzes |
Weight |
| Structural |
Plot, pacing, character arcs, narrative tension, scene transitions |
30% |
| Emotional |
Intended vs achieved emotion, ToM pattern alignment, resonance |
25% |
| Craft |
Prose quality, dialogue, sensory details, show-don't-tell |
25% |
| Persona |
Horus voice consistency, Warmaster tone, tactical precision |
20% |
Supported Providers
| Provider |
CLI |
Default Model |
Strength |
anthropic |
claude |
sonnet |
Nuanced character/emotional analysis |
openai |
codex |
gpt-5.2-codex |
High-reasoning structural critique |
google |
gemini |
gemini-2.5-flash |
Fast iteration feedback |
github |
copilot |
claude-sonnet-4.5 |
Free tier via Copilot |
Quick Start
cd .pi/skills/review-story
# Single provider review
./run.sh review draft.md --provider claude --emotion rage
# Multi-provider review (recommended for final drafts)
./run.sh review draft.md --providers claude,codex --emotion sorrow
# Focus on specific dimensions
./run.sh review draft.md --provider claude --focus structural,emotional
# Review with Horus persona validation
./run.sh review draft.md --provider claude --validate-persona
Commands
review - Critique a Story
./run.sh review <story_file> [OPTIONS]
Options:
--provider TEXT Single provider (claude, codex, gemini, copilot)
--providers TEXT Comma-separated list for multi-provider review
--emotion TEXT Intended emotion (rage, sorrow, camaraderie, regret)
--focus TEXT Dimensions to focus on (structural, emotional, craft, persona)
--validate-persona Validate against Horus voice patterns
--output-dir PATH Output directory for critique files
--format TEXT Output format (json, markdown)
compare - Compare Multiple Drafts
./run.sh compare draft_v1.md draft_v2.md --dimension emotional
synthesize - Combine Multi-Provider Critiques
./run.sh synthesize critique_claude.json critique_codex.json --output synthesis.md
Output Format
{
"provider": "claude",
"model": "claude-sonnet-4-20250514",
"story_file": "draft_v1.md",
"intended_emotion": "rage",
"structural": {
"score": 7,
"issues": [
{"location": "middle", "issue": "Pacing drags in act 2", "severity": "medium"},
{"location": "climax", "issue": "Needs more foreshadowing", "severity": "high"}
],
"strengths": ["Strong opening hook", "Clear character motivation"],
"suggestions": ["Add tension beat at paragraph 15", "Foreshadow betrayal earlier"]
},
"emotional": {
"intended": "rage",
"achieved": "frustration",
"alignment_score": 0.6,
"tom_pattern": "DDL_intensity",
"issues": ["Build too gradual - DDL rage is explosive after slow burn"],
"suggestions": ["Amplify with longer setup, then sudden release"]
},
"craft": {
"prose_score": 8,
"dialogue_score": 6,
"sensory_score": 7,
"issues": ["Dialogue feels too modern for Warmaster voice"],
"suggestions": ["Add more tactical metaphors", "Replace contractions"]
},
"persona": {
"horus_voice_score": 0.7,
"issues": ["Too much explanation, not enough contempt", "Missing resentment undertones"],
"tactical_mask_detected": "Tywin",
"suggestions": ["Add bitter aside about imprisonment", "More sardonic observations"]
},
"overall": {
"score": 7.2,
"ready_for_next_draft": true,
"priority_fixes": ["Emotional buildup", "Persona voice"]
},
"taxonomy": {
"bridge_tags": ["Corruption", "Loyalty"],
"collection_tags": {
"function": "Confrontation",
"domain": "Primarch",
"thematic_weight": "Tragedy"
},
"confidence": 0.75,
"worth_remembering": true
}
}
Federated Taxonomy Integration
All review-story outputs include taxonomy metadata for multi-hop graph traversal:
Bridge Attributes (Cross-Collection Connectors)
| Bridge |
Story Signals |
Enables Connection To |
| Precision |
Calculated strategy, methodical planning |
Technical optimization lessons |
| Resilience |
Endurance, withstanding adversity |
Error handling patterns |
| Fragility |
Betrayal aftermath, shattered trust |
Technical debt warnings |
| Corruption |
Warp influence, moral compromise |
Silent failure bugs |
| Loyalty |
Oaths, brotherhood, honor |
Security compliance lessons |
| Stealth |
Subterfuge, hidden agendas |
Evasion techniques |
Multi-Hop Example
[Story Critique] [Code Lesson]
bridge_tags: ["Resilience"] → bridge_tags: ["Resilience"]
"Dorn's endurance at Terra" "Fault-tolerant retry logic"
↘ ↙
[Query: "Endurance patterns"]
↓
Both retrieved via shared
"Resilience" bridge attribute
Integration with create-story
The create-story skill calls review-story between drafts:
DRAFT 1
↓
/review-story draft_1.md --provider claude --emotion rage
↓
[Synthesize critique into actionable notes]
↓
DRAFT 2 (addresses structural + emotional issues)
↓
/review-story draft_2.md --providers claude,codex --focus craft,persona
↓
FINAL DRAFT
Horus Voice Patterns (Persona Validation)
When --validate-persona is enabled, the critique checks against:
Tactical Masks (from HORUS_PERSONA.md)
| Mask |
Source |
Trait |
Detection Signals |
| Resentment |
George Carlin |
Systematic deconstruction |
Cynical asides, "the system" references |
| Authority |
Tywin Lannister |
Cold dismissal, legacy focus |
Commands, legacy mentions, dismissive tone |
| Pacing |
Dave Chappelle |
Silence and revelation |
Strategic pauses, buildup-payoff patterns |
| Contempt |
Stewie Griffin |
High-intellect insults |
Technical elitism, "primitive" references |
Emotional Patterns (from HORUS_TOM_SYSTEM.md)
| Pattern |
Model |
Detection |
| Camaraderie |
Luna Wolves / Stilgar |
Tribal loyalty, "brother" references |
| Regret |
Carlin cynicism + The Wound |
Self-deprecation, Davin references |
| Sorrow |
Maximus / Katsumoto |
Stoic grief, honor-bound dignity |
| Anger |
Michael Corleone |
Cold intensity, family defense |
| Rage |
Daniel Plainview |
Manic precision, competitive fury |
Example Session
$ ./run.sh review draft_v1.md --provider claude --emotion rage --validate-persona
[REVIEW] Analyzing draft_v1.md...
[REVIEW] Provider: claude (claude-sonnet-4-20250514)
[REVIEW] Intended emotion: rage
[STRUCTURAL] Score: 7/10
⚠ Middle section pacing drags (lines 45-78)
⚠ Climax needs stronger foreshadowing
✓ Strong opening hook
✓ Clear character motivation
[EMOTIONAL] Alignment: 60%
Intended: rage → Achieved: frustration
Pattern: DDL_intensity not fully realized
→ Suggestion: Longer slow burn before explosive release
[CRAFT] Score: 7.5/10
Prose: 8 | Dialogue: 6 | Sensory: 7
⚠ Dialogue too modern for Warmaster
→ Replace contractions, add tactical metaphors
[PERSONA] Horus Voice: 70%
Detected mask: Tywin (Authority)
⚠ Missing resentment undertones
⚠ Too explanatory, not enough contempt
→ Add bitter aside about imprisonment
[OVERALL] 7.2/10 - Ready for Draft 2
Priority fixes: Emotional buildup, Persona voice
Output: review_output/claude_draft_v1.json
Environment
| Variable |
Purpose |
ANTHROPIC_API_KEY |
For Claude provider |
OPENAI_API_KEY |
For Codex/GPT provider |
GOOGLE_API_KEY |
For Gemini provider |
REVIEW_STORY_OUTPUT_DIR |
Default output directory |
Dependencies
- Python 3.11+
- Access to at least one provider (claude, codex, gemini, or copilot)
- Optional: Access to Horus persona files for voice validation
Memory Integration
The memory_integration.py module provides automatic memory recall and learning:
Pre-hook: recall_prior_critiques(title_or_genre, k=5)
- Recalls past story critiques from memory before starting a new review
- Surfaces recurring issues, patterns, and what improved between drafts
- Uses taxonomy bridge tags for cross-collection recall
Post-hook: learn_critique(title, genre, provider, findings, strengths, weaknesses, score)
- Learns critique findings to memory after review completion
- Stores: critique summary, individual strengths, individual weaknesses, full findings
- Tags:
["story_review", genre] + bridge_tags
- Bridge keywords: Precision (craft, prose, pacing), Resilience (arc, resolution, character growth), Fragility (plot hole, pacing issue, weak dialogue), Stealth (subtext, theme, symbolism)
Graceful Degradation
- All memory operations use try/except ImportError
- If
common.memory_client is unavailable, hooks are silently skipped
- Taxonomy loaded dynamically via
importlib.util to avoid name conflicts
Related Skills
| Skill |
Relationship |
/create-story |
Calls review-story between drafts |
/review-code |
Sister skill for code review |
/review-paper |
Sister skill for academic papers (proposed) |
/memory |
Stores successful critique patterns |
1---2name: review-story-33description: Multi-provider creative writing critique for Horus persona. Analyzes stories across four dimensions and returns structured feedback for iterative refinement.4---56---7name: review-story8description: >9 Multi-provider creative writing critique for stories, screenplays, and narratives.10 Analyzes structural, emotional, craft, and persona dimensions. Integrates with11 Horus's Theory of Mind for voice consistency validation.12allowed-tools: [Bash, Read, Write, Task]13triggers:14 - review story15 - critique story16 - story review17 - review screenplay18 - critique screenplay19 - review narrative20 - review my story21 - review draft22 - story feedback23 - writing critique24metadata:25 short-description: Multi-provider creative writing critique with ToM alignment26 author: "Horus"27 version: "0.1.0"2829provides:30 - review-story31composes: [, task-monitor]32---3334# review-story3536Multi-provider creative writing critique for Horus persona. Analyzes stories across four dimensions and returns structured feedback for iterative refinement.3738## Critique Dimensions3940| Dimension | What It Analyzes | Weight |41|-----------|------------------|--------|42| **Structural** | Plot, pacing, character arcs, narrative tension, scene transitions | 30% |43| **Emotional** | Intended vs achieved emotion, ToM pattern alignment, resonance | 25% |44| **Craft** | Prose quality, dialogue, sensory details, show-don't-tell | 25% |45| **Persona** | Horus voice consistency, Warmaster tone, tactical precision | 20% |4647## Supported Providers4849| Provider | CLI | Default Model | Strength |50|----------|-----|---------------|----------|51| `anthropic` | `claude` | `sonnet` | Nuanced character/emotional analysis |52| `openai` | `codex` | `gpt-5.2-codex` | High-reasoning structural critique |53| `google` | `gemini` | `gemini-2.5-flash` | Fast iteration feedback |54| `github` | `copilot` | `claude-sonnet-4.5` | Free tier via Copilot |5556## Quick Start5758```bash59cd .pi/skills/review-story6061# Single provider review62./run.sh review draft.md --provider claude --emotion rage6364# Multi-provider review (recommended for final drafts)65./run.sh review draft.md --providers claude,codex --emotion sorrow6667# Focus on specific dimensions68./run.sh review draft.md --provider claude --focus structural,emotional6970# Review with Horus persona validation71./run.sh review draft.md --provider claude --validate-persona72```7374## Commands7576### `review` - Critique a Story7778```bash79./run.sh review <story_file> [OPTIONS]8081Options:82 --provider TEXT Single provider (claude, codex, gemini, copilot)83 --providers TEXT Comma-separated list for multi-provider review84 --emotion TEXT Intended emotion (rage, sorrow, camaraderie, regret)85 --focus TEXT Dimensions to focus on (structural, emotional, craft, persona)86 --validate-persona Validate against Horus voice patterns87 --output-dir PATH Output directory for critique files88 --format TEXT Output format (json, markdown)89```9091### `compare` - Compare Multiple Drafts9293```bash94./run.sh compare draft_v1.md draft_v2.md --dimension emotional95```9697### `synthesize` - Combine Multi-Provider Critiques9899```bash100./run.sh synthesize critique_claude.json critique_codex.json --output synthesis.md101```102103## Output Format104105```json106{107 "provider": "claude",108 "model": "claude-sonnet-4-20250514",109 "story_file": "draft_v1.md",110 "intended_emotion": "rage",111112 "structural": {113 "score": 7,114 "issues": [115 {"location": "middle", "issue": "Pacing drags in act 2", "severity": "medium"},116 {"location": "climax", "issue": "Needs more foreshadowing", "severity": "high"}117 ],118 "strengths": ["Strong opening hook", "Clear character motivation"],119 "suggestions": ["Add tension beat at paragraph 15", "Foreshadow betrayal earlier"]120 },121122 "emotional": {123 "intended": "rage",124 "achieved": "frustration",125 "alignment_score": 0.6,126 "tom_pattern": "DDL_intensity",127 "issues": ["Build too gradual - DDL rage is explosive after slow burn"],128 "suggestions": ["Amplify with longer setup, then sudden release"]129 },130131 "craft": {132 "prose_score": 8,133 "dialogue_score": 6,134 "sensory_score": 7,135 "issues": ["Dialogue feels too modern for Warmaster voice"],136 "suggestions": ["Add more tactical metaphors", "Replace contractions"]137 },138139 "persona": {140 "horus_voice_score": 0.7,141 "issues": ["Too much explanation, not enough contempt", "Missing resentment undertones"],142 "tactical_mask_detected": "Tywin",143 "suggestions": ["Add bitter aside about imprisonment", "More sardonic observations"]144 },145146 "overall": {147 "score": 7.2,148 "ready_for_next_draft": true,149 "priority_fixes": ["Emotional buildup", "Persona voice"]150 },151152 "taxonomy": {153 "bridge_tags": ["Corruption", "Loyalty"],154 "collection_tags": {155 "function": "Confrontation",156 "domain": "Primarch",157 "thematic_weight": "Tragedy"158 },159 "confidence": 0.75,160 "worth_remembering": true161 }162}163```164165## Federated Taxonomy Integration166167All review-story outputs include taxonomy metadata for **multi-hop graph traversal**:168169### Bridge Attributes (Cross-Collection Connectors)170171| Bridge | Story Signals | Enables Connection To |172|--------|---------------|----------------------|173| **Precision** | Calculated strategy, methodical planning | Technical optimization lessons |174| **Resilience** | Endurance, withstanding adversity | Error handling patterns |175| **Fragility** | Betrayal aftermath, shattered trust | Technical debt warnings |176| **Corruption** | Warp influence, moral compromise | Silent failure bugs |177| **Loyalty** | Oaths, brotherhood, honor | Security compliance lessons |178| **Stealth** | Subterfuge, hidden agendas | Evasion techniques |179180### Multi-Hop Example181182```183[Story Critique] [Code Lesson]184bridge_tags: ["Resilience"] → bridge_tags: ["Resilience"]185"Dorn's endurance at Terra" "Fault-tolerant retry logic"186 ↘ ↙187 [Query: "Endurance patterns"]188 ↓189 Both retrieved via shared190 "Resilience" bridge attribute191```192193## Integration with create-story194195The `create-story` skill calls `review-story` between drafts:196197```198DRAFT 1199 ↓200/review-story draft_1.md --provider claude --emotion rage201 ↓202[Synthesize critique into actionable notes]203 ↓204DRAFT 2 (addresses structural + emotional issues)205 ↓206/review-story draft_2.md --providers claude,codex --focus craft,persona207 ↓208FINAL DRAFT209```210211## Horus Voice Patterns (Persona Validation)212213When `--validate-persona` is enabled, the critique checks against:214215### Tactical Masks (from HORUS_PERSONA.md)216217| Mask | Source | Trait | Detection Signals |218|------|--------|-------|-------------------|219| **Resentment** | George Carlin | Systematic deconstruction | Cynical asides, "the system" references |220| **Authority** | Tywin Lannister | Cold dismissal, legacy focus | Commands, legacy mentions, dismissive tone |221| **Pacing** | Dave Chappelle | Silence and revelation | Strategic pauses, buildup-payoff patterns |222| **Contempt** | Stewie Griffin | High-intellect insults | Technical elitism, "primitive" references |223224### Emotional Patterns (from HORUS_TOM_SYSTEM.md)225226| Pattern | Model | Detection |227|---------|-------|-----------|228| **Camaraderie** | Luna Wolves / Stilgar | Tribal loyalty, "brother" references |229| **Regret** | Carlin cynicism + The Wound | Self-deprecation, Davin references |230| **Sorrow** | Maximus / Katsumoto | Stoic grief, honor-bound dignity |231| **Anger** | Michael Corleone | Cold intensity, family defense |232| **Rage** | Daniel Plainview | Manic precision, competitive fury |233234## Example Session235236```237$ ./run.sh review draft_v1.md --provider claude --emotion rage --validate-persona238239[REVIEW] Analyzing draft_v1.md...240[REVIEW] Provider: claude (claude-sonnet-4-20250514)241[REVIEW] Intended emotion: rage242243[STRUCTURAL] Score: 7/10244 ⚠ Middle section pacing drags (lines 45-78)245 ⚠ Climax needs stronger foreshadowing246 ✓ Strong opening hook247 ✓ Clear character motivation248249[EMOTIONAL] Alignment: 60%250 Intended: rage → Achieved: frustration251 Pattern: DDL_intensity not fully realized252 → Suggestion: Longer slow burn before explosive release253254[CRAFT] Score: 7.5/10255 Prose: 8 | Dialogue: 6 | Sensory: 7256 ⚠ Dialogue too modern for Warmaster257 → Replace contractions, add tactical metaphors258259[PERSONA] Horus Voice: 70%260 Detected mask: Tywin (Authority)261 ⚠ Missing resentment undertones262 ⚠ Too explanatory, not enough contempt263 → Add bitter aside about imprisonment264265[OVERALL] 7.2/10 - Ready for Draft 2266 Priority fixes: Emotional buildup, Persona voice267268Output: review_output/claude_draft_v1.json269```270271## Environment272273| Variable | Purpose |274|----------|---------|275| `ANTHROPIC_API_KEY` | For Claude provider |276| `OPENAI_API_KEY` | For Codex/GPT provider |277| `GOOGLE_API_KEY` | For Gemini provider |278| `REVIEW_STORY_OUTPUT_DIR` | Default output directory |279280## Dependencies281282- Python 3.11+283- Access to at least one provider (claude, codex, gemini, or copilot)284- Optional: Access to Horus persona files for voice validation285286## Memory Integration287288The `memory_integration.py` module provides automatic memory recall and learning:289290### Pre-hook: `recall_prior_critiques(title_or_genre, k=5)`291- Recalls past story critiques from memory before starting a new review292- Surfaces recurring issues, patterns, and what improved between drafts293- Uses taxonomy bridge tags for cross-collection recall294295### Post-hook: `learn_critique(title, genre, provider, findings, strengths, weaknesses, score)`296- Learns critique findings to memory after review completion297- Stores: critique summary, individual strengths, individual weaknesses, full findings298- Tags: `["story_review", genre] + bridge_tags`299- Bridge keywords: Precision (craft, prose, pacing), Resilience (arc, resolution, character growth), Fragility (plot hole, pacing issue, weak dialogue), Stealth (subtext, theme, symbolism)300301### Graceful Degradation302- All memory operations use try/except ImportError303- If `common.memory_client` is unavailable, hooks are silently skipped304- Taxonomy loaded dynamically via `importlib.util` to avoid name conflicts305306## Related Skills307308| Skill | Relationship |309|-------|--------------|310| `/create-story` | Calls review-story between drafts |311| `/review-code` | Sister skill for code review |312| `/review-paper` | Sister skill for academic papers (proposed) |313| `/memory` | Stores successful critique patterns |