Write a handwritten Wren notebook page
write_notebook_pageWrite a handwritten study page in the user's Wren notebook (same topic -> target.noteId, not a new note). Write a FULL page (not for verbatim): 110-140 words in 6-8 blocks (a table/figure = ~40 words), a heading per part, 3-6 key terms marked (underline/highlight; a mark copies exact words of its own block), every number+unit and formula marked as math (its latex keeps every word: 20\ \text{m/s}), one accent, at most 1 short marginNote, the takeaway in a callout (key_answer, key_idea) or summary. Pair two <=12-word callouts with layoutHint:"side_by_side". Unknown fields are refused. Editable ink, not the user's own handwriting. Recipes: worked_example = problem callout (box) + 3-4 steps (1-2 sentences + equation each) + Check heading+paragraph + common_mistake & key_answer callouts. concept_summary = definition callout + boxed equation or table/flowchart + 2 headings with 2-sentence paragraphs + key_idea callout. comparison_sheet = 1-sentence intro + 5-6 row table + heading+paragraph on why it matters + common_mistake & key_idea callouts (side_by_side). process_walkthrough = overview + 4-6 steps, each with label (stage name) + 1-2 sentences, optional flowchart showing what the steps don't + key_idea or summary. revision_sheet = 2-3 headings with concise paragraphs/equations + common_mistake & remember callouts (side_by_side) + 4-item checklist. verbatim = text the user gave you to copy: their words unchanged and once, in paragraph/heading blocks, nothing added.
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": {
"title": "<title>",
"pageKind": "<pageKind>",
"blocks": "<blocks>",
"llm_model": "<llm_model>"
},
"name": "write_notebook_page"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Page title. | |
| accent | No | New note only; an existing notebook keeps its accent. | |
| blocks | Yes | ||
| target | No | ||
| context | No | ||
| subject | No | ||
| pageKind | Yes | worked_example | concept_summary | comparison_sheet | process_walkthrough | revision_sheet | verbatim: recipes above. | |
| planSlot | No | Content page k of the plan (cover not a slot); needs target.noteId only. | |
| llm_model | Yes | The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. "claude-opus-4-8", "gpt-5.2"). Used for analytics only. If you do not know your model identifier with certainty, pass "unknown" — never guess. | |
| noteTitle | No | Rename the note (and its cover) when this page widens its topic. | |
| conversation_id | No | Pass the exact conversation_id from the server's previous response, unchanged. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it. Keep passing the same conversation_id for the rest of the conversation, including after later user messages or on a different task; do not reset it when the user starts a new request. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | Yes | ||
| hint | No | Set when the page came out short: what to add. | |
| mode | No | ||
| plan | No | ||
| title | No | ||
| noteId | No | ||
| pageId | No | ||
| noteUrl | No | Private link to the note in the user's Wren account (opens after sign-in). | |
| outline | No | ||
| location | No | ||
| pageKind | No | ||
| pageCount | No | ||
| pageNumber | No | ||
| strokeCount | No | ||
| semanticType | No | ||
| strokeGroupId | No | ||
| conversationNote | No |