원클릭으로
narrative-architect
Transform a TalkBrief into a structured SlideOutline through collaborative arc selection and autonomous outline generation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Transform a TalkBrief into a structured SlideOutline through collaborative arc selection and autonomous outline generation.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Produce a labeled figure with PERFECT text — render a label-free image locally (or take an external image) then overlay leader lines and typeset labels programmatically from vision-derived anchor coordinates. Text is correct by construction; only pointer placement is reviewed.
Ask which image models fit a set of tasks — get evidence-based recommendations with per-image costs, which external services to pay for, and which local models to install (with disk/RAM/licence guidance). Reads the live model catalog and probes what is actually available on this machine.
Check mflux (MLX) availability, per-family runtime presence, cached weights, and report readiness status.
Top-level image orchestrator. Routes all slide image generation to the appropriate skill (jack-tar-ollama:image, jack-tar-ollama:icon, jack-tar-ollama:pattern, jack-tar-ollama:diagram, jack-tar-cloud:image, jack-tar-cloud:icon, render_chart). Produces ImageManifest and ChartManifest. Also reads strategy-map.json to determine per-slide rendering approach (full_render, backdrop_render, composed).
Meta-verify — discover all jack-tar engine plugins, call each verify, report aggregate pipeline capability and discipline-hook readiness.
Generate an image locally on Apple Silicon via the mflux CLI (MLX). Flag-compatible with jack-tar-ollama's /image — a $0 local tier, no API keys needed.
| name | narrative-architect |
| description | Transform a TalkBrief into a structured SlideOutline through collaborative arc selection and autonomous outline generation. |
| argument-hint | ["--deck-dir PATH"] |
| allowed-tools | Bash(python *), Read, Glob, Write |
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 is optional. When present (produced by slide-stylist), its layout and pacing cues are used. When absent, narrative-architect runs in standalone mode (see below), synthesising a tone-keyed default style.Invoked by the Deck Conductor after slide-stylist. Can also be invoked directly:
/narrative-architect
/narrative-architect --deck-dir ./tmp/deck
The generators (narrative-architect → speaker-notes-writer) can run from a TalkBrief alone, skipping brand-manager and slide-stylist — useful for outline-only drafts and self-presenting, visual-light decks.
from src.narrative_standalone import generate_outline_from_brief_only
from src.content_validation import generate_speaker_notes_from_outline
outline = generate_outline_from_brief_only(deck_dir) # reads talk-brief.json
notes = generate_speaker_notes_from_outline(outline, tone="technical")
When style-guide.json is absent, generate_outline_from_brief_only synthesises a tone-keyed default before building the outline (technical → dense/90s, executive → spacious/120s, narrative → moderate/75s; other tones fall back to narrative).
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)
If the speaker is shooting for a memorable opener or closing slide, ask: "Would you like this slide rendered at 4K (Nano Banana Pro, ~$0.24) or 2K?" Annotate the slide with a resolution field in the SlideOutline if so — the strategy-map step will carry it through to the StrategyMap entry. Default 1K unchanged.
If the talk is brand-led (product launch, company keynote, vendor pitch) or has slides where exact brand-color match is critical (logos, product shots), ask: "For [slide N], should brand colors be rendered hex-exact (brand_fidelity: \"exact\" → Recraft V4 raster, ~2× cost at 4K) or close-enough (default → FLUX or Nano Banana)?" Annotate brand_fidelity on the SlideOutline entry if so — the strategy-map step will carry it through. Default "none" unchanged.
If the talk is research-flavoured — a paper readout, a thesis defence, a conference deep-dive on an ML architecture, a tutorial on an algorithm — some slides will be figures, not narrative beats. They carry one or more of:
Figure 3: ..., Fig. 2.) repeated from the paper$$ ... $$, \frac, \sum, \alpha, \theta, ...)[12]) or "et al." author refs in the bodyAlgorithm N heading or pseudocode blockFor those slides, the strategy_classifier.py heuristic (paperbanana E1)
will set strategy: "academic_figure" automatically in the StrategyMap,
and the imagegen-bridge will dispatch to the paperbanana CLI via
subprocess (paperbanana generate --input ... --caption ... --image-model gemini-3.1-flash-image ...) for publication-grade rendering
when paperbanana is installed (falls back to cloud Flash 1K otherwise —
see /jack-tar-deckhand:verify for live availability and install hints).
What this means for you (narrative-architect):
visual_direction prose that names the academic subject
literally ("Figure 3: encoder-decoder architecture with 4 attention
heads"). The literal caption keywords are what the classifier matches.body_points rather than
paraphrasing it into business language. [12] and "et al." are signal,
not noise.bar_chart or
line_chart for a slide that's actually Figure 3 of a paper would
bypass paperbanana and produce a generic chart instead of the
paper-quality figure the speaker wants.If paperbanana is not installed on the speaker's machine, the bridge
falls back to cloud generation with academic-figure-aware prompting. The
slide will still render; it just won't be publication-tier. The
/jack-tar-deckhand:verify skill reports whether paperbanana is reachable
before the deck builds — if the speaker cares about publication tier and
the verify check is NOT_FOUND, point them at the install command
(pip install 'paperbanana[google]' — full guide in
docs/architecture/paperbanana-integration-v2.md §6).
Source-context quality matters. Paperbanana's Retriever + Planner
agents work from the source_context field, which the dispatch helper
(paperbanana_dispatch._build_source_context_from_slide) synthesises
from the slide's methodology_context (operator pre-annotation, best),
speaker_notes (when ≥200 chars, good), or body_points + visual_direction joined into prose (last resort). Thin slides
(headline-only) produce thinner figures. For best academic_figure
output, write substantive speaker_notes or explicit
methodology_context on these slides.
guide (see docs/architecture/paperbanana-integration.md).