accept_proposal
Accept a staged proposal — apply its edit to the open Fold immediately. Refuses if the target chunk changed since, returning the proposed and current content so you can re-propose against the new base (never a silent…
proposalId: string
add_chunk
Add a new slide to the open Fold — this CHANGES THE DECK the human is looking at and re-renders it. Prefer add_fold when building a card from data; use this for raw markup, a starter, or a composite block. Defaults to…
kind: string?, position: integer?, label: string?, html: string?, block: string?, fields: object?, starter: string?, dryRun: boolean?, … (list cut; the site may define more)
add_custom_fold
Add a whole CUSTOM FOLD (a full page) as one fold — this CHANGES THE OPEN FOLD and re-renders it. Pass `html`, the fold's inner. Prefer add_fold when building a card from data; use this to paste a report verbatim, or…
html: string, label: string?, position: integer?
add_fold
BUILD A WHOLE FOLD IN ONE CALL — this CHANGES THE DECK the human is looking at and re-renders it. Give the card as DATA: an eyebrow, a heading, then `blocks` in order. Each entry names EXACTLY ONE of chart | venn |…
title: string, eyebrow: string?, label: string?, position: integer?, columns: integer?, blocks: array
add_ledger
ADD A LEDGER FOLD IN ONE CALL — a titled card holding one live spreadsheet block. This CHANGES THE DECK the human is looking at and re-renders it. `formulas` maps an A1 cell to a formula and the calc engine RUNS them…
title: string, eyebrow: string?, label: string?, position: integer?, columns: array, rows: array, currency: string?, formulas: object?, … (list cut; the site may define more)
apply_theme
Put a whole named palette on the open Fold — this CHANGES THE COLOURS the human is looking at and re-renders it. `name` is a preset or saved theme from list_themes; an unknown name is refused with the ones that exist.…
name: string
create_deck
Create a NEW Fold and OPEN IT IN THIS TAB. It renders immediately. Call this FIRST when building from nothing, then add folds with add_fold and finish with save_deck. The single fold it mints is a real COVER carrying…
title: string?, subtitle: string?, eyebrow: string?, foldType: string?, discard: boolean?
define_block
Register (or update) a COMPOSITE BLOCK definition in the deck — a reusable typed component a human can still edit field by field: a template of inert primitives plus a field manifest. Author instances with…
def: object
delete_block
Delete a composite block definition. Non-destructive to content: every placed instance keeps its baked output but loses its data-script, becoming plain inert content, so nothing dangles and the deck stays valid. This…
kind: string
delete_chunk
Hide or DELETE a slide in the open Fold — this CHANGES THE DECK the human is looking at. Default mode "hide" keeps the slide in the file but out of the show (recoverable — prefer it); mode "delete" removes the slide…
chunkId: string, mode: string?
delete_theme
Forget a theme you saved — it is GONE from this browser and apply_theme can no longer name it. undo does not cover this: a theme is not part of the Fold. A deck already wearing those colours KEEPS them, because a…
name: string
export_deckread-only
Hand YOURSELF the complete .origami.html text of the open Fold, as a string in the result — to hash it, diff it, or quote a fragment. It writes NOTHING, saves NOTHING and changes NOTHING, so calling this INSTEAD of…
get_blockread-only
READ A DATA BLOCK BEFORE YOU REPLACE IT. Returns one data block's JSON exactly as stored, plus its caption and kind schema. Address it by chunkId + kind (chart | venn | flow | graph | gantt | draw | table) and nth…
chunkId: string, kind: string?, nth: integer?
get_kind_schemaread-only
The markup contract for one slide/block kind: what structure and attributes are valid. Changes nothing.
kind: string
inspect_renderread-only
SEE THE DECK YOU CANNOT SEE. Lays the open Fold out in a real browser, off-screen, reports each fold's geometry and names four defects it can PROVE: OVERFLOW, masthead CLIP, EMPTY fold, SVG label COLLISION. Stated…
viewport: object?, foldIds: array?, maxFolds: integer?
list_activityread-only
What has been DONE in this tab, newest first — one entry per tool call, whoever made it: seq, at, source (agent | human | console | replay), tool, ok plus the error, the target, ms and a one-line summary. The summary…
limit: integer?
list_block_defsread-only
List the composite block definitions registered in this deck (kind, name, version, fields). Use a kind with add_chunk({block, fields}).
list_chunksread-only
Table of contents of the open Fold: every editable chunk with id, kind, label and hidden flag, in order, plus the deck title, theme, foldType and capabilities.
list_proposalsread-only
The review queue: every staged proposal with author, title, target chunk, the before/after content and a conflict flag (true if that chunk changed since). Empty until a propose_* call stages something. The human…
list_startersread-only
The ready-made FOLDS you can add in one call: roadmap, flowchart, node-graph, drawing, venn, ledger. Each is a free card already holding one seeded data block, copied from the Studio's own palette. Add one with…
list_themesread-only
Every palette apply_theme can use: the four presets the runtime ships (origami-default, boardroom, meadow, dusk) plus anything save_theme kept in this browser, each with its complete token map and whether it is a…
move_chunk
Move one chunk to a different place in the open Fold — this CHANGES THE DECK the human is looking at and re-renders it. `position` is the 0-based index the chunk ENDS UP at, counting hidden folds. Order only: no…
chunkId: string, position: integer
origami_guideread-only
START HERE. The Origami contract: what a Fold is, the read-edit-write chunk protocol, every kind schema, the inert/active rules, the capability model and the tool catalog. Pass topic:"quickstart" FIRST if you are…
kind: string?, topic: string?
propose_add
Propose a NEW slide WITHOUT adding it — staged for review (the add equivalent of propose_chunk). Same content args as add_chunk; the content is rendered, baked and validated now, then a slide.insert is staged. It…
kind: string?, position: integer?, label: string?, html: string?, block: string?, fields: object?, starter: string?, title: string?, … (list cut; the site may define more)
propose_chunk
Propose an edit to a chunk WITHOUT applying it — STAGED for a human (or another agent) to review (a "document PR"). It appears as a review card in the page; if nobody is watching, resolve it yourself with…
chunkId: string, html: string, title: string?, prompt: string?, author: string?
propose_delete
Propose hiding or deleting a slide WITHOUT doing it — staged for review, as a card in the page and a queue entry you can resolve yourself. mode "hide" (default, recoverable) or "delete". accept_proposal refuses if the…
chunkId: string, mode: string?, title: string?, prompt: string?, author: string?
read_chunkread-only
Read one chunk for editing: the deck context, the kind schema and the slide <template>. Edit it and send the whole element back via write_chunk. Prefer get_block when you only want a data block's JSON.
chunkId: string
reject_proposal
Drop a staged proposal without applying it. The same action the human takes by clicking Reject on the card.
proposalId: string
revert_to_saved
Drop EVERY unsaved change on the open Fold in ONE call — NOT undo (one step at a time). Jumps to the last save_deck, or to how the Fold was created/opened if never saved, clearing the undo stack in the same move — the…
run_batch
Run several tool calls in ONE turn — this CHANGES THE DECK exactly as the same calls made one at a time would. `calls` is [{tool, args}] run IN ORDER, stopping at the FIRST failure; you get every result up to and…
calls: array
save_deck
FINISH THE JOB: re-validate the Fold and put it somewhere durable. READ THE RESULT — only one of three outcomes is a save. saved:true means bytes were written to a real file AND read back. opfs.written means it is…
save_theme
Keep a palette of your own so apply_theme can use it — stored IN THIS BROWSER, surviving a reload; it does NOT change the open Fold. `basedOn` takes a preset or saved theme as the base and merges your tokens on top…
name: string, label: string?, tokens: object, basedOn: string?
set_block
Replace the WHOLE JSON of one data block on one fold — this CHANGES THE DECK the human is looking at and re-renders it. Address it by chunkId + kind (chart | venn | flow | graph | gantt | draw | table) + nth (0 =…
chunkId: string, kind: string, data: object, caption: string?, nth: integer?
set_chunk_meta
Set one chunk's label, speaker notes or hidden flag — this CHANGES THE DECK the human is looking at. `label` is the sidebar and tab name; `notes` is presenter text that never renders; hidden:true takes a fold out of…
chunkId: string, label: string?, hidden: boolean?, notes: string?
set_deck_meta
Set the deck TITLE and/or theme — this CHANGES THE DECK the human is looking at and re-renders it. `title` is the manifest and header-bar name; it does NOT rename the file. `themeName` renames the theme; ON ITS OWN IT…
title: string?, themeName: string?, themeTokens: object?
set_fold_type
Set the deck's reading experience — this CHANGES THE OPEN FOLD. "deck" (default) is the card-stage: one fold at a time with tabs and pips. "scroll" is a continuous document: every fold stacked top to bottom (pair with…
foldType: string
set_header
Set the deck-level masthead in the header bar: a subtitle line under the title and metadata chips (e.g. ["5 plants","Q3 2026"]). This CHANGES THE OPEN FOLD. The bar's COLOURS and thickness are theme tokens, not set…
subtitle: string?, chips: array?
undo
Reverse the LAST change to the open Fold and re-render it. One tool call is one undo step, so a run_batch of six is six steps. It covers every writer (origami_guide({topic:"tools"}) lists them). It does NOT cross…
write_chunk
Apply an edited chunk to the open Fold — this CHANGES THE DECK the human is looking at and re-renders it. Send the whole <template data-origami-slide=...> element from read_chunk, edited; the slide id and kind are…
chunkId: string, html: string, dryRun: boolean?