The full collection

All work

Live products first, then every public repository written as the problem, how it is solved, who it helps, and the technical details. Private work and work in progress are at the end.

Live products.

Production customer-service agent
Web and AI studio site with Stripe checkout. The agent quotes only prices a tool returned, guards every reply, and hands off to a person with a reason code. Case study · angrynirds.com.
Compliance gap analysis
Checks a company’s controls against SOC 2, GDPR and HIPAA requirement sets and lists the gaps. The compliance decision stays with a person. Hugging Face Space.
Grounded support assistant demo
A support chat that cites the passage it used and hands off to a person. support.dbhavery.ai.
Weather and situational-awareness globe
Weather, warnings, quakes, fires, aircraft, ships and satellites on one 3D globe, with no account and no server. Android, web and desktop. Source.

Public repositories.

Release gate for LLM and RAG output

Problem. A change to a prompt, a model or a document set can make an assistant’s answers worse, and nobody notices until a customer does.

How it solves it. It grades answers against a document set with text rules, retrieval checks, citation checks and faithfulness rules, compares the run to a saved baseline, and exits non-zero on any regression, including a weakened test suite. It refuses to record a baseline from a failing run or to accept an empty one. A mutation suite plants defects and confirms each one is caught.

Who it helps. Teams that ship retrieval-based or support assistants and need a release check that fails loudly.

Technical. Python. Runs offline against a deterministic provider, with an optional OpenAI provider. CI on every push. MIT license.

github.com/dbhavery/eval-gate
Agent loop with failure handling

Problem. Agents that call outside tools hang, retry forever, spend without limit, or run an unsafe action.

How it solves it. Every call gets a real deadline. Failures are sorted by type, and only temporary ones are retried. Cost and step ceilings are on by default, and the price of the next call is checked before it is made. Unsafe arguments are blocked before a tool runs, and every step is traced. A recorded run shows a real hang cut off by the watchdog and a halt at the cost ceiling.

Who it helps. Teams putting agents in front of real tools and real budgets.

Technical. Python. Runs offline with no keys. JSONL traces and an HTML trace report. MIT license.

github.com/dbhavery/agent-harness
LLM gateway with provider failover

Problem. When one model provider goes down or rate-limits, every app that depends on it stops, and repeated identical calls cost money.

How it solves it. An OpenAI-compatible proxy routes each request by rule, fails over across providers behind circuit breakers, applies rate limits, and serves repeated identical requests from an exact-match cache. A separate tracing package records tokens, latency and cost for each call.

Who it helps. Teams that call more than one model provider.

Technical. Python. Includes an HNSW vector index written without a library, document ingest and agent packages. Docker Compose. MIT license.

github.com/dbhavery/citadel
Grounded support assistant

Problem. Support chatbots state things the help center never says.

How it solves it. It ranks a sample company’s help articles in the browser, shows the passage it used, and hands off to a person with a summary. An optional Claude step writes answers from those passages only, and its answer is rejected if it cites a passage it was not given or contains a number, email, phone or link that is not in the passages. The model step is off by default and has a daily cap.

Who it helps. Small support teams that want quick answers without invented ones.

Technical. JavaScript in the browser, BM25 retrieval, a serverless endpoint that accepts passage ids only. Live demo at support.dbhavery.ai.

github.com/dbhavery/support-assistant
Policy-control evidence review

Problem. Checking security controls against policies, configs and logs is slow, and a model’s guess is not an audit.

How it solves it. Each control gets a rule-based verdict with the reason and the matched excerpt. Secrets and personal data are masked, and the tool writes an HTML report and an append-only audit log. An optional model may add a reviewer note but cannot change a verdict.

Who it helps. Compliance reviewers and the engineers who prepare evidence for them.

Technical. Python. Runs offline. A leak check refuses to pass when it scanned no files.

github.com/dbhavery/control-evidence-review
Text-to-CAD with self-correction

Problem. Making a printable part normally takes CAD skills.

How it solves it. A plain-English description goes to a model that writes OpenSCAD. Compile, export and optional local vision checks send failures back to the model to repair.

Who it helps. Makers who need a simple part without learning CAD.

Technical. Python. Local by default through Ollama; Claude and Codex backends are optional.

github.com/dbhavery/textcad
Weather and situational-awareness globe

Problem. Weather, warnings, quakes, fires, aircraft, ships and satellites live in separate apps.

How it solves it. It shows all of them on one 3D globe. Keyless public feeds run inside the app, so there is no account and no server to pay for.

Who it helps. Anyone who tracks weather and events in one view.

Technical. TypeScript, Cesium. Android, web and desktop.

github.com/dbhavery/graticule
Research paper: reference-relative believability

Problem. Avatar quality is usually judged against a generic standard, which does not match what the task needs.

How it solves it. The paper judges photoreal avatars against the reference the task implies and sets out the identity-contract design that follows from it.

Who it helps. Teams building and evaluating AI-generated people.

Technical. Archived on Zenodo, DOI 10.5281/zenodo.21138188.

github.com/dbhavery/reference-relative-believability

Private work, described.

These repositories are private. Each is described here by what it does, and a walkthrough is available on request.

Production customer-service agent
Live on a small-business site with Stripe checkout. Quotes only prices a tool returned, guards every reply, hands off to a person with a reason code, and is graded by a 103-scenario live evaluation. Read the case study.
Local voice assistant
Speaks a stored answer word for word, with no model call, when retrieval confidence is high. In the middle band a small local model writes the answer from the retrieved entries. Below the floor it hands off with a fixed line and never invents an answer.
CDL knowledge base
A corpus covering 51 jurisdictions in which every claim is pinned to a primary source and gaps are marked as unverified. It feeds truckingtutor.com.
Research pipeline
Two collection passes a day write to one shared pool, and every downstream job reads the pool instead of researching again. A collector can fail without stopping the others.

In progress.

Built and public, but not finished.

CDL classroom course
One lesson a day for a year, each lesson tied to the regulation it comes from. The syllabus is live; the lesson videos are in production. truckingtutor.com.
Fuel-delivery operations demo

Problem. An on-site fuel-delivery service needs separate screens for customers, drivers, franchise owners and headquarters.

How it solves it. A static marketing site and a clickable demo of each role’s screens. All demo data is sample data.

Who it helps. Founders and investors evaluating the service design.

Technical. Static site. Demo at stafull.com.

github.com/dbhavery/stafull
Local-first assistant with a policy gate

Problem. A desktop assistant that can act on a computer needs a place where every action is checked and recorded.

How it solves it. Each action passes a policy gate that returns allow, ask, deny or draft-only, and every decision goes to a hash-chained, signed audit log. The Rust policy engine is built; the older Python voice tree is not yet routed through the gate.

Who it helps. People who want an assistant that runs on their computer and asks before it acts.

Technical. Rust and Python. Local models through Ollama.

github.com/dbhavery/aether