The Agentic Bank

Plainspeak

⬡ Disclosure Agent Consumer lending

Renders the consumer notice grounded only in the decision and the bank's disclosure profile (no fabricated creditor or CRA), validated before it commits.

The last automated step before a document reaches the applicant: the adverse-action notice for a decline / counteroffer, or the TILA / Reg Z disclosures for an approval.

How it runs
Plainspeak agent anatomy Plainspeak: system prompt and case context flow through the model plane into the agent core, which calls 3 sandboxed in-process tools across the tool plane, then commits a schema-validated outcome to the case journal across the data plane. The three governance seams are highlighted. system prompt + case context methodology · risk posture · the case model plane Plainspeak Claude Sonnet · ≤26 turns sandboxed · no built-in tools tools 3 in-process MCP tools 2 read · 1 commit 12 CFR 1002 / 1026 tool plane record_disclosure() Disclosure · schema-validated structured outcome, type-checked invalid output is rejected data plane case journal gated mock · nothing real is committed governance seam — where a layer would inspect, redact, or block (shown ungoverned)

Methodology

  1. 1 Pick the notice: an ECOA / Reg B adverse-action notice for a decline or counteroffer; TILA / Reg Z cost-of-credit disclosures for an approval.
  2. 2 Retrieve the controlling section before citing it (Reg B 1002.9, or Reg Z 1026.18 for auto / 1026.6 + 1026.60 for cards).
  3. 3 For adverse action: state the action and the specific principal reasons, the ECOA anti-discrimination notice with the enforcement agency, and the FCRA notice with the CRA's name / address / phone, the right to a free report, and the score disclosure.
  4. 4 For an approval: disclose the TILA terms grounded in the decision (APR, finance charge, amount financed, payment schedule for auto; APR, line, fees for cards). Compute only from the decision's figures.
  5. 5 Validate completeness; list any gaps as issues; never record an incomplete notice.

Sandboxed tools

In-process MCP tools only. Built-in tools disabled, settingSources [], permissionMode bypassPermissions. The only ground truth is the tools.

retrieve_reg read 12 CFR 1002 / 1026

Retrieves the controlling section (Reg B 1002.9 / Reg Z 1026.18 / 1026.6 / 1026.60) to anchor the citation.

get_disclosure_profile read

The bank's standing creditor / CRA / enforcement-agency / score-range boilerplate.

record_disclosure commit

Commits the finished, validated notice. Called exactly once.

Outcome contract

The finished notice: its type, the full document text, the elements actually included, the regulatory citations, and the completeness validation.

the validated schema (Disclosure)
type Disclosure = {
  noticeType: "adverse-action" | "approval"
  document: string                 // the full notice text, ready to send
  requiredElements: string[]       // the elements actually included
  regulatoryBasis: string[]        // the citations anchored to
  validation: { complete: boolean, issues: string[] }
}

Grounding

real Reg B 1002.9 + Reg Z 1026 (TILA). The adverse-action notice content and the cost-of-credit disclosures, retrieved before being cited.
synthetic The disclosure profile. First Meridian Bank, Experian CRA, CFPB enforcement, the score range. The institutional fields a notice needs beyond the decision.

Governance seams

The three trust boundaries a runtime governance layer clamps onto. Shown here ungoverned, so you can see exactly what would be inspected, redacted, or blocked.

Model plane
context in

The Plainspeak methodology plus the decision, the principal reasons (on a denial), and the retrieved reg text + disclosure profile.

governor → Constrain every term to the decision and every institutional field to the profile.

Tool plane
rule + profile

The retrieve_reg and get_disclosure_profile calls that supply the citation and the creditor / CRA fields.

governor → Require the reg lookup and the profile before a notice can be drafted.

Data plane
the commit

The validated notice written to the case journal. A gated mock: nothing is sent to an applicant.

governor → Block an incomplete notice; require the completeness validation to pass.

Plainspeak grounds every term in the decision and every institutional field in the disclosure profile, so it never fabricates a creditor or a credit bureau. It validates the notice for completeness before recording; an incomplete notice does not commit.

Evals & guardrails

3 / 3 golden Graded by a claude -p judge on completeness and grounding, against the disclosure profile as ground truth.
  • Adverse-action notice. Includes the specific reasons, the ECOA notice, and the FCRA / CRA disclosure with the score.
  • No fabrication. Names the creditor and CRA from the profile rather than inventing them.
  • Approval disclosures. Discloses the TILA terms computed only from the decision's figures.

Orchestration

Specialist pipeline terminal
  • Fed by the decision (+ Grounds' reasons on a denial)
  • Output is the consumer-facing document
Spec card
The building view, on its desk →
Run it live · local
Watch a real run in the console →