Tool tree
gradeNot graded
describe_current_stateAnswer
Returns the board snapshot plus unfinished. Empty tables, kanban, and checklists need add_rows (or bind_data first). A form with fields but no minted tool needs create_form_tool. add_rows does not mint. Also: title, theme, widgets (id, type, title, position, config, fields, rowCount, sample rows), mintedTools, last 10 activity entries, stateVersion, and humanChangesSinceLastDescribe: every human create, rename, drag, edit, delete, undo, or sample-load command since your last call, newest first with undone state. Read it before reorganizing so you build on their changes rather than over them. Pass stateVersion as expectedStateVersion on your next static mutation; STALE_STATE means re-read.
View tool JSON
{
"name": "describe_current_state",
"kind": "answer",
"impl": "imperative",
"description": "Returns the board snapshot plus unfinished. Empty tables, kanban, and checklists need add_rows (or bind_data first). A form with fields but no minted tool needs create_form_tool. add_rows does not mint. Also: title, theme, widgets (id, type, title, position, config, fields, rowCount, sample rows), mintedTools, last 10 activity entries, stateVersion, and humanChangesSinceLastDescribe: every human create, rename, drag, edit, delete, undo, or sample-load command since your last call, newest first with undone state. Read it before reorganizing so you build on their changes rather than over them. Pass stateVersion as expectedStateVersion on your next static mutation; STALE_STATE means re-read.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"include_sample_rows": {
"default": true,
"description": "Set false to omit sample rows for a smaller response.",
"type": "boolean"
}
},
"additionalProperties": false
}
}add_widgetAction
Creates one widget and returns widgetId plus required next. Repeated logs (blood sugar, applications) must be type=form, then create_form_tool. Pipeline/status board: kanban with a select groupByField, never table. Bind omitted fields for table, kanban, chart, or form. Checklist: skip bind_data, then add_rows with text/done/due/note. Notes: config.markdown only. "No rows yet" / "No items yet" means unfinished. Omit position to auto-place.
View tool JSON
{
"name": "add_widget",
"kind": "act",
"impl": "imperative",
"description": "Creates one widget and returns widgetId plus required next. Repeated logs (blood sugar, applications) must be type=form, then create_form_tool. Pipeline/status board: kanban with a select groupByField, never table. Bind omitted fields for table, kanban, chart, or form. Checklist: skip bind_data, then add_rows with text/done/due/note. Notes: config.markdown only. \"No rows yet\" / \"No items yet\" means unfinished. Omit position to auto-place.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"table",
"kanban",
"checklist",
"chart",
"note",
"form"
],
"description": "table = flat records; kanban = pipeline/status board (needs a select groupByField); checklist = todos via add_rows; note = markdown prose only, not data; chart and form also exist."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"config": {
"description": "Type-specific config. Kanban defaults: groupByField \"status\", cardTitleField \"title\" — pass those field keys, or override config to match. Notes: config.markdown for prose only.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"fields": {
"description": "Column schema at creation (same as bind_data). Prefer this when you already know the columns. Fields alone leave \"No rows yet\" — call add_rows next. For kanban include a select field matching config.groupByField (default key \"status\") plus a title field (default key \"title\").",
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{0,39}$",
"description": "Stable snake_case identity for this field."
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "Display name shown on the widget."
},
"type": {
"type": "string",
"enum": [
"text",
"number",
"date",
"select",
"boolean",
"url"
],
"description": "Value type. select requires options; other types forbid options."
},
"required": {
"default": false,
"type": "boolean"
},
"options": {
"description": "Required when type is \"select\"; forbidden otherwise.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"description": {
"type": "string",
"maxLength": 200
}
},
"required": [
"key",
"label",
"type"
],
"additionalProperties": false
}
},
"position": {
"type": "object",
"properties": {
"x": {
"type": "integer",
"minimum": 0,
"maximum": 11
},
"y": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"w": {
"type": "integer",
"minimum": 2,
"maximum": 12
},
"h": {
"type": "integer",
"minimum": 2,
"maximum": 20
}
},
"required": [
"x",
"y",
"w",
"h"
],
"description": "Grid placement on a 12-column grid. One row unit is ~40px. Omit to auto-place below existing widgets."
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"type",
"title"
],
"additionalProperties": false
}
}bind_dataAction
Defines or replaces fields for a table, kanban, chart, or form; it never inserts rows. Existing rows migrate: kept keys survive, removed keys drop, and invalid select values clear. Form minted tools re-register with the new schema; call create_form_tool if none exists. Otherwise call add_rows next because "No rows yet" is unfinished. The checklist and note widgets reject this tool. Fields use snake_case keys and text|number|date|select|boolean|url types; select needs options.
View tool JSON
{
"name": "bind_data",
"kind": "act",
"impl": "imperative",
"description": "Defines or replaces fields for a table, kanban, chart, or form; it never inserts rows. Existing rows migrate: kept keys survive, removed keys drop, and invalid select values clear. Form minted tools re-register with the new schema; call create_form_tool if none exists. Otherwise call add_rows next because \"No rows yet\" is unfinished. The checklist and note widgets reject this tool. Fields use snake_case keys and text|number|date|select|boolean|url types; select needs options.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"fields": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{0,39}$",
"description": "Stable snake_case identity for this field."
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "Display name shown on the widget."
},
"type": {
"type": "string",
"enum": [
"text",
"number",
"date",
"select",
"boolean",
"url"
],
"description": "Value type. select requires options; other types forbid options."
},
"required": {
"default": false,
"type": "boolean"
},
"options": {
"description": "Required when type is \"select\"; forbidden otherwise.",
"minItems": 1,
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"description": {
"type": "string",
"maxLength": 200
}
},
"required": [
"key",
"label",
"type"
],
"additionalProperties": false
}
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"widgetId",
"fields"
],
"additionalProperties": false
}
}add_rowsAction
REQUIRED after a table, kanban, or checklist. Do not put that data in a note. For a form, call create_form_tool first and then the minted tool; add_rows only seeds. "No rows yet" / "No items yet" means you skipped this. Checklist keys: text, done, due, note (skip bind_data). Up to 50 rows. Returns new row ids. Then check unfinished. A form without a minted tool is not done.
View tool JSON
{
"name": "add_rows",
"kind": "act",
"impl": "imperative",
"description": "REQUIRED after a table, kanban, or checklist. Do not put that data in a note. For a form, call create_form_tool first and then the minted tool; add_rows only seeds. \"No rows yet\" / \"No items yet\" means you skipped this. Checklist keys: text, done, due, note (skip bind_data). Up to 50 rows. Returns new row ids. Then check unfinished. A form without a minted tool is not done.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"rows": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"description": "Objects keyed by this widget's field keys. Checklist keys: text, done, due, note. This is how you fill table/kanban/checklist data — do not put it in a note."
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"widgetId",
"rows"
],
"additionalProperties": false
}
}create_form_toolAction
Mints a persistent tool from a form widget. REQUIRED after you add a form for repeated entries such as blood sugar; add_rows does not mint and is not a substitute. Name it verb_noun such as log_blood_sugar. The schema mirrors current fields and remints when they change. Each call appends one validated row. Survives reload until the form is deleted or remove_minted_tool is called. Returns the generated input schema.
View tool JSON
{
"name": "create_form_tool",
"kind": "act",
"impl": "imperative",
"description": "Mints a persistent tool from a form widget. REQUIRED after you add a form for repeated entries such as blood sugar; add_rows does not mint and is not a substitute. Name it verb_noun such as log_blood_sugar. The schema mirrors current fields and remints when they change. Each call appends one validated row. Survives reload until the form is deleted or remove_minted_tool is called. Returns the generated input schema.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "Must be a form widget with at least one bound field."
},
"toolName": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{2,49}$",
"description": "snake_case verb phrase, e.g. \"log_blood_sugar\". Must not collide with an existing tool."
},
"description": {
"type": "string",
"minLength": 20,
"maxLength": 500,
"description": "Written for the next agent. Say what one call records, name the fields and units or options, and give one example invocation in prose."
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"widgetId",
"toolName",
"description"
],
"additionalProperties": false
}
}update_widgetAction
Updates a widget's title, config, and/or position. Only passed keys change. Config is merged per key; pass null to clear one. Use set_layout for coordinated moves, add_rows or update_rows for data, and bind_data for fields. Patch config.markdown for note prose only. Changing form config does not remint its tool because the field signature is unchanged.
View tool JSON
{
"name": "update_widget",
"kind": "act",
"impl": "imperative",
"description": "Updates a widget's title, config, and/or position. Only passed keys change. Config is merged per key; pass null to clear one. Use set_layout for coordinated moves, add_rows or update_rows for data, and bind_data for fields. Patch config.markdown for note prose only. Changing form config does not remint its tool because the field signature is unchanged.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"config": {
"description": "Partial config patch, validated against the widget's type schema after merge.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"position": {
"type": "object",
"properties": {
"x": {
"type": "integer",
"minimum": 0,
"maximum": 11
},
"y": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"w": {
"type": "integer",
"minimum": 2,
"maximum": 12
},
"h": {
"type": "integer",
"minimum": 2,
"maximum": 20
}
},
"required": [
"x",
"y",
"w",
"h"
],
"description": "Grid placement on a 12-column grid. One row unit is ~40px. Omit to auto-place below existing widgets."
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"widgetId"
],
"additionalProperties": false
}
}read_widget_dataAnswer
Returns rows of one widget's dataset with pagination. Use when you need more than the 3 sample rows from describe_current_state — for example to compute a summary, find a row id to update, or check what the human typed. Rows include _id, _createdAt, and _updatedAt. Note widgets have no dataset. An empty row list on a table, kanban, or checklist is unfinished work; call add_rows.
View tool JSON
{
"name": "read_widget_data",
"kind": "answer",
"impl": "imperative",
"description": "Returns rows of one widget's dataset with pagination. Use when you need more than the 3 sample rows from describe_current_state — for example to compute a summary, find a row id to update, or check what the human typed. Rows include _id, _createdAt, and _updatedAt. Note widgets have no dataset. An empty row list on a table, kanban, or checklist is unfinished work; call add_rows.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"limit": {
"default": 50,
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"widgetId"
],
"additionalProperties": false
}
}get_activity_logAnswer
Returns the board's command log, newest first — every mutation made by you or by the human dragging, editing, or deleting things by hand. Each entry has an actor ('human'|'agent'), an action name, a human-readable summary, and the rationale the agent gave. Use it to answer "what did the human change?" or to review your own recent edits before reorganizing.
View tool JSON
{
"name": "get_activity_log",
"kind": "answer",
"impl": "imperative",
"description": "Returns the board's command log, newest first — every mutation made by you or by the human dragging, editing, or deleting things by hand. Each entry has an actor ('human'|'agent'), an action name, a human-readable summary, and the rationale the agent gave. Use it to answer \"what did the human change?\" or to review your own recent edits before reorganizing.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"limit": {
"default": 20,
"type": "integer",
"minimum": 1,
"maximum": 100
},
"actor": {
"description": "Filter to only human edits or only agent edits.",
"type": "string",
"enum": [
"human",
"agent"
]
},
"since_seq": {
"description": "Only entries with seq greater than this value.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"additionalProperties": false
}
}remove_widgetAction
Deletes a widget and its data. Any minted tool owned by a form is removed from the registry and persistence. Charts that source the widget remain and show an empty state. Use this only when the whole widget should go; use delete_rows to keep its schema. Undo restores the widget, rows, and minted tools.
View tool JSON
{
"name": "remove_widget",
"kind": "act",
"impl": "imperative",
"description": "Deletes a widget and its data. Any minted tool owned by a form is removed from the registry and persistence. Charts that source the widget remain and show an empty state. Use this only when the whole widget should go; use delete_rows to keep its schema. Undo restores the widget, rows, and minted tools.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"widgetId"
],
"additionalProperties": false
}
}update_rowsAction
Applies partial patches to existing rows by row id (get ids from read_widget_data). Only the keys you pass change. Use this to move kanban cards (patch the group-by field), check off checklist items (patch done), or correct values. To add new data, use add_rows — not a note. Up to 50 patches per call. The call is atomic: if any patch is invalid, none apply.
View tool JSON
{
"name": "update_rows",
"kind": "act",
"impl": "imperative",
"description": "Applies partial patches to existing rows by row id (get ids from read_widget_data). Only the keys you pass change. Use this to move kanban cards (patch the group-by field), check off checklist items (patch done), or correct values. To add new data, use add_rows — not a note. Up to 50 patches per call. The call is atomic: if any patch is invalid, none apply.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"patches": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"rowId": {
"type": "string"
},
"set": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "Field key → new value. Pass null to clear a value."
}
},
"required": [
"rowId",
"set"
],
"additionalProperties": false
}
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"widgetId",
"patches"
],
"additionalProperties": false
}
}delete_rowsSensitive Action
Deletes rows by id from one widget. Up to 50 per call. Deleted rows can be restored with undo. If you intend to clear an entire widget, pass all row ids from read_widget_data rather than deleting the widget itself.
View tool JSON
{
"name": "delete_rows",
"kind": "transact",
"impl": "imperative",
"description": "Deletes rows by id from one widget. Up to 50 per call. Deleted rows can be restored with undo. If you intend to clear an entire widget, pass all row ids from read_widget_data rather than deleting the widget itself.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"rowIds": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "string"
}
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"widgetId",
"rowIds"
],
"additionalProperties": false
}
}set_layoutAction
Repositions and resizes widgets in one atomic call on the 12-column grid. Pass every widget you want to move; unlisted widgets keep their position but may be pushed down so nothing overlaps. Prefer this over update_widget.position when several widgets move together. Call describe_current_state first so coordinates include any human dragging. Give a rationale shown in the activity log. Typical use: group related widgets, put the most actionable widget top-left, give charts at least w=6. Returns the final layout after collision-push.
View tool JSON
{
"name": "set_layout",
"kind": "act",
"impl": "imperative",
"description": "Repositions and resizes widgets in one atomic call on the 12-column grid. Pass every widget you want to move; unlisted widgets keep their position but may be pushed down so nothing overlaps. Prefer this over update_widget.position when several widgets move together. Call describe_current_state first so coordinates include any human dragging. Give a rationale shown in the activity log. Typical use: group related widgets, put the most actionable widget top-left, give charts at least w=6. Returns the final layout after collision-push.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"items": {
"minItems": 1,
"maxItems": 24,
"type": "array",
"items": {
"type": "object",
"properties": {
"widgetId": {
"type": "string",
"pattern": "^w_[a-zA-Z0-9_-]{6,}$",
"description": "A widget id as returned by add_widget or describe_current_state, e.g. \"w_x8Kd2q\"."
},
"x": {
"type": "integer",
"minimum": 0,
"maximum": 11
},
"y": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"w": {
"type": "integer",
"minimum": 2,
"maximum": 12
},
"h": {
"type": "integer",
"minimum": 2,
"maximum": 20
}
},
"required": [
"widgetId",
"x",
"y",
"w",
"h"
],
"additionalProperties": false
},
"description": "Widgets to move or resize. Unlisted widgets keep their position but may be pushed down."
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"items"
],
"additionalProperties": false
}
}set_themeAction
Restyles the whole board. Set theme name neutral|butter|chocolate|matcha|stone|gothic|y2k, mode light|dark, density comfortable|compact, or board title. All arguments are optional; only passed values change. Use sparingly. Pick a theme that fits the user's stated goal, such as matcha for a health log or neutral for a job search, and stick with it. Returns the applied theme and title.
View tool JSON
{
"name": "set_theme",
"kind": "act",
"impl": "imperative",
"description": "Restyles the whole board. Set theme name neutral|butter|chocolate|matcha|stone|gothic|y2k, mode light|dark, density comfortable|compact, or board title. All arguments are optional; only passed values change. Use sparingly. Pick a theme that fits the user's stated goal, such as matcha for a health log or neutral for a job search, and stick with it. Returns the applied theme and title.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"boardTitle": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"pattern": "\\S"
},
"theme": {
"description": "Astryx theme name. matcha suits a health log; neutral suits a job search.",
"type": "string",
"enum": [
"neutral",
"butter",
"chocolate",
"matcha",
"stone",
"gothic",
"y2k"
]
},
"mode": {
"type": "string",
"enum": [
"light",
"dark"
]
},
"density": {
"type": "string",
"enum": [
"comfortable",
"compact"
]
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"additionalProperties": false
}
}remove_minted_toolAction
Removes a tool created by create_form_tool from the live registry and persistence. Use this when the shortcut is obsolete or needs a better name. The form widget and its rows stay unchanged. Static tools cannot be removed. Returns the removed tool name.
View tool JSON
{
"name": "remove_minted_tool",
"kind": "act",
"impl": "imperative",
"description": "Removes a tool created by create_form_tool from the live registry and persistence. Use this when the shortcut is obsolete or needs a better name. The form widget and its rows stay unchanged. Static tools cannot be removed. Returns the removed tool name.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"toolName": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]{2,49}$",
"description": "snake_case verb phrase, e.g. \"log_blood_sugar\". Must not collide with an existing tool."
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"required": [
"toolName"
],
"additionalProperties": false
}
}undoAction
Reverts the most recent board mutations, human or agent, newest first, up to 10 steps. Returns what was undone. Removed widgets, rows, and minted tools are fully restored and re-registered when applicable. There is no redo; reapply changes with the normal tools if needed.
View tool JSON
{
"name": "undo",
"kind": "act",
"impl": "imperative",
"description": "Reverts the most recent board mutations, human or agent, newest first, up to 10 steps. Returns what was undone. Removed widgets, rows, and minted tools are fully restored and re-registered when applicable. There is no redo; reapply changes with the normal tools if needed.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"steps": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 10
},
"expectedStateVersion": {
"description": "The stateVersion from your latest describe_current_state call. Pass it on static mutations to avoid overwriting a newer human or agent change. If stale, the tool returns STALE_STATE without changing the board.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"rationale": {
"description": "One sentence explaining why you are making this change. Shown to the human in the activity log.",
"type": "string",
"maxLength": 300
}
},
"additionalProperties": false
}
}