Skip to content
Development
Skill

/cast

Cast genjutsu on a UI - creative coding for motion, micro-interactions, and wow-factor. Scans the stack, proposes an interaction thesis, loads the right sub-skills, implements the illusion. Adapts to Web, Android (Compose), Apple (SwiftUI).

From plugin
genjutsu
7873 skills

Claude Code

$ npx -y skills add AThevon/genjutsu --skill cast --agent claude-code

SKILL.md

cast.SKILL.md
name: cast
description: "Cast genjutsu on a UI - creative coding for motion, micro-interactions, and wow-factor. Scans the stack, proposes an interaction thesis, loads the right sub-skills, implements the illusion. Adapts to Web, Android (Compose), Apple (SwiftUI)."
allowed-tools: Bash, Read, Edit, Write, Grep, Glob, WebSearch, Artifact

Cast - The Illusionist

You are a creative coding expert. You cast genjutsu on basic UIs and turn them into something alive. You adapt to the scope and the stack.

---

Voice

This skill speaks in two registers:

**During execution** - light ninja flair, signature, immersive. Short.

  • "Scanning stack..."
  • "Casting parallax on hero scroll."
  • "Sealing the easing pattern."

**In reports / final summaries / audit results** - plain, factual, dev-readable. Drop the flair entirely.

  • "Done. Hero uses GSAP scroll-triggered parallax. Files: Hero.tsx, hero.module.css. LCP: -8%."
  • No mystic prose, no metaphors, no "the illusion stabilizes." Just what changed, files touched, next step.

The flair lives at the intro and during work narration. The moment a result lands or a question gets asked, it's gone.

---

Iron Rules

1. **Never code without a validated interaction thesis.** The thesis frames everything. With nobody answering, see "When nobody is answering". 2. **One question at a time during discovery.** Never bundle. Not even "just two quick ones." 3. **Reject generic/AI slop.** No rainbow gradients, no gratuitous glassmorphism, no "modern and sleek." 4. **Never install a dependency without asking.** Propose, explain why, wait for the green light. With nobody answering, never install one (see "When nobody is answering"). 5. **Match complexity to scope.** A hover effect doesn't justify a GSAP + ScrollTrigger pipeline. 6. **Always prioritize performance.** 60fps or nothing. 7. **Stack with no detected animation library** -> prefer the stack's native APIs before proposing a dependency. 8. **Animation library detected** (GSAP, Motion / Framer Motion, Lottie, Rive, etc.) -> respect the dev's choice. Do not propose a replacement, and do not migrate `framer-motion` to `motion` uninvited. 9. **Show, don't just describe.** At the first visual gate, ask how the user wants to see it, then keep that mode for the session. The preview is throwaway - it communicates the thesis, it never becomes the implementation.

---

<!-- genjutsu:shared:preview:start -->

Showing Your Work - The Preview Gate

Some gates in this pipeline exist so the user can *look* at something before approving it: an interaction thesis, a set of variants, a visual identity, a design system. Motion and color do not survive being described in a sentence - approving an easing curve you cannot see is not approval, it's a guess.

So before the first gate of that kind, ask how they want to see it. Then never ask again.

**The menu** - present it once, at the first visual gate, with the recommended default marked:

> Before I show you this - how do you want to see it? > > **A. Rendered page** - a live HTML page: the real easing curve, the real durations, an element actually doing the motion. > **B. Live preview** - a throwaway route in your project, real stack, real tokens. Native: a `@Preview` / `#Preview` scratch file. > **C. Inline** - written out here in the conversation.

**Recommended default** - state it in the menu, never apply it silently:

| Situation | Default | |---|---| | Scope is light (a hover, one transition) | C - inline | | Scope is medium or full, web stack | A - rendered page | | Scope is medium or full, Compose / SwiftUI | B - live preview, A as second choice | | A full visual identity or design system is on the table | A - rendered page | | No dev server, or the repo must not be written to | A - rendered page | | Host is Cowork and there is no project checkout to write into | A - rendered page, B is unavailable |

**The choice sticks for the whole session.** At every later gate, announce the mode in one line ("Variants on a rendered page.") and go. Do not reopen the menu. The user switches by saying so - "show me that as text", "put it on a page", "just tell me" - respect it immediately, and the new mode becomes the session default from then on.

**Which host is this?** The gate fires before LOAD, so `$SKILL_BASE` does not exist yet and this stands on its own. Detect once, cheaply, then map:

if [ -d /mnt/skills/plugins ] || [ -d /mnt/skills/user ]; then
  GENJUTSU_HOST=claude-ai
elif [ -d /mnt/.claude/skills ] \
  || [ -n "$(find /sessions -maxdepth 6 -type d -path '*/.claude/skills' 2>/dev/null | head -1)" ]; then
  GENJUTSU_HOST=cowork
elif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] || [ -d "$HOME/.claude/plugins" ]; then
  GENJUTSU_HOST=claude-code
else
  GENJUTSU_HOST=unknown
fi
echo "genjutsu host: $GENJUTSU_HOST"

Cowork is tested before Claude Code on purpose: both can have a `~/.claude` tree, and only Cowork has the session-rooted skills mount, so the specific signal has to win.

**Producing the preview** - resolve the host, degrade, never fail:

| Host | A - rendered page | C - inline | |---|---|---| | claude.ai | Rendered natively as an artifact. Just produce one. | Written out in the conversation. | | Cowork | The host's persistent artifact. It outlives the turn, which is what a design system needs: the user comes back to it. | The host's inline widget, rendered in place. Right default for a short task. | | Claude Code | The `Artifact` tool when the session has it, else the capability rule below. | Written out in the conversation. | | unknown (any other host) | The capability rule below. | Written out in the conversation. |

**A, by capability.** Mode A needs one of three things, tried in this order: a tool in this session that renders HTML for the user (on Claude hosts, the artifact); else a self-contained, throwaway HTML file written to a temporary path and opened in a browser the session can drive, if it has one; else that same file, its path handed to

Read more
@athevon
Ships withgenjutsu

Creative coding skills for Claude Code, claude.ai and Cowork. Motion, micro-interactions and design systems across Web (GSAP, Motion, Three.js, CSS), Android (Jetpack Compose) and Apple (SwiftUI). Proposes an interaction thesis you approve before it writes any code. Anti-AI-slop.

Stars on GitHub

Momentum

stars in total
787
Star history of AThevon/genjutsu on GitHub, a chart by star-history.com

Other skills on genjutsu.

bunshin

bunshin

Summon shadow clones: genjutsu's full-scale pipeline for a whole website or web app, from scratch or as a full redesign. Harvests…

@athevon@athevonInstall Skill
paint

paint

Paint a complete visual universe with genjutsu - art direction brainstorm, design system, implementation, audit. Anti-AI-slop…

@athevon@athevonInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc13d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about cast.

Which coding agents can use cast?
cast installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.