Skip to main content
Glama

takeoff_summary

Get per-condition and grand totals for floor, wall, and border takeoff quantities—SF, LF, EA, SY—with and without waste, calculated by the same rules as the report.

Instructions

Per-condition totals (floor/wall/border SF, LF, EA, SY, with and without waste) plus grand totals — the Report's numbers, computed by the same rules. Numbers only: the deliverable that SHOWS the work on the drawings is export_marked_pdf. Coordinates are image px at render scale 2.0: PDF pt × 2, origin top-left, y down (the browser canvas's native space). Sheet payloads carry dims in both px and pt.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
totalsYes
proposalsNoThe proposal ledger (#365): per batch, how many shapes are still pending, how many the estimator accepted, whether it was withdrawn, and which batch new commits attach to (current). Present only when a proposal exists
conditionsYes
shared_floor_sfYesScope collision (#366): floor claimed by more than one shape across the whole takeoff, counted once per cell (Σ areas − union), in SF through each sheet's scale. Has to read 0 before a total means anything — scope_duplicates names the pairs
scale_unconfirmedNoSheets whose scale is agent-set and no human has confirmed — these totals stand on an unverified scale; verify against a stated dimension or confirm in the canvas
shared_floor_unmeasuredNoFloor shapes the collision check could not measure (unscaled sheet, degenerate ring) — left OUT of shared_floor_sf rather than counted as zero; present only when any
proposed_condition_editsNoPending condition-edit diffs (#365) beside the current knobs. The rows above are the CURRENT values — nothing changes until the estimator accepts. Present only when any are pending

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.1.25
    • addedOutput schema / properties / proposed_condition_edits / items / properties / current / properties / drop_ft
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / proposed_condition_edits / items / properties / current / properties / rise_ft
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / proposed_condition_edits / items / properties / proposed / properties / drop_ft
      Added value: +{
      +  "$ref": "#/properties/proposed_condition_edits/items/properties/current/properties/drop_ft"
      +}
    • addedOutput schema / properties / proposed_condition_edits / items / properties / proposed / properties / rise_ft
      Added value: +{
      +  "$ref": "#/properties/proposed_condition_edits/items/properties/current/properties/rise_ft"
      +}
  2. Changed5 schema fields changedv0.1.21
    • addedOutput schema / properties / proposals
      Added value: +{
      +  "description": "The proposal ledger (#365): per batch, how many shapes are still pending, how many the estimator accepted, whether it was withdrawn, and which batch new commits attach to (current). Present only when a proposal exists",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "accepted": {
      +        "description": "Shapes from the batch the estimator already accepted — ink, outside every agent verb",
      +        "type": "integer"
      +      },
      +      "current": {
      +        "const": true,
      +        "description": "New agent commits attach to this batch",
      +        "type": "boolean"
      +      },
      +      "label": {
      +        "type": "string"
      +      },
      +      "pending": {
      +        "description": "Shapes attached to the batch and not yet affirmed by a human",
      +        "type": "integer"
      +      },
      +      "proposal_id": {
      +        "type": "string"
      +      },
      +      "rationale": {
      +        "type": "string"
      +      },
      +      "withdrawn": {
      +        "const": true,
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "proposal_id",
      +      "label",
      +      "rationale",
      +      "pending",
      +      "accepted"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / proposed_condition_edits
      Added value: +{
      +  "description": "Pending condition-edit diffs (#365) beside the current knobs. The rows above are the CURRENT values — nothing changes until the estimator accepts. Present only when any are pending",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "condition": {
      +        "type": "string"
      +      },
      +      "condition_id": {
      +        "type": "string"
      +      },
      +      "current": {
      +        "additionalProperties": true,
      +        "description": "The condition's knobs as they stand — what every total above is computed from",
      +        "properties": {
      +          "finish_tag": {
      +            "type": "string"
      +          },
      +          "height_ft": {
      +            "type": "number"
      +          },
      +          "multiplier": {
      +            "type": "number"
      +          },
      +          "roll_setup": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": true,
      +                "properties": {},
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "waste_pct": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "proposal_id": {
      +        "type": "string"
      +      },
      +      "proposed": {
      +        "additionalProperties": true,
      +        "description": "Only the fields that would change",
      +        "properties": {
      +          "finish_tag": {
      +            "$ref": "#/properties/proposed_condition_edits/items/properties/current/properties/finish_tag"
      +          },
      +          "height_ft": {
      +            "$ref": "#/properties/proposed_condition_edits/items/properties/current/properties/height_ft"
      +          },
      +          "multiplier": {
      +            "$ref": "#/properties/proposed_condition_edits/items/properties/current/properties/multiplier"
      +          },
      +          "roll_setup": {
      +            "$ref": "#/properties/proposed_condition_edits/items/properties/current/properties/roll_setup"
      +          },
      +          "waste_pct": {
      +            "$ref": "#/properties/proposed_condition_edits/items/properties/current/properties/waste_pct"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "proposed_at": {
      +        "type": "string"
      +      },
      +      "rationale": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "proposal_id",
      +      "condition",
      +      "condition_id",
      +      "current",
      +      "proposed",
      +      "rationale",
      +      "proposed_at"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / shared_floor_sf
      Added value: +{
      +  "description": "Scope collision (#366): floor claimed by more than one shape across the whole takeoff, counted once per cell (Σ areas − union), in SF through each sheet's scale. Has to read 0 before a total means anything — scope_duplicates names the pairs",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shared_floor_unmeasured
      Added value: +{
      +  "description": "Floor shapes the collision check could not measure (unscaled sheet, degenerate ring) — left OUT of shared_floor_sf rather than counted as zero; present only when any",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "reason": {
      +        "type": "string"
      +      },
      +      "shape_id": {
      +        "type": "string"
      +      },
      +      "sheet_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "shape_id",
      +      "sheet_id",
      +      "reason"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "conditions",
      -  "totals"
      -]New value: +[
      +  "conditions",
      +  "totals",
      +  "shared_floor_sf"
      +]
  3. Changed1 schema field changedv0.1.16
    • addedOutput schema / properties / scale_unconfirmed
      Added value: +{
      +  "description": "Sheets whose scale is agent-set and no human has confirmed — these totals stand on an unverified scale; verify against a stated dimension or confirm in the canvas",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. Addedv0.1.5
  5. Removedv0.1.4
  6. Addedv0.1.2
  7. Removedv0.1.1
  8. First observed

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It clarifies that the tool returns numbers only, uses the same rules as the Report, and provides coordinate-space details (px vs pt, origin, y-down) that affect interpretation. This is meaningful behavioral context, though it does not explicitly state read-only/no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core output, followed by a key usage distinction and coordinate details. It is compact and mostly purposeful, though the coordinate sentence is somewhat tangential to a summary-only tool and could confuse if the output schema does not include sheet payload dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description is complete: it defines the output categories, units, waste handling, report consistency, and the key alternative for visual deliverables. Nothing essential is missing for an agent to decide whether to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter burden to compensate for; the baseline of 4 applies. The description's coordinate and unit details add context for interpreting results rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific deliverable: per-condition totals and grand totals with units (SF, LF, EA, SY) and waste variants. It also distinguishes itself from export_marked_pdf by explicitly stating it is numbers-only, so an agent can tell what this tool produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you need the Report's computed totals, not a visual deliverable. It explicitly names export_marked_pdf as the alternative for showing work on drawings, though it does not enumerate other related export tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.