Agent skill

Hz Unity Face Tracking

by meta-quest in meta-quest/agentic-tools

Drive ARKit-blendshape-rigged head/face models in Unity with the wearer's facial expressions on Meta VR via Meta Movement SDK (face tracking + A2E).

Apache-2.0Auto-check passedGame Development

Install Hz Unity Face Tracking

skills CLI
$ npx skills add meta-quest/agentic-tools --skill hz-unity-face-tracking -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install meta-quest/agentic-tools hz-unity-face-tracking --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/meta-quest/agentic-tools.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/hz-unity-face-tracking .claude/skills/hz-unity-face-tracking && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
hz-unity-face-tracking
GitHub stars
215
Token cost
~3.7k tokens
SKILL.md length
1,435 words
Files
3 (incl. references)
Skills in repo
34
Repo updated
First seen
Licence
Apache-2.0

At a glance

Drive ARKit-blendshape-rigged head/face models in Unity with the wearer's facial expressions on Meta VR via Meta Movement SDK (face tracking + A2E).

  • Works in 6 steps: Install the script → Enable Movement SDK + permissions → Scene setup → …
  • A user has an FBX with the 52 ARKit blendshapes (any prefix
  • SKILL.md covers When to use, Prerequisites checklist, Approach (high level) and Eye tracking (DO THIS — face…, plus 5 more sections
  • Runs C# scripts from its folder

What it does

Hz Unity Face Tracking is an agent skill from meta-quest/agentic-tools. Drive ARKit-blendshape-rigged head/face models in Unity with the wearer's facial expressions on Meta VR via Meta Movement SDK (face tracking + A2E). Use when a user has an FBX with the 52 ARKit blendshapes (any prefix, L/R suffixes) and wants it to animate from face tracking on Quest Pro / Quest 3 / Quest 3S.

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files.

It sits in Game Development. It works with Android. The repository describes itself as: Agent Skills for Meta Quest/Horizon OS VR Development. The licence is Apache-2.0.

When your agent uses it

  • A user has an FBX with the 52 ARKit blendshapes (any prefix
  • L/R suffixes) and wants it to animate from face tracking on Quest Pro / Quest 3 / Quest 3S

Example prompts

  • “/hz-unity-face-tracking”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Install the script
  2. Enable Movement SDK + permissions
  3. Scene setup
  4. OVRManager — enable Audio as a data source (A2E)
  5. Trigger the mapping if the component already existed
  6. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit 3a8553d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (C#), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Hz Unity Face Tracking loads about 3.7k tokens when it runs, and up to ~6.9k if it reads all its reference files. Until then it costs about 84 tokens; SKILL.md has 1,435 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~84
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from meta-quest/agentic-tools at commit 3a8553d, republished under its Apache-2.0 licence (© meta-quest). 1,435 words, ~3,687 tokens.

Download SKILL.mdSave it as .claude/skills/hz-unity-face-tracking/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
hz-unity-face-tracking
description
Drive ARKit-blendshape-rigged head/face models in Unity with the wearer's facial expressions on Meta VR via Meta Movement SDK (face tracking + A2E). Use when a user has an FBX with the 52 ARKit blendshapes (any prefix, _L/_R suffixes) and wants it to animate from face tracking on Quest Pro / Quest 3 / Quest 3S.
license
Apache-2.0

Unity Face Tracking for ARKit-Rigged Models (Meta Movement SDK)

End-to-end recipe to make a head/face model rigged with the standard 52 ARKit blendshapes animate from the wearer's face on Meta VR. Uses the public OVRCustomFace extension hook — no OVR_INTERNAL_CODE, ships to 3P.

The model's blendshape names must follow the ARKit naming convention (camelCase, _L/_R suffixes, e.g. eyeBlink_L, jawOpen, mouthSmile_R). An optional prefix like blendShape2.eyeBlink_L is automatically stripped.

When to use

  • User has an FBX/GLB/mesh with ARKit-named blendshapes and wants it driven by Meta VR face tracking.
  • User asks: "animate this head with my face", "drive these blendshapes from face tracking", "use Movement SDK A2E with my model", "wire ARKit shapes to Meta VR".
  • Target device: Quest Pro, Quest 3, Quest 3S (Quest 2 is no-op — no face cameras).

Prerequisites checklist

  1. Quest face tracking-capable headset (Pro / 3 / 3S).
  2. Packages in Packages/manifest.json:
    • com.meta.xr.sdk.core (Meta XR Core — provides OVRFaceExpressions, OVRCustomFace)
    • com.meta.xr.sdk.movement (Meta Movement SDK — A2E + retargeting helpers)
  3. Assets/Oculus/OculusProjectConfig.asset (verify via Project Settings → Meta XR):
    • faceTrackingSupport: 1 (Supported) or 2 (Required)
    • eyeTrackingSupport: 1 if the rig has gaze
  4. Android manifest (Assets/Plugins/Android/AndroidManifest.xml) permissions:
    • <uses-feature android:name="oculus.software.face_tracking" android:required="false" />
    • <uses-permission android:name="com.oculus.permission.FACE_TRACKING" />
    • <uses-permission android:name="android.permission.RECORD_AUDIO" /> (required for A2E)
    • For eye gaze: oculus.software.eye_tracking + com.oculus.permission.EYE_TRACKING
  5. OVRCameraRig in the scene with OVRManager.FaceTrackingDataSources including Audio (A2E) — if you skip Audio, mouth motion is visual-only.

After any change to OculusProjectConfig, regenerate the manifest (see Regenerating the manifest below).

Approach (high level)

  1. Drop the ARKitOVRCustomFace script (in references/ARKitOVRCustomFace.cs) into the project.
  2. Add an OVRFaceExpressions component to the OVRCameraRig (or anywhere in the scene).
  3. On the GameObject that has the model's SkinnedMeshRenderer, add ARKitOVRCustomFace. Adding the component triggers Reset(), which auto-populates the blendshape→FaceExpression mapping by scanning the mesh's blendshape names.
  4. Wire the component's FaceExpressions field to the OVRFaceExpressions instance.
  5. For eye gaze: drop ARKitEyeGazeBlendshapeDriver in (see Eye tracking below).
  6. Press Play with Meta XR Link, or build APK and side-load. On first launch, accept the Face Tracking / Eye Tracking / Microphone permission prompts.

That's the whole flow. Details below.

Eye tracking (DO THIS — face expressions alone don't work)

Don't rely on OVRFaceExpressions.EyesLook* for eye gaze. Those fields are derived from face-camera visuals, not the dedicated eye tracker. On Quest Pro they're often zero or noisy even when face tracking is otherwise working. The right API is OVREyeGaze, which taps the eye tracker directly.

For ARKit rigs with eyeLook* blendshapes (no eye bones), this skill ships ARKitEyeGazeBlendshapeDriver:

  • Reads gaze rotation from two OVREyeGaze components (one per eye, TrackingMode = HeadSpace).
  • Computes rotation relative to a head reference (e.g. CenterEyeAnchor).
  • Decomposes pitch → eyeLookUp/Down_{L,R}, yaw → eyeLookIn/Out_{L,R} (with the ARKit "_In = toward nose" convention).
  • Writes weights in LateUpdate, so it overrides whatever ARKitOVRCustomFace wrote in Update.

For rigs with eye bones (no eyeLook* blendshapes), skip the blendshape decomposition and just parent OVREyeGaze to each eye bone with ApplyRotation = true — the component will rotate the bone directly.

Eye gaze setup (blendshape rigs)
  1. Create two empty GameObjects under CenterEyeAnchor (or your head transform): LeftEyeGaze, RightEyeGaze.
  2. Add OVREyeGaze to each. Set Eye = Left / Right, TrackingMode = HeadSpace, ApplyPosition = false, ApplyRotation = true, ConfidenceThreshold = 0.5.
  3. Add ARKitEyeGazeBlendshapeDriver to the head's SkinnedMeshRenderer GameObject (alongside ARKitOVRCustomFace). Wire leftEye, rightEye, and referenceFrame (= CenterEyeAnchor).
  4. Tweak maxAngleDeg (default 30°) and smoothing (default 0.4) to taste.

Step-by-step

1. Install the script

Copy references/ARKitOVRCustomFace.cs into Assets/Scripts/ARKitOVRCustomFace.cs. It defines the public, 3P-shippable ARKit ↔ OVR FaceExpression table and a MapBlendshapes() method that scans SkinnedMeshRenderer.sharedMesh.GetBlendShapeName(i), strips any prefix before the last ., lowercases, and matches against the table. Unmatched mesh blendshapes are set to OVRFaceExpressions.FaceExpression.Max (sentinel — skipped at runtime).

2. Enable Movement SDK + permissions

Project settings:

Project Settings → Meta XR → Face Tracking Support = Supported
Project Settings → Meta XR → Eye Tracking Support = Supported (if needed)

Then regenerate the manifest.

Regenerating the manifest

Against a live Editor, call the SDK's generator through run_script — the type resolves directly, so no reflection is needed:

csharp
// AgentScripts/UpdateManifest.cs
public static class UpdateManifest
{
    public static string Run()
    {
        OVRManifestPreprocessor.GenerateOrUpdateAndroidManifest(true);   // silentMode: true
        return "ok";
    }
}
bash
unity command run_script --file AgentScripts/UpdateManifest.cs --entry UpdateManifest.Run --format json

silentMode: true is required — without it the generator opens a modal dialog that blocks the request. Then confirm the face-tracking entries from the checklist above actually landed in Assets/Plugins/Android/AndroidManifest.xml. See hz-unity-meta-core-sdk for the full manifest workflow and the rule against hand-editing managed entries.

Alternatives: the Editor menu Meta → Tools → Update AndroidManifest.xml, or the meta_update_android_manifest tool if you are on a Unity MCP server with the Meta Unity extension.

3. Scene setup
Scene Hierarchy
├── OVRCameraRig                         (OVRQuickActionsAPI.AddOVRInteractionRig(), or the
│   │                                     OVRCameraRig prefab; meta_add_camerarig under MCP)
│   └── (add) OVRFaceExpressions         component
└── YourHeadModel
    └── ...SkinnedMeshRenderer GO...
        ├── SkinnedMeshRenderer          (existing)
        └── (add) ARKitOVRCustomFace     component
             └── FaceExpressions = the OVRFaceExpressions ref
             └── retargetingType = Custom (set automatically by base when overriding)
             └── Mappings[] = auto-filled on Reset()
             └── BlendShapeStrengthMultiplier = 100 (default; OVR weights are 0–1, mesh wants 0–100)

If the head has multiple SkinnedMeshRenderers (e.g. separate teeth/tongue meshes), add ARKitOVRCustomFace to each one.

4. OVRManager — enable Audio as a data source (A2E)

On OVRCameraRig's OVRManager component:

  • Face Tracking Data Sources → check Visual AND Audio (Audio = A2E; produces mouth shapes from microphone when the visual face cameras can't see something — talking, occlusion, etc.).
5. Trigger the mapping if the component already existed

MapBlendshapes() runs automatically when the component is added (Reset()) and from OnValidate() when Mappings is empty. If you need to remap manually (e.g. after re-importing the FBX), use the component's inspector context menu → Map Blendshapes, or from a script:

csharp
go.GetComponent<ARKitOVRCustomFace>().MapBlendshapes();

Against a live Editor via run_script, the project script's type is directly referenceable (it lives in Assets/), so just call it:

csharp
// AgentScripts/Remap.cs
using UnityEngine;

public static class Remap
{
    public static string Run(string modelName)
    {
        var smr = GameObject.Find(modelName).GetComponentInChildren<SkinnedMeshRenderer>();
        smr.gameObject.GetComponent<ARKitOVRCustomFace>().MapBlendshapes();
        return $"Remapped {smr.sharedMesh.blendShapeCount} blendshapes on {smr.name}";
    }
}
bash
unity command run_script --file AgentScripts/Remap.cs --entry Remap.Run --args '["YourHeadModel"]' --format json
unity command save_scene --format json

Under a Unity MCP server the OVR/MSDK types are not visible to the dynamic assembly, so the reflection-free workaround there is SendMessage:

csharp
GameObject.Find("YourHeadModel")
    .GetComponentInChildren<SkinnedMeshRenderer>().gameObject
    .SendMessage("MapBlendshapes", SendMessageOptions.RequireReceiver);
Show full SKILL.md (656 more words)Show less
6. Verify
  • In Editor, with Meta XR Link / Quest Link, enter Play mode and make faces. The model should mirror them. Driving that loop from the CLI:

    bash
    unity command clear_console --format json
    unity command editor_play --format json          # blocks until play mode is live
    # --- the wearer now makes faces; ask the user to confirm before continuing ---
    unity command get_console_logs --severity error --format json
    unity command editor_stop --format json

    Do not chain these four back to back. editor_stop immediately after editor_play leaves no time for anyone to make a face, so the check proves nothing. Enter Play mode, tell the user to make faces and report what they see, and only then read the log and stop.

  • On device, build APK, side-load (metavr app install <apk>), grant Face Tracking + Microphone permissions on first launch, and stream metavr adb logcat --follow --tag Unity while making faces to catch mapping errors.

  • Check the mapping at edit time: inspect the ARKitOVRCustomFace component. Mappings.Length should equal SkinnedMeshRenderer.sharedMesh.blendShapeCount. The Console log from MapBlendshapes() reports mapped X/N blendshapes — X should be 50 (or 52 if the FBX has all of them). Read the serialized array length without opening the Inspector — --field takes a SerializedProperty path, so it wants the [SerializeField] backing field _mappings on OVRCustomFace, not the public Mappings property, which is not serialized:

    bash
    unity command get_serialized_fields --target <head GO> --component ARKitOVRCustomFace --field _mappings --format json

Troubleshooting

SymptomCause / fix
mapped 0/N in ConsoleMesh blendshape names don't follow ARKit convention. Verify with mesh.GetBlendShapeName(i). Names must match e.g. eyeBlink_L, jawOpen — case-insensitive, prefix before last . is stripped.
Face is frozenOVRFaceExpressions not assigned, or scene has no OVRCameraRig/OVRManager with face tracking enabled. Check OVRFaceExpressions.FaceTrackingEnabled and ValidExpressions at runtime.
Mouth doesn't move when speakingA2E disabled. Enable Audio under OVRManager → Face Tracking Data Sources, and ensure RECORD_AUDIO permission is granted on device.
Eyes don't blinkMesh's eyelid shapes aren't named eyeBlink_L/_R. Either rename, or add a custom row to ARKitTable.
Eyes don't move (look around)You're relying on OVRFaceExpressions.EyesLook* instead of OVREyeGaze — switch to ARKitEyeGazeBlendshapeDriver.
Eye gaze in wrong directionNote the deliberate ARKit ↔ OVR swap: ARKit's eyeLookIn_L (eye looking nose-ward, i.e. right) maps to OVR EyesLookRightL. The table already does this — don't "fix" it.
Weights look half-strength or clampedBlendShapeStrengthMultiplier defaults to 100 because Unity blendshapes are 0–100 while OVR is 0–1. Don't lower this unless intentional.
cannot change access modifiers when overriding compile errorBase method is protected internal in another assembly. The override must use protected (not protected internal) — already correct in the supplied script.
_mappings out of sync with shared mesh assertion at StartMesh changed since mapping was generated. Re-run MapBlendshapes() via the component context menu.

ARKit ↔ OVR FaceExpression mapping (reference)

The 52 ARKit shapes don't 1:1 a FACS-based OVR enum. Notable choices baked into ARKitTable:

  • Centrally-named ARKit shapes that have L+R OVR pairs (browInnerUp, cheekPuff, mouthFunnel, mouthPucker, mouthRollLower, mouthRollUpper) pick only the L-side OVR expression. If your model has obviously asymmetric mouth/brow when the user uses these expressions and you want true symmetric drive, subclass and additively sum L+R in a custom MapBlendshapes (use SlothARKitFaceDriver-style per-blendshape sum). For most heads the L-only choice is fine because the face is roughly symmetric and the asymmetry is below visual threshold.
  • eyeLookIn/Out are deliberately swapped per side relative to OVR's left/right semantics (see Troubleshooting).
  • mouthClose → LipsToward (closest FACS analogue).
  • tongueOut → TongueOut (requires HorizonOS ≥ 65 + tongue tracking; otherwise stays at 0).

Files in this skill

  • SKILL.md — this file
  • references/ARKitOVRCustomFace.cs — drop-in OVRCustomFace subclass
  • references/ARKitEyeGazeBlendshapeDriver.cs — OVREyeGaze → eyeLook* blendshape driver (LateUpdate)

Why this approach (vs. alternatives)

  • Custom MonoBehaviour driver that reads OVRFaceExpressions[expr] and writes blendshape weights directly: works, but doesn't integrate with MSDK's correctives, eye constraints, or future retargeting upgrades. Use only if you can't extend OVRCustomFace.
  • OVRCustomFace + RetargetingType.ARKitBlendshapes: clean, but guarded behind #if OVR_INTERNAL_CODE in the public Oculus Integration package — not 3P-shippable.
  • OVRCustomFace + RetargetingType.Custom + GetCustomBlendShapeNameAndExpressionPairs override (this skill): fully public API, shippable, and gets all base-class behavior (data validity gating, weight scaling, mesh assertion).

© meta-quest, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (references) in skills/hz-unity-face-tracking of meta-quest/agentic-tools.

  • SKILL.md
  • references/ARKitEyeGazeBlendshapeDriver.cs
  • references/ARKitOVRCustomFace.cs

Open the folder on GitHubat commit 3a8553d

Compare with similar skills

Hz Unity Face Tracking next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Hz Unity Face Tracking compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Hz Unity Face Tracking this skillmeta-quest/agentic-tools215—~3.7kAutomated safety check: PassApache-2.0
Sokol Netelix22/Sokol.NET154—~2.8kAutomated safety check: PassMIT
Unity Vrc World SDK 3niaka3dayo/agent-skills-vrc-udon332—~7.8kAutomated safety check: PassMIT
Ue Buildgetsentry/sentry-unreal173—~1kAutomated safety check: PassMIT
Scenario Godot Performance Exportscenario-labs/skills931—~5.1kAutomated safety check: NotesMIT
Godot Admob Troubleshootpoingstudios/godot-admob-plugin632—~812Automated safety check: PassMIT

Similar skills

  • Sokol Net

    elix22/Sokol.NET

    Sokol.NET framework development — use for ANY work in this repo: creating or debugging examples, building/running for desktop/Android/iOS/Web, writing or compiling shaders, adding a new C/C++…

    154 GitHub stars~2.8k tokensUpdated yesterday
    Game DevelopmentAuto-check passed
  • Unity Vrc World SDK 3

    niaka3dayo/agent-skills-vrc-udon

    VRChat World SDK 3 guide for scene and Inspector setup, component placement, optimization, and upload.

    332 GitHub stars~7.8k tokensUpdated 25 days ago
    Game DevelopmentAuto-check passed
  • Ue Build

    getsentry/sentry-unreal

    Official

    Build the SentryPlayground sample project for a target platform

    173 GitHub stars~1k tokensUpdated yesterday
    Game DevelopmentAuto-check passed
  • A skill your agent uses when a Godot game stutters, drops frames, hitches when entering new areas, overheats a phone, or must ship: profiling and Performance monitors, CPU or GPU bound, draw calls…

    931 GitHub stars~5.1k tokensUpdated today
    Game DevelopmentAuto-check: notes
  • Godot Admob Troubleshoot

    poingstudios/godot-admob-plugin

    Provides instructions to diagnose ad loading errors, handle error codes, open the Ad Inspector, and resolve integration issues in GDScript and C.

    632 GitHub stars~812 tokensUpdated 8 days ago
    Game DevelopmentAuto-check passed
  • Godot Admob Mediation

    poingstudios/godot-admob-plugin

    Provides instructions to configure, integrate, and verify third-party mediation networks (AppLovin, Meta Audience Network, Unity Ads, etc.) in GDScript and C.

    632 GitHub stars~364 tokensUpdated 8 days ago
    Game DevelopmentAuto-check passed

More from meta-quest/agentic-tools

All 34 skills in this repo
  • Hz Android 2D Porting

    meta-quest/agentic-tools

    Guides porting existing Android 2D apps to Meta VR and Horizon OS — input adaptation, panel layout, and design requirements.

    215 GitHub stars~2.1k tokensUpdated 14 days ago
    Auto-check passed
  • Hz API Upgrade

    meta-quest/agentic-tools

    Upgrades Meta VR apps to newer Horizon OS SDK versions — migration guides, deprecated API replacements, changelog.

    215 GitHub stars~1.8k tokensUpdated 14 days ago
    Auto-check passed
  • Hz Iwsdk Webxr

    meta-quest/agentic-tools

    Builds WebXR experiences for Meta VR and Horizon OS using the Immersive Web SDK (IWSDK) — ECS architecture, Three.js integration, spatial UI.

    215 GitHub stars~3k tokensUpdated 14 days ago
    Auto-check passed
  • Hz Metavrx Layout SDK

    meta-quest/agentic-tools

    Build multi-window Meta Horizon OS experiences with the MetaVrx Layout SDK in Jetpack Compose or React Native.

    215 GitHub stars~855 tokensUpdated 14 days ago
    Auto-check passed
  • Hz New Project Creation

    meta-quest/agentic-tools

    Scaffolds new Meta VR and Horizon OS projects after the build path is selected — Standard Android, Meta Spatial SDK, Unity, Unreal, or WebXR.

    215 GitHub stars~2.3k tokensUpdated 14 days ago
    Auto-check passed
  • Hz Perfetto Debug

    meta-quest/agentic-tools

    Analyzes Meta VR and Horizon OS VR performance using Perfetto traces — frame timing, CPU/GPU bottlenecks, render pass analysis.

    215 GitHub stars~2.8k tokensUpdated 14 days ago
    Auto-check passed

Works with

Questions about Hz Unity Face Tracking

What does Hz Unity Face Tracking do?

Drive ARKit-blendshape-rigged head/face models in Unity with the wearer's facial expressions on Meta VR via Meta Movement SDK (face tracking + A2E). Hz Unity Face Tracking is an agent skill from meta-quest/agentic-tools. Drive ARKit-blendshape-rigged head/face models in Unity with the wearer's facial expressions on Meta VR via Meta Movement SDK (face tracking + A2E).

When should I use Hz Unity Face Tracking?

Hz Unity Face Tracking fits situations like: A user has an FBX with the 52 ARKit blendshapes (any prefix; L/R suffixes) and wants it to animate from face tracking on Quest Pro / Quest 3 / Quest 3S.

How do I install Hz Unity Face Tracking in Claude Code?

Run `npx skills add meta-quest/agentic-tools --skill hz-unity-face-tracking -a claude-code`. Or copy the skill folder (skills/hz-unity-face-tracking in meta-quest/agentic-tools) into .claude/skills/hz-unity-face-tracking in your project. Claude Code loads it when a task matches its description.

How do I install Hz Unity Face Tracking in Codex?

Run `npx skills add meta-quest/agentic-tools --skill hz-unity-face-tracking -a codex`. Or copy the skill folder (skills/hz-unity-face-tracking in meta-quest/agentic-tools) into .agents/skills/hz-unity-face-tracking in your project. Codex loads it when a task matches its description.

Can I use Hz Unity Face Tracking in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add meta-quest/agentic-tools --skill hz-unity-face-tracking -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hz-unity-face-tracking, .gemini/skills/hz-unity-face-tracking, .github/skills/hz-unity-face-tracking and .opencode/skills/hz-unity-face-tracking in your project.

What does Hz Unity Face Tracking need to run?

Going by SKILL.md and its folder, Hz Unity Face Tracking needs C# for the scripts in its folder.

Does Hz Unity Face Tracking access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Hz Unity Face Tracking safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Hz Unity Face Tracking use?

Hz Unity Face Tracking is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Hz Unity Face Tracking use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.2k tokens, read only when the agent opens those files.

What are the alternatives to Hz Unity Face Tracking?

Skills that share tags, products or a category with Hz Unity Face Tracking: Sokol Net (elix22/Sokol.NET, 154 stars), Unity Vrc World SDK 3 (niaka3dayo/agent-skills-vrc-udon, 332 stars), Ue Build (getsentry/sentry-unreal, 173 stars) and Scenario Godot Performance Export (scenario-labs/skills, 931 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Hz Unity Face Tracking?

meta-quest (a GitHub organization) maintains it in meta-quest/agentic-tools, which has 215 GitHub stars. The repository holds 34 skills in this directory. The repository was last updated on September 24, 2026.

Source: meta-quest/agentic-tools on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.