record_recommendation()
KeyRecords the full recommendation: an action (act, wait, test, research, add, hold, trim, exit, hedge, escalate), the rationale, alternatives rejected, assumptions, caveats, invalidation criteria, and a monitoring plan. The expected_outcome is frozen at this moment — it is what record_outcome will be scored against. Status moves to awaiting_approval, or straight to decided for low-risk.
record_recommendation(decision_id, action, rationale, expected_outcome, invalidation_criteria)→ RECOMMENDATIONCallable over MCP as record_recommendation(decision_id, action, rationale, expected_outcome, invalidation_criteria). REST mirror POST /v1/recommendations Planned — alpha is MCP-only
The agent's full case, on the record: the action, the rationale, what it rejected and why, the assumptions, the invalidation criteria, the monitoring plan — and the expected outcome, frozen. Months later there is no arguing about what was promised. This is the artifact the human actually approves.
Over MCP, your agent invokes it on its own when the moment calls for it — just describe the situation. A Python SDK for headless runtimes is planned; this is what the call will look like.
| Param | Type | Description |
|---|---|---|
| decision_idREQUIRED | string | The open decision this recommends on. |
| actionREQUIRED | enum | act · wait · test · research · add · hold · trim · exit · hedge · escalate. |
| rationaleREQUIRED | string | Why this action, in plain language. |
| expected_outcomeREQUIRED | object | The measurable expectation. Frozen on write. |
| invalidation_criteriaREQUIRED | string[] | Observable conditions that void the thesis. |

