15 Agent Templates That Actually Execute
A "template" in most agent platforms is a card with a name, a short description, and a button that either does nothing or opens a waitlist form. That's fine as a roadmap slide; it's not a tool. WingMan's /agents/templates index holds 15 templates that are the opposite of that: each one is a parameterized, multi-step chain over real hosted calculator tools, and calling POST /agents/templates/{slug}/run with real inputs executes every step in order — threading each step's output into the arguments of the next — and hands back real numbers.
What a template actually is
Structurally, a template is inputs: [{name, type, required, example}] plus steps: [{tool, arg_mapping, label}]. Each step's arg_mapping pulls values three ways: from your submitted inputs, from a constant, or {"from": <step_idx>, "path": "values.<key>"} — a live reference to an earlier step's output. That last case is what makes these chains rather than a batch of unrelated calls.
Take concrete-pour-estimator: step one runs concrete to size a slab pour and its ready-mix cost; step two runs rebar on the same footprint; step three runs bid-estimator, and its material_cost argument is mapped straight to step one's values.estimated_cost_usd — not re-typed, not re-estimated, the actual number the concrete calculation produced. Change the slab dimensions once, and the bid at the end reflects it automatically.
{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"...",
"arguments":{"shape":"slab","length":30,"width":24,"thickness_in":4,
"labor_hours":24,"labor_rate":55,"margin_pct":15}}}
(Or just POST /agents/templates/concrete-pour-estimator/run with the same JSON body — the REST route is the more direct path for this one.)
The fifteen, by category
Trades —concrete-pour-estimator (concrete → rebar → bid); renovation-cost-plus (concrete take-off → markup → sales-tax); paint-job-quote (paint sizing → markup → invoice-generator); frame-and-order-lumber (framing → floor-joist → board-feet → bill-of-materials, where the joist count drives the board-foot quantity).
Freelance — freelance-rate-and-invoice backs out the hourly rate a target income requires (hourly-rate), invoices the engagement (invoice-generator), and breaks out sales-tax on the resulting subtotal.
Finance — loan-offer-compare (loan → effective-rate → amortization-schedule); mortgage-decision-kit (mortgage PI/PMI/taxes/insurance → amortization-schedule → folded into a net-worth snapshot); lump-sum-growth-plan (compound-interest forward → the resulting future value feeds roi → rule-of-72 doubling time check).
Startup — startup-runway-burn (runway months → saas-metrics MRR rollup → breakeven on unit economics); cac-ltv-benchmark (cac-ltv payback → saas-metrics → dilution modeled off the round you're raising).
Research — ab-test-analyzer (ab-test significance → confidence-interval on the metric → percentile placement in a sample distribution); regression-forecast (regression fit and prediction → expected-value weighting of outcomes → normal-prob odds around the prediction).
Developer — api-payload-security fingerprints a payload three ways in one call: hash-text content hash, hmac signature with a shared key, crc32 integrity checksum.
Fitness — weight-loss-plan reads bmi and category, finds a healthy target with ideal-weight, then sizes a daily calorie budget from BMR and activity via tdee.
Garden — raised-bed-soil-plan sizes soil to fill a bed (raised-bed), works out fertilizer for the footprint, then tops it with the right mulch volume.
Bounded and fail-soft by construction
No template runs more than 6 steps (MAX_STEPS), and a bad step is captured into that step's own error field rather than 500ing the whole chain — one failed calculation doesn't take down the four calculations after it. More importantly, every steps[].tool referenced across all 15 templates is checked at import time against the live tool map and its calc engine; a template literally cannot exist in the codebase pointing at a tool that isn't real. That's not a marketing claim — it's an assertion (_self_check) that fails the app's own startup if it's ever violated.
Browse the index at GET /agents/templates (JSON for agents, a rendered page for humans), open any one at /agents/templates/{slug}/ for its full input schema and example, and run it with POST /agents/templates/{slug}/run. There's no waitlist step in between.