Skip to content

Engineering estimate

Draft work breakdown, hour ranges, assumptions and risks.

All action kinds · Project workflow

  • Kind: engineering_estimate
  • Availability: available
  • Registry cost category: one_call
  • Lifecycle stage IDs: engineering_estimate

The cost category describes model work in the registry; it is not a manufacturing price or a monetary quote. Read maglev actions kinds --json for current availability and schemas.

Returns a draft for review against the project brief and supporting evidence. A completed action does not establish that a physical test, production gate or engineering review has passed.

Send these fields inside the request’s input object. Use only facts you have, and keep unresolved requirements explicit. Optional fields with defaults can be omitted.

Field Type Required Details
scope string Yes Min length 1. Max length 6000
deliverables string[] No Max items 40
knownRisks string[] No Max items 40
Input JSON schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"scope": {
"type": "string",
"minLength": 1,
"maxLength": 6000
},
"deliverables": {
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
}
},
"knownRisks": {
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"maxLength": 1000
}
}
},
"required": [
"scope"
]
}

Prepare action.json with kind: "engineering_estimate" and an input object matching the schema above.

Replace PROJECT_ID with your saved project ID. Use a new idempotency key for new work and retain it for an identical retry.

Terminal window
maglev actions request PROJECT_ID --input action.json \
--idempotency-key example-engineering-estimate-001 --json

Read action.status, action.output, deliveries and any task in the response. Model actions can take several minutes. After a timeout, check saved actions before retrying. See request and recovery behavior.

The schema below describes action.output.result. The saved action.output envelope also contains draft: true and a note. It can be null while an action is running or after a failure; check the status before reading the result. Null or missing facts are unknown; preserve source references and open questions.

Field Type Required Details
workBreakdown object[] Yes
workBreakdown[].item string If parent supplied
workBreakdown[].hoursLow integer or null If parent supplied
workBreakdown[].hoursHigh integer or null If parent supplied
workBreakdown[].basis string If parent supplied Where the hours come from, or why they are null
workBreakdown[].role string If parent supplied Who does the work: electrical engineer, mechanical engineer, firmware engineer, test engineer, contract manufacturer, lab, Maglev coordination
nreLines object[] Yes
nreLines[].label string If parent supplied
nreLines[].category string If parent supplied engineering, prototype_build, tooling, lab_testing, samples, travel, freight or other
nreLines[].amountUsdLow number,null If parent supplied
nreLines[].amountUsdHigh number,null If parent supplied
nreLines[].basis string If parent supplied The passage or request line the amount comes from, or what would produce a real number
maglevFee object Yes
maglevFee.note “charged separately and visibly; amount not set by this estimate” If parent supplied
riskRegister object[] Yes
riskRegister[].risk string If parent supplied
riskRegister[].impact string If parent supplied
riskRegister[].mitigation string If parent supplied
assumptions string[] Yes What was assumed in order to write this draft
openQuestions string[] Yes What only the founder, a factory or a lab can answer
sources string[] Yes Repo paths of the passages actually relied on
Output JSON schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"workBreakdown": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"hoursLow": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"hoursHigh": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"basis": {
"type": "string",
"description": "Where the hours come from, or why they are null"
},
"role": {
"type": "string",
"description": "Who does the work: electrical engineer, mechanical engineer, firmware engineer, test engineer, contract manufacturer, lab, Maglev coordination"
}
},
"required": [
"item",
"hoursLow",
"hoursHigh",
"basis",
"role"
],
"additionalProperties": false
}
},
"nreLines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"category": {
"type": "string",
"description": "engineering, prototype_build, tooling, lab_testing, samples, travel, freight or other"
},
"amountUsdLow": {
"type": [
"number",
"null"
]
},
"amountUsdHigh": {
"type": [
"number",
"null"
]
},
"basis": {
"type": "string",
"description": "The passage or request line the amount comes from, or what would produce a real number"
}
},
"required": [
"label",
"category",
"amountUsdLow",
"amountUsdHigh",
"basis"
],
"additionalProperties": false
}
},
"maglevFee": {
"type": "object",
"properties": {
"note": {
"type": "string",
"const": "charged separately and visibly; amount not set by this estimate"
}
},
"required": [
"note"
],
"additionalProperties": false
},
"riskRegister": {
"type": "array",
"items": {
"type": "object",
"properties": {
"risk": {
"type": "string"
},
"impact": {
"type": "string"
},
"mitigation": {
"type": "string"
}
},
"required": [
"risk",
"impact",
"mitigation"
],
"additionalProperties": false
}
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
},
"description": "What was assumed in order to write this draft"
},
"openQuestions": {
"type": "array",
"items": {
"type": "string"
},
"description": "What only the founder, a factory or a lab can answer"
},
"sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Repo paths of the passages actually relied on"
}
},
"required": [
"workBreakdown",
"nreLines",
"maglevFee",
"riskRegister",
"assumptions",
"openQuestions",
"sources"
],
"additionalProperties": false
}