Agents & MCP
Tool details
Tool descriptions stay short (every model call carries them); the details are here.
Session
kimo_get_state: when the context gives nodocId. Top-level nodes (first 50), components (first 100), other agents, your permissions (data.you).kimo_open: a file that fails to load givesLOAD_FAILED(untouched); a newer format opens read-only; another process's write lease givesDOCUMENT_LOCKED; files outside your allow-list ask the user.kimo_create {path, template?}: never overwrites (FILE_EXISTS);templateseeds variables and a starter frame. Needs thefiles.creategrant (asks otherwise).kimo_close: a dirty document needssaveordiscard(asks the user). A document open in a window stays open: only your reference is dropped.kimo_save {docId, baseRevision?}: temp file → fsync → rename → read back → SHA-256 compare. Reported only after the read-back matched.kimo_history:listshows recent op groups with their author.undo/redoact on your own origin's stack only, never on the user's or another agent's edits; withtoken(anundoToken) undo succeeds only when that group is on top. Replay is guarded: when later edits by others touched the same nodes the result saysstale: trueinstead of clobbering them.kimo_focus: with no window it succeeds with aNO_WINDOWwarning.
Reading
kimo_query:selectneeds at least one ofids,under,topLevel,name(substring, case-insensitive),type,text,component(instances of),page;under: "root"is not allowed (usetopLevel).depth0–10 (elided children show as"…").resolveVariablesreplaces$refs with values fortheme(default: each node's effective theme);resolveInstancesexpands instance content as virtual nodes (instanceId/childId).include:bounds(computed boxes),problems(clipping, collapse, overflow, missing fonts/assets),geometry,origin(override origin),overrides.limit≤ 1000, thencursor. The whole document is never dumped.kimo_get_variables:includeUsagescounts bound nodes (slower). Edit variables with ops (create_variable,update_variable,rename_variable,delete_variable,theme_axis).
Editing
kimo_apply_ops: seeops. Limits: 500 ops per call, of which at most 40inserts (150 streamed: ops land while the model writes the call). Failures carryretryId(seeops).dryRunreturns the would-be ops;render: trueattaches a PNG of the changed top-level frames. Results leave outops/inverse(a dry run keepsops).data.problemslists problems in the changed layers: fix them next.kimo_import:svg(editable vector layers),image(hashed intoassets/, placed as an image-filled rect),tokens-dtcg/tokens-css(variables, merged). Exactly one ofpath(absolute, allow-list applies) ortext. SupportsdryRunandbaseRevision.kimo_assets:importhashes an image or font intoassets/and returns its./assets/reference for fills or fonts (no node is created;kimo_import kind=imageplaces one).fonts: document, cached, local and (when allowed) Google families. Usecheck_fontbefore referencing a font.kimo_styles {apply: true}needs scope edit plus the globals grant.
Output
kimo_render: the same CanvasKit engine as the canvas; always reflects every committed edit.scale≤ 4,maxSize(longest side, default 1600) caps the image.format: "svg"returns standalone SVG per node indata.images[].svg(text laid out with the canvas fonts).kimo_export: needs the export grant.png(one<nodeId>.pngper node) andkimo(the subtrees as a standalone file with the variables they use) needoutDir. Code and token targets (react-tailwind,html-css,tokens-dtcg,tokens-css,tailwind-theme,svg,pdf) are written tooutDiror returned inline (pdf as base64). Identical files are reported unchanged; nothing is written when any file conflicts. Seeguide/export.