Sandbox
@AThevon/genjutsu

Motion design skills for Claude Code

genjutsu gives Claude Code a structured way to handle motion, micro-interactions, and design systems across web, Android, and Apple UIs. The `cast` skill handles scoped interaction work, while `paint` handles full visual systems, and both pause for approval before they write code.

342 stars26 forksPythonUpdated 9d ago
Who it's for

Builders who want their agent to design and implement motion-rich interfaces with reusable rules and platform-aware guidance.

What it delivers

You can turn a plain UI request into motion work that is reviewed through an interaction thesis before code is written.

What it does

Interaction thesis gate

Before implementation, `cast` and `paint` propose an interaction thesis and wait for approval.

Stack-aware motion guidance

It detects web, Android, and Apple dependencies and loads the right motion sub-skills for GSAP, Framer Motion, Three.js, Compose, and SwiftUI.

Two main workflows

`cast` handles smaller motion tasks and `paint` handles full visual universes and design systems.

Audit pass

The skills run checks for reduced motion, accessibility, layout performance, hitches, and other motion issues.

Platform-specific design system output

`paint` can generate persistent design system files such as `MASTER.md`, `Theme.kt`, or `Color+App.swift` depending on the stack.

Claude Code and Claude.ai packaging

The repo includes plugin metadata and a packaging script for installing the bundle on Claude surfaces.

How to get it

  1. 1Build from source
    git clone https://github.com/AThevon/genjutsu.git
    cd genjutsu
    ./package-for-claude-ai.sh
    # dist/ has genjutsu.zip (the bundle) + 17 individual skill ZIPs
  2. 2Two slash commands, typed inside a Claude Code session
    /plugin marketplace add AThevon/genjutsu
    /plugin install genjutsu
  3. 3Or as a git submodule in your dotfiles
    git submodule add git@github.com:AThevon/genjutsu.git claude/plugins/genjutsu
    ln -sf ~/.dotfiles/claude/plugins/genjutsu ~/.claude/plugins/genjutsu
  4. 4Install it from the plugin panel, the same way as any other plugin, then invoke…
    /plugin marketplace add AThevon/genjutsu
    /plugin install genjutsu

README

genjutsu logo

genjutsu

The art of illusion. Cast motion. Paint signatures.

Website  ·  Documentation  ·  Install  ·  Discussions

Latest release MIT license Works with Claude Code, claude.ai and Cowork

Creative coding skills for Claude Code, claude.ai and Cowork - transforms any interface from functional to exceptional through motion design, interaction patterns, and visual systems. Covers Web (React, Vue, Svelte, vanilla CSS, Three.js, Canvas), Android (Jetpack Compose, Compose Multiplatform), and Apple (SwiftUI iOS + macOS).

v3.0 - rebrand: this plugin used to be called creative-excellence. The skills /creative-excellence:creative-excellence and /creative-excellence:design-excellence are now /genjutsu:cast and /genjutsu:paint. See CHANGELOG.md for the migration steps if you had v2.x installed.


Documentation

genjutsu.athevon.dev is built with genjutsu itself. The ink on it is painted by your own scroll, and every mark is drawn in code, no image assets.

PageWhat is in it
OverviewWhat genjutsu is, how the pieces fit, the shortest path to seeing something move
InstallBoth surfaces, verifying the install, updating, uninstalling
castThe seven-stage pipeline, its two validation gates, how to write a good request
paintThe five phases, the two theses, what lands in your repo
ModulesAll fifteen, by family: foundations, web, Apple, Android
PrinciplesThe rules the skills enforce, and why each one exists
FAQPlans, dependencies, cast against paint, what to check when output feels generic

Skills

/genjutsu:cast - The Illusionist

Takes any creative request and makes it exceptional. Adapts to your stack and scope.

Pipeline: Scan stack -> Evaluate scope -> Propose interaction thesis -> Load sub-skills -> Implement -> Mini-audit

  • Detects your dependencies automatically across web (GSAP, Motion / Framer Motion, Three.js, CSS), Android (Jetpack Compose, Compose Multiplatform) and Apple (SwiftUI iOS / macOS)
  • Proposes an interaction thesis before writing a single line of code, and asks how you want to see it first
  • Scales from a single hover effect to a full scroll-driven page or a Compose SharedTransitionLayout flow
  • Runs a quick audit on exit: reduced-motion, exit animations, recomposition, hitches, layout performance

/genjutsu:paint - The Master Painter

Builds a complete visual universe from scratch. Brainstorm first, implement second.

Pipeline: Brainstorm -> Define visual + interaction thesis -> Generate design system -> Implement -> Full audit

  • Mandatory creative direction session before any code
  • Shows the theses and the design system in the format you pick, instead of asking you to approve a palette as a list of hex codes
  • Generates a persistent stack-aware MASTER.md design system (Tailwind/CSS for web, Theme.kt for Compose, Color+App.swift for SwiftUI, commonMain for CMP)
  • Full audit at the end: motion gaps, accessibility, color consistency, responsive, performance, native hitches
  • Optional MCP integration (Stitch, Nano Banana, 21st.dev Magic)

When to use which

SituationSkill
"Add a scroll animation to this section"/genjutsu:cast
"Make this dropdown feel snappy"/genjutsu:cast
"Add a snappy spring to this Compose button"/genjutsu:cast
"Polish the matchedGeometryEffect on this SwiftUI screen"/genjutsu:cast
"Redesign the entire landing page"/genjutsu:paint
"Build me a portfolio from scratch"/genjutsu:paint
"Build a SwiftUI iOS app design system from scratch"/genjutsu:paint
"Bootstrap a Compose Multiplatform design system"/genjutsu:paint

Seeing what it proposes

Both skills stop and wait for your approval at a handful of points: the interaction thesis, the variants, the visual identity, the design system. A sentence cannot carry an easing curve and a list of hex codes cannot carry a palette, so before the first of those gates the skill asks how you want to see it.

ModeWhat you get
ArtifactA live page. The easing curve plotted with its exact value, an element actually performing the motion with a replay button, the raw numbers, a reduced-motion toggle. For a design system: swatches with their contrast ratios, a real type specimen, the five states of every component.
Live previewA throwaway route in your own project - real stack, real tokens, real components. On Compose or SwiftUI, a @Preview / #Preview scratch file. Deleted once you have approved.
InlineThe sentence, in the conversation. Still the right answer for a 150ms hover.

You are asked once. The choice holds for the rest of the session, later gates just announce the mode, and you switch by saying so. The preview is always throwaway: it exists to be looked at, never to become the implementation.


Sub-skills

Internal modules loaded dynamically by the orchestrators. Not invocable directly.

Foundation (always loaded)

Sub-skillScopeFiles
motion-principlesTiming, easing, cross-platform reduced-motion API, BAD/GOOD do-not rulesSKILL + 3 references

Shared layers (loaded by context)

Sub-skillScopeFiles
mobile-principlesTouch targets, no-hover doctrine, thumb zones, safe areas, gestures, mobile perf budgetsSKILL + 2 references
desktop-principlesHover-mandatory, pointer precision, keyboard shortcuts, multi-window, focus managementSKILL + 2 references
design-auditMulti-stack greps (web/Compose/SwiftUI), bundle size, Layout Inspector, Instruments HitchesSKILL
ui-ux-pro-maxDesign system intelligence (84 styles, 192 palettes, 74 font pairings, 25 charts, 22 stacks)SKILL + data + scripts

Web stack

Sub-skillScopeFiles
gsapCore, timeline, ScrollTrigger, pluginsSKILL + 4 references
framer-motionMotion and Framer Motion (same library, two package names) - AnimatePresence, layout, gestures, motion valuesSKILL + 1 reference
css-nativeScroll-driven, View Transitions, @starting-styleSKILL + 1 reference
threejs-r3fThree.js, React Three Fiber, shaders, postprocessingSKILL + 2 references
canvas-generativeParticles, flow fields, noise, fractals, L-systemsSKILL + 1 reference

Android stack

Sub-skillScopeFiles
compose-motionanimate*AsState, AnimatedVisibility, SharedTransitionLayout, springs, gesturesSKILL + 3 references
compose-graphicsM3 Expressive motion physics, AGSL shaders (Android 13+), Canvas/DrawScopeSKILL + 3 references
compose-multiplatformKMP/CMP patterns, expect/actual, iOS/Android/Desktop interopSKILL + 2 references

Apple stack

Sub-skillScopeFiles
swiftui-motionwithAnimation, transitions, matchedGeometryEffect, PhaseAnimator, KeyframeAnimator, gesturesSKILL + 3 references
swiftui-graphicsMetal shaders (.colorEffect / .layerEffect / .distortionEffect), .visualEffect, Liquid Glass (iOS 26), CanvasSKILL + 3 references

Installation

The short version is on the site: genjutsu.athevon.dev/docs/install. The long version, including partial installs, is below.

claude.ai (web/app)

Prerequisites: Plan Pro, Max, Team or Enterprise with "Code execution" enabled.

Option A - single bundle (recommended):

One upload, everything included (router + cast + paint + all sub-skills).

  1. Download genjutsu.zip. That link always serves the newest release, so it never goes stale.
  2. On claude.ai, go to Customize > Skills > Upload skill and upload genjutsu.zip.
  3. Enable the toggle. Done - one skill, both cast and paint pipelines, all sub-skills bundled.

Want to confirm it mounted correctly? Follow the 2-minute smoke test in docs/claude-ai-testing.md.

How it shows up. The bundle installs as a single skill named genjutsu. In a normal chat it appears as one entry - invoke /genjutsu (or just describe your task) and it routes to the cast or paint pipeline internally. Surfaces that expose skills as individual commands (e.g. a code workspace) show /cast and /paint directly. Either way the pipelines need code execution enabled to load their sub-skills. Prefer /cast and /paint as separate entries everywhere? Use Option B.

Option B - individual skills:

Prefer separate skills, or only part of the stack? Upload the individual ZIPs (one per skill). Baseline for everyone: cast, paint, motion-principles, design-audit, ui-ux-pro-max. Then add per stack:

Your stackZIPs to upload (in addition to baseline)
Web onlymobile-principles, desktop-principles, gsap, framer-motion, css-native, threejs-r3f, canvas-generative
Android Compose onlymobile-principles, compose-motion, compose-graphics
iOS SwiftUI onlymobile-principles, swiftui-motion, swiftui-graphics
macOS SwiftUI onlydesktop-principles, swiftui-motion, swiftui-graphics
Multi-target Apple (iOS + macOS)mobile-principles, desktop-principles, swiftui-motion, swiftui-graphics
Compose Multiplatformmobile-principles, compose-motion, compose-graphics, compose-multiplatform, swiftui-motion (if iOS target)

Build from source:

git clone https://github.com/AThevon/genjutsu.git
cd genjutsu
./package-for-claude-ai.sh
# dist/ has genjutsu.zip (the bundle) + 17 individual skill ZIPs

Claude Code (CLI)

Two slash commands, typed inside a Claude Code session:

/plugin marketplace add AThevon/genjutsu
/plugin install genjutsu

Then run /genjutsu:cast or /genjutsu:paint. You can pass the request on the same line: /genjutsu:cast make the pricing cards feel physical on hover.

The marketplace also accepts the full git URL if you prefer it: /plugin marketplace add git@github.com:AThevon/genjutsu.git.

Or as a git submodule in your dotfiles:

git submodule add git@github.com:AThevon/genjutsu.git claude/plugins/genjutsu
ln -sf ~/.dotfiles/claude/plugins/genjutsu ~/.claude/plugins/genjutsu

Cowork

Install it from the plugin panel, the same way as any other plugin, then invoke /genjutsu:cast or /genjutsu:paint.

/plugin marketplace add AThevon/genjutsu
/plugin install genjutsu

Cowork mounts skills under a per-session root rather than a fixed path, so sub-skill resolution probes for it - see Cowork compatibility for the resolution order, what the preview gate maps to on this surface, and why paint shortens itself for one-component requests here.


Architecture

genjutsu/
├── .claude-plugin/
│   ├── plugin.json
│   └── marketplace.json
├── skills/
│   ├── cast/SKILL.md                       <- orchestrator (Illusionist)
│   ├── paint/SKILL.md                      <- orchestrator (Master Painter)
│   └── _jutsu/                             <- internal sub-skills (never invoked directly)
│       ├── VERSIONS.md                     <- what every version claim was verified against
│       ├── motion-principles/              <- foundation, always loaded
│       ├── mobile-principles/              <- shared (touch contexts)
│       ├── desktop-principles/             <- shared (pointer/keyboard contexts)
│       ├── design-audit/                   <- shared (audit pipeline)
│       ├── ui-ux-pro-max/                  <- shared (design intel)
│       ├── gsap/                           <- web stack
│       ├── framer-motion/                  <- web stack
│       ├── css-native/                     <- web stack
│       ├── threejs-r3f/                    <- web stack
│       ├── canvas-generative/              <- web stack
│       ├── compose-motion/                 <- Android
│       ├── compose-graphics/               <- Android (M3 Expressive, AGSL, Canvas)
│       ├── compose-multiplatform/          <- KMP/CMP
│       ├── swiftui-motion/                 <- Apple
│       └── swiftui-graphics/               <- Apple (Metal, Liquid Glass, Canvas)
├── package-for-claude-ai.sh
├── CHANGELOG.md
└── README.md

Orchestrators detect the environment at runtime (Claude Code plugin directory, claude.ai /mnt/skills/user/, or a session-rooted Cowork mount - see Cowork compatibility) and pick what to load based on the SCAN phase. Sub-skills in _jutsu/ are loaded by orchestrator according to detected stack and selected scope - mobile-principles and desktop-principles are auto-loaded when context matches (touch target vs pointer/keyboard target). The underscore prefix keeps sub-skills internal so they never get invoked directly.


Cowork compatibility

genjutsu runs on three surfaces, and they mount the skill tree in three different places. Claude Code and claude.ai both have a fixed path. Cowork does not: it mounts under a per-session root that changes every run, for example /sessions/<session-id>/mnt/.claude/skills/genjutsu/_jutsu.

Path detection. The genjutsu:shared:skill-base block resolves $SKILL_BASE in this order, and stops at the first hit:

OrderHostHow it resolves
1claude.ai, single bundle_jutsu found directly under /mnt/skills/user
2claude.ai, individual skillsthe /mnt/skills/user mount itself
3Claude Code${CLAUDE_PLUGIN_ROOT}/skills/_jutsu, then the newest numbered version under ~/.claude/plugins/cache
4Cowork, skills-directory installsprobed: $PWD and its ancestors, then ~/.claude/skills, /mnt/.claude/skills, /sessions, matching */.claude/skills/*/_jutsu

Step 4 is new and runs last, so steps 1 to 3 behave exactly as they did before. Every probe is depth-capped, so none of them can walk the filesystem. When all four miss, the failure is now explicit: the error names each root that was tried instead of letting a cat fail silently.

Preview mapping. The preview gate offers artifact, live preview or inline. What each one means depends on the host:

HostA - artifactB - live previewC - inline
claude.ainative artifactthrowaway route in your projectconversation text
Coworkthe host's persistent artifactusually unavailable, no project checkoutthe host's inline widget
Claude Codethe Artifact toolthrowaway route, or a @Preview / #Preview scratch fileconversation text
unknownself-contained HTML at a temp pathnot offeredconversation text

The gate detects the host itself, before LOAD runs. Cowork is tested before Claude Code because both can have a ~/.claude tree and only Cowork has the session-rooted mount, so the more specific signal has to win.

Pipeline weight. cast is the default entry point on every surface. paint is a five-phase pipeline and is disproportionate for the short requests that dominate on Cowork ("animate this word", "polish this hover"), so it now recognises light scope - one isolated component, no visual identity at stake, nothing downstream depending on it - and shortens to a single brainstorm question with no MASTER.md written. The gates stay; only their number goes down.


Voice

The skills speak in two registers:

  • During execution: light ninja flair, short, signature ("Casting parallax on hero scroll.", "Brushing the color palette.")
  • In reports / final summaries / audits: plain, factual, dev-readable. No mystic prose, no metaphors. Just what changed, files touched, next step.

Contributing

The most valuable contribution to this repo is "this claim is wrong, here is the primary source". It is a knowledge repository: a wrong sentence does not throw an error, it becomes wrong code in somebody else's project.

  • CONTRIBUTING.md - the evidence standard, what not to touch, how to run the checks
  • PLATFORM-CONTRACT.md - what a platform family must answer, what owning one costs, and how one gets removed
  • skills/_jutsu/VERSIONS.md - what every version-sensitive claim was checked against and when. Rows marked VERIFY-NEEDED are the open work.

One person currently maintains roughly 736 API symbols across six targets. If you work in Compose, SwiftUI or motion-heavy web, owning one family's quarterly re-derivation is the single most useful thing anyone could do here.


Credits

Built by studying the best creative coding resources available.

Design intelligence

Web foundation

Android / Compose (v2.0)

Apple / SwiftUI (v2.0)

UX / motion theory


Talk to me

Discussions are open.

  • Show and tell - post what you cast. A gif, a screenshot, a link. Output that came out wrong is as useful as output that came out well.
  • Q&A - install problems, a module that misfires, output that feels generic.
  • Ideas - a surface, a framework, a module that is missing.

A bug with a clear repro is still better as an issue, it keeps a trail.


License

MIT


Built by Adrien Thevon, software engineer in Toulouse.
Also mine: TokenEater, a native macOS monitor for Claude usage limits  ·  worktigre, a git worktree manager

Files in the repo

Repository payload14 top-level entries
  • .claude-plugin
  • .github
  • assets
  • docs
  • packaging
  • scripts
  • skills
  • .gitignore
  • CHANGELOG.md
  • CONTRIBUTING.md
  • LICENSE
  • package-for-claude-ai.sh
  • PLATFORM-CONTRACT.md
  • README.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More skills

obra/
superpowers

An agentic skills framework & software development methodology that works.

285k
1 add

Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A /graphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.

117k
1 add
Vincentwei1021/
anything2explainer

Topic in, narrated explainer video out. A Claude Code / Codex skill that turns any topic into a black-canvas motion-graphics explainer video with TTS voiceover, subtitles and a chapter progress bar. Chinese or English; every frame drawn in code with Remotion.

666

Open-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)

71k