inkling.aniruddhachaudhari95.chatgpt.site
A shared notebook canvas where an agent measures, proposes, and verifies beside you.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 15 · Act 16 · Transact 1 · Score: Not yet scored
Tool inspector
apply_ops
Applies typed add_shape, add_arrow, add_pen, add_image, move, resize, rotate, set_label, set_style, delete, duplicate, align, distribute, or group_layout operations. The batch is validated atomically, then shown operation by operation: shapes are placed before later connector steps draw along their path, with progress visible to the human. Stable element IDs must come from get_scene. The complete sequence is one undoable change. Match the canvas to what it is actually for: a system diagram, architecture, or process reads best as clean shapes and arrows, kept tidy with auto_layout. A casual, personal, or just-for-fun canvas (notes, planning, a journal page) can be looser in STYLE - a rotated icon, a doodled pen flourish, an occasional off-grid nudge - but never loose in LAYOUT: related items still sit near each other in reading order (top to bottom or left to right, like an actual notebook page), gaps between groups stay roughly even, and nothing is left an orphan far from everything else. Looseness is a decoration on top of a sane layout, not a replacement for one. Same tools either way, just decide which register fits before building.
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
ops |
array | yes | — |
reason |
string | yes | — |
Raw JSON schema
{
"type": "object",
"properties": {
"ops": {
"type": "array",
"minItems": 1,
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"const": "add_shape"
},
"shapeType": {
"type": "string",
"enum": [
"rect",
"ellipse",
"diamond",
"text"
]
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number",
"minimum": 1
},
"height": {
"type": "number",
"minimum": 1
},
"label": {
"type": "string",
"description": "Only for shapeType \"text\". Rectangles, ellipses and diamonds hold no text - add a separate text element beside or inside them."
},
"style": {
"type": "object",
"properties": {
"stroke": {
"type": "string"
},
"fill": {
"type": "string"
},
"strokeWidth": {
"type": "number",
"minimum": 1,
"maximum": 12
}
}
}
},
"required": [
"type",
"shapeType",
"x",
"y",
"width",
"height"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "add_icon"
},
"slug": {
"type": "string",
"minLength": 1,
"description": "Slug from search_icons. Never invent one."
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"size": {
"type": "number",
"minimum": 24,
"maximum": 256,
"default": 64
}
},
"required": [
"type",
"slug",
"x",
"y"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "add_arrow"
},
"fromId": {
"type": "string",
"minLength": 1
},
"toId": {
"type": "string",
"minLength": 1
},
"label": {
"type": "string"
},
"arrowhead": {
"type": "boolean",
"default": true,
"description": "Set false for a plain connecting line with no arrowhead."
}
},
"required": [
"type",
"fromId",
"toId"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "add_pen"
},
"points": {
"type": "array",
"minItems": 2,
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"x",
"y"
]
},
"description": "Canvas-space points for one freehand ink stroke. For a technical diagram, use this narrowly - circling or underlining something. For a casual or personal canvas (notes, journals, planning something fun), it is fine to be looser: doodle a quick underline flourish, a little arrow, a simple face, a scribbled star next to something - several short add_pen strokes read as a sketch, not just an annotation. Still stays inside this app's hand-drawn look, not a photorealistic illustration."
},
"style": {
"type": "object",
"properties": {
"stroke": {
"type": "string"
},
"strokeWidth": {
"type": "number",
"minimum": 1,
"maximum": 12
}
}
}
},
"required": [
"type",
"points"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "add_image"
},
"url": {
"type": "string",
"minLength": 1,
"description": "A direct image URL (png/jpg/webp/gif/svg). Rendered read-only via <image href> - scripting is disabled by the browser regardless of source."
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number",
"minimum": 1
},
"height": {
"type": "number",
"minimum": 1
}
},
"required": [
"type",
"url",
"x",
"y",
"width",
"height"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "move"
},
"id": {
"type": "string",
"minLength": 1
},
"x": {
"type": "number"
},
"y": {
"type": "number"
}
},
"required": [
"type",
"id",
"x",
"y"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "resize"
},
"id": {
"type": "string",
"minLength": 1
},
"width": {
"type": "number",
"minimum": 1
},
"height": {
"type": "number",
"minimum": 1
}
},
"required": [
"type",
"id",
"width",
"height"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "rotate"
},
"id": {
"type": "string",
"minLength": 1
},
"degrees": {
"type": "number",
"description": "Absolute rotation in degrees clockwise around the element center, normalised to 0-360."
}
},
"required": [
"type",
"id",
"degrees"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "set_label"
},
"id": {
"type": "string",
"minLength": 1,
"description": "A text element. Shapes and icons hold no text of their own."
},
"text": {
"type": "string"
}
},
"required": [
"type",
"id",
"text"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "set_style"
},
"id": {
"type": "string",
"minLength": 1
},
"style": {
"type": "object",
"properties": {
"stroke": {
"type": "string"
},
"fill": {
"type": "string"
},
"strokeWidth": {
"type": "number",
"minimum": 1,
"maximum": 12
}
},
"minProperties": 1
}
},
"required": [
"type",
"id",
"style"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "delete"
},
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"type",
"id"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "duplicate"
},
"ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"uniqueItems": true
},
"dx": {
"type": "number",
"default": 26
},
"dy": {
"type": "number",
"default": 26
}
},
"required": [
"type",
"ids"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "align"
},
"ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"uniqueItems": true
},
"edge": {
"type": "string",
"enum": [
"left",
"right",
"top",
"bottom",
"centerX",
"centerY"
]
}
},
"required": [
"type",
"ids",
"edge"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "distribute"
},
"ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"uniqueItems": true
},
"axis": {
"type": "string",
"enum": [
"x",
"y"
]
}
},
"required": [
"type",
"ids",
"axis"
]
},
{
"type": "object",
"properties": {
"type": {
"const": "group_layout"
},
"ids": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1,
"uniqueItems": true
},
"direction": {
"type": "string",
"enum": [
"TB",
"LR"
]
}
},
"required": [
"type",
"ids",
"direction"
]
}
]
}
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"ops",
"reason"
]
}
Similar websites
econsor.de
German digital agency building portals, e-commerce sites and online marketing, combining strategy, design and AI to grow clients' visibility and customer base.
inkframe-eta.vercel.app
Browser-native Elah video editor for 9:16 and 16:9 exports
agentdesk-demo.vercel.app
Meridian Ops
eworker.ca
E-Worker is business infrastructure powered by AI, with focused apps and connected business work.