A market-facing attempt at an AI adviser for UK tax — one that searches the law itself, lays out every lawful route, and refuses any number it can’t trace.
The bet — the bitter lesson, applied to tax
The lasting lesson of AI is that general methods that search and learn beat hand-coded human knowledge. So TaxPilot does not hard-code tax rules.
Tax software has always been armies of hand-written rules. That is exactly the approach the
bitter lesson warns against — brittle, endless to maintain, and quietly wrong at the edges.
TaxPilot takes the other bet: give agents the tools to search the legislation and
reason for themselves, and keep the orchestration deliberately simple. The machine’s
job is to find and apply the law dynamically — not to have the law pre-baked into it.
The old way
Hard-code the rules
Thousands of hand-written rules and keyword checks. Brittle, unmaintainable, and blind to anything nobody thought to encode.
TaxPilot
Let agents search & reason
Agents search the legislation live, enumerate every lawful route, and judge — with simple orchestration and a gate that proves the numbers.
How it works — a team of agents around one whiteboard
One question walks down the line. Each agent searches the law it needs and never collapses the options; code only checks what code can prove.
AI agentChallengerComputeCode gateData
The hard problems — engineered against, one by one
Every LLM application fails the same ways. Each failure mode here has a specific piece of engineering behind it.
It makes up the law
Fetched verbatim, version-locked
Statute is pulled live and locked to the case’s date — never recalled from memory. If a section can’t be fetched, it is flagged, not invented.
It gets the sums wrong
Neuro-symbolic (PAL)
Each calculation is written as code and run in a sandbox, then a second agent re-derives it from scratch. LLMs score ~32% on tax arithmetic; executed code is exact.
It misses a relief
Agentic search
Agents walk the legislation index section by section — not a top-k lookup — forced to enumerate every relief and election before deciding.
Its tool calls hang
Hard timeouts + abort guards
Every fetch carries connect/read timeouts and a browser user-agent to clear anti-scraping — one stuck request can’t freeze the whole run.
It shows numbers you can’t check
The release gate
Every figure must trace to statute, a fact, or executed code — otherwise it is withheld, never shown unsupported.
The orchestration runs away
Simple orchestration + feedback loops
Agents hand tickets back to one another and re-run until the board is clean — no brittle queue or middle layer.
Does it work?
On a real CTA / ATT exam paper — yes, to the exact pound. The official marking answer, matched end to end — not a cherry-picked demo.
£23,120TaxPilot
=
£23,120Official answer
·
exactend to end, first time
Honest boundary. An advanced prototype, not production filing software. One exact match is strong
evidence, not a coverage claim — a full fresh run is still being validated. On the harder CTA inheritance-tax paper it also reached
£433,718 against the official £433,717. The point is not that it never errs — it is that when
it does, the error is exposed rather than hidden.
What comes out
Not a number. A file an adviser can sign — every route open, every figure traceable, every gap named.
Every lawful route, side by side
It doesn’t choose for you
Where the law allows more than one treatment, each route is set out at equal status with its conditions and its consequences. Choosing between them needs figures the model doesn’t have and preferences only the client holds — so the choice stays with the adviser.
Every figure carries its source
Traceable to statute or to code
Each number is tagged to the calculation that produced it, and each calculation to the section it applies. A figure that can’t be traced doesn’t get printed — it’s withheld and flagged.
What it still needs from the client
Open questions, listed — not assumed
Facts the answer turns on but the file doesn’t settle are collected in one list. “Did the charity tell you the ticket value before you gave, and did you agree to split the payment?” — the answer moves real money, so it is asked, not guessed.
What it had to assume
Stated with its effect
Where a value had to be taken as read, the assumption is written down together with what changes if it’s wrong. “Market value is taken as the same-day purchase price; a different valuation changes the charge.”