Coaching Presets

A coaching preset is a trusted, server-stored session configuration. Send presetId instead of building interactionMode, feedbackTask, metrics, and the rest yourself — the endpoint loads the real values and the client cannot override them.

Atanzo AI ships 18 canonical coaching experiences — golf swing analysis, tennis form, pitching mechanics, physical therapy, exercise form checks, public speaking delivery, deposition prep, and a set of field-service inspection/procedure experiences (HVAC, plumbing, roofing, fire safety, pest control, auto mechanics, building inspection, home repair, care procedures). Each one is a fully-tuned immediate_feedback (or, for HomeAssist, guided_steps) session: the interaction mode, feedback cadence, video processor, metrics, and end-of-session scorer are all pre-configured by Atanzo. You don't assemble any of that yourself — you reference the preset by id.

This page covers the developer/API path: launching a preset from your own backend via POST /guide/session. If you're choosing between coaching and guided steps conceptually, or looking at the console side, start with Coaching Mode.

What a Preset Is

Each preset is one canonical entry, defined once and seeded server-side into two places:

  • picoagentmedia (catid: "agent") — surfaces the preset in the console's agent picker as a synthetic __coach-<slug> agent.
  • picoagentusers (catid: "agent:system") — the row the embed API (guidedSessionToken) loads.

Every preset row is flagged is_coaching_preset: true and carries a required_planmodule — a per-experience entitlement (coachgolf, coachpresent, coachwitness, …) that gates who can run it. A preset bundles: device_mode, interaction_mode, feedback_task, feedback_tips_per_cycle, feedback_auto_interval_seconds, feedback_timing, video_processor, video_fps, realtime_provider, enable_rag, active_accesstag, pose_guidance, metrics, final_report, and stt_options.

How to Use One

Send presetId in place of agentId when calling the token endpoint:

POST /guide/session
{
  "presetId": "coach-golf",
  "endUserRef": "user-42"
}

agentId and presetId are mutually exclusive ways of identifying what to run — the endpoint accepts either, and presetId takes priority if you supply both (effectiveAgentId = presetId || agentId).

The preset's config wins, always. When presetId is present, the endpoint loads the trusted row and overrides the session knobs from it — a client-supplied interactionMode, feedbackTask, videoProcessor, videoFps, realtimeProvider, enableRag, activeAccesstag, metrics, finalReport, sttOptions, or poseGuidance in the request body is ignored in favor of the preset's stored value. mode (voice/video) is likewise derived from the preset's device_mode, not from what you send. You cannot use presetId to bootstrap a session and then tune it with your own body fields — the values you send for those fields are simply discarded.

The extractor allow-list that normally sanitizes client-supplied metrics is not applied to preset rows — they're trusted server-side config, not client input.

Partner-scoped presets take priority over the shared system preset. The endpoint first looks for a row at picoagentusers { id: presetId, catid: "agent:{cid}" } (a copy scoped to your company); if that doesn't exist, it falls back to picoagentusers { id: presetId, catid: "agent:system" } (the shared preset seeded from the canonical catalog). This lets a partner override a stock preset's config under the same id without affecting other tenants. If neither row exists, or the row isn't flagged is_coaching_preset, the endpoint returns 404 PRESET_NOT_FOUND.

Gating and the Errors You'll See

Two coaching-specific failure modes sit on top of the endpoint's normal scope/plan checks (403 SCOPE_REQUIRED for invoke_voice/invoke_video, 403 PLAN_DISALLOWS_VOICE/PLAN_DISALLOWS_VIDEO for the account-level embed entitlement — see Getting a Session Credential):

CodeWhen it fires
403 COACHING_MODULE_REQUIREDYour credential authenticated a specific end-user (euid, via the password grant) and that end-user's planmodules don't include the preset's required_planmodule. Checked against the resolved end-user, not the company.
403 COACHING_PRESET_NOT_ALLOWEDYour credential is anonymous (no euid) and the company's picoagentutility access record has a coaching_presets_allowed array that doesn't include this presetId. This is an optional per-company allow-list — if the field isn't set, anonymous callers can request any preset (subject to the account's voice/video plan modules).

In short: authenticated end-users are gated by their individual planmodule; anonymous embed deployments are optionally gated by a company-level allow-list. Both checks only apply when presetId is used — plain agentId sessions don't go through either path.

The Console Side

The same 18 presets appear as branded entries in the console's dashboard agent picker, gated by the same required_planmodule mechanism (granted per-company via planmodulesavail), running through the same guided-task LiveKit path. See Coaching Mode for the non-developer view of what these sessions look and feel like, and Session Reports for how their end-of-session scoring shows up.

The 18 Presets

presetIdBrandSkillModeRequired module
coach-golfFAIRWAY/AIGolf Swing Analysisvideocoachgolf
coach-tennisBaselineTennis Form Analysisvideocoachtennis
coach-baseballDiamond MechanicsPitching Mechanicsvideocoachbaseball
coach-rehabRestoraPhysical Therapyvideocoachrehab
coach-formcheckREPSETExercise Formvideocoachformcheck
coach-careTendCare Proceduresvideocoachcare
coach-presentCadencePublic Speakingvideocoachpresent
coach-homeassistHandymanHome Repairvoicecoachhomeassist
coach-witnessCounselDeposition Prepvideocoachwitness
coach-sparkSparkHVAC Field Servicevideocoachspark
coach-firesafetyFireGuardNFPA 25 Inspectionvideocoachfiresafety
coach-roofingStormProofStorm Damage Documentationvideocoachroofing
coach-roofcheckTopLineFinal Quality Walkthroughvideocoachroofcheck
coach-hvacTrueClimateHVAC Commissioningvideocoachhvac
coach-building-inspectionGreenlightOccupancy Inspectionvideocoachbuildinginspection
coach-plumbingPLUMBLINEWater Heater Replacementvideocoachplumbing
coach-auto-mechanicsFULLPOINTMulti-Point Inspectionvideocoachautomechanics
coach-pest-controlCLEARZONEChemical Application Protocolvideocoachpestcontrol

coach-homeassist is the only voice-only, guided_steps-style preset in the set — every other preset runs immediate_feedback over video.

Next Steps

  • Coaching Mode — what coaching sessions look like for the person choosing or running one
  • Getting a Session Credential — the full POST /guide/session parameter reference and scope enforcement
  • Session Reports — reading the end-of-session scorer output a preset's finalReport config produces