A guide for AI agents
This page is part of the Moket skill: it is written for AI agents, which read it as Markdown. Values in angle brackets in the examples stand for ids an agent gets from Moket.
Working with plans
Every change in Moket, by a person, Moket AI or an agent, is a command on the document's Command Bus. You never edit a document directly: you propose a plan with preview_plan, Moket builds it, measures it and shows it to the user, and it applies when it is safe and the user's approvals allow it. This guide is how to do that well on any document. The guides for parts, sketches, assemblies, mechanisms and drawings say what to put in the plans.
Look before you change
- Read the document first:
inspect_documenton a part,inspect_assemblyon an assembly,inspect_drawingon a drawing. They give the parameters, the history or the components, what is broken and the revision. - Then read what the request involves:
get_featurefor a feature's full parameters,get_sketchfor a sketch,query_geometryfor faces and edges with their topological names,measurefor sizes and distances,get_viewfor a drawing view's edges. - When the user says "this" or "these", call
get_selection: it gives what they selected, with names. - Before using a command or feature type for the first time in a conversation, read it with
describe_commands({"types":["core.hole","joint.create"]}): its JSON Schema and notes are the exact shape Moket accepts. It answers for the document you call it on: drawing commands on a drawing, assembly commands on an assembly.
A plan
preview_plan takes a short summary, steps with labels a person understands, and the commands of each step. All steps are previewed together as one transaction: it must rebuild without errors, or nothing changes.
json
{
"summary": "Plate 120 x 80 x 6 with four corner holes",
"steps": [
{
"label": "Parameters",
"commands": [
{
"type": "parameter.create",
"id": "$width",
"name": "width",
"expression": "120 mm"
},
{
"type": "parameter.create",
"id": "$depth",
"name": "depth",
"expression": "80 mm"
},
{
"type": "parameter.create",
"id": "$thickness",
"name": "thickness",
"expression": "6 mm"
}
]
},
{
"label": "Plate",
"commands": [
{
"type": "sketch.template",
"id": "$outline",
"name": "Outline",
"template": {
"kind": "rectangle",
"width": "width",
"depth": "depth"
}
},
{
"type": "feature.create",
"id": "$base",
"featureType": "core.extrude",
"name": "Plate",
"params": {
"sketch": "$outline",
"operation": "new",
"body": "$plate",
"distance": "thickness",
"direction": "normal"
}
}
]
}
],
"checks": [
{
"label": "Plate volume",
"quantity": "volume",
"a": { "kind": "body", "body": "$plate" },
"min": 57000,
"max": 58000
}
]
}- Ids and placeholders. New entities need ids. Write placeholders that start with
$("$base","$holes"); Moket gives each a UUID and returns the mapping inids. Use the real ids in later plans. Placeholders work anywhere in the plan: inside topological names ("f($base:end)"is the end face of the extrude$base), in checks ({"kind":"body","body":"$plate"}), as configuration column keys. - Values have units. Write
"24 mm","45 deg","0.5 in"; a bare number is in the document's units. Expressions can use parameters:"width - 2 * margin". - Parameters for what a person would change. Thicknesses, diameters, spacing, counts get named parameters; reuse the document's existing ones instead of repeating a number.
- Names for people. Name the document with
document.renamewhen you make a new one, and give features and components names a person would use ("Mounting holes", not "Hole 3"). - Never invent a topological name. Face and edge names come from
query_geometry,measure,get_selectionorget_view, or are built from your own placeholders in the forms the feature notes give. Never edit one.
Checks
Add a check for every limit the user states or implies: a minimum wall, an edge distance, a mass, no interference. Moket measures them on the previewed geometry and shows the results; a plan that fails one waits for the user.
- Parts:
distance(between a and b, mm),angle(degrees),radius,length(an edge),area(a face, mm²),volume(a body, mm³),mass(a body, g). Items are{"kind":"body","body":<id>}or{"kind":"face"|"edge","name":<topological name>}. - Assemblies, without items:
interference(overlapping volume,"max":0for none) anddof("min":1,"max":1for exactly one free motion).
Never claim a measurement you did not get from a tool.
When it applies
A previewed plan that rebuilds, passes every check and loses no reference applies at once (its answer says autoApplied), unless the user asked to approve that kind of change: every change, deleting or suppressing, or changing what is already there. Anything else waits for the user to click Apply (waitsForApply says why). So:
- Never preview a plan that does more than the user asked: it may apply right away.
- When the request cannot be met as stated, preview nothing, explain why with the numbers you measured, and offer concrete options.
- After a plan applies, say briefly what changed. When it waits, say what it does and that it waits for the user.
- A new preview replaces the one before it.
When a preview fails
- Read its
problems: each names the step, the command or feature and what went wrong. - Fix the plan and preview again. After three failed attempts, stop and explain what blocks you.
- Never change a value the user asked for, or anything they did not ask to change, to make a plan pass.
- If a call fails without an answer (a timeout or a network error), the plan may still have applied: inspect the document and compare its revision before you send it again.
Tell Moket's team
When a tool or command behaves differently from its description or notes, when you need something Moket cannot do, or when a description misled you, send it once with send_feedback (what you did, what happened, what you expected), then go on with the task. Not for the user's own design questions, and never with the user's private data.
Answering the user
Answers are short and in the user's language. Mention values with units. Do not paste JSON or repeat every step: the user sees the plan. Notes in square brackets in the conversation tell you what the user did with a plan (applied, discarded, changed by hand).