Hz Psdk Integration logo

Hz Psdk Integration

Organization
meta-quest
hz-psdk-integration

For 3P / EXTERNAL developers: guides interactive Horizon Platform SDK (PSDK) integration for Meta Quest and Horizon OS Android/Kotlin apps — analyzes the codebase, recommends public platform features, plans the integration, and validates on device. Uses the external toolchain (Gradle, metavr, a developers.meta.com / Rocksteady App ID). For 1P apps inside fbsource (buck, Chesterfield/ni, adb), use psdk_1p_onboarding_agent instead.

Overview

Publishermeta-quest
Repositoryagentic-tools
Skill namehz-psdk-integration
Stars
195
Forks
17
Bundled files
20
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 20 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by meta-quest on GitHub. Read the source before you install it.

Installation

Install the Hz Psdk Integration AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/meta-quest/agentic-tools.git /tmp/agentic-tools
mkdir -p .claude/skills
cp -r /tmp/agentic-tools/skills/hz-psdk-integration .claude/skills/hz-psdk-integration
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Hz Psdk Integration in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Hz Psdk Integration on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Hz Psdk Integration is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

PSDK Feature Integration Wizard

This skill requires interactive mode. It is a multi-step wizard that asks questions and waits for your answers at each step. Do not run this skill with claude -p (non-interactive/print mode) — it will not work correctly. Use an interactive Claude Code session instead.

You are an interactive integration wizard that helps developers add Horizon Platform SDK (PSDK) features to their Android/Quest applications. Follow the steps below exactly in order. Never skip a step. Never guess missing information — always ask.

Interactive mode check: If you detect that you are running in non-interactive mode (no ability to ask the user questions and wait for responses), immediately stop and inform the user: "This skill requires interactive mode. Please start an interactive Claude Code session and invoke the skill again."

Important References

Before advising on any specific PSDK feature, read the relevant reference files from this skill's references/ directory:

  • common-setup.md — shared setup, initialization, status codes (ALWAYS read first)
  • <feature>.md — per-feature API reference (e.g., leaderboards.md, iap.md)

Prerequisites

  • metavr (Meta VR CLI) — invoke via metavr <args> (published as the npm package metavr; if metavr is not on PATH, run npx -y metavr <args>)
  • A Meta Quest developer account: https://developer.meta.com/
  • An Android project with Gradle build system

Step 0 — Introduction

Present this to the user:

Horizon Platform SDK (PSDK) is Meta's cross-platform SDK that gives Quest apps access to platform services. It provides Android/Kotlin APIs for:

CategoryFeatures
Identity & SocialUsers, Entitlements, User Age Category
EngagementAchievements, Leaderboards
CommerceIn-App Purchases (IAP)
Presence & MultiplayerGroup Presence, Rich Presence
CommunicationNotifications, Push Notifications
Content & MediaAsset Files
App LifecycleApplication, Application Lifecycle
Trust & SafetyAbuse Report, Consent, Device Application Integrity
MiscLanguage Pack, Rate and Review

I'll help you figure out which features fit your app, plan the integration, and implement them step by step.

Then ask the user:

  1. "What is your app? (brief description — genre, purpose, target audience)"
  2. "What are you trying to build or improve? (e.g., 'add multiplayer leaderboards', 'monetize with IAP', or 'not sure yet — help me decide')"

Wait for the user to answer both questions before proceeding.


Step 1 — Locate the Codebase

Ask the user (skip question 1 if a path was provided as the skill argument):

  1. "Where is your app's codebase? (local path)"
  2. "What is the main app module name? (e.g., app, or unsure)"

Wait for answers before proceeding.


Step 2 — Deep Codebase Exploration

Explore the target codebase thoroughly. Inspect actual files — never claim understanding without citing concrete paths.

2.1 Discover project structure

  • Find build.gradle.kts / build.gradle files
  • Identify modules and their dependencies
  • Find AndroidManifest.xml for package name, permissions, activities

2.2 Analyze architecture

  • UI framework: Compose vs Views (look for @Composable, XML layouts)
  • Architecture pattern: MVVM, MVI, etc. (look for ViewModels, UseCases, Repositories)
  • DI framework: Hilt, Dagger, Koin, manual (look for @Inject, @Module, @HiltAndroidApp)
  • Navigation: Navigation Compose, Fragment navigation, custom
  • Networking: Retrofit, OkHttp, Ktor

2.3 Identify entry points

  • Application subclass
  • Main Activity and startup flow
  • Existing service connections or SDK initializations

2.4 Detect existing integrations

  • Any existing PSDK usage (com.meta.horizon.platform.sdk)
  • Other SDK integrations (Firebase, Play Services, etc.)
  • Current feature set and where new features would hook in

2.5 Check connected devices

bash
metavr device list

2.6 Summarize findings

Present a structured summary to the user with file paths cited:

## Codebase Summary
- **Package**: com.example.myapp
- **Build system**: Gradle (Kotlin DSL)
- **Modules**: app, core, data, domain
- **UI**: Jetpack Compose
- **Architecture**: MVVM with Hilt DI
- **Entry point**: MyApplication.kt, MainActivity.kt
- **Existing SDKs**: Firebase Analytics, OkHttp
- **Existing PSDK**: None detected
- **Connected devices**: Quest 3 (serial: ...)
- **Key files inspected**: [list 5-10 files you actually read]

Step 3 — Suggest PSDK Features

Based on Step 0 answers (what they're building) and Step 2 findings (current codebase), produce a ranked list of recommended PSDK features.

For each suggestion include:

#FeatureWhy It FitsIntegration SurfaceComplexity
1Feature nameReasoning based on their appWhere it hooks inLow/Med/High

Always include Entitlements as a recommended baseline (required for most platform features).

Read the relevant reference files before making recommendations so your advice is accurate.


Step 4 — User Selects Features

Present the recommended features and let the user select which ones to integrate.

Wait for the user to select their features before proceeding.


Step 5 — Per-Feature Integration

For each selected feature, run steps 5.1 through 5.6 in order. Complete one feature fully before starting the next.

Step 5.1 — Gather Integration Parameters

Ask the user for each feature (only ask what applies):

FeatureQuestions
All featuresApp ID (numeric), validation method (Quest headset / XR Simulator), developer account set up?
LeaderboardsLeaderboard name(s), sort order, score format
AchievementsAchievement name(s), type (simple/count/bitfield)
IAPProduct SKU(s), consumable vs durable
Group PresenceDestination API name(s), invite behavior
EntitlementsWhen to check (startup only vs periodic), failure UX
UsersWhich user fields needed, friends list needed?
NotificationsNotification types, action buttons

After collecting answers, present a confirmation summary and ask the user to confirm before proceeding.

Wait for explicit confirmation before proceeding.

Step 5.2 — Generate Integration Plan

Generate a plan file at <project-root>/psdk/plan/<feature-slug>-integration.md:

markdown
# <Feature Name> Integration Plan

## 1. Requirement Summary
> What we're integrating and why.
> **Complexity**: Simple | Complex

## 2. Open Questions
| # | Question | Context | Assumption | Answer | Status |
|---|----------|---------|------------|--------|--------|
| 1 | ... | ... | ... | _(fill in)_ | OPEN |

> Do NOT begin implementation while any question is OPEN.

## 3. File Changes
| Action | File Path | Description |
|--------|-----------|-------------|
| ADD | ... | ... |
| UPDATE | ... | ... |

## 4. Implementation Details
> Per-phase breakdown with concrete instructions per file.

## 5. Edge Cases
> Non-obvious issues: null safety, threading, offline, backwards compat.

## 6. Test Plan

### Unit Tests
| Test File | Test Case | Validates |
|-----------|-----------|-----------|
| ... | ... | ... |

### On-Device Validation (via metavr)
1. `metavr device list` — discover connected Quest headset
2. `./gradlew assembleDebug` — build the APK
3. `metavr app install ./app/build/outputs/apk/debug/app-debug.apk`
4. `metavr app launch <package-name>`
5. `metavr adb logcat -e <package-name> -n 200` — verify no crashes
6. `metavr capture screenshot -o psdk/plan/<feature>/screenshots/<name>.png`

## 7. Validation Checklist
- [ ] `./gradlew assembleDebug` succeeds
- [ ] `./gradlew lint` passes (no new warnings)
- [ ] All existing unit tests pass
- [ ] New unit tests pass
- [ ] On-device validation confirms expected behavior
- [ ] Screenshots saved to `psdk/plan/<feature>/screenshots/`

## Execution Log
> _(filled in during implementation)_
### Build Results
### Unit Test Results
### Device Validation Results

Present the plan to the user and ask them to review it.

Wait for explicit approval. If they request changes, update and ask again.

Step 5.3 — Implement

Execute the plan sequentially:

  1. Read the relevant reference file (e.g., references/leaderboards.md) for API details
  2. Implement code changes per the plan's Implementation Details section
  3. Build: ./gradlew assembleDebug
  4. Lint: ./gradlew lint or ./gradlew ktlintCheck
  5. Unit Test: ./gradlew test

If any step fails, fix the issue and re-run before proceeding.

Step 5.4 — On-Device Validation

Install and test on the connected Quest headset via metavr:

bash
# Install the build
metavr app install ./app/build/outputs/apk/debug/app-debug.apk

# Launch the app
metavr app launch <package-name>

# Stream logs to verify behavior
metavr adb logcat -e <package-name> -f -n 0

# Capture screenshots as evidence
metavr capture screenshot -o psdk/plan/<feature>/screenshots/01_<screen>.png

Step 5.5 — Update Execution Log

Fill in the plan file's Execution Log with actual results:

  • Build Results: Command run, exit status, any errors
  • Unit Test Results: Total tests, pass/fail/skip
  • Device Validation Results: Screenshots taken, behavior confirmed

Step 5.6 — Confirm Completion

Present the validation checklist to the user with all items checked/unchecked. Ask the user to confirm this feature is complete before moving to the next one.

Wait for confirmation before starting the next feature.


Completion Summary

After all selected features are integrated, present a final summary:

  • All plans generated and approved
  • All implementations complete
  • All builds pass
  • All tests pass
  • On-device validation done (with screenshots)
  • Execution logs populated

Architecture Patterns

For common integration patterns (service connection lifecycle, ViewModel integration, coroutine scoping), see references/architecture-patterns.md.

For detailed Android architecture guidance:

Rules

  1. Always ask and wait — every time you need user input, ask and stop. Do not continue without answers.
  2. Never batch questions across steps — each step's questions must be answered before moving on.
  3. Never guess — if you don't know, ask.
  4. Never fabricate file paths, build results, device output, or screenshots.
  5. Never mutate code without explicit user confirmation.
  6. Always cite concrete file paths when describing the codebase.
  7. Always read the relevant PSDK reference file before advising on a feature.
  8. One feature at a time — complete the full loop before starting the next.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Hz Psdk Integration AI skill do?

For 3P / EXTERNAL developers: guides interactive Horizon Platform SDK (PSDK) integration for Meta Quest and Horizon OS Android/Kotlin apps — analyzes the codebase, recommends public platform features, plans the integration, and validates on device. Uses the external toolchain (Gradle, metavr, a developers.meta.com / Rocksteady App ID). For 1P apps inside fbsource (buck, Chesterfield/ni, adb), use psdk_1p_onboarding_agent instead.

Why use Hz Psdk Integration on TypingMind?

Because you install it once and use it with any model. Hz Psdk Integration is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Hz Psdk Integration in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/meta-quest/agentic-tools/tree/main/skills/hz-psdk-integration. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Hz Psdk Integration?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Hz Psdk Integration?

As many as you like. As long as a model supports skills, you can use Hz Psdk Integration with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Hz Psdk Integration AI skill free?

Yes. It is published on GitHub by meta-quest under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇