# Create Your Own Agent Skill

Omniverse libraries work well as tools for agents because the libraries ship with focused agent skills. A skill does **not** add a new feature to `ovrtx` or `ovstream`. It tells an agent when to use an existing capability, which version-specific sources to read, which order and constraints matter, and what evidence proves success.

You’ve now used both kinds of skill composition:

- One hero skill with small supporting skills: replay-safe named cube poses.
- A workflow of several focused skills: camera composition, semantic output, and lidar readback.

**Why this matters for a robot-ready scene:** A correct one-off result is not yet a dependable production workflow. Robotics teams need the scene rules, authoring boundaries, version-specific procedures, and validation evidence to remain consistent across assets and iterations. A focused skill lets an agent repeat that established method without pretending the agent can judge spatial correctness on its own.

**Your 3D skills at work:** Pipeline TDs, technical artists, supervisors, and lead artists already turn craft knowledge into publishing rules, tools, templates, and review gates. Creating an agent skill is the same translation: you encode the intent, constraints, source of truth, and proof that make a 3D workflow safe enough to reuse for physical AI.

What a skill is - and what makes a good one. Step through the slides, then encode a rule from your own discipline.

### 1

Capability vs. Guidance

A skill points at power it doesn’t add.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-tools slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M5.433 2.304A4.492 4.492 0 0 0 3.5 6c0 1.598.832 3.002 2.09 3.802.518.328.929.923.902 1.64v.008l-.164 3.337a.75.75 0 1 1-1.498-.073l.163-3.33c.002-.085-.05-.216-.207-.316A5.996 5.996 0 0 1 2 6a5.993 5.993 0 0 1 2.567-4.92 1.482 1.482 0 0 1 1.673-.04c.462.296.76.827.76 1.423v2.82c0 .082.041.16.11.206l.75.51a.25.25 0 0 0 .28 0l.75-.51A.249.249 0 0 0 9 5.282V2.463c0-.596.298-1.127.76-1.423a1.482 1.482 0 0 1 1.673.04A5.993 5.993 0 0 1 14 6a5.996 5.996 0 0 1-2.786 5.068c-.157.1-.209.23-.207.315l.163 3.33a.752.752 0 0 1-1.094.714.75.75 0 0 1-.404-.64l-.164-3.345c-.027-.717.384-1.312.902-1.64A4.495 4.495 0 0 0 12.5 6a4.492 4.492 0 0 0-1.933-3.696c-.024.017-.067.067-.067.16v2.818a1.75 1.75 0 0 1-.767 1.448l-.75.51a1.75 1.75 0 0 1-1.966 0l-.75-.51A1.75 1.75 0 0 1 5.5 5.282V2.463c0-.092-.043-.142-.067-.159Z"></path></svg> A skill guides an **existing** `ovrtx` or `ovstream` capability.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-book slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg> It routes the agent to the **version-specific** sources it should read.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-alert slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg> It **cannot** invent a library API that the SDK does not expose.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-check-circle slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm1.5 0a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm10.28-1.72-4.5 4.5a.75.75 0 0 1-1.06 0l-2-2a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l1.47 1.47 3.97-3.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg> It guides at build time; the finished application runs its own code.

### 2

Two Ways to Compose Skills

You have already used both.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-milestone slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M7.75 0a.75.75 0 0 1 .75.75V3h3.634c.414 0 .814.147 1.13.414l2.07 1.75a1.75 1.75 0 0 1 0 2.672l-2.07 1.75a1.75 1.75 0 0 1-1.13.414H8.5v5.25a.75.75 0 0 1-1.5 0V10H2.75A1.75 1.75 0 0 1 1 8.25v-3.5C1 3.784 1.784 3 2.75 3H7V.75A.75.75 0 0 1 7.75 0Zm4.384 8.5a.25.25 0 0 0 .161-.06l2.07-1.75a.248.248 0 0 0 0-.38l-2.07-1.75a.25.25 0 0 0-.161-.06H2.75a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h9.384Z"></path></svg> **Hero + supporting** - one lead skill with small helpers, like replay-safe cube poses.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-stack slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg> **A workflow** - several focused skills, like camera composition, semantics, and lidar.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-shield-check slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg> A workflow skill routes to focused library skills and preserves their boundaries.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-tools slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M5.433 2.304A4.492 4.492 0 0 0 3.5 6c0 1.598.832 3.002 2.09 3.802.518.328.929.923.902 1.64v.008l-.164 3.337a.75.75 0 1 1-1.498-.073l.163-3.33c.002-.085-.05-.216-.207-.316A5.996 5.996 0 0 1 2 6a5.993 5.993 0 0 1 2.567-4.92 1.482 1.482 0 0 1 1.673-.04c.462.296.76.827.76 1.423v2.82c0 .082.041.16.11.206l.75.51a.25.25 0 0 0 .28 0l.75-.51A.249.249 0 0 0 9 5.282V2.463c0-.596.298-1.127.76-1.423a1.482 1.482 0 0 1 1.673.04A5.993 5.993 0 0 1 14 6a5.996 5.996 0 0 1-2.786 5.068c-.157.1-.209.23-.207.315l.163 3.33a.752.752 0 0 1-1.094.714.75.75 0 0 1-.404-.64l-.164-3.345c-.027-.717.384-1.312.902-1.64A4.495 4.495 0 0 0 12.5 6a4.492 4.492 0 0 0-1.933-3.696c-.024.017-.067.067-.067.16v2.818a1.75 1.75 0 0 1-.767 1.448l-.75.51a1.75 1.75 0 0 1-1.966 0l-.75-.51A1.75 1.75 0 0 1 5.5 5.282V2.463c0-.092-.043-.142-.067-.159Z"></path></svg> Pick the shape that matches how repeatable your request really is.

### 3

Anatomy of a Good Skill

Concise, source-backed, and validated.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-info slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg> Valid **name** and **description** frontmatter, plus generated agent metadata.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-book slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg> A concise `SKILL.md`; detailed API material lives in referenced files only when needed.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-cpu slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M6.5.75V2h3V.75a.75.75 0 0 1 1.5 0V2h1.25c.966 0 1.75.784 1.75 1.75V5h1.25a.75.75 0 0 1 0 1.5H14v3h1.25a.75.75 0 0 1 0 1.5H14v1.25A1.75 1.75 0 0 1 12.25 14H11v1.25a.75.75 0 0 1-1.5 0V14h-3v1.25a.75.75 0 0 1-1.5 0V14H3.75A1.75 1.75 0 0 1 2 12.25V11H.75a.75.75 0 0 1 0-1.5H2v-3H.75a.75.75 0 0 1 0-1.5H2V3.75C2 2.784 2.784 2 3.75 2H5V.75a.75.75 0 0 1 1.5 0Zm5.75 11.75a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25ZM5.75 5h4.5a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-.75.75h-4.5a.75.75 0 0 1-.75-.75v-4.5A.75.75 0 0 1 5.75 5Zm.75 4.5h3v-3h-3Z"></path></svg> Scripts only for deterministic work that would otherwise be rewritten.

<svg version="1.1" width="1.3em" height="1.3em" class="sd-octicon sd-octicon-check-circle slide-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm1.5 0a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm10.28-1.72-4.5 4.5a.75.75 0 0 1-1.06 0l-2-2a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l1.47 1.47 3.97-3.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg> Validate the skill and run one realistic forward test before trusting it.

## Part 4 — Encode Your 3D Judgment as an Agent Skill

### 1. Inspect — Find the Rule the API Cannot Know

A useful skill starts with a concrete repeated request. Keep `SKILL.md` concise; put detailed API material in referenced files only when needed; use scripts only for deterministic work that would otherwise be rewritten; and validate the skill before trusting it.

The distinction is simple: an Omniverse library provides a capability, and its focused skills teach the agent how to use that capability for the installed version. Neither can decide your production quality bar. Only you can define which layer may own an edit, which object boundary is meaningful, what framing is useful, which label is correct, or which evidence should fail review.

A useful skill starts with a physical-AI handoff another team will need to repeat. It preserves three different sources of truth:

| Source of truth        | What it owns                                                                                                                 |
|------------------------|------------------------------------------------------------------------------------------------------------------------------|
| **Library capability** | What `ovrtx` or `ovstream` can actually do.                                                                                  |
| **3D domain judgment** | Which hierarchy, frames, units, transforms, semantics, sensor placement, and acceptance criteria make the result meaningful. |
| **Skill guidance**     | How your agent finds the current capability and reliably preserves that domain judgment.                                     |

The library supplies features. The skill supplies a repeatable implementation route. The 3D engineer defines what “correct” means.

| Your 3D expertise                      | Physical-AI value                                        |
|----------------------------------------|----------------------------------------------------------|
| OpenUSD layers and composition         | Update a digital twin without damaging its source asset. |
| Transforms, units, and frames          | Align robot motion and multi-sensor observations.        |
| Semantic schemas                       | Produce ground truth for perception and world models.    |
| Camera and lidar rigging               | Build reproducible virtual-sensor tests.                 |
| Output selection and compact telemetry | Control compute, bandwidth, and energy at scale.         |

Review the decisions you made in the first five missions. Pick one that you would want another artist, TD, or agent to apply consistently on the next scene.

### 2. Specify — Turn Craft Knowledge Into Skill Guidance

Choose your discipline and complete three parts:

- **NEVER GUESS** — the spatial or production decision an agent must not invent.
- **REQUIRE** — the authored inputs or evidence the workflow must have before acting.
- **PROVE** — the observable check that lets a human approve the result.

Open the [Prompt Builder](https://docs.nvidia.com/learning/physical-ai/physical-ai-agent-bootcamp/latest/prompt-builder.md), choose the **Ray Trace Your Way to a Better Life** session, and select the skill prompt that matches your discipline (**Part 4 - Skill: Scene Inspection Mode** or **Part 4 - Skill: Replay-Safe Scene Poses**). Turn that rule into skill intent for `Context` and a forward-test expectation for `Done when`. This is the point where your tacit 3D judgment becomes reusable agent guidance. Leave the optional fields blank or use one of the finished prompts below if you want a tested starting rule.

### 3. Build — Create and Forward-Test the Skill

Choose one of these starting ideas - or invent your own.

### Idea 1 — Robot-Ready Inspection Mode

Create one skill that packages the repeatable workflow “focus on a target, switch to semantic view, activate lidar, and report evidence.”

### Show a finished skill-creation prompt

```text
Goal:      Create a reusable skill named r17-inspection-mode that teaches the agent how to
           add a target-focused camera, semantic view, and optional Lidar evidence panel
           to an existing browser-streamed ovrtx viewer. The skill must orchestrate
           existing capabilities rather than implement an application now.
Skills:    Use the skill-creator skill. Read the pinned ovrtx stage-queries,
           writing-transforms, writing-attributes, semantic-labels, camera-outputs-rt2,
           reading-render-output, configuring-lidar-sensors, reading-sensor-pointclouds,
           and interpreting-lidar-pointclouds skills plus the Realtime Viewer stage-loading,
           camera-controls, aov-switching, streaming-messages, and validation references.
Context:   Create the skill at ~/RTXViewport/My_Skills/r17-inspection-mode. It should
           trigger on requests such as "prepare this streamed USD viewer for robot
           inspection" and "add focus, semantic, and Lidar inspection controls." Keep
           source USD immutable, preserve one renderer owner and one stream, require
           application-owned layers, route native input separately from commands, and treat
           the pinned local skills as the version-specific source of truth. Keep SKILL.md
           concise and add references only when they prevent rediscovery; do not copy vendor
           documentation wholesale.
Done when: The folder has valid SKILL.md frontmatter with only name and description,
           concise workflow instructions, matching agents/openai.yaml, only necessary
           resources, and no unrelated README or changelog; the skill validation command
           passes; and a fresh test request causes the agent to select the correct focused
           skills and produce a safe plan without modifying the live portal.
```

### Idea 2 — Replay-Safe Scene Poses

Create one skill that packages the pattern “resolve a prim, record its HOME transform, expose named browser poses, and make every command replay-safe.”

### Show a finished skill-creation prompt

```text
Goal:      Create a reusable skill named ovrtx-named-scene-poses that teaches the agent to
           add replay-safe named-pose controls for an OpenUSD prim in an existing
           ovrtx/ovstream viewer.
Skills:    Use the skill-creator skill. Read the pinned ovrtx stage-queries,
           reading-attributes, writing-transforms, and stepping-and-rendering skills plus
           the Realtime Viewer prim-transform-safety, streaming-messages,
           viewer-control-patterns, viewer-feedback-status, and validation references.
Context:   Create the skill at ~/RTXViewport/My_Skills/ovrtx-named-scene-poses. It
           should trigger on requests such as "add HOME, INSPECT, and PARK poses for this
           prim" and "give my streamed viewer replay-safe named transform controls."
           Require an explicit coordinate space and axis, record the complete HOME transform
           once, derive every named target from HOME, make repeated desired-state commands
           idempotent, queue writes on the renderer owner, send commands/state through the
           existing ovstream application-message path, and preserve source USD. The skill
           provides guidance only; it must not contain a replacement renderer or invent APIs.
Done when: The folder has valid SKILL.md frontmatter with only name and description, concise
           imperative instructions, matching agents/openai.yaml, only necessary resources,
           and no auxiliary documentation clutter; validation passes; and a fresh test
           request produces a replay-safe named-pose implementation plan with observable
           completion checks and no changes to the live portal.
```

### 4. Verify — Test Whether Your Judgment Transfers

Validate the skill, then give a fresh agent one realistic request that should trigger it. Do not grade only whether the skill folder exists. Compare the agent’s plan with the NEVER GUESS, REQUIRE, and PROVE rule you wrote:

- <input class="task-list-item-checkbox" disabled="disabled" type="checkbox"> Did it refuse to invent the decision you reserved for the 3D expert?
- <input class="task-list-item-checkbox" disabled="disabled" type="checkbox"> Did it request or inspect the required authored evidence?
- <input class="task-list-item-checkbox" disabled="disabled" type="checkbox"> Did it propose the proof you would use in a production review?
- <input class="task-list-item-checkbox" disabled="disabled" type="checkbox"> Did it route implementation to the pinned library skills instead of copying or inventing APIs?

During the play period, test the skill on one real portal extension and improve it based on what the agent misunderstood. That iteration is how personal craft knowledge becomes reusable engineering guidance without pretending the agent can replace the judgment that created it.

When you’re ready, [review](https://docs.nvidia.com/learning/physical-ai/physical-ai-agent-bootcamp/latest/lab-1-rtx-viewport/review.md) the method and see what’s next.
