Credit underwriting agents with Credilinq.ai

Credilinq.ai needed a credit underwriting system that could automate complex assessment workflows, pull together multiple data sources, and make consistent risk decisions at scale. The hard part is that underwriting isn’t one decision. It’s a sequence of them, and each step depends on the one before.
Documents arrive in different formats: bank statements, tax returns, business filings. Each has to be parsed before it can be assessed. The financials are then checked against policy rules that change by product and risk band. Anything unusual has to reach a human reviewer with the reasoning attached, and every decision has to be explainable enough to defend later.
Why One Model Call Wasn’t Enough
A single model call can’t hold that whole process. Ask one prompt to parse a tax return, apply a credit policy, and justify a recommendation, and when it gets something wrong you can’t tell which part failed.
So we split the work the way an underwriting team would. We built a multi-agent module with an Orchestrator Agent at the centre, delegating to specialized sub-agents for document analysis, financial data extraction, risk scoring, and decision-making. Each agent does one job, which makes each job easier to get right and easier to check.
An Orchestrator That Knows Where Each File Goes
The orchestrator owns task delegation, state management, and the handoffs between stages. When a document set arrives, it works out the assessment stage, sends each document to the agent that handles its type, and collects the structured outputs the next step depends on.
Routing is dynamic, driven by document type and what the assessment requires rather than a fixed script. A bank statement and a business filing take different paths, because they need different handling.
Typed Handoffs, so Failures Show Up
Agents talk to each other through Pydantic models. Every handoff is a typed structure (parsed fields, extracted financials, risk signals, recommendations), much like a standard form passed between desks. If an agent returns something malformed, the pipeline catches it at the handoff, so failures are locatable instead of silent.
That typed record also answers the “why” question later. You can trace a decision back through what each agent produced.
From Evidence to a Recommendation
The Document Agent handles bank statements, tax returns, and business documents. The Risk Assessment Agent applies configurable credit policies and produces risk scores, so policy changes don’t mean rewriting the system. The Decision Agent turns the accumulated evidence into a final recommendation with explainable reasoning attached.
In short, we delivered:
- An Orchestrator Agent that delegates work based on the assessment stage.
- A Document Agent for bank statements, tax returns, and business documents.
- A Risk Assessment Agent for configurable credit policies and risk scores.
- A Decision Agent for final recommendations with explainable reasoning.
- Type-safe inter-agent communication with Pydantic schemas.
- Dynamic routing based on document type and assessment requirements.
The system is built in Python with DSPy, Pydantic, multi-agent systems, LLMs, OpenAI, and async workflows.