Skip to content
Docs menu

coach

Training Coach — the experience corpus, run diagnosis with in-whitelist proposals, and programme planning. Every claim cites a card.

8 operations · 26 schemas

GET /v1/coach/doctrine

The coach's doctrine (numbered methodology rules)

getCoachDoctrine · scope none

The distilled methodology the Training Coach reasons with, as numbered rules with the cases that taught them. Public: it is the corpus that makes the coach's advice citable, and a claim nobody can check is not worth making. Cite a rule as doctrine-{number}.

Responses

getCoachDoctrine responses
StatusDescriptionBody
200

The doctrine.

CoachDoctrine
401

Missing or invalid credentials.

Problemapplication/problem+json
503

A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace).

Problemapplication/problem+json

GET /v1/coach/cards

Search the experience corpus

searchExperienceCards · scope none

Keyword + tag search over the experience cards (no vector index in v0). q is scored against card id, title, rule, trigger conditions, tags and symptom with inverse-document-frequency weighting, so a term common to the whole corpus contributes nothing. tags is a conjunction — tags=reward-shaping,curriculum returns cards carrying both. With no q the result is every matching card ordered by id, which is what the corpus browser lists.

Parameters

searchExperienceCards parameters
NameInTypeDescription
qquerystring

length ≤ 500

Free-text query.

tagsquerystring

length ≤ 300

Comma-separated tags; a card must carry all of them.

taskquerystring

length ≤ 32

Task line filter: walk | omni | run | recovery | arm | infra.

phasequerystring

length ≤ 32

Pipeline phase filter (plant-calibration, reward-shaping, …).

confidencequeryCardConfidence
limitqueryinteger

default 500 · ≥ 1 · ≤ 1000

Page size (tree listings allow larger pages).

cursorquerystring

length ≤ 512

Opaque cursor from the previous page's next_cursor.

Responses

searchExperienceCards responses
StatusDescriptionBody
200

Page of cards, most relevant first.

ExperienceCardPage
422

Request failed validation.

Problemapplication/problem+json
503

A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace).

Problemapplication/problem+json

GET /v1/coach/cards/{card_id}

Get one experience card

getExperienceCard · scope none

The full card including its provenance quote — what a citation in an advice report expands to.

Parameters

getExperienceCard parameters
NameInTypeDescription
card_idrequiredpathCardId

Experience card slug, e.g. resume-state-dr-audit.

Responses

getExperienceCard responses
StatusDescriptionBody
200

The card.

ExperienceCard
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
503

A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace).

Problemapplication/problem+json

POST /v1/coach/advice

Diagnose a training run

createAdvice · scope key:train

Reads a training run — by run_id, or inlined — and returns a structured AdviceReport: diagnosis, in-whitelist proposals, an experiment plan, and flags for anything that would need a contract change. When parent_run_id is set (or the run has one), the resolved-config diff against the parent goes into the prompt as attribution evidence.

Four things are enforced in code, on the model's output, not asked for in the prompt: every proposal's category is in the whitelist; every proposal cites at least one card or doctrine rule that exists in the corpus; every PASS gate found in the scorecard is echoed under experiment_plan.constraints; and no proposal touches the policy contract, observation space, action space or robot description — those may appear only in flags. An invalid report is retried once and then fails with 502 carrying the validation errors.

This endpoint spends model dollars, so it needs key:train like the other compute endpoints, and is additionally capped by a per-account daily quota — every key, session, plan and agent session of the user shares one (429 with X-Coach-Quota-* headers when exhausted).

Request body

application/json · required · AdviceRequest

createAdvice request body
FieldTypeDescription
run_idId | null
inlineAdviceInline | null
parent_run_idId | null
robot_repostring | null

pattern ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

Robot repo {owner}/{slug}; its card sizes plant advice.

questionstring | null

length ≤ 4000

What the team actually wants to know.

Responses

createAdvice responses
StatusDescriptionBody
201

Report produced and persisted.

AdviceSession
401

Missing or invalid credentials.

Problemapplication/problem+json
403

Authenticated but not allowed (visibility, membership or scope).

Problemapplication/problem+json
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
422

Request failed validation.

Problemapplication/problem+json
502

The model's report failed validation twice. errors[] carries the broken guarantees; nothing was persisted.

Problemapplication/problem+json
503

A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace).

Problemapplication/problem+json

POST /v1/coach/plan

Plan a training programme from a task brief

createCoachPlan · scope key:train

The zero-runs path. From a task brief (and a robot repo's card, when given) returns the contract to freeze, the plant measurements to take before any training, a minimal reward table, a DR baseline, a ladder outline of one-variable rungs, and a first acceptance battery — every item cited to the corpus. Spends model dollars: key:train, same daily quota as advice.

Request body

application/json · required · CoachPlanRequest

createCoachPlan request body
FieldTypeDescription
task_briefrequiredstring

length 1–8000

robot_repostring | null

pattern ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

Robot repo {owner}/{slug} whose card sizes the plan.

Responses

createCoachPlan responses
StatusDescriptionBody
201

Plan produced and persisted.

AdviceSession
401

Missing or invalid credentials.

Problemapplication/problem+json
403

Authenticated but not allowed (visibility, membership or scope).

Problemapplication/problem+json
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
422

Request failed validation.

Problemapplication/problem+json
502

The model's plan failed validation twice.

Problemapplication/problem+json
503

A service this endpoint needs is not configured in this deployment (M0's boot guarantee: the API boots with zero secrets, and an endpoint that needs one says so instead of returning a stack trace).

Problemapplication/problem+json

GET /v1/coach/sessions

List coach sessions

listAdviceSessions · scope key:read

Sessions visible to the caller, newest first.

Parameters

listAdviceSessions parameters
NameInTypeDescription
run_idqueryId

Only sessions about this run.

limitqueryinteger

default 20 · ≥ 1 · ≤ 100

Page size.

cursorquerystring

length ≤ 512

Opaque cursor from the previous page's next_cursor.

Responses

listAdviceSessions responses
StatusDescriptionBody
200

Page of sessions.

AdviceSessionPage
401

Missing or invalid credentials.

Problemapplication/problem+json

GET /v1/coach/sessions/{session_id}

Get a coach session

getAdviceSession · scope key:read

Parameters

getAdviceSession parameters
NameInTypeDescription
session_idrequiredpathId

Coach session id (advice_...).

Responses

getAdviceSession responses
StatusDescriptionBody
200

The session.

AdviceSession
401

Missing or invalid credentials.

Problemapplication/problem+json
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json

POST /v1/coach/sessions/{session_id}/feedback

Rate a coach report

setAdviceFeedback · scope key:write

Thumbs up or down, with an optional note. Feedback is a corpus candidate: a report plus a verdict plus the run that actually followed is the raw material of the next experience card. Idempotent — the last verdict wins.

Parameters

setAdviceFeedback parameters
NameInTypeDescription
session_idrequiredpathId

Coach session id (advice_...).

Request body

application/json · required · AdviceFeedback

setAdviceFeedback request body
FieldTypeDescription
verdictrequiredstring

one of up · down

notestring | null

length ≤ 4000

Responses

setAdviceFeedback responses
StatusDescriptionBody
200

Feedback recorded; the session is returned.

AdviceSession
401

Missing or invalid credentials.

Problemapplication/problem+json
403

Authenticated but not allowed (visibility, membership or scope).

Problemapplication/problem+json
404

Resource not found (or hidden from the caller).

Problemapplication/problem+json
422

Request failed validation.

Problemapplication/problem+json

Schemas (26)

The schemas these operations reach before any other tag’s do. A type that links elsewhere is rendered on that tag’s page.

CoachDoctrine

object

CoachDoctrine fields
FieldTypeDescription
rulesrequiredarray of DoctrineRule
markdownstring

length ≤ 200000

The doctrine as written, for rendering.

card_countrequiredinteger

≥ 0

tagsarray of CardTag

CardConfidence

string

one of observed-once · replicated · mechanism-understood · hypothesis

How well the card's mechanism is established. observed-once — it happened once, mechanism plausible. replicated — the same effect at least twice. mechanism-understood — cause demonstrated by a targeted experiment. hypothesis — inferred by the corpus author, not demonstrated. A proposal resting only on hypothesis cards must say so in its risk.

ExperienceCardPage

object

ExperienceCardPage fields
FieldTypeDescription
itemsrequiredarray of ExperienceCard
next_cursorrequiredstring | null
totalrequiredinteger

≥ 0

Cards matching the query across all pages.

CardId

string

length ≤ 96 · pattern ^[a-z0-9][a-z0-9-]*$

Experience card slug — stable, never renumbered.

ExperienceCard

object

One distilled sim2real / RL-training lesson.

ExperienceCard fields
FieldTypeDescription
idrequiredCardId
titlerequiredstring

length ≤ 400

robotstring

length ≤ 200

taskstring

length ≤ 32

walk | omni | run | recovery | arm | infra

phasestring

length ≤ 32

plant-calibration | reward-shaping | dr-tuning | attribution | ...

symptomstring

length ≤ 4000

contextstring

length ≤ 8000

changestring

length ≤ 4000

outcomestring

length ≤ 4000

mechanismstring

length ≤ 4000

rulerequiredstring

length ≤ 2000

The transferable one-liner. Robot-agnostic by construction.

applies_whenarray of string
tagsrequiredarray of CardTag
confidencerequiredCardConfidence
conflictsstring | null

length ≤ 4000

provenanceCardProvenance | null
scorenumber | null

Search relevance; null when the listing is unscored.

AdviceRequest

object

Exactly one of run_id or inline. parent_run_id overrides the run's stored parent for this call.

AdviceRequest fields
FieldTypeDescription
run_idId | null
inlineAdviceInline | null
parent_run_idId | null
robot_repostring | null

pattern ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

Robot repo {owner}/{slug}; its card sizes plant advice.

questionstring | null

length ≤ 4000

What the team actually wants to know.

AdviceSession

object

One persisted coach call. Retained even when the user throws the report away: a report plus a verdict plus the run that actually followed is the raw material of the next experience card.

AdviceSession fields
FieldTypeDescription
idrequiredId
kindrequiredstring

one of advice · plan

run_idId | null
run_refrequiredstring

length ≤ 128

The subject: a run id, inline, or plan.

reportAdviceReport | null

Present when kind is advice.

planCoachPlan | null

Present when kind is plan.

cited_card_detailsarray of ExperienceCard

The full cards this report cites, so a client can expand a citation to its provenance quote without a second round trip.

retrieved_cardsarray of CardId

Card ids put in front of the model (≤15).

modelrequiredstring

length ≤ 64

backendstring

length ≤ 32

anthropic or recorded. A replayed report must never read as a real one.

usagerequiredAdviceUsage
feedbackstring | null

one of up · down

feedback_notestring | null

length ≤ 4000

created_atrequiredstring (date-time)

CoachPlanRequest

object

CoachPlanRequest fields
FieldTypeDescription
task_briefrequiredstring

length 1–8000

robot_repostring | null

pattern ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$

Robot repo {owner}/{slug} whose card sizes the plan.

AdviceSessionPage

object

AdviceSessionPage fields
FieldTypeDescription
itemsrequiredarray of AdviceSession
next_cursorrequiredstring | null

AdviceFeedback

object

AdviceFeedback fields
FieldTypeDescription
verdictrequiredstring

one of up · down

notestring | null

length ≤ 4000

DoctrineRule

object

DoctrineRule fields
FieldTypeDescription
idrequiredstring

pattern ^doctrine-[0-9]+$

Citation form: doctrine-{number}.

numberrequiredinteger

≥ 1

titlerequiredstring

length ≤ 300

statementrequiredstring

length ≤ 4000

casestring

length ≤ 8000

The episode that taught the rule.

applicationstring

length ≤ 4000

How the coach applies it.

cited_cardsarray of CardId

CardTag

string

one of plant-calibration · actuator-modeling · observation-honesty · reward-shaping · action-rate · domain-randomization · fork-selection · gate-battery · real-acceptance · attribution · process · contract-freeze · sim2sim · curriculum · termination · hardware · measurement

Controlled retrieval vocabulary (see assets/experience/schema.json).

CardProvenance

object

Where the card's claim comes from. This is what a citation in a report expands to in the UI — the point of the corpus is that every number is traceable to a sentence somebody actually wrote at the time.

CardProvenance fields
FieldTypeDescription
filerequiredstring

length ≤ 512

sectionrequiredstring

length ≤ 512

quoterequiredstring

length ≤ 8192

extraarray of object

Additional corroborating citations.

filerequiredstring

length ≤ 512

sectionrequiredstring

length ≤ 512

quoterequiredstring

length ≤ 8192

AdviceInline

object

A run snapshot supplied by value, for a run not on the hub.

AdviceInline fields
FieldTypeDescription
config_yamlrequiredstring

length ≤ 400000

The run's RESOLVED training config (YAML or JSON).

metrics_summarystring

length ≤ 200000

Metrics as text — a CSV tail, a table, or prose.

scorecard_jsonobject | null

Acceptance results. PASS/FAIL rows are read from a gates key when present, otherwise discovered from any leaf carrying a PASS/FAIL token; every PASS row becomes a constraint in the report.

parent_config_yamlstring

length ≤ 400000

The parent run's resolved config, for the attribution diff.

AdviceReport

object

AdviceReport fields
FieldTypeDescription
summarystring

length ≤ 4000

diagnosisrequiredarray of Diagnosis
proposalsrequiredarray of Proposal
experiment_planrequiredExperimentPlan
flagsrequiredarray of AdviceFlag

CoachPlan

object

CoachPlan fields
FieldTypeDescription
contract_checklistrequiredarray of string
plant_calibration_checklistrequiredarray of string
reward_baselinerequiredarray of CoachRewardTerm
dr_baselinerequiredarray of CoachDRTerm
ladder_outlinerequiredarray of ExperimentRung
acceptance_battery_draftrequiredarray of CoachAcceptanceRow
cited_cardsarray of string
notesstring

length ≤ 4000

AdviceUsage

object

What this call cost. Metered per session, retries included.

AdviceUsage fields
FieldTypeDescription
input_tokensrequiredinteger

≥ 0

output_tokensrequiredinteger

≥ 0

cache_read_tokensinteger

≥ 0

cache_write_tokensinteger

≥ 0

cost_usdrequirednumber

USD to 6 decimal places; 0 when the model has no rate row.

pricedboolean

False means usage was recorded but the model is unpriced.

attemptsinteger

≥ 1

Model calls made, including the retry after a validation failure.

Diagnosis

object

Diagnosis fields
FieldTypeDescription
symptomrequiredstring

length ≤ 2000

likely_mechanismrequiredstring

length ≤ 4000

confidencerequiredstring

one of high · medium · low

missing_evidencearray of string

What would settle it. The most valuable field in the report.

cited_cardsarray of string

Proposal

object

One in-whitelist parameter change. Guaranteed in code: category is in the whitelist, cited_cards is non-empty and every entry resolves in the corpus, and param_path touches nothing contract-, observation-, action- or robot-description-shaped.

Proposal fields
FieldTypeDescription
param_pathrequiredstring

length ≤ 300

Dotted path in the run's config, e.g. rewards.feet_air_time.weight.

fromstring | null

length ≤ 300

Current value as text; null when the key is absent today.

torequiredstring

length ≤ 300

categoryrequiredProposalCategory
rationalerequiredstring

length ≤ 4000

cited_cardsrequiredarray of string

items ≥ 1

Card ids and/or doctrine-N rule ids. At least one, all real.

riskrequiredstring

length ≤ 2000

What this could cost. When every cited card is confidence: hypothesis, this must say the mechanism is a hypothesis — enforced.

ExperimentPlan

object

ExperimentPlan fields
FieldTypeDescription
rungsrequiredarray of ExperimentRung
stop_rulesrequiredarray of string

Hit any one, stop. Frozen before training.

constraintsrequiredarray of string

Standing regression constraints. Every PASS gate in the scorecard appears here — enforced in code, not requested in the prompt.

AdviceFlag

object

A suspicion that lands outside the whitelist. Contract, observation space, action space and robot description changes appear here and nowhere else: they need a versioned profile, a fingerprint update and a checker extension in the same change, none of which a coach can promise.

AdviceFlag fields
FieldTypeDescription
concernrequiredstring

length ≤ 2000

param_pathstring | null

length ≤ 300

why_out_of_whitelistrequiredstring

length ≤ 2000

cited_cardsarray of string

CoachRewardTerm

object

CoachRewardTerm fields
FieldTypeDescription
namerequiredstring

length ≤ 120

purposerequiredstring

length ≤ 1000

starting_weightstring | null

length ≤ 120

cited_cardsarray of string

CoachDRTerm

object

CoachDRTerm fields
FieldTypeDescription
namerequiredstring

length ≤ 120

rangerequiredstring

length ≤ 200

measured_fromrequiredstring

length ≤ 1000

How the nominal and the band were measured (never guessed).

cited_cardsarray of string

ExperimentRung

object

One ladder rung — exactly one variable, read off a pre-registered table.

ExperimentRung fields
FieldTypeDescription
namerequiredstring

length ≤ 200

variablerequiredstring

length ≤ 300

The single thing this rung changes.

expected_readingrequiredstring

length ≤ 2000

How each plausible outcome will be read, written before it runs.

stop_afterstring | null

length ≤ 200

CoachAcceptanceRow

object

CoachAcceptanceRow fields
FieldTypeDescription
namerequiredstring

length ≤ 160

metricrequiredstring

length ≤ 300

thresholdrequiredstring

length ≤ 200

kindstring

length ≤ 32

task | posture | margin | assist-stripped | chirality

ProposalCategory

string

one of reward · domain_rand · command · curriculum · ppo_hyperparam · calibration

What a proposal is allowed to touch. Two whitelists exist by design and this is the wider one — a human reads the report and pulls the trigger, so hyperparameters and calibration are in scope. The future auto-loop (agent pulls the trigger) uses the same validator configured down to reward | domain_rand | command.