agentleFS
IceMasterTIceMasterT/Unity-6.3_SKILLS/unity-animation-cinematics/SKILL.md

unity-animation-cinematics

Skill0 starsChanged 3 months agoMITView on GitHub

Use when working with Unity's Animator Controller, Timeline, Animation Rigging, or Cinemachine cameras. Grounds answers in the local Unity 6.3 docs over pretrained knowledge.

The file

We split this skill into the rules it gives an agent

1 rule. About 0 are common, 0 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    All paths below were verified to exist on disk at review time (find/ls against Manual/ and ScriptReference/).

    line 12

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Unity Animation & Cinematics

Retrieval Sources

Docs root: /media/artiq/FRESH_DRIVE/Books/Unity6/Documentation/en/

All paths below were verified to exist on disk at review time (find/ls against Manual/ and ScriptReference/).

SourcePathUse for
Mecanim system introductionManual/AnimationOverview.htmlConceptual map of Animator/Avatar/Controller/Blend Tree pieces before diving into specifics
Animator Controller overviewManual/animation-animator-controller.htmlStates, transitions, parameters, layers — the core controller model
Creating an Animator ControllerManual/AnimatorControllerCreation.htmlStep-by-step creation/wiring of a new controller asset
Animator window referenceManual/AnimatorWindow.htmlUI reference for the graph editor, parameters pane, layers pane
State machine basicsManual/StateMachineBasics.htmlStates, default state, Any State, entry/exit nodes
State machine transitionsManual/StateMachineTransitions.htmlConditions, exit time, transition duration/offset, interruption sources
State Machine BehavioursManual/StateMachineBehaviours.htmlScripting logic attached to individual states (OnStateEnter/Exit/Update/Move/IK)
Sub-state machinesManual/NestedStateMachines.htmlNesting state machines for readability and reuse
Animation LayersManual/AnimationLayers.htmlLayer weight, override vs additive blending, avatar mask per layer
Blend TreesManual/animation-blend-trees.html1D and 2D blend trees for locomotion and directional movement
Root Motion (how it works)Manual/RootMotion.htmlRoot motion extraction from clips, applyRootMotion, deltaPosition/deltaRotation
Scripting Root MotionManual/ScriptingRootMotion.htmlOnAnimatorMove, overriding root motion from code
Animation from external sourcesManual/AnimationsImport.htmlImport pipeline for animation clips baked into FBX/other model files
Rig tab import settingsManual/FBXImporter-Rig.htmlHumanoid/Generic/Legacy animation type, Avatar Definition, configuring the Avatar
Creating models for animationManual/UsingHumanoidChars.htmlModeling/rigging requirements for a valid Humanoid Avatar
Avatar Mask window referenceManual/class-AvatarMask.htmlBody-part and transform-path masking, used by both layers and Animation Rigging
Constraint components introductionManual/Constraints.htmlBuilt-in (non-package) constraint components conceptually
Constraint components referenceManual/constraint-components.htmlPosition/Rotation/Aim/Parent/Scale/LookAt constraint component list
Animation Rigging packageManual/com.unity.animation.rigging.htmlLanding page only locally — points out to docs.unity3d.com/Packages/com.unity.animation.rigging@1.4/manual/; no local page-by-page rig/constraint docs
Timeline packageManual/com.unity.timeline.htmlLanding page only locally — points out to docs.unity3d.com/Packages/com.unity.timeline@1.8/manual/; no local track/clip/signal reference pages
PlayableDirector componentManual/class-PlayableDirector.htmlThe component that plays a Timeline asset and binds tracks to scene objects
Cinemachine packageManual/com.unity.cinemachine.htmlLanding page only locally — points out to docs.unity3d.com/Packages/com.unity.cinemachine@3.1/manual/; no local vcam/blend/noise reference pages
Animator scripting APIScriptReference/Animator.htmlRuntime API: parameters, layers, IK, playback control, culling
PlayableDirector scripting APIScriptReference/Playables.PlayableDirector.htmlPlay(), Pause(), Stop(), time, playableAsset, generic bindings
AvatarMask scripting APIScriptReference/AvatarMask.htmlRuntime/editor construction of masks for layers or rig constraints
StateMachineBehaviour scripting APIScriptReference/StateMachineBehaviour.htmlBase class for per-state scripted callbacks
OnAnimatorMove callbackScriptReference/MonoBehaviour.OnAnimatorMove.htmlPer-frame hook fired when root motion is applied
OnAnimatorIK callbackScriptReference/MonoBehaviour.OnAnimatorIK.htmlPer-frame hook fired during the Animator's IK pass

Honesty note on package docs: locally, com.unity.timeline.html, com.unity.cinemachine.html, and com.unity.animation.rigging.html are thin package-landing stubs (~194–204 lines each, mostly site chrome) that link out to docs.unity3d.com/Packages/... for the actual manual. There is no local page for Timeline tracks/clips/signals, Cinemachine virtual camera/body/aim/noise components, or Animation Rigging's Rig Builder/constraint types beyond what's covered by the general (non-package) Constraints.html/constraint-components.html pages. Treat Timeline- and Cinemachine-specific and Animation-Rigging-specific claims below as pretrained knowledge, not doc-grounded, and say so if precision matters — verify against the live Unity package docs before asserting API specifics (method signatures, exact component field names) for those three packages.

Key Guidelines

Animator Controller & State Machines

The Animator Controller is a state machine asset: each state holds a Motion (a clip or a blend tree), transitions connect states with conditions evaluated against Animator parameters (bool/int/float/trigger), and "Any State" is a special node that can transition into any other state regardless of current state — reserve it for genuine interrupts (death, hit-stun, forced knockdown), not routine flow, or the graph becomes unreadable and transition priority order starts to matter unpredictably. Never assign a state or force a clip to play directly from gameplay code; drive parameters instead and let the graph's transition conditions decide what plays. Nested sub-state machines (Manual/NestedStateMachines.html) group related states (e.g. all "grounded locomotion" states) behind a single collapsible node for readability without behavior differences — transitions into/out of the sub-machine graph route through its entry/exit nodes.

// Drive the state machine through parameters — never set clips directly.
public class LocomotionController : MonoBehaviour
{
    static readonly int Speed = Animator.StringToHash("Speed");
    static readonly int Jump = Animator.StringToHash("Jump");
    static readonly int IsGrounded = Animator.StringToHash("IsGrounded");

    Animator _animator;

    void Awake() => _animator = GetComponent<Animator>();

    void Update()
    {
        float speed01 = _inputSpeed / _maxSpeed; // normalize for the blend tree
        _animator.SetFloat(Speed, speed01, 0.1f, Time.deltaTime); // damped set, avoids snapping
        _animator.SetBool(IsGrounded, _characterController.isGrounded);

        if (Input.GetButtonDown("Jump") && _characterController.isGrounded)
            _animator.SetTrigger(Jump); // triggers auto-reset after consumption
    }
}

Attach StateMachineBehaviour subclasses directly to individual states for logic that must live and die with that state (enabling a hitbox only during an attack state, locking input during a knockdown state) — OnStateEnter/OnStateExit/OnStateUpdate/OnStateMove/OnStateIK fire only while that specific state is active, which is more robust than checking AnimatorStateInfo from an external script every frame.

// Attach to the "Attack" state. Opens/closes a hit window without external polling.
public class AttackHitWindow : StateMachineBehaviour
{
    public override void OnStateEnter(Animator animator, AnimatorStateInfo info, int layerIndex)
        => animator.GetComponent<Combatant>().SetHitboxActive(true);

    public override void OnStateExit(Animator animator, AnimatorStateInfo info, int layerIndex)
        => animator.GetComponent<Combatant>().SetHitboxActive(false);
}

Blend Trees (1D / 2D)

Use a 1D blend tree keyed on a single float (e.g. Speed) for locomotion along one axis (idle → walk → run) instead of authoring separate states with hand-tuned crossfade transitions between each speed tier — the blend tree interpolates continuously and its motion thresholds are set per-child clip in the tree editor. Use a 2D blend tree (Simple Directional, Freeform Directional, or Freeform Cartesian) keyed on two floats (e.g. MoveX/MoveZ or Speed/Direction) for strafing/directional locomotion where movement isn't confined to one axis; Simple Directional assumes clips are motion clips roughly evenly spaced around a circle, Freeform variants handle uneven or non-circular clip layouts at higher computational cost. Clamp or normalize the input parameters to the range the tree was authored for — feeding an unclamped value (e.g. raw CharacterController.velocity.magnitude past the run clip's threshold) causes the tree to keep sampling the extreme child clip, which reads as jitter or a stuck pose rather than a smooth cap.

// Feed a 2D freeform-directional blend tree keyed on MoveX/MoveZ.
void Update()
{
    Vector2 move = Vector2.ClampMagnitude(_inputVector, 1f); // keep inside the tree's authored range
    _animator.SetFloat("MoveX", move.x);
    _animator.SetFloat("MoveZ", move.y);
}

Animation Layers & Avatar Masks

Animator layers stack on top of the base layer, each with a weight (0–1) and a blend mode: Override replaces the underlying pose for masked bones, Additive adds delta motion on top of it (used for lean, breathing, recoil). Pair a layer with an AvatarMask (Manual/class-AvatarMask.html) to restrict it to specific humanoid body parts or explicit transform paths — e.g. an "Aim" layer masked to the upper body blends an aim-offset pose over locomotion running on the base layer, without the aim layer's arm motion overriding leg motion from the base layer. A layer with weight 0 still costs evaluation time unless disabled; set weight, don't just leave it at zero expecting it to skip work for free.

// Fade an upper-body aim layer in/out based on whether the player is aiming.
static readonly int AimLayer = -1; // resolved once via GetLayerIndex
void Awake() => AimLayerIndex = _animator.GetLayerIndex("Aim");

void Update()
{
    float target = _isAiming ? 1f : 0f;
    float current = _animator.GetLayerWeight(AimLayerIndex);
    _animator.SetLayerWeight(AimLayerIndex, Mathf.MoveTowards(current, target, Time.deltaTime * 4f));
}

Root Motion

Root motion is the translation/rotation baked into a clip's root bone, extracted per-frame as Animator.deltaPosition/deltaRotation and, when Animator.applyRootMotion is true, applied automatically to the GameObject's transform before physics runs. Pick exactly one authority for the object's position/rotation each frame: either root motion (applyRootMotion = true, no manual transform writes in Update) or code-driven movement (applyRootMotion = false, e.g. a CharacterController.Move call) — mixing both means two systems write the same transform in the same frame and the result drifts or stutters depending on execution order. To intercept and modify root motion before it's applied (e.g. to add lateral movement while keeping the clip's forward motion, or to redirect motion toward a target), implement OnAnimatorMove on a component on the same GameObject; Unity calls it instead of applying deltaPosition/deltaRotation automatically, and the callback is responsible for writing the transform (or CharacterController.Move) itself using animator.deltaPosition/animator.deltaRotation.

// Intercept root motion instead of letting the Animator apply it automatically.
void OnAnimatorMove()
{
    Vector3 delta = _animator.deltaPosition;
    delta.y = 0f; // strip vertical root motion; gravity is handled separately
    _characterController.Move(delta);
    transform.rotation *= _animator.deltaRotation;
}

Animation Import & Rig Configuration

Clips baked into an imported model (FBX, etc.) are configured on the model's Rig tab (Manual/FBXImporter-Rig.html): Animation Type is Humanoid (retargetable across skeletons sharing a compatible bone structure), Generic (non-humanoid skeletons, faster but not retargetable), or Legacy (old Animation component workflow, avoid for new work). Humanoid requires a valid Avatar definition — Unity attempts auto-mapping from the model's bone names to the Humanoid bone set, but complex or non-standard rigs (per Manual/UsingHumanoidChars.html) often need the mapping fixed manually in the Avatar configuration view before the Animator will play clips correctly. AnimationClip assets sliced from a single imported take (Splitting Animations) carry their own loop-time, root-transform-rotation/position, and curve settings independent of the source file's global settings — a clip that visibly "pops" at its loop point almost always has Loop Time on without Loop Pose/root-transform matching configured.

Animation Rigging / IK

Animation Rigging (package, Manual/com.unity.animation.rigging.html — landing page only locally) layers procedural bone adjustment on top of baked Animator output using a RigBuilder component plus one or more Rig containers holding constraint components (Two Bone IK, Multi-Aim, Multi-Parent, Chain IK, Damped Transform, Override Transform). RigBuilder builds a Playable graph that evaluates after the Animator produces its base pose each frame, so constraints correct or override that pose rather than fighting it; each constraint has its own weight (0–1) for blending the procedural correction in and out at runtime, and Rig components themselves have a weight that scales every constraint inside them together. This is preferable to hand-writing bone Transform manipulation in LateUpdate because it composes with the existing Animator pose, supports weight-based blending, and is authored visually. The built-in (non-package) constraint components in Manual/constraint-components.html (Position/Rotation/Aim/Parent/Scale/LookAt Constraint) solve a related but distinct problem — constraining a plain Transform to follow one or more source transforms, independent of any Animator — useful for props, cameras, or non-animated rigs rather than for correcting a Humanoid's baked pose.

For per-frame IK driven directly from code rather than the Rigging package (foot placement against terrain, aiming a weapon bone at a target), implement OnAnimatorIK on a component on the Animator's GameObject and call Animator.SetIKPosition/SetIKPositionWeight/SetIKRotation/SetIKRotationWeight for the relevant AvatarIKGoal (LeftFoot, RightFoot, LeftHand, RightHand) — this only works on Humanoid rigs with IK Pass enabled on that Animator layer.

// Runtime hand IK toward a target, using the Animator's built-in humanoid IK pass.
public Transform aimTarget;
[Range(0, 1)] public float ikWeight = 1f;

void OnAnimatorIK(int layerIndex)
{
    if (aimTarget == null) return;
    _animator.SetIKPositionWeight(AvatarIKGoal.RightHand, ikWeight);
    _animator.SetIKRotationWeight(AvatarIKGoal.RightHand, ikWeight);
    _animator.SetIKPosition(AvatarIKGoal.RightHand, aimTarget.position);
    _animator.SetIKRotation(AvatarIKGoal.RightHand, aimTarget.rotation);
}

Timeline & Cutscenes

Timeline (package, Manual/com.unity.timeline.html — landing page only locally) authors a TimelineAsset containing tracks (Animation, Audio, Activation, Control, and others) bound at runtime to scene objects; a PlayableDirector component (Manual/class-PlayableDirector.html, ScriptReference/Playables.PlayableDirector.html) references the asset and holds the actual track-to-object bindings for a given scene instance, then drives playback. Use Timeline for authored, fixed-duration sequences — cutscenes, scripted multi-actor choreography, timed VFX/audio/camera-cut sequences — rather than coroutines chaining yield return new WaitForSeconds(...) calls, because Timeline gives you a visual, scrubbable, re-orderable representation and each track's evaluation is driven by a single graph time rather than independent per-effect timers that can drift out of sync with each other.

// Play a cutscene Timeline asset and react when it finishes.
public PlayableDirector cutsceneDirector;

void PlayCutscene()
{
    cutsceneDirector.stopped += OnCutsceneStopped;
    cutsceneDirector.Play(); // uses the asset/bindings already set on the component
}

void OnCutsceneStopped(PlayableDirector director)
{
    director.stopped -= OnCutsceneStopped;
    ReenablePlayerControl();
}

PlayableDirector.playOnAwake controls whether the sequence starts automatically when the scene loads — leave it off for cutscenes triggered by gameplay events and call Play() explicitly. Generic (non-serialized) bindings can be set at runtime with SetGenericBinding(trackAsset, target) before calling Play(), useful when the bound object is instantiated or resolved dynamically rather than fixed in the scene.

Cinemachine Virtual Cameras

Cinemachine (package, Manual/com.unity.cinemachine.html — landing page only locally) replaces hand-rolled camera-follow scripts with self-contained virtual camera components that each define Follow/LookAt targets and framing/composition rules; a CinemachineBrain component on the actual scene Camera continuously reads whichever virtual camera currently has the highest priority and blends the real camera toward it, smoothly cross-fading position/rotation/FOV when priority switches cause a different virtual camera to become active. Prefer raising/lowering a virtual camera's Priority (or enabling/disabling it) over writing custom camera-switch logic — the brain handles the blend curve and timing for you, including during gameplay-triggered camera changes (entering an aim mode, a cutscene camera taking over, a trigger-volume framing shot).

// Switch active camera by priority; CinemachineBrain handles the blend.
public CinemachineCamera aimCamera; // highest priority while aiming
int _defaultPriority;

void OnAimStart()
{
    _defaultPriority = aimCamera.Priority;
    aimCamera.Priority = 20; // above the default follow camera's priority
}

void OnAimEnd() => aimCamera.Priority = _defaultPriority;

Because the package manual isn't available locally beyond the landing stub, verify exact component/property names (e.g. current-version class naming — Cinemachine 3.x renamed CinemachineVirtualCamera to CinemachineCamera and restructured the component-based body/aim/noise setup) against the live docs before writing code that depends on precise API surface.

Common Mistakes

MistakeFix
Setting animation state every Update()Bypasses the state machine; set parameters on change, drive transitions from them
Root motion fights manual movement codePick one authority for transform position/rotation per frame — either applyRootMotion or code, never both
Rigging constraints not applyingRigBuilder missing/disabled on the GameObject, or the constraint's/Rig's weight is 0
Timeline not playing at runtimePlay On Awake off, or a track has no bound target in the scene's PlayableDirector bindings
Cinemachine cameras never blendNo CinemachineBrain on the real Camera, or two vcams share the same priority
Blend tree jitter at extremesInput parameter exceeds the thresholds authored in the tree; clamp/normalize it before SetFloat
Layer has no visible effectLayer weight is 0, or the layer's AvatarMask excludes the bones you expect it to affect
Additive layer causes exaggerated/broken posesSource clip for the additive layer wasn't authored against the correct reference pose; re-author with the additive reference frame set correctly
Humanoid clip refuses to play or plays corruptedAvatar auto-mapping failed on a non-standard rig; open the Avatar configuration view on the Rig tab and fix bone mapping manually
Clip pops at loop pointLoop Time enabled without matching root position/rotation curves (Loop Pose) configured on the clip
SetTrigger fires the transition twice or gets "stuck"Trigger consumed on a frame the target transition's conditions weren't otherwise met yet; verify exit-time/condition combination, or call ResetTrigger defensively on state exit
OnAnimatorIK never firesIK Pass checkbox not enabled on that Animator layer, or the rig isn't Humanoid
Animation Rigging pose "snaps" when a constraint's weight changesWeight changed instantly instead of blended over time (e.g. Mathf.MoveTowards/tween the weight each frame)
PlayableDirector plays but nothing visibly changesGeneric bindings not set (SetGenericBinding) before Play() for tracks whose targets aren't wired in the Editor
Cinemachine follow camera lags or overshoots badlyDamping values tuned for a different target speed; re-tune Body damping against actual gameplay movement speed rather than editor-preview speed
Mixing Animator-driven root motion with Cinemachine follow dampingCamera lag amplifies visible root-motion pops; increase damping or smooth root motion input before both interact

Quick Reference

Component/ClassPurpose
AnimatorRuntime component driving an Animator Controller; exposes parameters, layers, IK, playback control
AnimatorControllerEditor asset defining states, transitions, parameters, layers
AnimatorControllerParameterBool/Int/Float/Trigger definition read by transition conditions
AnimatorStateInfo / AnimatorTransitionInfoRuntime info structs for the currently playing state / active transition
Blend Tree (1D/2D)Motion node blending multiple clips by one or two float parameters
StateMachineBehaviourScript base class attached to a state/sub-state-machine for scoped callbacks
AnimationClipKeyframe/curve data asset; carries loop, root-motion, and event settings
AnimatorOverrideControllerSwaps clips on an existing controller's states without duplicating the graph
RuntimeAnimatorControllerBase class shared by AnimatorController and AnimatorOverrideController
AvatarMaskBody-part/transform-path mask used by Animator layers and by rig constraints
AvatarHumanoid bone-mapping asset produced by the Rig import tab
Built-in Constraints (Position/Rotation/Aim/Parent/Scale/LookAt)Non-package transform constraints, independent of the Animator
Rig / RigBuilderAnimation Rigging package container evaluated after the Animator's base pose
Rigging constraints (Two Bone IK, Multi-Aim, Multi-Parent, Chain IK, Damped Transform, Override Transform)Procedural bone adjustment within a Rig
PlayableDirectorPlays a Timeline asset, holds/binds tracks to scene objects, exposes Play/Pause/Stop/time
PlayableGraph / Playable / PlayableBehaviourLower-level Playables API underlying both the Animator and Timeline
TimelineAsset / Tracks (Animation, Audio, Activation, Control)Authored sequence data played back by a PlayableDirector
Cinemachine Virtual Camera (CinemachineCamera in Cinemachine 3.x)Self-contained camera behavior: follow, look-at, composition
CinemachineBrainBlends the real Camera between whichever virtual camera has top priority
MonoBehaviour.OnAnimatorMoveCallback for intercepting/redirecting root motion before it's applied
MonoBehaviour.OnAnimatorIKCallback fired during the Animator's IK pass for scripted bone-goal IK

Advanced Notes

  • Rigging constraint stacking order matters. Constraints inside a Rig (and across multiple Rig components under one RigBuilder) evaluate top-to-bottom in the order they're listed/laid out, each one operating on the pose the previous constraint left behind. A foot-IK constraint that must react to a look-at/aim constraint's output (or vice versa) needs to be ordered accordingly, and if two constraints drive the same bone, whichever evaluates later wins unless their weights are deliberately partial. Split unrelated corrections (e.g. left-arm aim vs foot placement) into separate Rig components when you need independent enable/disable or weight control over each without affecting the other.
  • Multiple Rig components let you group and gate corrections independently. A RigBuilder can hold several Rig layers, each with its own weight — useful for turning off an entire category of procedural correction (e.g. all combat-related aim/look IK) with one weight change instead of toggling every constraint individually.
  • StateMachineBehaviour on sub-state machines. OnStateMachineEnter/OnStateMachineExit fire on behaviours attached to a sub-state machine node itself (not an individual state) when execution enters/exits that nested graph — useful for setup/teardown shared by every state inside the sub-machine (e.g. locking a shared resource for the duration of a "Cutscene" sub-state-machine).
  • Animator.Update(deltaTime) for manual stepping. Passing a controlled delta time (instead of relying on automatic per-frame update) lets you scrub or step the Animator deterministically — relevant for tools, replay systems, or netcode reconciliation where the Animator's state needs to be advanced to an exact simulated time rather than wall-clock frame time. Combine with AnimatorUpdateMode.Manual (ScriptReference/AnimatorUpdateMode.html locally lists Normal/Fixed/UnscaledTime, but Manual stepping is done by calling Update() yourself while update mode logic is handled at the call-site).
  • AnimatorOverrideController for clip variants without graph duplication. Instead of duplicating an entire Animator Controller to swap a character's weapon-attack clips (sword vs axe), layer an AnimatorOverrideController on top of the base RuntimeAnimatorController and override just the clips that differ; assign the override controller to Animator.runtimeAnimatorController at runtime to swap the whole clip set in one call.
  • Timeline execution order relative to root motion and Rigging. A Timeline Animation Track can drive the same Animator that also has Animation Rigging constraints and/or scripted root motion; because the Playables graph evaluates the Animator's output first and Rigging constraints after, a Timeline-driven animation still gets corrected by any active Rig — but if the Timeline track also carries root motion, make sure only one system (Timeline vs gameplay code) is authoritative over the transform for the sequence's duration, same rule as ordinary root motion.
  • Timeline Signal Emitters/Receivers and custom Marker/Track types are real Timeline package features (emitting a SignalAsset from a point on a track to trigger a SignalReceiver's UnityEvent, or authoring custom PlayableAsset/PlayableBehaviour tracks) but there is no local Manual page covering them — the docs root has no Signal*.html file under Manual/. Confirm exact API (SignalEmitter, SignalReceiver, SignalAsset) against the live package docs before writing code that depends on it.
  • PlayableGraph is the shared substrate. Both Animator (internally) and PlayableDirector/Timeline build and evaluate a PlayableGraph of Playable nodes; Animator.playableGraph exposes the Animator's own graph for advanced use (e.g. injecting a custom Playable to blend in procedural animation below the Rigging layer). This is an advanced/rarely-needed integration point — most gameplay code should stay at the Animator/PlayableDirector level.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.