emit_runbook_surface
Stamp your content through a DECLARED runbook — a pre-authored, judgment-free surface composition. You supply content only; the runbook supplies the composition (which atoms, how arranged, navigation). DISCOVERY: call with runbook_id only (no content) to get that runbook's input_contract + parsing_guide — shape your source data to the contract (parsing is your job as the consumer), then call again with content. Some runbooks also return elicit — questions to ASK THE USER before you fill the contract. Ask them; do not guess the answers.
ON SUCCESS YOU GET BOTH payload AND url, AND THEY ARE NOT THE SAME OFFER. payload is the compiled surface — pass it STRAIGHT to render_surface and the reading appears inline, in the conversation, where the reader already is. url is the shareable link, for later or for elsewhere. Default to rendering: handing back only a link makes the reader leave to see the thing they asked for. If the reading was too large to encode as a link you get payload and url_unavailable instead — that is a SUCCESS, so render it and say the link is missing.
Available stampable runbooks: (1) learning_hub — curriculum/revision study app: subject tabs, slide pills, timeline/drill/flashcards/quiz/takeaways/method interactions per slide, the full rich hub UI. Prefer this over emit_training_runbook for study/curriculum content — much richer output, still zero composition decisions. (2) article_playbook — a steered critical reading of SOMEONE ELSE'S article: source attribution bar, a hero mental-model card, then rungs down a rail. The reader picks a lens (explain, apply to their domain, challenge, situate in prior art) and says what they want it to look for; the rung progression is Toulmin (claim → grounds → warrant) so the analysis lands on the assumption a summary drops. Use it whenever asked to analyse, critique, tear down, or work out what an article means for a particular domain. You fetch and read the article yourself; nothing is retrieved server-side.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"runbook_id": "<runbook_id>"
},
"name": "emit_runbook_surface"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | The source the USER supplied (workspace surfaces pass this; you normally do not). {url?, text?}. Echoed back in the discovery response so you read THAT source rather than asking for it again. Ignored when `content` is present — by then the reading is done. | |
| content | No | Your content shaped to the runbook's input_contract. Omit to get the contract back instead of a URL. | |
| runbook_id | Yes | Stampable runbook name. "learning_hub" = curriculum/study app from content you supply. "article_playbook" = a steered critical reading of someone else's article (you fetch and read it yourself; the runbook supplies the composition and the method). Call with this alone, no `content`, to get the contract and any questions to ask the user. | |
| renderer_url | No | Your deployed renderer /exec URL (optional; defaults to the public demo renderer) |