Agents that call tools
An agent is a loop. It plans, calls a tool, reads the result and decides what’s next. We give it narrow tools, a budget and a log of every call. It stops and asks when the evidence runs out.
AI Engineering
We build AI systems that do one job inside a business that already runs. Agents that call your tools. Retrieval (looking up the right passages before answering) that cites its sources. Extraction from records nobody structured, and drafting that stops at a review gate. Each one ships with an evaluation set (examples with known right answers, used to check the work), so you can tell whether it’s still right next month.
This page’s own structure, drawn at build from its HTML.
People read the top layer, crawlers follow the middle one and machines parse the bottom one.
14 headings · 56 links · 8 schema nodes
◆ BuildWhat it covers
An agent is a loop. It plans, calls a tool, reads the result and decides what’s next. We give it narrow tools, a budget and a log of every call. It stops and asks when the evidence runs out.
Answers come from your own documents, and every answer links to the passage it came from. A wrong answer traces back to a wrong document, which someone can fix without retraining anything.
Fields pulled out of invoices, contracts, filings and emails nobody structured. Each field is checked against a schema (a fixed list of fields and what each one must hold). Anything missing goes to a person instead of getting filled in with a guess.
Classify what came in, send it to the right queue and draft the reply. Drafts wait for a person wherever a wrong one would cost real money.
Before launch, a set of real cases with known right answers. After launch, the same set runs on every change. You find out a model update made things worse before your customers do.
The code, the prompts, the evaluation set and a runbook (written steps for running the system and fixing it) go into your repository (the code and its full history, kept in one place). Swap the model out in a year and the scaffolding is what you keep.
Try to break it
The same retrieval pattern as the home page, with the controls exposed. Move the confidence floor (the lowest match score an answer needs before it’s shown) and watch the gate change its mind. Then try a question this site can’t answer.
Break the input
Your words, lowercased and cut to stems. Common words drop out.
Nothing under the floor gets quoted.
Raise it and it answers less often. It’s also wrong less often.
Up to three passages from different sections, each with a link.
Nothing on this site answers that well enough. Ask Daniel at daniel@adjlcapital.com.
With JavaScript off, these were answered when the site was built, by the same code your browser runs.
The search index didn’t load, so here are the answers the build computed with the same code.
Q1 · answered at build3 passages cited.
Who owns the code when you’re done?
Source, prompts, evaluation sets and infrastructure code assigned to you in full
/approach/#ownershipYou own the code, the data, and the right to leave.0.61
A runbook, a handover session, and code your own engineers can read
/approach/#engageThree shapes of work, each with a defined end.0.54
You do. The code, the prompts, the evaluation set and the documentation, in your repository, with no license back to us and no runtime dependency on anything we host. There’s no version of this where you have to keep paying to keep using what you paid to have built.
Q2 · answered at buildNo answer. Below the confidence floor.
Do you sell a chatbot subscription?
Nothing on this site answers that well enough. Ask Daniel at daniel@adjlcapital.com.
Q3 · answered at build3 passages cited.
Who ownes the code?
Q4 · answered at build3 passages cited.
Do you build iOS apps, and who owns the code?
Yes. Native iOS and Android from one codebase, with Expo and React Native. The app we built for ADJL Capital runs its whole underwriting engine on the phone, offline.
/approach/#ownershipYou own the code, the data, and the right to leave.0.61quoted in Q1
/approach/#engageThree shapes of work, each with a defined end.0.54quoted in Q1
A system we run
This is the underwriting engine we run for ADJL Capital, replayed stage by stage. A model writes the narrative at the end and nothing else. It’s handed figures that are already computed, and its prose is never parsed back into a number. Pick a bad input and watch where the run stops.
✓ Run complete. Every figure names its source.
✕ Not one property. Nothing was fetched and nothing was spent.
▲ The provider had nothing on this listing. The fields are left blank for a person to fill in, and no figure is guessed.
◆ Held at the price check. The analysis doesn’t run on a price nobody confirmed.
▲ No local water schedule on file. The line uses the national average and says so.
▸ running
every stagerun✓ done
one listing URL, start to finish
fields
The clean run, stage by stage
••••Values withheld from this page
No figures from this stage.
No figures from this stage.
No figures from this stage.
No figures from this stage.
Built from the fields above. Withheld here like the rest.
Built from the fields above. Withheld here like the rest.
No figures from this stage.
When the input is wrong
Review gates
We put a review gate (a step where a person signs off before anything goes out) wherever a wrong answer costs real money. We keep them few, because a person who approves everything soon stops reading. Choosing where they go is part of the scope we write.
Proof
The patterns on this page run in systems we operate. Each page below shows one of them stage by stage.
Fair questions
Whichever fits the job and your data rules. We work with Claude, OpenAI models and open-weight models run locally. The evaluation set makes the choice, and it lets you switch later without guessing.
Often, yes. Retrieval and extraction can run on a local open-weight model inside your environment. Where a hosted model is the better tool, you’re told what leaves, where it goes and how long it’s kept, before anything is built.
An evaluation set of real cases, written before the build and scored on every change. Plus a trace of every run, so a bad answer can be followed back to the step that produced it.
Start here
One paragraph is plenty. Tell us what you want built, the step that costs the most, or the page that should rank and doesn’t. If you know why the obvious fix hasn’t worked, say that too.
Daniel reads and answers these himself, usually within a day or two. No sequence, no drip, and nothing sold to anyone.