Mycroft Update: Claims + Lineage Agents
Two AI agents read a patent's claims section and citation lineage instead of its abstract, with an honest NotImplementedError standing in for a faked result.
Most patent analysis tools take the easy route: they read the abstract, which is plain-English marketing copy, or they simply count how many filings a company made in a quarter. Neither of those tells you what a company's patents actually protect. This build goes after the harder, more legally meaningful document instead, the claims section, and does it with two separate agents rather than one prompt trying to do everything at once.
Why claims, not abstracts
A patent's claims section is a numbered list of legal statements that define exactly what the patent protects, whether that protection is broad and offensive or narrow and defensive. Most patent tools skip past it entirely because it's harder to parse than an abstract, which is written in plain, readable English specifically to summarize the invention for a general audience. The claims section, by contrast, is often written to be ambiguous on purpose, since its job is legal coverage, not clarity. A model trained to summarize technical text will frequently produce a clean, readable summary of a claims section that loses the legal subtext entirely, which is exactly the gap that motivated building two agents instead of relying on one general-purpose summarization pass.
Two agents, two readings
The project scaffolds a claims agent designed to pull full patent text from a data source, extract the claims section specifically, and produce a structured reading of it. That reading includes what the independent claim actually protects, how any dependent claims narrow that protection, a classification of the claim as defensive, offensive, or exploratory, and an explicit statement of what the reading is not confident about. A second agent traces the patent's citation lineage, giving the pair two independent readings of the same underlying document rather than one blended interpretation.
An honest failure instead of a fake result
One of the more instructive design choices in this build shows up in how the claims agent handles a data source it hasn't actually verified yet. Rather than writing parsing logic against an API response the agent has never seen, guessing at field names and structure, the code raises a NotImplementedError on purpose, with a clear reason attached. That matters because parsing logic written against an unverified schema tends to look finished while quietly being wrong the moment it hits a real response. Running the agent in this state doesn't crash, and it doesn't fake a plausible-looking result either. It raises a clear error naming exactly what's missing: a real USPTO Open Data Portal key and at least one inspected real response to build the parser against. That's presented as the correct output for this state, not a bug to be embarrassed about.
Switching data sources mid-build
Before writing more parsing code, the actual data source was reconsidered. USPTO's Open Data Portal does contain the claims text needed, but requires a government identity verification step that takes real time to complete. Google's Patents Public Data on BigQuery contains the same claims text, and its schema was confirmed directly rather than trusted from documentation, with no identity verification step required to access it. Switching to BigQuery wasn't treated as abandoning earlier work, it was framed as recognizing a constraint that only became clear once the pipeline's actual needs were better understood.
Verifying the schema by hand
Confirming the BigQuery schema directly, rather than relying on documentation, turned out to matter beyond just saving time. The claims table includes localized text, language, and truncated fields, while the citation table includes publication number and category fields, and one dataset now serves both agents. That hands-on verification also caught something documentation alone wouldn't have surfaced: a publication number format mismatch between older granted patents and newer applications, found by inspecting five real sample rows rather than guessing at the format twice.
When two agents is the right call
The broader pattern here is worth naming explicitly: two independent readings of the same artifact are worth the added complexity when a coordinator can name a disagreement between them instead of quietly picking one reading and discarding the other. When the second reading would simply repeat the first, the second agent isn't earning its complexity and should be skipped. That earned-complexity framing, along with the smaller lesson about the NotImplementedError, sums up the build's underlying philosophy: an honest stop is worth more than code that looks done but hasn't actually been verified against reality.
Key takeaways
- The claims section, not the abstract, is the legal artifact that actually defines what a patent protects, and most tools skip past it.
- Two separate agents read the claims section and the citation lineage independently, rather than blending both into a single prompt.
- The claims agent deliberately raises a NotImplementedError with a clear reason rather than guessing at an unverified API schema.
- The data source was switched from USPTO's Open Data Portal to Google's Patents Public Data on BigQuery to avoid an identity verification step, with the schema confirmed by hand.
- Manual schema verification caught a real publication number format mismatch between older granted patents and newer applications.
Who this is for
This build will interest anyone working on patent intelligence, legal document analysis, or agent design patterns for handling unverified data sources honestly. It comes from Aishwarya Patil as part of the Humanitarians AI Fellows' Mycroft Financial AI work, built with Claude.
Chapters
- 0:00Introduction
- 0:14The Ask: Two Agents, Two Readings
- 0:23Why Claims, Not Abstracts
- 1:03Scaffolding the Claims Agent
- 1:26Code: An Honest NotImplementedError
- 1:48Output: Correctly Blocked, Not Faked
- 2:09The Change: ODP to BigQuery
- 2:40Output: Schema Confirmed by Hand
- 3:09Summary: Earned Complexity
- 3:33A Real BigQuery Query
- 3:38Outro
Full transcript(auto-generated, with timestamps)
Introduction
[0:00]Hi, I'm Aishwarya from the Micrauf team. This video walks through what I built over the weeks. Two AI agents that read a patent's claims section and its citation network, the part of a patent most tools skip past. A patent abstract
The Ask: Two Agents, Two Readings
[0:14]Is marketing language. The claims section is the legal artifact. Designed two agents that read the second one, not the first. Method, the claims section is
Why Claims, Not Abstracts
[0:24]A numbered list of legal statements defining what a patent actually protects, broad and offensive or narrow and offensive. Most patent analysis tools never read it. They read the abstract, which is plain English marketing copy, or they just count filings per quarter. Use this when you need to know what a company's patents actually cover, not how many they filed. Where it fails, claims are written to be ambiguous on purpose. A model trained to summarize technical text will often produce a clean technical summary that loses the legal subtext entirely. That gap is the whole reason this needs two agents instead of one prompt. Into Claude code. Scaffold a claims agent
Scaffolding the Claims Agent
[1:05]That pulls full patent text from USPTO data source, extracts the claims section specifically, and produces a structured reading. What the independent claim protects, how dependent claims narrow it, a defensive offensive exploratory classification, and required an explicit statement of what the reading is not confident about. Read the method that
Code: An Honest NotImplementedError
[1:26]Matters. It does not parse a guest API response. It raises not implemented error on purpose with a reason attached. Writing parsing logic against a schema you have never actually seen produces code that looks finished and is quietly wrong the first time it hits a real response. An honest stop is worth more than a confident guess. Run it. Nothing
Output: Correctly Blocked, Not Faked
[1:49]Crashes and nothing pretends to work either. The client raises a clear error naming exactly what's missing, a real USPTO open data portal key and one inspected response to build the parser against. That's the correct output for this state, not a silent failure, not a plausible-looking fake result. Checking
The Change: ODP to BigQuery
[2:09]The actual data source before writing more code. USPTO open data portal has the claims text but needs a government identity verification step that takes real time. Google's patents public data on big query has the same claims text, confirmed via the actual table schema. No identity verification required. Switch the source. This is not undoing week three work. It's recognizing a constraint that only became clear once the pipeline's real needs were understood. The schema, verified by
Output: Schema Confirmed by Hand
[2:41]Hand, not trusted from documentation. Claims localized with real text, language, and truncated fields and citation with publication number and category. One data set now serves both agents. Verifying it directly also caught something documentation wouldn't have shown. A publication number format mismatch between older granted patents and newer applications. Found by looking at five real sample rows instead of guessing twice. When to use this pattern? Two independent readings of the
Summary: Earned Complexity
[3:11]Same artifact with a coordinator that names disagreement instead of quietly picking one. When not to? If the second reading would just repeat the first, skip the second agent. The complexity is only earned where the two views can actually conflict. And the smaller lesson underneath both agents, an honest not implemented error is worth more than code that looks done. Here is what this
A Real BigQuery Query
[3:33]Looks like in a real session on your own patent. Paste this in. Two agents read a
Outro
[3:38]Patent, claims and lineage with Claude. Built with Claude for Humanitarian's AI.
More from Mycroft Financial AI
1:51Mycroft: Turning Hacker News into a Verified AI Attention Signal
2:36Om's Mycroft Update: Private AI Valuations - Finding the Hidden Price of OpenAI and Anthropic
3:27Klarna’s AI Journey: Navigating the Productivity J-Curve (Mycroft)
6:14Tanmay's Mycroft Update - Inside Lemonade’s Claims Bot, Building a Production-Ready AI Workflow
3:54Mycroft Update: Do Congressional Stock Trades Actually Beat the Market?
1:30