Inspiration

Every country buries business-killing deadlines in documents: filings, renewals, notice periods, levies. Owners everywhere discover arrears the same way: a frozen account, a failed tender check, a seized product line. Nigeria is our case study because the pain is sharpest and best documented there (₦14 billion, about $10.6M, in avoidable MSME compliance costs; 51% of businesses paying unofficial fees up to 10x official rates), but the shape of the problem is universal. We built the agent every SME wishes existed, and proved it where the pain is loudest.

What it does

FinePrint is the compliance deadline agent for SMEs worldwide. It ingests a business's documents, extracts every obligation grounded to the exact sentence it came from, and runs in the background: filing within owner-set policies, verifying demands against official schedules, surfacing only genuine decisions.

v1 ships with the Nigeria rule pack (CAC, NAFDAC, NRS, state and local levies). The grounding engine and ledger are jurisdiction-agnostic, so new rule packs plug in without rebuilding the agent.

Autonomy is policy, not vibes: a spend cap, a STAGING filing, a sandbox x402 settlement receipt, and a human queue when anything is outside the grant.

How we built it

Python + Strands Agents SDK (supervisor with extraction and action sub-agents via agents-as-tools), Amazon Bedrock Mantle (Kimi K2.5 for action, DeepSeek V3.2 for optional extract), AWS Lambda Function URL for the public live demo, Amazon SES for owner alerts, FastAPI backend, SQLite ledger, React + Vite frontend, Cloudflare Pages mirror.

The grounding engine is pure deterministic code: a value counts only if it literally appears in its quoted source sentence. Deadline math never touches the model. Tiered routing keeps inference trivial: deterministic checks first, model only for discovery and action when enabled.

Local demo path runs with no model at all. Set FINEPRINT_USE_AGENT=1 to put Strands on the tick.

Challenges we ran into

Making extraction trustworthy instead of fluent: solved by splitting discovery (model) from validation (code) and displaying ungrounded terms as untrusted.

Keeping the demo honest: staging portal, test-mode payment, and sandbox x402 are labeled in UI, API refs, and README.

AWS account friction: Anthropic form, account verification, Mantle 403 from an Identity Center allowlist, then a long-term Mantle key. We shipped on Bedrock Mantle with Kimi and DeepSeek and documented the path.

Multi-tenant privacy: originals processed in memory and discarded by default; only ledger quotes, policies, and structured facts persist, with a one-click Forget me delete.

Notifications that match the product loop: one SES email when payment and filing succeed, a different email when payment fails and nothing was filed, another when a human decision is queued.

Accomplishments that we're proud of

End-to-end autonomous filing inside owner-set policies on a public AWS URL.

Demand-letter verification with cited schedule lines: legit schedule match is handled; a bogus levy is stopped.

62/62 grounding consistency on our 15-document synthetic corpus.

Strands on Bedrock Mantle in production-shaped Lambda, not only on a laptop.

The decisions-only surface where most scheduled runs correctly produce nothing.

What we learned

Agents earn trust through provenance, not fluency: every deadline links back to its sentence.

Autonomy ships as policy (standing authorizations with caps), not as per-click approvals.

The required SDK story and the live demo story can both be true: Strands is in the code and on the live tick; the no-model path is the honest fallback, not a fake agent.

What's next for FinePrint

More jurisdiction rule packs (Kenya, Ghana, UK, US state filings), direct e-filing connectors replacing the staging portal, accountant multi-client mode, WhatsApp alerts, and AgentCore Runtime when quota allows.

Built With

Share this project:

Updates