From jack-tar-deckhand
Transform a TalkBrief into a structured SlideOutline through collaborative arc selection and autonomous outline generation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jack-tar-deckhand:narrative-architectThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Transform a TalkBrief into a structured SlideOutline. Works in two stages: collaborative arc selection with the Speaker, then autonomous outline generation.
Transform a TalkBrief into a structured SlideOutline. Works in two stages: collaborative arc selection with the Speaker, then autonomous outline generation.
./tmp/deck/talk-brief.json must exist./tmp/deck/style-guide.json must exist (produced by slide-stylist)Invoked by the Deck Conductor after slide-stylist. Can also be invoked directly:
/narrative-architect
/narrative-architect --deck-dir ./tmp/deck
Read ./tmp/deck/talk-brief.json for topic, audience, duration, tone, key takeaways, and data sources.
Based on these signals, select 2-3 narrative arc options that genuinely fit this specific talk. Do NOT present all 16 arcs from the catalogue -- curate down to the best matches.
For each proposed arc, present:
"For a {duration}-minute {tone} talk on {topic}, here are the narrative structures I'd recommend:
- {Arc Name} -- {one-line emotional description}
- Best for: {when this works}
- Your talk would flow: {beat1} -> {beat2} -> {beat3} -> ... -> {final beat}
- Slide count: ~{count} slides at {pacing} pacing
- {Arc Name} -- {one-line emotional description}
- Best for: {when this works}
- Your talk would flow: {beat1} -> {beat2} -> ...
- Slide count: ~{count} slides
- {Arc Name} -- {one-line emotional description}
- Best for: {when this works}
- Your talk would flow: {beat1} -> {beat2} -> ...
- Slide count: ~{count} slides
My recommendation: {Arc Name} because {one-sentence rationale connecting to this specific talk}.
Which structure speaks to you? (Or describe what you're looking for)"
Wait for the Speaker to select or describe their preference. If they describe something custom, map it to the closest arc or propose a hybrid.
These are the established structures to draw from (Research #08):
| Arc | Best For | Pacing |
|---|---|---|
| Situation-Complication-Resolution | Executive briefings, problem-solving | Standard |
| Monroe's Motivated Sequence | Persuasion, calls to action | Standard |
| Hero's Journey | Transformation stories, keynotes | Visual-heavy |
| Problem-Solution-Impact | Product talks, case studies | Standard |
| Problem-Demo-Impact | Technical demos, tool showcases | Content-heavy |
| What-So What-Now What | Data presentations, research findings | Content-heavy |
| Hook-Thesis-Body-Callback-CTA | Persuasion talks, thought leadership | Standard |
| Story-Point-Application | Rule of Three, teaching talks | Standard |
| Pecha Kucha | 6:40 fixed format, 20 slides x 20 seconds | Rapid-fire |
| Ignite | 5 min fixed, 20 slides x 15 seconds | Rapid-fire |
| Lightning Talk | 5-10 min, minimal slides | Standard |
| Lessig Method | Rapid visual reinforcement, advocacy | Rapid-fire |
| Takahashi Method | Japanese big-text style, storytelling | Rapid-fire |
| 10/20/30 Rule | Startup pitches, 10 slides | Content-heavy |
| Duarte Sparkline | Long keynotes, What Is vs What Could Be | Visual-heavy |
| Modular Deck | Flexible/reusable, workshop-style | Standard |
Once the Speaker selects an arc, produce the full SlideOutline. This is expert craft -- do NOT seek per-slide approval.
What you decide autonomously:
Pacing guidelines:
Structural overhead added to base count:
If preferences.slide_count_hint is provided, use it as a soft target (within 20%) but override if the arc demands it.
Read the StyleGuide at ./tmp/deck/style-guide.json for:
layout_template exists in layout.templates)mood, color_direction, and style_modifiers into visual_direction prose)PLUGIN_ROOT=$(python3 -c "
from pathlib import Path
import sys, os
if os.environ.get('JACK_TAR_DECKHAND_ROOT'):
print(os.environ['JACK_TAR_DECKHAND_ROOT']); sys.exit()
home = Path.home()
for base in [home / '.claude' / 'plugins' / 'cache']:
for p in base.rglob('jack-tar-deckhand/.claude-plugin/plugin.json'):
print(str(p.parent.parent)); sys.exit()
dev = Path.cwd() / 'plugins' / 'jack-tar-deckhand'
if dev.exists():
print(str(dev)); sys.exit()
print('NOT_FOUND')
" 2>/dev/null)
if [ -z "$PLUGIN_ROOT" ] || [ "$PLUGIN_ROOT" = "NOT_FOUND" ]; then echo "ERROR: jack-tar-deckhand not found" && exit 1; fi
Validate the outline before writing:
PYTHONPATH="$PLUGIN_ROOT" python3 -c "
import json
from src.content_validation import validate_outline_schema, check_outline_layout_references
outline = json.load(open('./tmp/deck/outline.json'))
style_guide = json.load(open('./tmp/deck/style-guide.json'))
schema_errors = validate_outline_schema(outline)
ref_issues = check_outline_layout_references(outline, style_guide)
for e in schema_errors: print(f'SCHEMA: {e}')
for e in ref_issues: print(f'REF: {e}')
if not schema_errors and not ref_issues:
print('SlideOutline validates successfully')
"
Write the validated SlideOutline to ./tmp/deck/outline.json.
./tmp/deck/outline.json (SlideOutline contract)
npx claudepluginhub stevegjones/jack-tar-deckhand --plugin jack-tar-deckhandProvides a checklist for code reviews covering functionality, security, performance, maintainability, tests, and quality. Use for pull requests, audits, team standards, and developer training.