# Holos API Source: https://docs.holos.io/api/index Programmatic access to skills, captures, objects, and organizations. The Holos API is a REST API that gives you programmatic access to all platform resources. It's the same API used by the Holos web dashboard and mobile apps. ## Base URL ``` https://api.holos.io ``` ## Authentication All requests require a bearer token obtained through the magic link flow. Pass the token in the `Authorization` header: ```http theme={null} Authorization: Bearer ``` See [Authentication](/concepts/authentication) for the full token flow. ## Resources | Resource | Description | | --------------------------------------- | --------------------------------------------------- | | [Skills](/domains/skills) | Org-scoped tasks that captures are recorded against | | [Captures](/domains/captures) | Recorded spatial sessions | | [Objects](/domains/objects) | 3D models used in captures and courses | | [Organizations](/domains/organizations) | Tenant accounts and member management | | [Users](/domains/users) | User identity and member profiles | ## Endpoint reference The full endpoint-by-endpoint reference and interactive playground are currently **internal-only** — they aren't published here yet. Holos engineers can preview them locally; see [the holos-docs README](https://github.com/holosinc/holos-docs#internal-api-reference). The OpenAPI 3.1 spec is generated from and maintained in the `holos-api` repository. The pages below cover the concepts you need to integrate: authentication, webhooks, error shapes, and the per-resource guides. ## Concepts Session tokens and the bearer flow Event notifications via Stytch and Svix Error format and status codes # Holos Capture Source: https://docs.holos.io/capture/index Record multi-modal spatial captures from real-world environments. Holos Capture Holos Capture is a spatial recording app for capturing rich multi-modal data from real-world environments and procedures. A single capture session records synchronized streams across multiple modalities (stereo video, hand skeleton tracking, device pose, named object tracking, on-device transcription, and GPS location), all packaged together for upload to the Holos platform. Currently available on Apple Vision Pro. Captures are the raw material for Holos Skills. Once uploaded, they can be reviewed in the web dashboard, linked to Skills, and used to generate training outputs. ## What gets recorded | Modality | Description | | --------------- | --------------------------------------------------- | | Stereo video | 1080p left/right camera feed | | Device pose | 6-DOF headset position and orientation | | Hand tracking | Full skeleton for both hands, world and local frame | | Object tracking | Named reference objects tracked in real time | | Transcription | On-device speech-to-text with timestamps | | Location | GPS coordinates when authorized | ## Next steps Install Holos Capture via TestFlight and sign in. Start your first capture and understand the modality controls. Set up reference objects so the app knows what to track. Review, annotate, and upload completed sessions. # Recording a session Source: https://docs.holos.io/capture/recording Start a capture session and understand the modality controls. ## Starting a session From the Holos Capture home screen: 1. Tap **New Capture** to open the session setup sheet 2. Select a **Skill** to record under, or leave it unassigned for a free-form capture 3. Confirm that tracked objects are loaded (if any are configured for the skill) 4. Tap **Start Recording** The app enters an immersive space and begins recording all active modalities simultaneously. ## Modalities Each modality captures a distinct data stream. All streams are timestamped and synchronized to the same clock. | Modality | Notes | | --------------- | ------------------------------------------------------------------------------------------------- | | Stereo video | Always active. Records left and right camera at 1080p. | | Device pose | Always active. Records headset position and orientation at full frame rate. | | Hand tracking | Active when hands are in frame. Records full joint skeleton for both hands. | | Object tracking | Active only for objects configured on the skill. See [Tracked objects](/capture/tracked-objects). | | Transcription | On-device speech recognition. Produces timestamped transcript segments. | | Location | Recorded once at session start. | ## During a session * A recording indicator is visible in the corner of your view while capturing * Tracked objects appear highlighted when the system has a lock on them * Transcription happens in real time; speak clearly if you want good captions ## Stopping a session Tap the **Stop** button to end the recording. The app will finalize all streams and package them into a session file. This may take a few seconds for longer recordings. Once finalized, you'll be taken to the session review screen. See [Uploading](/capture/uploading). ## Tips for good captures See the full [Tips for good captures](/capture/tips) guide for detailed guidance on environment setup, movement, narration, object tracking, and common mistakes to avoid. # Camera settings Source: https://docs.holos.io/capture/settings Configure recording quality and file size for capture sessions. Camera settings are accessible from the main screen via the gear icon, under the **Camera** tab. ## Recording quality Controls the resolution of the stereo video streams. | Option | Resolution | Notes | | -------- | ----------- | --------------------------------------- | | Full HD | 1920 × 1080 | Default. Recommended for most captures. | | Standard | 864 × 704 | Smaller file sizes. | Lower resolution only affects the video streams. Pose, hand tracking, object tracking, transcription, and location are all recorded at the same fidelity regardless of this setting. ## Bitrate Controls the video encoding bitrate. Adjustable from **4 to 20 Mbps** in steps of 4, defaulting to **12 Mbps**. Higher bitrate produces better image quality at the cost of larger file sizes. 12 Mbps is a good balance for most field conditions. Drop to 8 Mbps if storage space or upload bandwidth is a concern. ## Record SBS separately When enabled (default), the app encodes an additional side-by-side stereo-rectified video file alongside the separate left and right camera files. This SBS file is useful for viewing the capture in stereo but adds approximately 50% to the total session size. Disable this if you only need the individual left and right streams and want to reduce upload size. # Device setup Source: https://docs.holos.io/capture/setup Install and set up Holos Capture on Apple Vision Pro. These instructions are for Holos Capture on Apple Vision Pro. ## Requirements * Apple Vision Pro running visionOS 2.0 or later * A Holos account ## Distribution Holos Capture is distributed through the **Apple Developer Enterprise Program**, not the App Store. This is required because the app uses special enterprise-only entitlements to access the Apple Vision Pro's stereo camera, a capability Apple restricts to enterprise-signed builds. Depending on how your organization has deployment configured, you'll install the app either directly via an enterprise distribution link or through TestFlight. ### Via enterprise distribution 1. Open the installation link provided by your Holos admin in Safari on your Vision Pro 2. Follow the prompt to install the app 3. If you see an "Untrusted Enterprise Developer" warning, go to **Settings → General → VPN & Device Management**, find the Holos certificate, and tap **Trust** ### Via TestFlight 1. Open TestFlight on your Apple Vision Pro 2. Accept the invitation from your Holos admin 3. Tap **Install** next to Holos Capture 4. Once installed, open the app from your home screen ## Sign in Holos uses passwordless authentication. 1. Open Holos Capture 2. Enter your work email address 3. Check your email for a magic link and tap it to complete sign-in 4. Select your organization if you belong to more than one ## Permissions On first launch, Holos Capture will request access to several system capabilities. All of the following are required; the app will not allow you to start a recording session until each has been granted. | Permission | What it's for | | ---------------------- | ----------------------------------------------------- | | **Camera** | Stereo video recording from the Vision Pro cameras | | **World Sensing** | Spatial tracking and device pose | | **Hand Tracking** | Full hand skeleton tracking during sessions | | **Accessory Tracking** | Reference object recognition and tracking | | **Microphone** | Audio recording and on-device speech transcription | | **Location** | GPS coordinates attached to the session at start time | Grant all six when prompted. If you deny any of them, go to **Settings → Privacy & Security** on your Vision Pro to enable them before trying again. # Tips for good captures Source: https://docs.holos.io/capture/tips How to record spatial captures that produce accurate, useful training data. A good capture is deliberate, well-narrated, and unhurried. The data it produces (pose, hands, object positions, transcript) is only as useful as the care taken to record it. This guide covers what to do before, during, and after a session to maximize capture quality. ## Before you start ### Set up your environment * **Light the subject well.** Natural or overhead lighting works best. Avoid recording with a bright window directly behind the subject; this creates silhouetting that degrades video quality and hurts object recognition. * **Clear the workspace.** Remove objects and clutter that aren't part of the procedure. A clean field of view helps the tracker focus on the right objects and makes the footage easier to review. * **Know the procedure in advance.** Walk through what you're going to do before starting the recording. Captures of someone working from memory mid-session produce hesitant, disjointed footage that's hard to learn from. Think of it like a rehearsed demonstration, not a first attempt. ### Check your tracked objects If the skill you're recording against has tracked objects configured, confirm they all appear in the pre-recording sheet before tapping Start. Any object not shown there won't be tracked during the session — and this list can't be changed once recording begins. Position the objects where they'll be used before starting. Getting them into frame early gives the tracker more time to acquire a lock. *** ## During the session ### Move slowly and deliberately This is the single most important thing you can do for a good capture. Pose tracking works best when head movements are smooth and intentional. Fast pans, sudden turns, and shaky movements introduce noise into the pose data and can cause brief tracking losses. The same applies to hand tracking; quick, jerky motions are harder to reconstruct than smooth, deliberate ones. **A good rule of thumb:** move at roughly half the speed you would in a normal work context. It will feel slow. That's correct. When transitioning between steps (turning to pick something up, moving to a different part of the workspace), turn your whole body rather than just your head, and do it smoothly. ### Narrate everything out loud On-device transcription produces a timestamped record of everything you say during the session. This transcript becomes part of the capture data and is used to generate captions and training outputs. A well-narrated capture is dramatically more useful than a silent one. **Narrate as you go, not after.** Describe what you're about to do just before doing it, then describe what you did. For example: > "I'm picking up the torque wrench; this one is set to 25 foot-pounds. I'm positioning it on the left-side bolt here, and applying steady pressure clockwise until I feel the click." Speak clearly and at a normal pace. Avoid filler words. If you make a mistake, narrate that too ("I grabbed the wrong tool there, let me swap to the correct one") so reviewers understand what they're seeing. Don't worry about sounding scripted. A clear, informative narration is far more valuable than a natural-sounding but vague one. ### Pause between steps After completing each discrete step, pause for 1–2 seconds before moving to the next. This gives the tracker time to settle, produces clean step boundaries in the data, and makes the footage easier to review and annotate later. Think in terms of chapters: complete a step, hold briefly, move on. ### Keep the subject in frame If you're demonstrating a procedure on an object or surface, keep it in your field of view as much as possible. The stereo cameras capture what you're looking at; if the subject drifts to the edge of your view, the useful data goes with it. For bench work, position yourself so the work surface is roughly centered in your view at a comfortable working distance. Avoid leaning in very close (below \~30cm) or stepping back far; both extremes degrade tracking quality. ### Let object tracking acquire a lock When you first encounter a tracked object, look directly at it for 1–2 seconds before touching or moving it. This gives the tracker time to acquire a lock. You'll see the highlight appear when it does. If a tracked object loses its lock mid-session (the highlight disappears), look directly at it again before continuing with that part of the procedure. *** ## Common mistakes to avoid | Mistake | Why it matters | Fix | | ---------------------------------- | -------------------------------------------------------- | --------------------------------------------------------- | | Moving too fast | Introduces noise into pose and hand data | Slow down intentionally; half speed is a good target | | Working in silence | Transcript is empty or sparse, outputs are lower quality | Narrate continuously, including transitions and decisions | | Poor lighting | Degrades video and object recognition | Ensure good overhead or front lighting before starting | | Rushing through steps | No natural pause points in the data | Pause 1–2 seconds between each discrete step | | Not checking tracked objects first | Objects not tracked even though they're present | Confirm objects loaded in the pre-session sheet | | Looking away from the subject | Subject drops out of frame at key moments | Keep work surface centered in your view throughout | | Recording a first attempt | Hesitation and mistakes produce noisy data | Rehearse the procedure before recording | *** ## Multiple takes Don't rely on a single capture. Recording 2–3 takes of the same procedure gives reviewers options and makes it easier to catch steps that were unclear or poorly framed in one recording. Takes don't need to be perfect. A take that clearly shows a specific sub-step well is valuable even if the rest isn't usable. *** ## Session length There's no hard limit on session length, but shorter, focused captures are generally more useful than long continuous ones. If a procedure has natural break points (phases, sub-tasks, or tool changes), consider recording each phase as a separate session rather than one long take. Shorter sessions are also faster to review and upload. # Inspector panel Source: https://docs.holos.io/capture/tour-inspector Session metadata and visibility controls during replay. The inspector panel slides in from the side during replay and shows metadata and display controls for the current session. ## Information Shows session details: date, duration, device, and location. If GPS was recorded, a **Show map** button displays a map pinned to the capture location. Tap **Hide map** to collapse it. ## Visibility Controls what's shown in the 3D replay scene: * **Skeleton**: toggles the body skeleton overlay. On by default. * **Tracked objects**: each object that was configured on the skill has its own toggle. Objects that were detected during the session can be shown or hidden individually. Objects that were configured but not detected appear dimmed and can't be toggled. ## Video Expandable inline players for each camera stream recorded in the session: * **Capture Left**: left camera stream * **Capture Right**: right camera stream * **Capture Spatial**: side-by-side stereo-rectified video, if [Record SBS separately](/capture/settings#record-sbs-separately) was enabled Tap a stream name to expand its player. All streams stay in sync with the main playback timeline. # Library Source: https://docs.holos.io/capture/tour-library Browse and manage your recorded sessions from the Holos Capture home screen. The **Library** is the home screen of Holos Capture. It shows all sessions recorded on your device, both uploaded and pending. ## Session list Each session appears as a tile showing: * A thumbnail from the recording * The session title (or a timestamp if untitled) * Upload status (pending or uploaded) * Duration Tap any session to open its review screen, where you can play it back, review the transcript, and upload it if you haven't already. ## Starting a new capture Tap the **New Capture** button to open the pre-recording sheet. See [Recording a session](/capture/recording). ## Settings and account Tap the gear icon in the top corner to access [camera settings](/capture/settings) and your account. Organization admins can also manage org details from the account tab. # Replay Source: https://docs.holos.io/capture/tour-replay Play back a recorded session and review its data. Tapping a session in the Library opens the replay screen. This is a full spatial playback of the recorded session: video, skeleton, and tracked object positions are replayed in sync. ## Playback controls The control bar at the bottom of the view contains: * **Play / Pause**: start and stop playback * **Scrubber**: drag to seek to any point in the session * **Captions**: toggle the transcription overlay on and off. Disabled if the session has no transcript. * **Mute**: silence the audio track * **Repeat**: loop the session back to the start when it ends ## Inspector panel Tap the inspector icon to open the side panel. It shows session metadata and visibility controls for the 3D elements in the scene. See [Inspector panel](/capture/tour-inspector). ## Uploading If the session hasn't been uploaded yet, an **Upload** button is available from the replay screen. See [Uploading](/capture/uploading). # Tracked objects Source: https://docs.holos.io/capture/tracked-objects Set up 3D reference objects so the app knows what to track during a session. Object tracking lets Holos Capture recognize and follow specific real-world objects during a session, recording their position over time alongside the other modalities. ## How it works Objects are linked to a skill in the dashboard. When you start a session under that skill, the app prepares each linked object and tracks its position in real time throughout the recording. Objects are linked to **Skills**, not individual captures. When a session is started under a skill, the app automatically prepares all objects associated with that skill. ## Setting up tracked objects Tracked objects are managed in the Holos web dashboard, not in the Capture app itself. 1. Go to [Skills](https://app.holos.io/skills) in the Holos dashboard 2. Open the skill you want to configure 3. Under **Tracked objects**, click **Add object** 4. Select an object from the [object library](/dashboard/objects), or upload a new one 5. If the object isn't yet trackable, a processing request is filed automatically. The Holos team will process it and notify you when it's ready Once objects are linked to a skill and their reference files are ready, they'll appear automatically the next time you start a capture under that skill. ## Object library The Holos platform includes a library of CC0 objects and supports org-private uploads. Admins and managers can upload GLB, OBJ, FBX, or USDZ models via [Objects](https://app.holos.io/objects) in the dashboard. Uploading objects requires admin or manager access. Uploaded models are automatically converted to the formats needed for web preview and AR tracking. ## During a session When a tracked object is recognized: * A highlight appears around it in your view * Its position is recorded each frame for the duration of the session If an object goes out of frame or is briefly occluded, the app will re-acquire it when it reappears. Tracking gaps are recorded as-is. # Uploading a session Source: https://docs.holos.io/capture/uploading Review and upload completed capture sessions to the Holos platform. After stopping a recording, Holos Capture packages all streams into a session file and opens the review screen. ## Session review The review screen shows a summary of what was recorded: * Duration and timestamp * Which modalities were active * A preview of the transcript (if transcription was enabled) * Thumbnail from the recording Review the session before uploading. If the recording was unusable (wrong take, equipment issue), you can discard it from this screen. ## Uploading Tap **Upload** to send the session to the Holos platform. Upload progress is shown on screen. Once the upload completes, the session appears in [Captures](https://app.holos.io/captures) in the Holos dashboard, where it can be: * Reviewed in the 3D capture viewer * [Linked to a Skill](/dashboard/captures#linking-to-skills) * Submitted for approval * Used to [generate training outputs](/dashboard/skills#generating-outputs) ## Upload requirements * An active internet connection (Wi-Fi recommended for large sessions) * You must be signed in to your Holos account Sessions are stored locally until uploaded. If you leave the review screen without uploading, the session remains in the **Library** tab and can be uploaded later. ## Library The Library tab shows all recorded sessions on your device, both uploaded and pending. Tap any session to open its review screen and upload if you haven't already. # Authentication Source: https://docs.holos.io/concepts/authentication How to obtain and use session tokens with the Holos API. The Holos API uses token-based authentication. Every request must include a session token in the `Authorization` header. Tokens are obtained through a passwordless magic link flow. ## Obtaining a token Authentication is a three-step flow: **1. Request a magic link** ```http theme={null} POST https://api.holos.io/users/send-magic-link Content-Type: application/json { "email_address": "you@example.com" } ``` **2. Authenticate the token from the link** The user receives an email containing a magic link. Extract the token from the link and exchange it: ```http theme={null} POST https://api.holos.io/users/authenticate-magic-link Content-Type: application/json { "token": "" } ``` This returns an `intermediate_session_token` along with a list of organizations the user belongs to. **3. Exchange for an org-scoped session** ```http theme={null} POST https://api.holos.io/users/exchange-session Content-Type: application/json { "intermediate_session_token": "", "organization_id": "" } ``` The response contains a `session.jwt`. This is the token you'll use for all subsequent requests. ## Making authenticated requests Pass the session JWT as a bearer token: ```http theme={null} GET https://api.holos.io/api/org/:orgId/skills Authorization: Bearer ``` Requests without a valid token receive a `401 Unauthorized` response. ## Token expiry Session tokens expire after a configurable period. When a token expires, re-authenticate using the magic link flow above. The Holos dashboard and apps handle refresh automatically. ## Organization context Most API endpoints are scoped to an organization, identified by its slug or ID in the URL path: ``` /api/org/:orgId/... ``` A user may belong to multiple organizations. The session token is valid across all orgs the user is a member of, but authorization is enforced per-org based on the user's role. ## Roles | Role | Permissions | | --------- | ------------------------------------------------- | | `owner` | Full access including org settings | | `admin` | Full access excluding ownership transfer | | `manager` | Can create and edit skills, captures, and objects | | `member` | Can view and record captures | # Errors Source: https://docs.holos.io/concepts/errors Error format and HTTP status codes returned by the Holos API. The Holos API returns standard HTTP status codes and a consistent JSON error body. ## Error format ```json theme={null} { "error": "Not found", "message": "Skill not found", "statusCode": 404 } ``` | Field | Description | | ------------ | ---------------------------------------------- | | `error` | Short error label | | `message` | Human-readable description | | `statusCode` | HTTP status code (mirrors the response status) | ## Status codes | Code | Meaning | | ----- | --------------------------------------------------------------------- | | `200` | Success | | `201` | Resource created | | `400` | Bad request: invalid or missing parameters | | `401` | Unauthorized: missing or invalid session token | | `403` | Forbidden: authenticated but insufficient role | | `404` | Not found: resource doesn't exist or is outside your org | | `409` | Conflict: duplicate resource (e.g. duplicate `skillId` within an org) | | `422` | Unprocessable: validation failed (Joi schema rejection) | | `500` | Internal server error | ## Authorization errors `401` and `403` are distinct: * `401` means no valid session token was provided * `403` means the token is valid but the user's role doesn't permit the action Both indicate an auth failure but require different handling: `401` should trigger a re-auth flow, while `403` is a permission issue that re-auth won't fix. # MCP (Model Context Protocol) Source: https://docs.holos.io/concepts/mcp Query and manage Holos skills directly from Claude, ChatGPT, Gemini, and other AI assistants. Holos MCP support is in development. This page describes what we're building. Reach out if you'd like to be an early tester. The [Model Context Protocol](https://modelcontextprotocol.io) (MCP) is an open standard that lets AI assistants connect directly to external tools and data. A Holos MCP server means your organization's skill library becomes queryable and writable from Claude, ChatGPT, Gemini, or any other MCP-compatible assistant, without leaving the tools your team already uses. ## What you'll be able to do Ask your AI assistant which skills exist, what their status is, who's assigned, and what's overdue, all in plain language. Draft a new skill with a title, instructions, assignees, and a deadline directly from a chat prompt. Kick off a capture workflow without switching to the Holos dashboard. Pull generated SOPs, course outlines, and training content into your AI session for review or further editing. ## Authentication The Holos MCP server uses an OAuth 2.1-compliant authorization flow built on the same identity infrastructure that powers your existing Holos sessions. When you connect an AI assistant for the first time: 1. **Authorization request.** Your AI assistant initiates an OAuth 2.1 authorization request. 2. **One-time approval.** You complete a single browser prompt using the same passwordless flow you use to log in to Holos. Permissions are presented in plain language so you know exactly what access you're granting. 3. **Scoped access token.** The assistant receives a short-lived token with only the permissions you approved. An assistant can never be granted more access than you yourself have. ## Security Access is controlled at both the user and organization level: * **RBAC scopes.** Permissions are structured in logical sets so agents get only the access they need, nothing more. * **Org-level controls.** Admins get a centralized view of all connected assistants, authorized scopes, and active sessions across the organization. * **Allowlists.** Organizations can restrict which AI assistants members are permitted to connect. * **One-click revocation.** Any connected assistant can be disconnected instantly from your account settings or by an org admin. * **Audit trail.** A real-time log of all connected apps and the scopes they've been granted. ## Interested in early access? We're evaluating MCP support now. If you have a specific integration in mind or want to be among the first to try it, [let us know](mailto:hello@holos.io). # Webhooks Source: https://docs.holos.io/concepts/webhooks Event notifications from Stytch and Svix. Holos uses webhooks to notify your infrastructure of platform events. Two webhook sources are active: * **Stytch**: identity and organization lifecycle events (member created, org updated, SSO configured) * **Svix**: platform-level events dispatched by the Holos API ## Stytch webhooks Stytch sends webhook payloads to the Holos API when identity events occur. These are used internally to keep the Holos member and organization records in sync with Stytch's B2B data. If you need to react to member or org changes in your own systems, Stytch also supports outbound webhooks directly; configure them from the Stytch dashboard. ## Svix webhooks Holos uses Svix to dispatch platform events to external subscribers. Events are available for: * Capture lifecycle (created, uploaded, approved, rejected) * Skill updates * Object processing status changes Webhook endpoints are configured per-organization. Contact your Holos admin to set up a webhook endpoint for your org. ## Payload format All webhook payloads are JSON. Each event has a `type` field and a `data` object: ```json theme={null} { "type": "capture.uploaded", "data": { "captureId": "cap_abc123", "organizationId": "org_xyz", "uploadedAt": "2026-05-12T20:00:00Z" } } ``` ## Verification Svix signs all webhook payloads with a secret specific to your endpoint. Verify the signature before processing the event. See the [Svix verification docs](https://docs.svix.com/receiving/verifying-payloads/how) for language-specific examples. # Captures Source: https://docs.holos.io/dashboard/captures Review, approve, and manage captures in the Holos dashboard. The **Captures** section gives managers visibility into everything recorded by the team. Captures can be browsed, filtered, linked to skills, and reviewed in a full 3D spatial viewer. ## Browsing captures Captures can be viewed in three modes, toggled in the top right: * **Table**: sortable columns for title, status, modality, captured by, location, and date * **Tiles**: a thumbnail grid showing spatial footage with status and member avatar * **Map**: a geographic view of all capture locations. Clusters group nearby sessions; click a cluster to see the list of captures at that location ## Filtering Use the **All statuses** dropdown to filter by processing state: | Status | Meaning | | ---------- | ---------------------------------------------------------- | | Pending | Recorded on device, not yet uploaded | | Uploaded | Transferred to the platform, awaiting processing | | Processing | Modality data being extracted | | Completed | All data available and ready for review | | Failed | Processing error; [contact support](mailto:hello@holos.io) | ## Capture detail Click any capture to open the detail view. The left side is a full 3D spatial viewer; the right side is a properties panel. ### Properties panel | Field | Description | | --------- | ----------------------------------- | | Title | Editable display name | | ID | Unique capture identifier | | Performer | The member who recorded the session | | Created | Date and time of recording | | Device | Device used (e.g. Apple Vision Pro) | | OS | OS version at time of recording | | Duration | Session length | | Location | GPS address with **Show map** link | **Linked skills**: use the pencil icon to link this capture to one or more [skills](/dashboard/skills). Once linked, the capture appears in the skill's capture list for review and approval. ### 3D viewer The viewer plays back the full spatial session. Use the timeline scrubber and playback controls at the bottom to seek through the session. **View toggles** control what's visible in the scene: * **Skeleton**: the body skeleton overlay * **Gaze**: gaze direction indicator * Individual [tracked objects](/dashboard/objects) (listed by name), with toggles for each **Camera** switches the viewer perspective: * **First Person**: from the performer's point of view * **Third Person**: a third-party observer view of the scene ### Video The **Video** section in the properties panel shows the raw camera streams recorded during the session: * **Capture Left**: left stereo camera * **Capture Right**: right stereo camera These stay in sync with the 3D viewer timeline. ### Transcript The **Transcript** section shows the timestamped speech-to-text generated during the session. Individual segments can be edited directly; click a segment to correct the text. Edits are stored as overrides and applied on read; the original transcript is always preserved underneath. ## Linking to skills Captures can be linked to skills from two places: the capture detail page (via the Linked skills field) or the [skill page](/dashboard/skills#captures) (via the Captures section). Once linked, the capture is available for review and approval within that skill's context. # Holos Dashboard Source: https://docs.holos.io/dashboard/index Manage skills, captures, objects, and your organization at app.holos.io. The [Holos dashboard](https://app.holos.io) is the management layer of the platform. It sits between the two apps: after experts record with [Holos Capture](/capture/index) and before learners train with [Holos Learn](/learn/index). Skills are defined here, captures are reviewed and approved, 3D objects are curated, and training outputs are generated. Define procedures, assign team members, link captures, and generate outputs. Review and approve captures, explore them on a map, and link them to skills. Browse and upload 3D models for AR tracking and course content. Manage members, roles, and org-wide settings. # Objects Source: https://docs.holos.io/dashboard/objects Browse, upload, and manage 3D models for tracking and course content. The **Objects** library is a shared repository of 3D models available to your organization. Global objects are shared across the platform; private objects are uploaded by your team. Objects marked as trackable can be used as reference targets during [Holos Capture](/capture/index) sessions. ## Browsing and searching Objects can be viewed as tiles or a table. Search by name, provider, or tag. Paginated at 50 per page; use **Flagged** and **Archived** links in the bottom bar to switch views. Each tile shows the object name and provider. The platform library includes thousands of CC0 objects from providers like Poly by Google alongside any org-private objects your team has uploaded. ## Object detail Click any object to open its detail page. The top of the page shows: * **Name** and **created by** * **Description**: editable free-text field * **License**: dropdown (e.g. None / All Rights Reserved, CC0) * **Tags**: free-form labels for search and filtering The stats panel in the top right shows: | Field | Description | | --------- | --------------------------------------------------------- | | Triangles | Polygon count of the mesh | | Size | File size | | Trackable | Whether an AR reference descriptor exists for this object | The full 3D viewer below lets you inspect the object from any angle. ### Actions The icon row in the top right of the detail page provides: * **Info**: object metadata * **Flag**: report an issue with the object * **Status**: approval state * **Download**: download the object file; click to select format (GLB, USDZ, etc.) * **Delete**: remove the object from your org ## Reporting issues Click the flag icon to open the **Report issue** dialog. Select the issue category and click **Report**: | Issue | Description | | ------------------ | ---------------------------------------------------------- | | Backfaced textures | Geometry normals are inverted | | Large textures | Texture resolution is excessive | | Off origin | Object pivot point is misplaced | | Bad thumbnail | Auto-generated thumbnail doesn't represent the object | | Bad orientation | Object is rotated incorrectly relative to its expected use | | Other | Any other issue | ## Uploading objects Uploading objects requires admin or manager access. Admins and managers can upload new org-private objects via the **Upload** button. Supported formats: | Format | Notes | | ------ | ---------------------------------------------- | | GLB | Primary format, no conversion needed | | USDZ | Retained for AR; GLB generated for web preview | | OBJ | Converted to GLB automatically | | FBX | Converted to GLB automatically | ## Object tracking **Object tracking** lets Holos Capture recognize a specific real-world object and record its position throughout a session. Not all objects are trackable by default — trackable objects display a scan icon on their tile in the library, and the **Trackable** stat on the detail page shows **Yes** or **No**. ### Why it's necessary A 3D model on its own is just geometry — the app has no way to spot the matching physical object in the room. To bridge that gap, the platform builds a **reference object**: a compact descriptor trained from the model that the Capture app matches against the live camera feed to find and follow the real thing. Building a reference object is a compute-heavy job that runs on Holos infrastructure, so it isn't instant. You enable it once per object; afterwards the object is permanently trackable and ready to use in any capture. You only need to enable tracking for objects you want the app to follow during a session. Models used purely as course content or for reference don't need it. ### Enabling object tracking 1. Open the object from the library 2. Click the **scan** icon in the action row (top right of the detail page) 3. Choose your tracking settings (see below) 4. Click **Enable object tracking** The **Trackable** stat reads **No** with tracking *queued* or *in progress* until the job completes, and a small dot on the scan icon indicates an active request. You can reopen the dialog any time to update the settings while the job is still queued. Tracking is also requested automatically when you link an object to a [skill](/dashboard/skills) from the skill's **Tracked objects** section: if the object isn't yet trackable, the platform submits the request for you and shows a confirmation toast. Reference objects are built by the Holos team's processing pipeline. Once the job finishes, the **Trackable** field flips to **Yes** and the object becomes available in Holos Capture. ### Tracking settings The settings you choose describe how the object is handled in the real world, which helps the pipeline build an accurate reference object. **View mode** — how the object is approached during a session:

Front

Viewed only from the front. Wall-mounted panels, controls, screens.

Upright

Stays upright, approached from any side. Benchtop equipment, freestanding machines.

All angles

Picked up and rotated freely. Handheld parts and tools.
**All angles** takes longer to train and carries a higher false-positive risk. Only choose it for objects that are genuinely handled from every direction. **Training mode** — how much compute the pipeline spends building the reference object: | Mode | Typical runtime | Best for | | ------------ | --------------- | ---------------------------------------------- | | **Standard** | \~8 hours | Most objects | | **Extended** | \~18 hours | Small, handheld objects that need extra detail | **Objects to avoid** — optionally pick look-alike objects from your library so the tracker doesn't confuse them with this one. Most useful when you have several visually similar models. Only objects that have a USDZ file can be selected. Once an object is trackable, link it to a skill so it's prepared automatically when a session starts. See [Tracked objects](/capture/tracked-objects) for how linking and in-session tracking work. ## Approving uploads Object approvals are handled in the [Object Approvals](https://app.holos.io/objects/approvals) queue. See [Object Approvals](/dashboard/organization#object-approvals) for the full review workflow. # Organization Source: https://docs.holos.io/dashboard/organization Manage members, roles, authentication, and object approvals. Organization settings are managed under **Settings** in the dashboard sidebar. Owners and admins have full access; managers have read-only access to most settings. All pages in this section require admin or owner access, except where noted. ## Members The [**Member Management**](https://app.holos.io/admin/members) page shows all members in your org with their email, role, and status. To invite someone: 1. Click **+ Invite** in the top right 2. Enter their email address and select a role 3. They'll receive a magic link to join your org ### Roles | Role | Permissions | | --------- | ------------------------------------------------------------------------------------------------------------------- | | `owner` | Full access including org settings and ownership transfer | | `admin` | Full access excluding ownership transfer | | `manager` | Can create and edit [skills](/dashboard/skills), [captures](/dashboard/captures), and [objects](/dashboard/objects) | | `member` | Can view and record captures | ## Authentication & Access The [**Authentication & Access**](https://app.holos.io/admin/access) page controls how members sign in and how new members are provisioned. **Authentication settings** * Toggle which primary and secondary auth methods are allowed * Require MFA for all users in your org **User onboarding** * **Invites**: allow any email or restrict to specific domains * **JIT Provisioning**: automatically add members who sign in via allowed email domains or SSO connections * **Access control list**: define the email domains and SSO connections that are permitted **Automatic role assignments** * Automatically grant roles based on email domain, SCIM group membership, or SSO connection ## SSO SSO is available on enterprise plans. The [**SSO**](https://app.holos.io/admin/sso) page manages SAML-based single sign-on connections. Click **+ New connection** to configure your identity provider. Once active, members can sign in through your IdP and are provisioned automatically based on your JIT and role assignment settings. ## SCIM SCIM is available on enterprise plans. The [**SCIM**](https://app.holos.io/admin/scim) page lets you connect a directory sync provider to automate member provisioning and deprovisioning. Use this to keep your Holos membership in sync with your IdP. ## Object Approvals The [**Object Approvals**](https://app.holos.io/objects/approvals) queue is where admins review 3D objects before they become available to the org. Each object is inspected in a full 3D viewer and can be approved or rejected. When flagging an issue, select from the standard categories: | Issue | Description | | ------------------ | ---------------------------------------------------------- | | Backfaced textures | Geometry normals are inverted | | Large textures | Texture resolution is excessive for the use case | | Off origin | Object pivot point is misplaced | | Bad thumbnail | Auto-generated thumbnail doesn't represent the object well | | Bad orientation | Object is rotated incorrectly relative to its expected use | | Other | Any other issue; add a note when rejecting | Use **A** to approve, **R** to reject, and arrow keys to navigate between objects in the queue. # Skills Source: https://docs.holos.io/dashboard/skills Define procedures, assign team members, link captures, and generate outputs. A Skill is the central organizing unit in Holos. It represents a procedure or task to be captured and trained on. Everything else (captures, objects, outputs) flows through a skill. ## Creating a skill 1. Go to [**Skills**](https://app.holos.io/skills) in the dashboard 2. Click **New skill** 3. Enter a title and save. The skill is created and ready to configure. From the skill detail page you can set priority, assignees, a deadline, and tags using the metadata row near the top. ## Description and instructions The skill page has two main text sections: **Description**: context for why this skill exists and what it covers. Use this to describe the equipment or environment, the procedure being captured, and any background a reviewer needs to understand the captures. Rich text formatting is supported. **Instructions**: the step-by-step guide given to the operator before they record. Write these as directions: what to do, in what order, and what to narrate aloud at each step. The operator sees these in [Holos Capture](/capture/recording) before starting the session. Be specific; the quality of the capture depends on how clearly the instructions communicate the expected workflow. ## References The **References** panel on the right side of the skill page lets you attach supporting materials (3D scans, documents, or images) that provide additional context for the operator or reviewer. Reference objects are not tracked during capture; they're documentation attached to the skill record. ## Linked objects Go to the **Objects** tab on a skill to attach the 3D reference objects that should be tracked during capture sessions. See [Objects](/dashboard/objects) for how to upload and manage the library, and [Making an object trackable](/dashboard/objects#making-an-object-trackable) for how to enable AR tracking. ## Assignees and tags Use the **Assignees** field to assign team members who will record captures against this skill. Assigned members see the skill listed in [Holos Capture](/capture/recording) when starting a new session. **Tags** are free-form labels for filtering and organization across the skills list. ## Captures The **Captures** section at the bottom of the skill page shows all sessions linked to this skill. Each capture can be reviewed and marked: * **Approved**: accepted as a valid take for this skill * **Approval needed**: uploaded but not yet reviewed Click the external link icon next to a capture to open it in the [full 3D viewer](/dashboard/captures#capture-detail). Use **+ Link existing capture** to manually attach a capture that was recorded without a skill assigned. Approval status is per skill; the same capture can be approved under one skill and pending under another. ## Generating outputs The **Generate Outputs** panel on the right lets you produce training assets from the approved captures linked to this skill: | Output | Description | | ------------------- | --------------------------------------------------------------------------------------- | | **Onboarding Deck** | A presentation to introduce the skill to new team members | | **SOP** | A step-by-step instructional PDF | | **Holos Learn** | An immersive course to teach the skill in 3D, delivered via [Holos Learn](/learn/index) | | **Robot Skill** | A structured training policy for humanoid robot deployment | Click an output type to generate. Outputs are produced from the approved captures and the skill's description and instructions. ## Status | Status | Meaning | | ---------- | --------------------------------------------------------- | | Capturing | Actively being recorded by assigned team members | | Processing | Captures linked and outputs being generated | | Ready | Outputs generated and published | | Archived | No longer active; hidden from default views but preserved | # Captures Source: https://docs.holos.io/domains/captures Recorded spatial sessions uploaded from Holos Capture. A **Capture** is a recorded session from the Holos Capture app. It contains synchronized streams of spatial data (video, pose, hand tracking, object tracking, and transcription), packaged and uploaded to the platform for review, approval, and output generation. ## Key fields | Field | Description | | ----------------- | ------------------------------------------------------------------- | | `captureId` | Unique within the org | | `title` | Display name (editable after upload) | | `member_id` | The member who recorded it | | `tracked_objects` | Objects observed during the session, with resolved `_id` references | | `transcript` | Timestamped speech-to-text segments | | `location` | GPS coordinates at time of recording | | `device` | Device model and OS version | | `start_wall` | Wall-clock timestamp of when recording started | | `tags` | Free-form labels | | `thumbnailUrl` | Presigned URL for the session thumbnail | ## Lifecycle Captures are uploaded from the Holos Capture app. Once processed, they appear in the dashboard with all modality data available. Captures can be linked to one or more Skills. Once linked, org admins and managers can review and approve or reject them via the skill's capture list. ## Approval workflow | Status | Meaning | | ---------- | ----------------------------------------------------- | | *(none)* | Uploaded and awaiting review | | `approved` | Accepted as a valid capture for the skill | | `rejected` | Flagged as unusable (wrong take, quality issue, etc.) | Approval status is stored on the skill-capture join record, not on the capture itself. The same capture can be approved under one skill and rejected under another. ## Transcript overrides Individual transcript segments can be edited after upload. Edits are stored as override records and applied on read; the original transcript is preserved. ## Endpoints * `GET /api/org/:orgId/captures` — list captures, filterable by skill * `GET /api/org/:orgId/captures/:captureId` — get a capture with full tracked\_objects and transcript * `PATCH /api/org/:orgId/captures/:captureId` — update title, tags # Objects Source: https://docs.holos.io/domains/objects 3D models used for AR tracking in captures and as content in courses. A **HolosObject** is a 3D model that can be tracked during a capture session, placed in a Holos Learn course, or both. The platform maintains a library of \~3,600 CC0 (open-license) objects alongside org-private objects that admins upload themselves. ## Object types | Type | Description | | -------------- | ------------------------------------------------------------ | | Platform (CC0) | Open-license objects shared across all orgs | | Org-private | Objects uploaded by a specific org, visible only to that org | ## Supported formats Org admins can upload models in any of these formats: | Format | Notes | | ------ | -------------------------------------------------- | | GLB | Primary format, no conversion needed | | USDZ | Converted to GLB post-upload; USDZ retained for AR | | OBJ | Converted to GLB via Blender Lambda post-upload | | FBX | Converted to GLB via Blender Lambda post-upload | All uploads automatically produce a GLB for web preview and a USDZ for AR tracking where not already provided. ## Making an object trackable For an object to be tracked during a capture session, it needs a `.referenceobject` file — an Apple ML-trained descriptor of its geometry, generated from the USDZ mesh. The platform handles this as a processing request. When an admin links a non-trackable object to a skill, a request is automatically filed. The Holos team processes it and uploads the resulting `.referenceobject` file. ## Key fields | Field | Description | | ------------------------ | ------------------------------------------------ | | `name` | Display name | | `tags` | Searchable labels | | `source.glb` | S3 key for the GLB mesh | | `source.usdz` | S3 key for the USDZ mesh | | `source.referenceObject` | S3 key for the `.referenceobject` AR descriptor | | `glbUrl` | Presigned download URL for GLB | | `usdzUrl` | Presigned download URL for USDZ | | `referenceObjectUrl` | Presigned download URL for `.referenceobject` | | `thumbnailUrl` | Presigned URL for the thumbnail image | | `approvalStatus` | `pending` · `approved` · `rejected` | | `conversionStatus` | `pending` · `processing` · `complete` · `failed` | ## Endpoints * `GET /api/org/:orgId/objects` — list objects (platform + org-private) * `GET /api/org/:orgId/objects/by-ids/:ids` — batch fetch by `_id` * `POST /api/org/:orgId/objects/upload` — initiate an org object upload * `PATCH /api/org/:orgId/objects/:objectId` — update name, tags, approval status # Organizations Source: https://docs.holos.io/domains/organizations Tenant accounts and member management. An **Organization** is the top-level tenant in Holos. All resources (skills, captures, objects, courses) are scoped to an org. Members belong to an org with a specific role that determines what they can do. ## Roles | Role | Capabilities | | --------- | ----------------------------------------------------------------------- | | `owner` | Full access including billing and ownership transfer | | `admin` | Full access to all resources; can manage members | | `manager` | Can create and edit skills, captures, and objects; can approve captures | | `member` | Can view resources and record captures | Role assignment is managed through the Holos dashboard or via Stytch's B2B member management. ## SSO and SCIM Organizations can configure SSO (SAML or OIDC) and SCIM provisioning via Stytch. When SCIM is active, member provisioning and deprovisioning is handled automatically by your identity provider. ## Key fields | Field | Description | | --------- | ------------------------------------- | | `orgId` | Unique org identifier (slug) | | `name` | Display name | | `slug` | URL-safe identifier used in API paths | | `members` | List of member records with roles | ## Endpoints * `GET /api/org/:orgId` — get organization details * `GET /api/org/:orgId/members` — list members * `POST /api/org/:orgId/members/invite` — invite a new member * `PATCH /api/org/:orgId/members/:memberId` — update a member's role * `DELETE /api/org/:orgId/members/:memberId` — remove a member # Skills Source: https://docs.holos.io/domains/skills Org-scoped tasks that captures are recorded against. A **Skill** is the central organizing unit of a Holos workflow. It represents a real-world procedure or task that an organization wants to capture and eventually train on. Skills have assignees, deadlines, status tracking, and a list of tracked objects, which makes them the coordination layer between managers who define what to capture and field operators who go record it. ## Key fields | Field | Description | | -------------------- | ----------------------------------------------------------- | | `skillId` | Unique within the org | | `title` | Display name | | `description` | What the skill is about | | `instructions` | Detailed guidance for the person recording (rich text) | | `status` | `capturing` · `processing` · `ready` · `archived` | | `priority` | `none` · `low` · `medium` · `high` · `urgent` | | `assignees` | Member IDs responsible for recording | | `deadline` | Optional due date | | `trackedObjects` | Objects the app should track during captures for this skill | | `outputs` | Generated training outputs (SOPs, courses, policies, etc.) | | `tags` | Free-form labels | | `icon` / `iconColor` | Visual identity in the dashboard | ## Lifecycle Skills start in `capturing` status. As captures are recorded and reviewed, the skill progresses to `processing` and eventually `ready` when outputs have been generated. Skills can be `archived` to remove them from active views without deletion. ## Tracked objects The `trackedObjects` array links `HolosObject` records to the skill. When a capture session is started under a skill, the Holos Capture app downloads the `.referenceobject` file for each linked object so that the app can track them. See [Objects](/domains/objects) for detail on what makes an object trackable. ## Endpoints Full endpoint reference is available in the OpenAPI spec. Key operations: * `GET /api/org/:orgId/skills` — list skills, filterable by status * `POST /api/org/:orgId/skills` — create a skill * `GET /api/org/:orgId/skills/:skillId` — get a skill * `PATCH /api/org/:orgId/skills/:skillId` — update a skill * `DELETE /api/org/:orgId/skills/:skillId` — archive a skill # Users & Members Source: https://docs.holos.io/domains/users User identity and org membership in Holos. Holos distinguishes between **Users** (identity) and **Members** (org membership). ## Users A User represents an individual's identity: their email address and display name. A user can belong to multiple organizations. ## Members A Member record links a User to an Organization with a specific role. Most API endpoints work with Member IDs rather than User IDs, since the meaningful context is always within an org. ## Key fields ### User | Field | Description | | ------------------------ | ------------------------------------------------------------------------------------ | | `externalId` | External auth identifier, used as the primary identity reference across the platform | | `firstName` / `lastName` | Display name | | `email` | Primary email address | ### Member | Field | Description | | ----------------- | ------------------------------------------------ | | `memberId` | External auth identifier for this org membership | | `authLevel` | Role: `owner` · `admin` · `manager` · `member` | | `organization_id` | The org this membership belongs to | ## Denormalized name fields Some resources (Captures, Skills) store `memberFirstName` and `memberLastName` directly on the record. This is intentional; it ensures display names remain stable even if a user updates their profile after the fact. ## Endpoints * `GET /api/org/:orgId/members` — list all members of an org * `GET /api/org/:orgId/members/:memberId` — get a specific member * `PATCH /api/org/:orgId/members/:memberId` — update role or profile fields # Holos Foundry Source: https://docs.holos.io/foundry/index Dedicated, secure compute that processes your organization's captures and objects. Holos Foundry is available to **select customers only**. If your organization needs dedicated processing capacity or wants captures and scans processed on your own hardware, [contact us](mailto:hello@holos.io) to request access. **Holos Foundry** is the compute layer that processes your organization's captures and objects: a fleet of Macs (**runners**) that pull queued jobs, do the work locally, and upload the results. Foundry started as the way to build **trackable objects** — the reference descriptor that lets [Holos Capture](/capture/index) recognize a real-world object and follow it through a session — because that job is Apple-toolchain-only and takes hours on a Mac. It now runs the capture pipeline too: preparing a video's poster and scrubber previews, transcribing its audio, and extracting procedure steps from the transcript. See [Services and data residency](/foundry/services) for the full list and where each one runs. For most organizations this happens automatically on Holos-operated infrastructure and needs no setup. Foundry becomes visible to your team when you run **dedicated runners**: either capacity we manage on your behalf, or Macs your own organization operates. ## Why a dedicated Foundry With bring-your-own-Mac runners, captures and 3D models are processed on hardware your organization controls. Most services keep everything on the machine; [the residency table](/foundry/services#where-your-data-is-processed) names the exceptions rather than leaving you to assume. Reserved runners mean your jobs aren't waiting behind anyone else's queue. Add Macs to process more captures and train more objects in parallel. Runners only ever pull work over outbound HTTPS: no inbound ports, no SSH. They authenticate with short-lived, scoped, revocable machine tokens. Enroll, monitor, and revoke runners from the dashboard. Builds auto-update, so your fleet stays current without manual maintenance. ## How it fits together Every service follows the same shape. Using object training as the example: 1. Someone on your team [enables object tracking](/dashboard/objects#enabling-object-tracking) for an object, choosing a view mode and training mode. This creates a **training job**. 2. The job lands in the Foundry **queue** as *Queued*. 3. An available **runner** that advertises this service claims the job and downloads what it needs. 4. The runner streams progress back while it works, then uploads the finished reference object. 5. The object's **Trackable** field flips to **Yes** and it becomes available in Holos Capture. Capture jobs work the same way but are enqueued for you: uploading a video capture queues its video prep, and each finished stage queues the next, so a capture arrives with a poster, scrubber previews, a transcript, and extracted steps without anyone requesting them. A runner can hold one job per service at a time, so a Mac granted several services works on several jobs at once rather than serializing everything behind an eight-hour training run. ## The Foundry dashboard Organizations with Foundry access see a **Foundry** section in the [dashboard](https://app.holos.io): Watch jobs move through Queued → In Progress → Done, with live progress and the service each one belongs to. Enroll and name the Macs that do the work, choose which services they take, and rotate or revoke their credentials. The Foundry section is visible to organization **admins and managers**. The Runners page additionally requires that your organization be enabled for its own runners — if it isn't, the page says so and [we can turn it on](mailto:hello@holos.io). ## Requesting access Foundry is offered as part of an engagement with the Holos team, tailored to your capacity and data-residency needs. Tell us about your object catalog and any data-residency requirements, and we'll help you set up dedicated runners. # Job queue Source: https://docs.holos.io/foundry/jobs Track jobs of every service as they move through the Foundry queue. The **Job queue** (**Foundry → Jobs** in the [dashboard](https://app.holos.io)) is the live view of every job for your organization, across every [service](/foundry/services). Each row is one unit of work — training an object, preparing a video, transcribing it, extracting its steps — and the queue shows where it is in its lifecycle. Foundry is available to select customers only, and the Job queue is visible to organization admins and managers. [Contact us](mailto:hello@holos.io) to request access. ## Job types Every row carries the service it belongs to. Object training is requested by a person; the capture services are enqueued automatically as an upload moves through the pipeline. | Type | Created when | Produces | | ------------------- | --------------------------------------------------------------------------- | -------------------------------------------------- | | **Object training** | Someone [enables tracking](/dashboard/objects#object-tracking) on an object | The ARKit reference object that makes it trackable | | **Video prep** | A video capture finishes uploading | Poster frame, scrubber previews, speech audio | | **Transcription** | Video prep finishes on a capture with no transcript | A timecoded transcript | | **Step extraction** | A transcript becomes available | The capture's procedure steps | | **Pose extraction** | A picture capture is processed | A posed 3D body mesh | Where each of these runs, and what leaves your infrastructure, is in [Services and data residency](/foundry/services). ## Job lifecycle Every job carries a status. As a runner picks up the work, the status advances: | Status | Meaning | | --------------- | -------------------------------------------------------------------------------------- | | **Queued** | Waiting for an available runner to claim it. | | **In Progress** | A runner has claimed the job and is working. A progress bar shows how far along it is. | | **Done** | The work finished and its output was uploaded. | | **Rejected** | The request was dismissed before completion. | | **Failed** | A processing error occurred. The job can be requeued to try again. | A job that was claimed but stopped reporting progress — a runner losing power mid-training, say — is automatically requeued so another runner can pick it up. ## What each job shows Selecting a job opens its detail panel, which includes: * The **object** or **capture** being processed, with its thumbnail * Live **progress** and the runner currently handling it, while in progress * **Where the data went**: the provider that did the work and whether anything left your infrastructure * For object training, the **view mode**, **training mode**, and any **objects to avoid** ### Training parameters These apply to object training only. They're chosen when tracking is enabled on an object and describe how the object is handled in the real world, which helps produce an accurate reference object: **View mode** | Mode | Best for | | -------------- | ----------------------------------------------------------------------------------------------------------------------- | | **Front** | Objects viewed only from the front: wall-mounted panels, controls, screens. | | **Upright** | Objects that stay upright and are approached from any side: benchtop equipment, freestanding machines. | | **All angles** | Objects picked up and rotated freely: handheld parts and tools. Trains longer and carries a higher false-positive risk. | **Training mode** | Mode | Typical runtime | Best for | | ------------ | --------------- | ---------------------------------------------- | | **Standard** | \~8 hours | Most objects | | **Extended** | \~18 hours | Small, handheld objects that need extra detail | See [Tracking settings](/dashboard/objects#tracking-settings) for full guidance on choosing these. ## Managing a job From the queue you can **stop and requeue** a job that's in progress, handing it back for another runner to claim. That's the "my Mac is wedged, give me my job back" case, and it's the one mutation your team needs day to day. The runner honors it on its next check-in and hands the job back cleanly rather than dropping it mid-write. To retry a failed job, or dismiss one that's no longer wanted, [ask us](mailto:hello@holos.io). Training jobs are long-running, so that part of the queue is designed to be checked in on rather than watched. The capture services are quick by comparison — a transcript is usually minutes, its steps seconds — so those rows tend to be finished by the time you look. The Foundry app on the Mac can post a notification when its jobs finish. # Runners Source: https://docs.holos.io/foundry/runners Enroll, monitor, and manage the Macs that do your processing. A **runner** is a Mac enrolled with Foundry that pulls jobs from the queue, does the work locally, and uploads the results. The **Runners** page (**Foundry → Runners** in the [dashboard](https://app.holos.io)) is where you enroll runners, watch what they're doing, and manage their credentials. Foundry runners are available to select customers only. This page is visible to organization admins and managers whose organization is enabled for its own runners. [Contact us](mailto:hello@holos.io) to set that up. ## Runner status Each runner reports a live status derived from when it was last seen, whether it holds a job, and what it says about its own health: | Status | Meaning | | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | **Training** / **Processing** | Actively working. Its current job and progress are shown inline; the word follows the kind of work. | | **Online** | Healthy, waiting for the next job. | | **Paused** | Online but taking no new jobs, because someone paused it. A job already in flight still finishes. | | **Degraded** | The machine is alive but one of its services isn't reporting. The other services keep working; hover the pill to see which one is unwell. | | **Low disk** | Not claiming jobs because there isn't enough free space. The label names the shortfall. | | **Stalled** | Holds a job whose progress has stopped reporting (a crash or power loss). The job is automatically requeued for another runner. | | **Offline** | Hasn't checked in recently. | For each runner the page also shows its name, host machine, who enrolled it, when it was last seen, and how many jobs it has recently completed. Hovering a runner's name lists the services it serves. You can give each runner a custom icon and color to tell your fleet apart at a glance. ## Enrolling a runner The easiest way to enroll a Mac is from the Foundry app itself — no credentials to copy or paste. 1. Install the Foundry app on the Mac (the Holos team provides it as part of your setup). 2. Open it and **sign in** to your Holos organization. 3. Click **Enroll this Mac**. Foundry mints the machine credentials, stores them securely in the Mac's Keychain, and the runner starts pulling jobs right away. It shows up on this page within moments, permitted to serve the [services](/foundry/services) that build of the app supports. ### Enroll from the dashboard (alternative) If you'd rather create the credentials yourself, you can add a runner from the dashboard and configure the Mac by hand: 1. Click **Add runner** and give it a name. 2. Foundry generates a **client ID** and **client secret**. 3. Configure the runner Mac with the client ID and secret. The client secret is shown **exactly once**, at creation. Copy it immediately and keep it somewhere safe. Foundry never displays it again. If you lose it, rotate the secret to get a new one. Either way, the runner Mac uses its credentials to mint short-lived access tokens on its own. Nothing about enrollment opens an inbound connection to the Mac: the runner only makes outbound requests to Foundry. ## Setting up the runner Mac The runner software is a small macOS app the Holos team provides as part of your Foundry setup. Once it's enrolled, it runs in the background, polls for queued jobs, and works on one job per service at a time. It updates itself automatically, so the Mac stays current without manual maintenance. The app's **Settings → Services** switches decide what that Mac actually takes on, within what its credentials allow — useful when a machine should train objects overnight but stay out of the capture pipeline, for instance. See [Services and data residency](/foundry/services#choosing-which-services-a-runner-takes). Object training is disk-intensive: a runner Mac needs roughly 64 GB free to claim a training job, and reports **Low disk** instead of claiming when it doesn't have it. The capture services need far less. ## Managing runners From each runner's menu you can: * **Rotate secret**: issue a fresh client secret and invalidate the old one. Use this on a schedule or if a secret may have been exposed. The new secret is shown once. * **Revoke**: permanently disable the runner's credentials so it can no longer claim jobs. Use this when you retire a Mac. * **Rename** and **restyle**: update the display name, icon, and color. * **Copy client ID**: for matching a dashboard row to a machine. Day-to-day control of a runner lives on the Mac itself, in the Foundry app: **pause** it so it takes no new jobs, choose its **services**, **release the job it's currently working on** back to the queue, **rotate its credentials**, or **remove its enrollment**. Pausing is safe mid-job — the job in flight finishes first. Changing which services a credential is *permitted* to serve is a Holos-side change: [ask us](mailto:hello@holos.io) and we'll widen or narrow the grant. What the Mac takes on within that permission is yours to set, in the app. Rotating or revoking takes effect on the runner's next request. A runner mid-job will finish or lose it depending on timing; the job requeues automatically if interrupted. ## Where your data is processed Selecting **Where is my data processed?** on this page opens the full per-service, per-provider table: which services keep everything on the runner, and which hand material to an external provider. It always reflects what your fleet currently runs. See [Services and data residency](/foundry/services) for the same table alongside what each service does. # Services and data residency Source: https://docs.holos.io/foundry/services What each Foundry service does, where it runs, and what (if anything) leaves your infrastructure. A Foundry runner doesn't do one kind of work. Each Mac advertises a set of **services**, and the queue hands it only the job types it advertises and its credentials permit. This page is the reference for what those services are and, for each one, whether the material stays on your hardware. Foundry is available to select customers only. [Contact us](mailto:hello@holos.io) to discuss dedicated runners and data-residency requirements. ## The services | Service | What it does | Runs on | | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | | **Object training** | Trains the ARKit reference object that makes a 3D model [trackable](/dashboard/objects#object-tracking). Needs roughly 64 GB free disk and runs for hours. | Your Macs | | **Video prep** | Derives a video capture's poster frame, scrubber previews, and speech audio track. | Your Macs | | **Transcription** | Turns a video capture's audio into a timecoded transcript. | Your Macs | | **Step extraction** | Turns a capture's transcript into procedure steps. | Your Macs | | **Pose extraction** | Reconstructs a posed 3D body mesh from a picture capture. | Holos servers only | Object training is the one service that *must* run on a Mac: it depends on the Apple toolchain, which is why Foundry is a fleet of Macs in the first place. Pose extraction is the opposite case — it's hosted inference, so it runs server-side and never on your hardware. When your own runners are offline, Holos capacity picks up the capture services so uploads still finish processing. ## Choosing which services a runner takes Each runner's credentials permit a set of services — a ceiling we set with you when your fleet is provisioned, and widen or narrow on request. Within that ceiling, the Foundry app's **Services** switches (**Settings → Services**) let the person at the Mac decide what it actually takes on: a machine can train objects overnight and stay out of the capture pipeline, for instance. A service its credentials don't permit is marked in that window rather than hidden, so "why isn't this Mac taking transcription jobs" always has a visible answer. Transcription requires macOS 26 or later, because it uses Apple's on-device speech models. On an older Mac the service is listed as unsupported and those jobs go elsewhere. ## Where your data is processed Some services do all their work on the machine that claimed the job. Others hand the material to an external provider, which is a decision you may need to account for. This distinction is a property of the **provider**, not the service: the same job type can be local or external depending on which provider ran it. | Service | Provider | Where it runs | What leaves your infrastructure | | --------------- | -------------------------------------- | ------------------------ | ------------------------------- | | Object training | CreateML | Foundry runner | Nothing | | Video prep | AVFoundation | Foundry runner | Nothing | | Transcription | Apple Speech | Foundry runner | Nothing | | Transcription | Whisper | [fal.ai](https://fal.ai) | Capture audio | | Step extraction | [Anthropic](https://www.anthropic.com) | Anthropic | Transcript text | | Pose extraction | SAM 3D | [fal.ai](https://fal.ai) | Capture photo and/or video | The same table is in the dashboard, under **Where is my data processed?** on the [Runners](/foundry/runners) page, where it always reflects what your fleet currently runs. The two rows naming [fal.ai](https://fal.ai) are served only by Holos-side capacity, never by your Macs. With your own runners online, transcription is handled by Apple's on-device models and the audio stays on the machine. Step extraction is worth noting: it's external wherever it runs, so the transcript text goes to a hosted model even when one of your own Macs claims the job. No provider credentials are ever stored on a runner, and runners only ever make outbound requests to Holos. Every finished job records which provider did the work, so what left is answerable per job rather than in general — the dashboard labels each run in the [job queue](/foundry/jobs). If your organization needs a service pinned to your own hardware, that's a fleet configuration we set up with you. [Talk to us](mailto:hello@holos.io) about residency requirements. # Getting started Source: https://docs.holos.io/getting-started From zero to your first capture in a few steps. ## 1. Create an account Sign up at [app.holos.io](https://app.holos.io/signup) or directly within the Holos Capture or Holos Learn apps. If your organization already has a Holos account, ask your admin to invite you instead — all resources are org-scoped. Start your free trial at app.holos.io ## 2. Install Holos Capture Holos Capture is distributed outside the App Store via the Apple Developer Enterprise Program. Your admin will send you either an enterprise install link or a TestFlight invitation. Install Holos Capture and grant the required permissions. ## 3. Define a Skill Before recording, create a Skill in the [Holos dashboard](https://app.holos.io/skills). A Skill is the procedure or task you're capturing; it's what ties captures, tracked objects, and training together. If you just want to record a free-form session first, you can skip this and assign a Skill later. ## 4. Record a session Open Holos Capture, tap **New Capture**, select your Skill, and tap **Start Recording**. When you're done, raise two thumbs up to end the session. Modality controls, gesture triggers, and what gets recorded. ## 5. Upload and review After recording, open the session in the Capture library and tap **Upload**. Once uploaded, it's available in the Holos dashboard for review, annotation, and linking to training. Upload completed sessions and review them in the dashboard. ## What's next Configure 3D reference objects so Capture knows what to track during sessions. Turn approved captures into immersive Vision Pro training courses. # Welcome Source: https://docs.holos.io/index Learn how to capture and deploy the physical processes that happen at your organization. Holos turns undocumented expertise into structured 3D task memory. Capture how the work actually gets done, then deliver it as immersive training for humans or skill libraries for downstream systems. How Capture, Learn, the dashboard, and the API let you manage skills end-to-end. Record how the work gets done. Video, hand and object tracking, and transcription, all synchronized in one spatial session. Deliver captured expertise as immersive Vision Pro training. Learners step through the workflow with the expert's 3D objects. Build on the capture layer. Manage organizations, skills, captures, and 3D objects programmatically. # Authoring courses Source: https://docs.holos.io/learn/authoring Create and edit immersive courses on Apple Vision Pro using a four-level Course → Lesson → Stage → Element hierarchy, with manual or AI-assisted authoring. Courses are authored directly in the Holos Learn app on Apple Vision Pro. Creating and editing courses requires admin or manager access. Content is organized around a four-level hierarchy: **Course → Lesson → Stage → Element**. Build top-down — create the course, add lessons, add stages within each lesson, then populate each stage with elements. ## App tour Browse and manage your courses from the home screen. Create a course manually or generate one with AI. Add lessons, build out stages, and edit course details. Add 3D objects, video, text, images, and recordings to stages. Adjust position, rotation, scale, and other properties of staged elements. # Taking courses Source: https://docs.holos.io/learn/courses Browse the course library and work through lessons. ## Course library After signing in, the home screen shows your organization's course library. Courses are displayed as tiles with a thumbnail and title. Tap a course to open its detail view, which shows: * Course description * Lesson list with progress indicators * Estimated duration ## Working through a lesson Tap a lesson to begin. Holos Learn opens an immersive space and loads the first stage. Stages progress sequentially. At the end of each stage, tap **Next** to advance. Some stages may include interactive elements; follow the on-screen prompts. ### Stage types | Type | Description | | --------- | --------------------------------------------------------- | | 3D object | A positioned object in your space. Rotate and inspect it. | | Video | A video panel anchored in your view | | Text | A text panel with instructions or explanations | | Image | A static image panel | ## Progress Your progress is saved automatically. If you leave a lesson mid-way, it resumes from the last completed stage when you return. The course library shows completion status for each course. Lessons you've finished are marked with a checkmark. ## Course authoring Courses are built and published from the Holos dashboard. See [Authoring courses](/learn/authoring) for the full workflow, and [Skills](/dashboard/skills#generating-outputs) for how captures are turned into course content. # Holos Learn Source: https://docs.holos.io/learn/index Deliver immersive, hands-on training on Apple Vision Pro. Holos Learn Holos Learn Holos Learn delivers captured expertise as immersive training on Apple Vision Pro. Learners step into the workflow, work through stages, and interact with the same 3D objects the expert used. Courses are authored directly in the app and deployed in hours, not months. Available on [Apple Vision Pro](https://apps.apple.com/us/app/holos-learn-in-3d/id6747681580). iPad coming soon. ## Course structure | Level | Description | | ------- | ----------------------------------------------------------------- | | Course | A complete training program on a topic | | Lesson | A chapter within a course | | Stage | A single step or scene within a lesson | | Element | A piece of content within a stage (3D object, video, text, image) | ## Next steps Install Holos Learn and sign in. Browse the course library and work through lessons. Build courses directly in the Holos Learn app. # Device setup Source: https://docs.holos.io/learn/setup Install and set up Holos Learn on Apple Vision Pro. These instructions are for Holos Learn on Apple Vision Pro. iPad support is coming soon. ## Requirements * Apple Vision Pro running visionOS 2.0 or later * A Holos account ## Install from the App Store Download on the App Store 1. Open the App Store on your Apple Vision Pro 2. Search for **Holos Learn** or use the link above 3. Tap **Get** to install 4. Open the app from your home screen ## Sign in 1. Open Holos Learn 2. Enter your work email address 3. Check your email for a magic link and tap it to sign in 4. Select your organization Your session persists. You won't need to sign in again unless you sign out manually or your session expires. # Editing a course Source: https://docs.holos.io/learn/tour-course-detail Add lessons, build out stages, and edit course details in Holos Learn. The course detail view is the main editing hub. It shows the course cover image, title, description, and a scrollable list of lessons below. ## Editing course details Tap the **edit** button (top right) to update the title, description, and cover image. ## Lessons Each lesson appears as a row with a horizontal scroll of stage tiles. Use the **New Lesson** button at the bottom to add a lesson. Tap **...** on a lesson row to: * **Rename** — update title and description * **Duplicate** — copy the lesson and all its stages * **Delete** — remove the lesson permanently ### Lesson toolbar Selecting a lesson reveals a toolbar with: | Button | Action | | ---------- | --------------------------------------------------------------------- | | Add Stage | Append a new stage to the lesson | | Shelf | Open the [element shelf](/learn/tour-elements) for the selected stage | | Properties | Open the properties panel | | Save | Save the current lesson state | ## Stages Stage tiles show a thumbnail and title. Tap a tile to load that stage into the 3D viewport. Press and drag tiles to reorder them. Tap **Done** to save the new order. Tap and hold a tile to rename it, change its thumbnail image, or delete it. # Creating a course Source: https://docs.holos.io/learn/tour-create-course Create a new course manually or generate one with AI in Holos Learn. Tap **+** in the course library to open the new course sheet. You have two creation paths. ## Manual Enter a **title** (required) and optional **description**, then tap **Create Course**. The course opens immediately in the [course detail view](/learn/tour-course-detail). ## AI-generated Switch to the AI tab to generate a full course structure from a prompt. Type your own or pick from the preset suggestions, then tap **Generate Course**. Donovan builds out the course — lessons, stages, and suggested content — in about a minute. You can edit anything it creates. AI course generation is available on paid plans. # Editing elements Source: https://docs.holos.io/learn/tour-edit-elements Adjust position, rotation, scale, and other properties of staged elements in Holos Learn. Tap any element in the 3D stage to select it. The **Properties panel** opens on the right showing the element name and all available controls. Tap **×** to deselect. ## Actions The top of the panel has an action bar with controls that apply to the selected element: | Action | Description | | ------------------- | ---------------------------------------------------------------------- | | **Lock / Unlock** | Prevent or allow edits to the element | | **Delete** | Remove the element from the stage permanently | | **Duplicate** | Create a copy of the element in place | | **Face** | *(Media only)* Element automatically orients toward the viewer | | **Follow** | *(Media only)* Element moves with the camera rather than staying fixed | | **Group / Ungroup** | *(3D objects only)* Toggle grouping for hierarchical objects | When **Face** is on, rotation controls are disabled. When **Follow** is on, position controls are disabled. ## Move, Rotate, Scale All element types support position, rotation, and scale adjustments via three-axis sliders. Changes apply in real time. ## Text For text elements, the **Text** section lets you edit the content directly. Tap **Update** to apply. The **Format** section controls: * Font (Public Sans, Inter, JetBrains Mono) * Weight, size * Bold, italic, underline, strikethrough * Horizontal and vertical alignment * Text color ## Video controls For video and recording elements: | Control | Description | | ------------ | ------------------------------------------------------------------ | | Play / Pause | Preview playback in the stage | | Loop | Repeat the video continuously | | Start on | **Stage Entry** plays automatically; **Tap** waits for the learner | | Volume | 0–100% | ## Highlight color 3D objects can have an optional highlight color applied as an overlay. Use the color picker to set it, or remove it to go back to the default appearance. ## Animation If a 3D object has animations built into its source model, they appear in the **Animation** section. Tap an animation to activate it and toggle looping. Only one animation can be active at a time. # Staging elements Source: https://docs.holos.io/learn/tour-elements Add 3D objects, video, text, images, and recordings to stages in Holos Learn. The **element shelf** is a browser of all assets available to add to a stage, including 3D objects from your organization's library, as well as ad hoc content like text, images, video, and recordings. Open it from the lesson toolbar using the shelf icon, then tap an asset to stage it. ## Content types | Type | Description | | ------------- | ------------------------------------------------------------------------------------------------------------- | | **3D object** | A model from your organization's [object library](/dashboard/objects), placed directly in the learner's space | | **Video** | A video imported from your Photos library or local files | | **Image** | An image imported from your Photos library or local files | | **Text** | A text block with instructions or context | | **Document** | A PDF attached as a reference panel | | **Recording** | A recording of your Spatial Persona with voiceover, captured directly in the app | ## Adding an element 1. Tap **+** in the element shelf 2. Select a content type 3. Choose or capture the content 4. The element saves automatically and appears in the shelf Each shelf tile shows the element type, thumbnail, file size, and processing state. Large video files may take a moment to process after import. ## 3D objects 3D objects are sourced from your organization's [object library](/dashboard/objects). Once placed in a stage, you can adjust position, rotation, scale, and opacity directly in the 3D viewport. # Course library Source: https://docs.holos.io/learn/tour-library Browse and manage your courses from the Holos Learn home screen. The **course library** is the home screen of Holos Learn. It lists all courses available to your organization. ## Course list Each course appears as a card showing the cover image, title, and description. Tap a card to open the course. ## Creating a course If you have admin or manager access, a **+** button appears at the top right. Tap it to open the new course sheet. See [Creating a course](/learn/tour-create-course). ## Access Courses respect your role: | Role | Permissions | | --------------- | ---------------------------------------------- | | Admin / Manager | Create, edit, and delete courses; take courses | | Member | Take courses only | # Platform overview Source: https://docs.holos.io/platform How Capture, Learn, and the API make it easy to capture, quantify, and deploy the physical skills that exist at your organization. Holos turns undocumented expertise into structured 3D task memory. Experts record how the work actually gets done, capturing every motion, decision, and tool interaction. The platform makes that knowledge reusable: as immersive training for human learners, or as structured skill data for downstream systems. Holos platform flow Holos platform flow ## How it works Experts record how the work gets done. Synchronized video, hand tracking, object tracking, transcription, and location, packaged as a single spatial session. The Holos dashboard is where organizations define Skills, review and approve captures, manage 3D objects, and author training outputs. Approved captures are assembled into structured courses and published to Holos Learn, where learners step into the workflow on Apple Vision Pro. ## Key concepts A procedure or task to be captured and trained on. The central organizing unit across Capture, the dashboard, and Learn. A recorded spatial session from Holos Capture, linked to a Skill and reviewed before use in training. A 3D model used for AR tracking during captures or as interactive content in courses. Immersive training built from captures, organized into lessons, stages, and elements, then published to Holos Learn.