back to projects

Featured Project

TaxOrchestra

The IRS Form 1040 is a fillable PDF with 229 form fields named f1_47[0], f1_48[0] and so on, with no tooltips, no schema and nothing else saying what any of them mean. Working that out is the whole problem. Below is the result: enter your figures and it fills the genuine form.

229

Form fields, none of them carrying a usable label

5

Resolution phases: four free, one model-backed

~2 ms

Cached catalog read, once a form has been resolved


PythonFastAPIClaude Opus 5AWS BedrockDynamoDBS3ElasticSearch

The problem

Manual tax filing involves extracting data from W-2s, 1099s, and other IRS forms, mapping it correctly to cryptic IRS field names, and validating it against IRS rules, a slow, error-prone process even for experienced preparers.

What I built

A multi-agent system built on Claude, orchestrating 4 specialized agents to process tax documents end-to-end and fill Form 1040 with zero manual intervention.

Architecture

Architecture highlights

  • ▸Orchestrated 4 specialized agents to process W-2s, 1099s, and Form 1040 end-to-end with structured evaluation, achieving 22/22 fields filled, verified by reading the PDF back.
  • ▸Built an autonomous FormMapping pipeline on AWS Bedrock resolving cryptic IRS PDF field names across 4 iterative phases.
  • ▸Built a RAG pipeline cross-referencing an ElasticSearch IRS knowledge base to validate fields and eliminate hallucinations.
  • ▸Cached the resolved field catalog against the form digest: a warm run reads it in about 2 ms and makes no model calls.

Outcome

22/22

Fields accuracy

Every field verified by reopening the written PDF and reading it back, not by counting successful writes.

10×

Faster filing

Reduced filing time vs manual CPA-level data entry on benchmark evaluations.

~2 ms

Cached catalog read

Field resolution is cached against the blank form's SHA-256, so a repeat filing makes zero model calls.


About you

These go in the identity block at the top of the form.

Stays in your browser. See the note below.

Everything here runs in your browser. Your name, SSN and income are never sent anywhere. There is no server, no database and no analytics on this page. The PDF is assembled locally and never leaves your machine. Reloading discards it all.

Your return

Add a document

Numbers appear here as you enter them.


The source

The demo above is the last mile. The part that makes it work, resolving 229 unlabelled form fields into names you can address, runs offline in Python and exports its catalog as a static file.

KrishB-2005/taxorchestraFive-phase field mapper, four agents, 40 tests, and a benchmark that verifies fills by reopening the written PDF rather than counting successful writes.PythonpypdfClaude Opus 5PydanticBM25

Nothing in the mapper is 1040-specific. Measured across eleven real IRS forms, 736 fields in total, it recovers a usable label for 80% of them, including 100% of Schedule B, which is a two-column ledger with no per-row label anywhere.

This is not tax software. It covers the ordinary-income case only: wages, interest, dividends and contract income. No capital gains, no retirement distributions, no credits, no itemised deductions, no self-employment tax, no state return. The bracket figures need re-verifying against the IRS revenue procedure. Use it to cross-check a return you prepare properly elsewhere, not to file one.