一键导入
slide-stylist
Derive a complete StyleGuide through collaborative design exploration with the Speaker, working within brand constraints when a BrandProfile exists.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Derive a complete StyleGuide through collaborative design exploration with the Speaker, working within brand constraints when a BrandProfile exists.
用 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 | slide-stylist |
| description | Derive a complete StyleGuide through collaborative design exploration with the Speaker, working within brand constraints when a BrandProfile exists. |
| argument-hint | ["--deck-dir PATH"] |
| allowed-tools | Bash(python *), Read, Glob, Write |
Derive a complete StyleGuide (palette, typography, layout templates, image style tokens) through collaborative exploration with the Speaker.
./tmp/deck/talk-brief.json must exist./tmp/deck/brand-profile.json may exist (produced by brand-manager)Invoked by the Deck Conductor after brand-manager. Can also be invoked directly:
/slide-stylist
/slide-stylist --deck-dir ./tmp/deck
Read ./tmp/deck/talk-brief.json for topic, audience, tone, and preferences.
Read ./tmp/deck/brand-profile.json if it exists for brand constraints.
Determine the design mode:
With strict brand: Skip -- use BrandProfile palette directly. Tell the Speaker:
"Using your brand palette (strict compliance). Primary: #{primary}, Secondary: #{secondary}."
With guided brand: Propose 2-3 variations:
"Your brand palette starts with Primary: #{primary}. Here are three accent directions:
- Split-complementary warm: Accent #{accent1} -- energetic, draws attention to CTAs
- Analogous cool: Accent #{accent2} -- cohesive, professional feel
- Triadic balanced: Accent #{accent3} -- vibrant, good for data-heavy decks
Which direction? (Or suggest your own)"
No brand: Propose 2-3 complete palettes based on topic + tone:
"For a {tone} talk about {topic}, here are three palette directions:
- {name1}: Primary #{p1}, Secondary #{s1}, Accent #{a1} -- {description}
- {name2}: Primary #{p2}, Secondary #{s2}, Accent #{a2} -- {description}
- {name3}: Primary #{p3}, Secondary #{s3}, Accent #{a3} -- {description}
Which direction? (Or describe what you're looking for)"
After Speaker selects, derive the full palette (background, text colours, chart series) ensuring all contrast ratios meet thresholds.
With brand font preference: Use brand font as heading, select best body complement:
"Using {brand_font} for headings (per brand). For body text, I recommend {body_font} -- {rationale}. Does that work?"
Without brand font: Select from the 10 scored pairings based on tone and topic:
| Tone | Recommended Pairing |
|---|---|
| technical | Inter (single family) -- #4 |
| professional | Montserrat + Open Sans -- #1 |
| conversational | Montserrat + Open Sans -- #1 |
| inspirational | Playfair Display + Source Sans Pro -- #2 |
| provocative | Oswald + Merriweather -- #8 |
| storytelling | Raleway + Lato -- #5 |
Topic keyword overrides:
Present the recommendation:
"For a {tone} talk about {topic}, I recommend:
- Heading: {heading_font}
- Body: {body_font}
- Code: {mono_font}
{brief rationale}. Does this feel right?"
Derive from tone + preferences.style + palette:
"For the visual style of generated images, I suggest:
- Mood: {mood}
- Colour direction: {color_direction}
- Style: {style_modifiers}
This means images will have a {description}. Does that match your vision?"
Mood mapping:
Style modifier mapping from preferences.style:
Assemble the final StyleGuide with:
| Slide Type | text_zone (x,y,w,h) | image_zone (x,y,w,h) | background_treatment |
|---|---|---|---|
| title | (1.0, 1.5, 8.0, 2.5) | (0, 0, 10.0, 5.625) | image_bleed |
| section_divider | (1.0, 1.5, 8.0, 2.5) | null | solid_dark |
| content | (0.5, 1.0, 5.5, 4.0) | (6.5, 0.5, 3.0, 4.625) | solid_light |
| two_column | (0.5, 1.0, 4.0, 4.0) | (5.5, 1.0, 4.0, 4.0) | solid_light |
| image_feature | (0.5, 3.5, 4.0, 1.5) | (0, 0, 10.0, 3.2) | image_bleed |
| data_chart | (0.5, 0.5, 9.0, 1.0) | (0.5, 1.6, 9.0, 3.5) | solid_light |
| stat_callout | (1.5, 1.0, 7.0, 3.5) | null | solid_dark |
| quote | (1.5, 1.0, 7.0, 3.0) | null | solid_dark |
| icon_grid | (0.5, 0.5, 9.0, 1.0) | (0.5, 1.6, 9.0, 3.5) | solid_light |
| diagram | (0.5, 0.5, 9.0, 1.0) | (0.5, 1.8, 9.0, 3.3) | solid_light |
| closing | (1.0, 1.0, 8.0, 3.5) | null | gradient |
| blank_visual | null | (0, 0, 10.0, 5.625) | image_bleed |
Font sizes (fixed defaults from Research #10):
Layout dimensions (fixed):
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 StyleGuide before writing:
PYTHONPATH="$PLUGIN_ROOT" python3 -c "
import json
from src.style_validation import validate_style_guide, check_palette_contrast, check_completeness
sg = json.load(open('./tmp/deck/style-guide.json'))
schema_errors = validate_style_guide(sg)
contrast_issues = check_palette_contrast(sg.get('palette', {}))
completeness_issues = check_completeness(sg)
for e in schema_errors: print(f'SCHEMA: {e}')
for e in contrast_issues: print(f'CONTRAST: {e}')
for e in completeness_issues: print(f'COMPLETENESS: {e}')
if not schema_errors and not contrast_issues and not completeness_issues:
print('StyleGuide validates successfully')
"
If validation fails, fix the issues and re-validate. Write the validated StyleGuide to ./tmp/deck/style-guide.json.
./tmp/deck/style-guide.json