Spend this week
$180 of $500 cap on loom desk_7f3k
- 10:01
browser.search$0.01 allowed - 10:14
cards.create$0.00 allowed - 10:22
cards.charge$48.00 allowed - 10:23
cards.charge$612.00 held for approval
Platform
Write heddwove.config.ts, or let your coding agent write it. Heddwove provisions and meters. One bearer token, one credit balance, one audit stream.
import { loom, identity, runtime, skills, team } from "@heddwove/sdk"; const researcher = loom({ can: [skills.search, skills.browser] }); const writer = loom({ can: [skills.route] }); export const desk = team({ runtime: runtime.durable({ sleepAfter: "15m" }), lead: loom({ identity: identity.business(), can: [skills.route, skills.search, skills.mail.send], limits: { spendCapUsd: 250, models: { search: "class-b", reason: "frontier" } }, }), agents: { researcher, writer }, edges: [["lead", "researcher"], ["researcher", "writer"]], });
Runtime
Heddwove hosts durable processes with crash-safe state, typed rosters, and human-in-the-loop gates. Bring Cursor, Claude Code, or your own runner. Heddwove is the mill those runners call.
$180 of $500 cap on loom desk_7f3k
browser.search $0.01 allowedcards.create $0.00 allowedcards.charge $48.00 allowedcards.charge $612.00 held for approvalRouting
Policy can say this tool may only use models in class B. Context pruning keeps mechanical turns cheap. Research batches wait for idle hours. Every route writes an invoice line.
classes: B: [heddwove-small-1, llama-scout] frontier: [claude-sonnet, gpt-5] tools: research.batch: class B mail.draft: class B code.edit: frontier idle: batch_after: 15m prune_context: true
{
"route_id": "rt_91c2",
"loom_id": "loom_7f3k",
"tool": "research.batch",
"model": "heddwove-small-1",
"class": "B",
"input_tokens": 1840,
"output_tokens": 412,
"credits": 0.0022,
"reason": "mechanical_turn"
}
Governance
Hard spend caps sit on virtual cards. Approval queues catch irreversible tools. Revocation cuts a card, a session, or a skill mid-flight. Every primitive call lands in the audit stream. KYC and KYB still need humans.
Authorization fails when the charge would cross the remaining cap. Alerts follow the decline.
cards.charge above $100 waits. The agent holds the turn. A human approves or denies in the console or Slack.
Kill a card, a bearer token, or a single skill. The next primitive call reads the new policy.
Primitives
Catalog groups cover compute, storage, identity, payments, communications, and filings helpers. Exact SKUs live in the live catalog. Incorporation and banking partners are integrations, limited by jurisdiction.
Templates
Each template is a prompt plus a config. Copy both into Cursor or Claude Code. Heddwove provisions the threads the file names.
File: templates/support.ts. Threads: mail, postgres, class B routing, $80 card, approve cards.charge.
Prompt: “Stand up a support loom that reads helpdesk mail, drafts grounded replies, and waits on a human for refunds over $40.”
File: templates/recruiting.ts. Threads: mail, calendar, ATS webhook, class B drafts, frontier for score writeups.
Prompt: “Build a recruiting loom that screens inbound mail, books a 20 minute slot, and logs candidates to the ATS.”
File: templates/books.ts. Threads: processor webhooks, ledger memory, monthly cron, $0 card (read only money movement).
Prompt: “Close the books on the first weekday. Reconcile Stripe and the ledger. Mail the pack to finance@.”
File: templates/app.ts. Threads: Postgres, auth, object storage, edge functions, hosted URL on the mill.
Prompt: “Provision an app loom with a database, session auth, a bucket, and an edge function that the agent can deploy.”
Use cases
Many customer agents, one governed mill. Seats on Cloth, policy packs per client, a shared audit export.
Ops agents with a budget. Caps on cards, Slack approvals, a weekly spend mail to finance.
Spin up boring infrastructure so the agent can work: identity, inbox, database, a capped card.
Connect CRM, code, and shop. Policy on every session. Heddwove meters the routes those tools call.