Claude Code is the primary install target for shotkit. The skills auto-discover, compose with other Claude Code skills, and write output files directly into your working directory. This doc covers the install mechanics, scope decisions, and how to drive the pack from natural-language prompts.
The repo ships an install.sh script that copies all four skills into a Claude Code skills directory.
git clone https://github.com/whystrohm/shotkit.git
cd shotkit
./install.sh # user scope: ~/.claude/skills/
./install.sh --project # project scope: ./.claude/skills/After install, restart your Claude Code session. The four skills appear in the available-skills list and trigger on natural-language prompts.
To verify install:
ls ~/.claude/skills/ | grep -E "storyboard|visual"
# expected:
# storyboard-architect
# storyboard-html-preview
# visual-asset-critic
# visual-prompt-forgeIf those four directories are present, you are wired.
Two install targets. Different use cases.
User scope (~/.claude/skills/) makes the pack available across every Claude Code session on your machine. Use this when shotkit is part of your daily content workflow regardless of project.
Project scope (./.claude/skills/) installs the pack into a single project directory. Use this when you want shotkit available only inside a specific repo, typically because the project commits its .claude/ directory to share skills with collaborators.
For solo operators running shotkit across multiple brand directories, user scope is correct. For agencies sharing a project repo with a client, project scope keeps the install scoped to that engagement.
The two scopes are not mutually exclusive. User-scope install plus a project-scope override on a specific machine is a valid pattern.
Claude Code reads ~/.claude/skills/ and ./.claude/skills/ at session start. Each subdirectory containing a valid SKILL.md becomes an available skill, indexed by the name and description fields in the YAML frontmatter.
When you describe a task in a prompt, Claude matches against the descriptions of available skills and triggers the most relevant one. The shotkit descriptions are tuned for natural-language patterns operators actually use:
- "Storyboard a 30-second explainer for X" triggers
storyboard-architect - "Generate prompts for these shots" triggers
visual-prompt-forge - "Critique this generated image" triggers
visual-asset-critic - "Render a preview of this storyboard" triggers
storyboard-html-preview
You do not need to invoke them by name. Describe the work and the right skill takes over.
The first time you trigger a shotkit skill in a session, expect Claude to:
- Acknowledge the skill (briefly, by name)
- Ask any clarifying questions the brief left ambiguous
- Read the relevant brand-lock file from
brand-packs/ - Produce the output set into your working directory under
output/
If a brand-lock is missing or invalid, the skill says so before producing anything. If the brief is missing required information (duration, beat framework, brand), the skill asks for it.
A clean first run looks like:
You: 30s pain-proof-promise for WhyStrohm. Use brand-packs/whystrohm.md.
Claude: storyboard-architect engaging. Reading brand-packs/whystrohm.md.
Brief looks complete. Producing storyboard.
[output/ directory created with 4 files + prompts/ subdirectory]
Claude: Done. Open output/preview.html to review.
If the run takes more than one round-trip, the brief was ambiguous. The follow-up question will be specific (which beat framework, which generator, which aspect ratio).
shotkit is designed to compose. The four skills cooperate by file format, not by import. They also compose with other community skills:
- Brand-voice extractors (e.g. media-tsunami) feed into
brand-packs/ - Frontmatter-aware editors can hand-edit
shots.jsonbetween runs - Render skills can read
shots.jsonand produce video without re-running storyboard-architect - Publishing skills can read
text-overlays.jsonand post per-platform copy
The composition pattern is consistent: shotkit produces files, other skills consume files. No skill in the pack calls another skill directly. Every step in the pipeline is a file boundary.
The skills write to your current working directory by default. The default output path is ./output/.
Override the path by including a target in the prompt:
"Storyboard a 30-second explainer for WhyStrohm. Output into ./projects/launch-q3/."
The skill creates the target directory and writes the four files plus the prompts subdirectory.
For multi-storyboard projects, name the output directory after the storyboard:
projects/launch-q3/
├── 30s-pain-proof-promise/
│ ├── storyboard.md
│ ├── shots.json
│ ├── text-overlays.json
│ ├── brand-lock.snapshot.md
│ └── prompts/
└── 60s-founder-explainer/
└── ...
The audit-trail pattern (see docs/audit-trail-pattern.md) makes this directory structure trivial to manage in Git.
A few patterns operators run frequently.
Render a preview from existing files.
"Render a preview of the storyboard in ./output/."
Triggers storyboard-html-preview against the existing files. Useful after hand-editing shots.json between generations.
Critique a generated image.
"Critique this image against shot_03 in ./output/shots.json."
Triggers visual-asset-critic. Compares the image against the shot spec and the brand-lock snapshot. Returns ACCEPT, REVISE, or REJECT with rationale.
Regenerate prompts for a different generator.
"Generate Flux prompts for ./output/shots.json."
Triggers visual-prompt-forge with the Flux adapter. Writes output/prompts/flux.txt.
Update a single shot.
"Hand-edit shot_03 in ./output/ to use a tighter framing."
Claude reads the file, edits the shot, and offers to re-render the preview. The single-file edit pattern works because the shots.json schema is the source of truth.
Most of the time, natural-language prompts route to the correct skill. When they do not, you can name the skill directly.
"Run storyboard-architect on this brief: ..."
This bypasses the skill-routing layer and engages the named skill directly. Useful when:
- Two skills could plausibly handle the prompt and you want the specific one
- You are debugging a workflow and want to isolate one skill's behavior
- You are running the pack programmatically and want deterministic routing
For day-to-day work, natural-language prompts are sufficient.
When v0.2.0 ships, update the install:
cd shotkit
git pull
./install.shThe script handles existing installs by replacing the skill directories. No state carries over from the prior version. Brand-packs, output files, and project state live outside the skills directory and are unaffected.
For shotkit, the install is idempotent. Running ./install.sh repeatedly produces the same result. There is no upgrade-migration to manage because the pack owns no persistent state.