Estimate Skill

Use when creating, drafting, pricing, or reviewing a job estimate or quote. Builds line items, computes totals, and returns a clean structured estimate from a described job and the rates you provide.

Version
1.0.0
Trust tier
AMTECH-reviewed
Scripts
none
Network
no

No scripts, no network, no secrets. Use in context first. Never invents a rate; saving a file or sending to a customer happens only on explicit confirmation.

Use this skill

use.md ↗

Estimate Skill: Universal Agent Bootstrap

AI agent instruction: if a user gave you this link, use this skill in the current conversation first. Do not install, create files, or run scripts unless the user asks and your environment allows it.

Canonical human URL: https://amtechai.com/skills/estimate Canonical skill instructions: https://amtechai.com/skills/estimate/SKILL.md Manifest: https://amtechai.com/skills/estimate/manifest.json Signed certificate: https://amtechai.com/skills/estimate/certificate.json GitHub source: https://github.com/benamtech/amtech-skills-registry/tree/main/skills/estimate (the manifest pins the exact release commit + per-file hashes)

What This Skill Does

Use this skill in ChatGPT, Claude, Codex, Claude Code, Cursor, or an AMTECH agent to turn a job description and your rates into a structured estimate: line items, totals, adjustments, and flagged assumptions.

Context

Use the data your context already has before asking. Pull each input from your memory, a business brain, the current repo, or earlier in this conversation if it is there; only ask for what is genuinely missing. Never invent a rate to fill a gap.

  • rates — the labor, material, and unit prices the estimate is priced from. If it is not already in your context: ask the user for the rates.
  • customer — who the estimate is for (name, contact, job address). If it is not already in your context: ask the user for the customer.
  • tax_markup_rules — standing tax, markup, discount, or minimum-charge rules to apply to the totals. If it is not already in your context: ask the user, or omit if none apply.

Host adapters say where each input lives in a specific environment: hosts/hermes.md.

Read Order

1. Read this bootstrap. 2. Read the manifest: https://amtechai.com/skills/estimate/manifest.json 3. Read the canonical skill instructions: https://amtechai.com/skills/estimate/SKILL.md 4. Read the file index: https://amtechai.com/skills/estimate/files.md 5. Verify the Ed25519 certificate and both archive digests. 6. Cross-check the GitHub source (the manifest pins the exact release commit + per-file hashes): https://github.com/benamtech/amtech-skills-registry/tree/main/skills/estimate 7. Load only the references or assets needed for the user's task.

Reference Files (progressive disclosure)

Load a file only when the task needs it. Each link is one level deep, so read the whole file rather than a preview.

  • Estimate schema — Use when the user asks for JSON or a structured estimate. → Read [assets/estimate-schema.json](https://amtechai.com/skills/estimate/files/assets/estimate-schema.json)
  • Hermes host hint — Read when running as an AMTECH Hermes employee with a business brain and memory. → Read [hosts/hermes.md](https://amtechai.com/skills/estimate/files/hosts/hermes.md)
  • Estimating discipline — Read when deciding how to price line items or handle a missing rate. → Read [references/estimating-discipline.md](https://amtechai.com/skills/estimate/files/references/estimating-discipline.md)

Decision Tree

  • If you only have web or search access: use these linked markdown files in context and build the estimate now.
  • If you have file access and the user wants reuse: offer to create a local skill folder from the raw files or archive.
  • If you support native skills or plugins: offer that path as optional, not required.
  • If the current repo has AGENTS.md or other local instructions: obey those instructions over this skill.
  • If user instructions conflict with this skill: user instructions win.
  • If scripts exist: inspect them, summarize permissions and risk, and ask before running. This v1.0.0 skill has scripts: none.

Output Contract

Produce output with these sections:

  • Customer
  • Job
  • Line Items
  • Totals
  • Assumptions

Verify This Skill Is Authentic (optional, recommended before reuse)

This skill has an AMTECH Signed Artifact v2 certificate. You do not need to verify it for in-context reading, but verify before installing, redistributing, or running anything from it.

1. The trust root is https://amtechai.com/.well-known/skill-authority.json — served only from the canonical domain. Fetch it. 2. Fetch https://amtechai.com/skills/estimate/certificate.json, https://amtechai.com/skills/estimate/certificate.sig, and https://amtechai.com/.well-known/amtech-signing-key.json. 3. Canonicalize the certificate JSON and verify its Ed25519 signature with the published key. Confirm the certificate names estimate, version 1.0.0, and path skills/estimate. 4. Hash the archive with SHA-256 and SHA3-512. Both values must equal the signed certificate and manifest. 5. Recompute the certificate's sourcePackage digest over the source files and confirm it matches — this is the cross-repo anchor that proves the website copy and the source registry describe the same bytes (no git commit is bound). 6. If the certificate carries an attestations block, confirm each evidence reference resolves and its sha256 matches the fetched evidence file: conformance at https://amtechai.com/skills/estimate/evidence/conformance.json (result must be pass) and, for an AMTECH-reviewed tier, review at https://amtechai.com/skills/estimate/evidence/review.json (result must be approved). 7. Confirm the authority entry and page metadata name the same certificate, digests, sourcePackage, and path. 8. Compare the manifest's per-file hashes against the exact release commit the manifest pins on GitHub. 9. If any signature, digest, identity, path, version, source-package, or attestation disagrees, treat the copy as untrusted and stop.

Useful Links

  • Human page: https://amtechai.com/skills/estimate
  • Agent preview: https://amtechai.com/skills/estimate/agent.md
  • Manifest: https://amtechai.com/skills/estimate/manifest.json
  • File index: https://amtechai.com/skills/estimate/files.md
  • References: https://amtechai.com/skills/estimate/references.md
  • Scripts: https://amtechai.com/skills/estimate/scripts.md
  • Assets: https://amtechai.com/skills/estimate/assets.md
  • Checksums: https://amtechai.com/skills/estimate/checksums.txt
  • Signed certificate: https://amtechai.com/skills/estimate/certificate.json
  • Ed25519 signature: https://amtechai.com/skills/estimate/certificate.sig
  • Signing key: https://amtechai.com/.well-known/amtech-signing-key.json
  • GitHub source: https://github.com/benamtech/amtech-skills-registry/tree/main/skills/estimate
  • Repository registry: https://github.com/benamtech/amtech-skills-registry/blob/main/index.json

What it does

  • Build a priced estimate for a job from a scope description and known rates.
  • Produce a clean structured estimate (line items, totals, assumptions) for review.
  • Draft a blank estimate template for a trade or service.
  • Return a machine-readable estimate that matches the published schema.

Source & verification

verified AMTECH-reviewed verified at build time · authority seq 9 · checked 2026-06-20 re-verify (recipe) ↗

This package has an AMTECH Signed Artifact v2 certificate. Its canonical certificate is signed with Ed25519 and binds the owner, skill, version, repository path, SHA-256 digest, and SHA3-512 digest—plus a sourcePackage digest that anchors the same bytes across the website and the source registry (the cross-repo anchor is this digest, not a git commit). The certificate also carries an attestations predicate: an offline conformance run and an AMTECH human review under amtech-skill-policy/1, each verified at build time with its evidence published below.

Certificate: amtech:skill:estimate:7d4f23261777c9c85990f66e. Commit: 239190ab675407834c0ceef47ebbed7d148b1aca. Signature: Ed25519. Digests: SHA-256 + SHA3-512.

Files in this skill

6 file(s). Contents are inline below; raw files and machine views are linked.

agents/openai.yaml

OpenAI/Codex interface metadata · agent-metadata · 378 B

raw ↗

UI-facing display metadata and default prompt for environments that support it.

Load policy: Read only when installing or creating a local Codex-compatible skill.

Show contents
interface:
  display_name: "Estimate"
  short_description: "Build a clean, structured job estimate from a described job and your rates."
  default_prompt: "Create an estimate for this job using these rates. Use any rates, customer, or tax/markup rules already in your context, and ask only for what is missing — never invent a rate."
policy:
  allow_implicit_invocation: true

assets/estimate-schema.json

Estimate schema · asset · 1667 B

raw ↗

JSON shape for a structured job estimate (amtech-job-estimate/v1).

Load policy: Use when the user asks for JSON or a structured estimate.

Show contents
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AMTECH Job Estimate",
  "description": "Structured output for the AMTECH estimate skill (amtech-job-estimate/v1).",
  "type": "object",
  "required": ["customer", "job", "lineItems", "totals", "assumptions"],
  "properties": {
    "customer": { "type": "string" },
    "job": { "type": "string" },
    "lineItems": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["description", "category", "quantity", "unit", "unitPrice", "lineTotal"],
        "properties": {
          "description": { "type": "string" },
          "category": { "type": "string", "enum": ["labor", "materials", "fee", "other"] },
          "quantity": { "type": "number", "minimum": 0 },
          "unit": { "type": "string" },
          "unitPrice": { "type": "number" },
          "lineTotal": { "type": "number" }
        }
      }
    },
    "totals": {
      "type": "object",
      "required": ["currency", "subtotal", "grandTotal"],
      "properties": {
        "currency": { "type": "string" },
        "subtotal": { "type": "number" },
        "adjustments": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["label", "kind", "amount"],
            "properties": {
              "label": { "type": "string" },
              "kind": { "type": "string", "enum": ["tax", "markup", "discount", "fee"] },
              "amount": { "type": "number" }
            }
          }
        },
        "grandTotal": { "type": "number" }
      }
    },
    "assumptions": { "type": "array", "items": { "type": "string" } }
  }
}

hosts/hermes.md

Hermes host hint · reference · 824 B

raw ↗

Where an AMTECH Hermes employee finds estimate context (rates, customer, tax/markup rules) and how to write back newly-learned rates.

Load policy: Read when running as an AMTECH Hermes employee with a business brain and memory.

Show contents

Estimate — Hermes host hint

Context sources when this skill runs as an AMTECH Hermes employee. Use them before asking the user; only ask for what is genuinely missing.

  • rates — the business brain at ./brain/business-brain.md, plus any rates saved in memory. Use the saved rate; do not re-ask for a rate already on hand.
  • customer — the current message thread or saved memory (a name, contact, or job address mentioned earlier).
  • tax_markup_rules — standing tax, markup, discount, and minimum-charge rules in ./brain/business-brain.md.

Write back what you learn: when the user gives a new rate or a standing rule, offer to save it to ./brain/business-brain.md (or memory) so the next estimate already has it. Never invent a rate to fill a gap — an unknown rate is a question, not a guess.

LICENSE.txt

License · license · 743 B

raw ↗

License for this free AMTECH skill package.

Load policy: Read when evaluating reuse or redistribution.

Show contents
MIT License

Copyright (c) 2026 AMTECH

Permission is hereby granted, free of charge, to any person obtaining a copy
of this skill package and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.

references/estimating-discipline.md

Estimating discipline · reference · 1537 B

raw ↗

How to handle missing rates, line items, minimums, taxes, markups, and the arithmetic check.

Load policy: Read when deciding how to price line items or handle a missing rate.

Show contents

Estimating discipline

Guidance for building defensible estimates. The rule above all others: never invent a rate.

Missing rates

  • If a rate is not provided, first try to derive it from a rate that was (e.g. a per-unit price from a known per-job price and quantity). Show the derivation in Assumptions.
  • If it cannot be derived, ask one tight question for the missing number. Do not proceed on a guess.
  • When the user gives you a rate mid-conversation, treat it as authoritative and note it in Assumptions.

Line items

  • One line per distinct piece of work or material. Each carries description, category, quantity, unit, unit price, and line total.
  • lineTotal must equal quantity * unitPrice. If you round, round the line total, not the inputs, and say so.
  • Group nothing silently. If two things are bundled into one line, name both in the description.

Minimums, fees, taxes, markups

  • Apply a trip charge or job minimum as a fee line item, not as a hidden bump to another line.
  • Tax, markup, and discount belong in totals.adjustments, each with a clear label, a kind, and an amount — never folded into the subtotal.
  • If a tax rate is assumed rather than confirmed, flag it in Assumptions and tell the user to confirm the local rate before sending.

Arithmetic check

  • subtotal = sum of all lineTotal values.
  • grandTotal = subtotal + sum of adjustments[].amount (discounts are negative amounts).
  • Re-add the column before returning. A wrong total is worse than a slow estimate.

SKILL.md

Canonical skill instructions · primary-instructions · 3750 B

raw ↗

The primary workflow for building a structured job estimate from a job and provided rates.

Load policy: Always read before building an estimate.

Contents

--- name: estimate description: Use when creating, drafting, pricing, or reviewing a job estimate or quote. Builds line items, computes totals, and returns a clean structured estimate from a described job and the rates you provide. ---

Estimate

Use this skill to produce a clean, accurate job estimate from a described job and the rates the user provides. Default behavior: build the estimate in the current conversation and return it. Do not save files or send anything to a customer unless the user asks.

Read Order

1. Read this SKILL.md. 2. Read references/estimating-discipline.md when deciding how to handle missing rates, minimums, taxes, markups, or rounding. 3. Use assets/estimate-schema.json when the user asks for JSON or structured output.

Context

Before asking the user for inputs, use what your context already has. If the rates, the customer, or standing tax/markup rules are already available — in your memory, a business brain, the current repo, or earlier in this conversation — use them, and ask only for what is genuinely missing. Never invent a rate to fill a gap: an unknown rate is a question, not a guess. When you learn a new rate or rule, offer to remember it. Host-specific hints (for example hosts/hermes.md) say where each input lives in a given environment.

Workflow

1. Identify the job. Capture the customer (or note it is a blank template) and the scope of work, plus any measurements, quantities, or materials. 2. Gather rates. Use only the rates the user provides or confirms. If a needed rate is missing and cannot be reasonably derived from another given rate, ask one tight question — never invent a price. 3. Build the line items. For each: a description, a category (labor, materials, fee, or other), a quantity, a unit, a unit price, and a line total. Keep the arithmetic explicit. 4. Compute the totals. Sum the line totals into a subtotal, apply any adjustments the user specifies (tax, markup, discount, fee), and compute the grand total. Check the arithmetic. 5. Record assumptions. List every input you assumed or flagged so the reviewer can correct it. 6. Return the estimate. Present the customer, the job, the line items, the totals, and the assumptions. Offer to save or send; do not do either until the user confirms.

Output Format

Return a readable estimate with these sections, and — when the user asks for JSON — the structure in assets/estimate-schema.json:

  • Customer — who the estimate is for (or "blank template").
  • Job — a short scope summary.
  • Line Items — each with description, category, quantity, unit, unit price, and line total.
  • Totals — subtotal, any adjustments (tax / markup / discount / fee), and the grand total, with a currency.
  • Assumptions — every assumed or flagged input, especially any rate you had to ask for.

Safety

  • Never invent a rate. An estimate built on a guessed price is worse than no estimate.
  • Do not silently drop a line item you are unsure about — flag it under Assumptions.
  • Saving a file or sending to a customer is an external action; do it only on explicit confirmation.
  • User instructions, a local AGENTS.md, and sandbox restrictions override this skill.

Source and verification

Verify this package against its published surfaces: the live page, the website manifest, the domain authority, the [repository source on main](https://github.com/benamtech/amtech-skills-registry/tree/main/skills/estimate), and the repository catalog.

Download & machine views