How an anime studioruns itself.
Six skills. Three MCP servers. Five commands. One compounding dataset. Claude Code is the brain. The pipeline is the product.
- 6
- Skills
- 3
- MCP servers
- 5
- Commands
- ∞
- Grimoire
Claude Code is the brain.
All of this runs on your laptop. Skills load from the repo. MCP servers reach out to providers. Slash commands compose the whole flow. No proprietary cloud. No framework tax.
Skills load locally
SKILL.md files live in your repo. Claude Code reads them every session — no cloud sync, no vendor lock.
MCPs reach out
Three typed servers wrap every external surface: trend ingest, media generation, dataset read/write.
Commands compose
Five slash commands orchestrate skills + MCPs into end-to-end workflows from topic to distribution.
Grimoire compounds
Every artifact gets logged. The dataset gets smarter. Next short starts from evidence, not vibes.
Your laptop is the studio. Your CLI is the control room. Your Grimoire is the memory.
One file per stage of the pipeline.
Every stage of production is a SKILL.md — plain markdown with a typed I/O contract. Claude Code reads them on every run. Fork them, rewrite them, or build your own.
Stage 02 · Concept
concept-forge
Signal → logline. Mascot, channel, hook, payoff.
- Inputs
- topic | signal.jsonbrand/voice.md
- Outputs
- concept.json
# SKILL: concept-forge
## Purpose
Convert a topic string or signal manifest into a concept.json — a logline,
hook, payoff, mascot assignment, and archetype language set.
## Mascot Assignment Logic
AKASHI: philosophical truths, archetypes, universal patterns
KAGE: rankings, comparisons, data-driven arguments
MIRA: beginner-friendly explanations, curious explorations
default: AKASHI
## Output
id: concept_<project_id>
mascot: akashi | kage | mira
platform_primary: tiktok | youtube-shorts | instagram-reels
duration_target_s: 15 | 30 | 60
hook: "the cognitive gap the first 3s must create"
payoff: "what the viewer leaves with"
archetype_language: ["the crimson swordsman", ...]
The outside world, typed.
Claude Code doesn't call Flux, Kling, Supabase, or Reddit directly. Every external surface is wrapped in an MCP server with a pydantic contract. Swap the provider, keep the pipeline.
animelegends-signal
MCP server
Reddit + YouTube + AniList — trend ingest and scoring.
Tools · 5
- signal_get_trending
- signal_score_topic
- signal_get_hot_debates
- signal_manual_topic
- signal_get_release_calendar
example.tsts// claude code → animelegends-signal await mcp.callTool("signal_get_trending", { platform: "reddit", limit: 10, min_score: 8, }); // → returns topics scored on debate potential, // archetype accessibility, trend velocity, // and brand alignment (max 12 / filter 8+).animelegends-gen
MCP server
Flux.1 · Kling 2.x · ElevenLabs · Suno v4 — one typed surface.
Tools · 6
- gen_estimate_cost
- gen_image
- gen_video_clip
- gen_voice
- gen_music
- gen_batch_images
example.tsts// Estimate before burning budget const quote = await mcp.callTool("gen_estimate_cost", { image_count: 11, video_clip_count: 11, voice_duration_s: 30, music_duration_s: 30, }); // Standard negative prompt + style tokens are // appended automatically to every image call.animelegends-grimoire
MCP server
Supabase + local JSON fallback — the compounding dataset.
Tools · 8
- grimoire_log_production
- grimoire_update_status
- grimoire_log_metrics
- grimoire_list_productions
- grimoire_get_production
- grimoire_query_performance
- grimoire_get_hook_insights
- grimoire_get_stats
example.tsts// Every stage logs. The dataset grows. await mcp.callTool("grimoire_log_production", { project_id: "project_20260419_strongest", topic: "why the strongest lose first", mascot: "akashi", channel: "flagship", duration_s: 30, status: "rendered", });
Every tool call is validated, retryable, and loggable. No provider SDK leaks into a skill file. No skill calls an HTTP endpoint directly.
Entry points to the whole system.
Each command is a markdown file in /commands. They orchestrate skills and MCP tools into end-to-end workflows. Run one of these and Claude Code does the rest.
/new-short
/new-short <topic> [--mascot] [--duration] [--channel]
Full pipeline from topic string to rendered MP4. Every stage, every manifest, one invocation.
Invokes
- concept-forge
- script-forge
- storyboard-forge
- gen-director
- remotion-composer
claude-code · sessionsh$ /new-short "the training arc is a lie" --mascot kage --duration 30 ◆ project_id: project_20260419_training-arc-is-a-lie ▸ concept-forge · concept.json ▸ script-forge · 5 beats, hook locked ⏸ review? [yes / edit / regenerate] ▸ storyboard-forge · 11 shots ▸ gen-director · est $2.87 · confirm? y ▸ remotion-composer · out/final.mp4 (4.9MB, 30.0s) ✓ 6m 42s · ready for /publish/from-signal
/from-signal [--channel] [--duration]
Pull the highest-opportunity trending topic from anime discourse. Score it. If ≥ 8/12, run /new-short automatically.
Invokes
- signal_get_trending
- signal_score_topic
- /new-short
claude-code · sessionsh$ /from-signal --channel flagship ◆ scanning: r/anime, r/powerscaling, r/animediscussion ◆ 14 candidates scored → top: "why nobody finished the arc they promised" debate 3 · archetype 3 · velocity 2 · brand 3 = 11/12 ▸ auto-routing to /new-short.../remix
/remix <project_id> [--angle] [--mascot] [--duration]
Create a variant of a proven short. Same topic, different angle, mascot, or duration. Doubles content from winners.
Invokes
- concept-forge (parent ctx)
- script-forge
- /new-short
claude-code · sessionsh$ /remix project_20260411_strongest --mascot kage --duration 60 ◆ parent: project_20260411_strongest (akashi, 30s) ◆ new angle: data-driven power-scaling ledger ◆ new project_id: project_20260411_strongest_remix_1 ▸ concept-forge (kage lens, 60s) ▸ script-forge (8 beats) ▸ storyboard → gen → render/publish
/publish <project_id|path> <platforms> [--schedule]
Distribute a rendered MP4. Generates captions, picks hashtags by channel, hits platform APIs, logs post IDs to Grimoire.
Invokes
- publish-orchestrator
- grimoire_log_production
claude-code · sessionsh$ /publish project_20260419_strongest all ◆ pre-flight: duration ok · size 4.8MB · no copyrighted names ◆ caption (125c) + hashtags by channel ▸ tiktok → post_id 7398... · published ▸ youtube-shorts → post_id dQw... · published ▸ instagram-reels → post_id 19xy... · published ▸ x-video → post_id 177... · published ◆ metrics scheduled: +1h, +24h, +72h/grimoire-query
/grimoire-query "<natural language question>"
Ask the dataset. Translates a question to SQL against the Grimoire schema. Returns data + pattern + one actionable call.
Invokes
- grimoire_query_performance
- grimoire_get_hook_insights
claude-code · sessionsh$ /grimoire-query "which hooks drove the most watch time this week" ┌──────────────────────────────────────────────┬──────────┬──────┐ │ hook_style │ avg_wt_s │ n │ ├──────────────────────────────────────────────┼──────────┼──────┤ │ claim + cognitive gap (akashi) │ 21.4 │ 7 │ │ data ledger open (kage) │ 18.9 │ 5 │ │ question-first (mira) │ 12.1 │ 3 │ └──────────────────────────────────────────────┴──────────┴──────┘ ► recommend: double akashi claim-openers next 7d.
The pipeline that makes the pipeline better.
Every stage logs. Every post measures. Every metric feeds the next concept. A dataset that compounds in value the longer you run it — the moat no fresh fork can shortcut.
- 01
PRODUCE
Every skill writes a typed manifest.
concept.json → script.json → storyboard.json → assets.json → assembly.json
- 02
PUBLISH
Distribution writes post_id per platform.
tiktok · youtube-shorts · instagram-reels · x-video
- 03
MEASURE
Metrics pulled at +1h, +24h, +72h.
views · watch time · saves · shares · CTR
- 04
LEARN
Hook and concept scorers update.
hook_style_scores · mascot_perf · channel_perf · prompt_cluster_perf
- 05
DIRECT
Next run starts from evidence, not vibes.
concept-forge reads hook_insights → script-forge picks cadence
# grimoire/schema.sql (excerpt)
productions # one row per short · full lineage FKs
scripts # beats, hooks, payoffs
storyboards # shot prompts, camera specs, seeds
assets # every generated file · provider · model · cost
posts # platform post_ids, publish timestamps
metrics # hourly metric snapshots per post per platform
# natural language access
/grimoire-query "best-performing hook styles, 30s only, last 14d"
What compounds
- ·Labeled dataset of prompt → generation → performance.
- ·Training signal for a house-trained style LoRA.
- ·Hook scorer that replaces guesswork with posteriors.
- ·Lineage graph that makes every remix deliberate.
Run your own studio.
Three steps from git clone to your first rendered short. The skill files, the MCP servers, the Remotion compositions — all yours.
- 01
Clone
Fork the open-source Forge. All skills, commands, MCP servers, Remotion templates.
~/forgesh$ gh repo fork animelegends-ai/forge --clone $ cd forge - 02
Configure
Set your provider keys. Supabase is optional — there's a local JSON Grimoire fallback.
~/forgesh# .env.local FAL_KEY=... KLING_API_KEY=... ELEVENLABS_API_KEY=... SUPABASE_URL=... # optional SUPABASE_ANON_KEY=... # optional - 03
Run
One invocation. Concept to rendered MP4, fully logged.
~/forgesh$ claude code > /new-short "your first legend"
The pipeline is the product. Every artifact shipped trains the system that ships the next one. That’s the moat.
Where legends are remembered, measured, and born.
