Inspiration
Every finance lead at a growing startup has the same story: a tool renews itself at plus ten percent for forty seats when eighteen people use it, because the notice deadline passed quietly. Holdfast is for the Head of Finance & Ops at a 30–200-person startup with no procurement team. Renewal tools remind you. I wanted one that acts, inside limits a person set, and that you can trust with money.
What it does
Holdfast reads each contract's notice clause verbatim and puts the deadline on a ledger. It counts the seats actually used and finds public competitor list prices with Exa, then has context.dev open each product's own pricing page and keeps a price only if that page lists it. A negotiator agent running on Omnara then works the renewal by email: each offer goes out as a real email from Holdfast's inbox (Primitive), and the supplier's reply comes back the same way. Holdfast's rules engine computes every offer inside the terms the Head of Finance authorized; the agent only writes the words, and any wording that changes a number is thrown out.
Paying is an Omnara always_ask permission. The agent stops, the approver taps Approve on their phone, and Holdfast issues a card that works only for that vendor, capped at the deal. On the sample contract the vendor's first charge at the old price is declined, the agreed charge goes through, and the result is $17,742 a year avoided against the vendor's quote. Holdfast's own fee (20% of the first-year saving) is paid through Stripe Checkout in test mode. The supplier's side of the conversation and the card are simulated and labelled. Every step is a signed receipt that names the Omnara agent.
Try this first: open https://holdfast.agentglass.workers.dev/demo and tap Run the agent on Omnara. When the agent asks to pay, scan the QR with a second device, or tap Approve on this device on the same phone, then Approve (or Reject). The run page shows the Omnara agent with a link to its history, each email with its message id, the competitor prices with their context.dev check, and every signed receipt. After approving, open Card & charges → Pay fee to pay Holdfast's fee with card 4242 on Stripe's test checkout. No account needed.
How it uses agents (one hosted run, counted):
- The agent made 9 tool calls over 9 model calls ($0.036): read the contract, prove usage, find competitor prices (Exa finds, context.dev confirms), start the negotiation, three vendor messages, check the offer, request settlement.
- It sent 6 real emails: 3 to the supplier's inbox, and read the 3 replies.
- The engine refused 2 bad offers on its own: a 3-year bait, and terms outside the policy.
- Exactly 1 step is reserved for a person: the pay-step permission. While waiting, the agent waits on Omnara in the background; with Holdfast's server stopped for 60 s it was still waiting at 6 of 6 checks.
- After the tap, the card is issued, the over-cap charge is declined, the agreed charge is approved, and the receipts are signed, all without anyone.
How I built it
- Omnara is the agent runtime: one durable agent per renewal (
anthropic/claude-sonnet-5.5on Omnara's default provider) whose tools are Holdfast's engine. The pay step is an Omnara permission, resolved by the phone page. A hosted FastAPI worker receives Omnara's signed webhooks and reconciles on restart, so a call that went ready while the server was down still runs. - Exa
/searchwith an output schema finds competitor prices; the engine validates each row. - context.dev
/web/scrapewith a JSON schema reads each price on the product's own pricing page (up to 5 pages per run, in parallel, cached 24 h). A mismatch drops the price; if context.dev is unavailable the row stays, labelled UNCONFIRMED. - Primitive carries the negotiation as real email between Holdfast's negotiator inbox and the simulated supplier's inbox. Each body is number-checked. A send budget and a 10 s limit per leg fall back to an in-process channel, labelled.
- Stripe Checkout in test mode takes Holdfast's fee. The session is read back from Stripe (paid, livemode false, amount matched) before anything is marked paid; live keys are refused.
- FastAPI, MongoDB Atlas (Vector Search, change streams) and React, hosted on Google Cloud Run and a Cloudflare Worker; the agent runs on Omnara Cloud. Open the link on any device, no sign-up; one phone is enough. Every outside service has a labelled fallback, two visitors at once each get their own run, and the public site has caps per visitor and per day. 179 backend tests.
Challenges I ran into
- Never paying twice: one operation id and payload hash per settlement, claimed atomically, so a retried approval replays the same signed receipts, and an edited amount is refused.
- Omnara doesn't replay lifecycle frames, so a phone decision could land before the stream connected. Holdfast reconciles on every connect.
- A periodic timeout could cancel a settlement half-way. Tool executions now run as shielded tasks, with a regression test.
Accomplishments that I'm proud of
- The card is the contract: it works only for this vendor and only up to the agreed price, so a charge above the deal is declined by construction. The model writes words but never owns a number.
- Durability measured: with Holdfast's API stopped for 60 s while the agent waited for approval, Omnara showed it still waiting at 6 of 6 checks, and it settled 2.2 s after the approval. On the hosted site a full run over real email reached the approval in 23.5 s and settled 2.9 s after the tap.
- Competitor prices count only after a second reader checks them on the source page, and they move no number, because I measured that a lower anchor did worse (helped in 8 of 72 cases, hurt in 11).
What I learned
For an agent that touches money, the human approval has to live in the runtime, not in the UI. Evidence an agent finds on the web needs the same checks as a number it computes.
What's next for Holdfast
A real supplier on the other end of the email channel (today the supplier's replies are simulated), real per-vendor cards through an issuing program, and sign-in for approvers.
Log in or sign up for Devpost to join the conversation.