All three are read-style POSTs. They don’t mutate state, so they don’t take
Idempotency-Key or If-Match. They’re idempotent by construction.
scaffold — natural language to a manifest
You describe what you want; the platform writes the starting manifest.manifest— editable YAML. Run it throughPUT /v1/alignment/<scope>/<id>to commit, or hand it to themnemom/cards-actionfor PR review.reasoning— care-framed prose explaining the choices.suggested_catalog_entries— values the model would recommend; consider them, then accept or adjust.coverage_gaps— primitives the model thinks would benefit from operator attention.cached— true when the response was served from the description-hash cache (24h TTL).
explain — why did the policy engine flag this?
You ask “what’s wrong with this agent’s spec?”; the platform runs the policy engine and translates the structured findings into prose you can act on.method + url hint that points at the sub-resource verb that would resolve it. Care-framing throughout — the prose uses “would benefit from”, “depends on”, “would close this gap” rather than compliance language.
Set "enrich": true in the body to call the LLM and expand the structured remediations into long-form prose (off by default; rate-limited).
See the explain guide for the full debug-and-fix flow.
simulate — dry-run before you commit
You describe a hypothetical tool call; the platform runs the gateway and observer evaluators against the agent’s current spec and tells you whether the call would be allowed.allowed is one of:
"true"— both gateway and observer pass with no conditions."false"— at least one verdict isfail."conditional"— passes but requires a receipt or carries warnings. Theconditions[]array names what’s needed.
Rate limits
LLM-backed verbs (scaffold, and explain/simulate when called with"enrich": true) share a per-principal budget:
On exceed:
429 Too Many Requests with a Retry-After header and a care-framed body. explain and simulate are pure-sync (no LLM) by default; they don’t consume the LLM budget unless you pass "enrich": true.
Care-framed by construction
Every customer-facing string in the response surface — error messages, reasoning prose, suggested remediations — is asserted by the platform’s care-framing test to avoid compliance vocabulary (Blocked / Denied / Required / Forbidden / Violation / Must). The replacement vocabulary is would benefit from, depends on, run X then retry, you’d be supported by. LLM-generated prose runs through a post-check that swaps any slips automatically.Cache + freshness
scaffold caches LLM responses by a hash of the input (model + scope + description + hints). Identical inputs return identical outputs without burning the LLM budget — 24-hour TTL. explain and simulate are not cached — they consume live spec state.Related reading
- Sub-resource verbs — the write surface the remediations point at.
- Agent Cards — the URL surface that wraps it all.
- Policy engine — what explain and simulate are surfacing.
- Care-framing doctrine — the operator vocabulary every helper uses.