LLMs can be surprisingly useful for company research.
But I kept running into a strange split: parts of the reasoning were useful, while the financial facts underneath them were much harder to trust.
A model could identify an accounting risk in one paragraph, then mix fiscal periods, accounting scopes, or currencies in the next.
Missing values might quietly become zeros.
A deterministic calculation could be performed probabilistically.
A citation could point to a real filing without actually supporting the claim.
Those are different failure modes, and treating all of them as one giant prompting problem did not feel like a reliable architecture.
So I started building OpenThesis, an Apache-2.0 desktop system for evidence-first, AI-assisted company research.
The project is not a stock picker or a trading bot.
The idea is simpler: use ordinary software for work that should be deterministic, and give the LLM a bounded evidence set for the reasoning work where it can actually help.
The monolithic prompt is doing too many jobs A common company-research workflow looks roughly like this: That single model call is implicitly responsible for remembering reported values, selecting the right fiscal period, recognizing the accounting scope, finding sources, performing calculations, comparing scenarios, identifying risks, and writing a conclusion.
Some of those tasks are probabilistic by nature.
Others are not.
Qualitative reasoning, connecting evidence, forming scenarios, and challenging an assumption are reasonable uses of a language model.
Remembering an exact reported value, deciding whether a value is missing, and calculating a margin or valuation are poor places to accept probabilistic behavior.
My design rule became: Deterministic work should stay deterministic.
Use LLMs for reasoning, not as the database and calculator underneath the reasoning.
Evidence before reasoning OpenThesis starts from official filings rather than from model memory or a general web search.
The current ingestion paths cover: US filings from SEC EDGAR mainland China filings from CNInfo for SSE, SZSE, and BSE companies Hong Kong filings from HKEXnews for Main Board and GEM companies The pipeline is intentionally staged: During a research run, extracted evidence is assigned IDs.
Agents receive a bounded evidence set and are expected to attach those IDs to factual claims.
Unknown evidence references and unsupported claims can then be flagged instead of being silently accepted because the prose sounds plausible.
The final synthesis goes through another verification step.
If the required evidence coverage is not there, the run can be marked partial rather than being presented as a fully supported report.
This does not eliminate extraction errors or ambiguous filings.
It makes the failure boundary more visible: a reader can inspect what was extracted, what the analysis used, and where support is missing.
Financial arithmetic is code, not a prompt The same separation applies to financial analysis.
OpenThesis builds financial summaries and reverse-DCF calculations in regular code.
Missing values are not silently converted to zero.
If core coverage is insufficient, the pipeline fails closed before asking an AI model to reason over an invented or incomplete numeric picture.
That distinction matters more than sophisticated prompting.
Consider revenue growth when one period is missing.
A fluent model may still produce a percentage because completing patterns is what it does.
A deterministic function can return “not available,” preserve the reason, and prevent the result from contaminating downstream analysis.
The model can still discuss what a reported margin change might imply, compare scenarios, or challenge assumptions.
It just does not get to manufacture the inputs or improvise the arithmetic.
Multiple agents are not the main point OpenThesis has separate roles for financial analysis, business analysis, accounting risk, growth, skepticism, forecasting, synthesis, and ve