Skip to content
Simulation · not operational100% synthetic data · the demos’ human decisions were simulated in batch
planlang

Demo B · what travels to the personal showcase

The records: repeat it, and tell it in two minutes

One record for whoever wants to repeat the run and check the report; two for whoever visits the hoja-de-vida showcase and wants to know in two minutes what planlang is and what its agent does.

The records at a glance

Read as

Reading as leader. You see the three records as each reader will.

Reading as expert. You also get the steps to repeat the run and, under each showcase record, where each figure comes from and the check of every field against the v1.3.1 contract.

Takes

  • done
    The plan, the run and the reportwith their fingerprints
  • done
    The product visionfor the groups of the app's record
  • done
    The v1.3.1 technical-record contractfrom hoja-de-vida: blocks, limits and rules

Does

  1. 1
    Gathers versions, fingerprints, seed, model and date
    done
  2. 2
    Writes each record for its reader, in Spanish and in English
    done
  3. 3
    Gives every figure its source: measured, calculated or declared
    done
  4. 4
    Checks every field against the contract's limits
    done

Delivers

  • The reproducibility recordlives in planlang: here and in section 9 of Gap
  • brochure-export.jsonthe app's facts, from which hoja-de-vida builds its record
  • planlang-demo-b.ficha-tecnica.jsonagent B's record, for the Agents front
  • No linkthey travel to hoja-de-vida by copy, in a content PR

1Reproducibility record

real · run v1.0

Everything it takes to get this same report again, byte for byte: versions, fingerprints, seed, model and date. No links: the fingerprints are enough to check that a file is what it claims to be.

Reproducibility record · demo B

real · run v1.0
Plan
plan-demo-b 1.1.0 · 30728d949db2731d6a84d5e7f6191c03fcc49fdc702823e20dd3149648bc5910
Plan it ran with
plan-demo-b 1.0.0 · 0cd6590ccbbb611091bf7acbd369874aa33fc7df95474c8c16f0f0beb9bb86dd
Cases
planlang-b-001-20 · seed planlang-b-001 · n = 20 · e021e2abc585fa2fd120a124545872ce7ee7e43667a96349c9aec30c2b0feed8
Generator
recipe estandar · version 1.0.0 · adversarial 2 · edge case 3 · missing data 3 · normal 12
Run
suscripcion-planlang-b-001-20 · 2026-10-04 · subscription / sonnet · multi-agent · 112ccac9cf602829267257782355a8c2023f965781545d1b23a558825ff5fa99
Compiled graph
7b986ef8f5016f4cc87c9c592cb4994b2b4b984dd79e8e2872651a1885783214
Baseline
suscripcion-planlang-b-001-20-base-v2 · b4c91ee3933db445a763e6fd4ead18c91b9a54a565393247612661cbe43d7be7
Environment
Python 3.12.14 · langchain 1.4.2 · langgraph 1.2.12 · langchain-core 1.6.5 · langsmith 0.14.1 · pydantic 2.13.5 · Claude Code 2.1.282 · Darwin
Execution
1 session · 20 cases · 0 provider errors · 0 usage limits
Applied thresholds
U1 0.85 · U2 60 · U3 0 · U4 0.70 — the plan’s
Human review
In batches, the simulated officer follows the case’s known truth (DA-04); the showcase discloses it.
Verifier
1.3.0 · planlang-informe/v1
The report’s fingerprint
4705b3f3d49c8c4c53590a6845620ad25c76bcff26a595125bc1050c2fee1411

Expert

How to repeat it, in order

  1. 1pnpm plan:validar --verificar plans/demo-b/v1.1.json validates the plan and checks its fingerprint
  2. 2pnpm casos:generar --versionados --demo b regenerates the cases from the seed; the fingerprint must match
  3. 3pnpm lote:demo-b --plan plans/demo-b/v1.json --casos data/casos/demo-b/planlang-b-001-20.json runs the batch on the author's machine, outside CI, with their subscription
  4. 4pnpm trazas:verificar checks fingerprints, applied thresholds and RF-09.2
  5. 5pnpm brecha:informe --corrida runs/demo-b/suscripcion-planlang-b-001-20 --plan plans/demo-b/v1.1.json --base runs/demo-b/suscripcion-planlang-b-001-20-base-v2 --salida data/vitrina/demo-b/suscripcion-planlang-b-001-20 --verificar redoes the report and compares it with the published one: it comes out identical byte for byte

Repository scripts. Only the batch needs the model; everything else is deterministic and runs the same on any machine.

2The app's record

for the showcase's Apps front

planlang · this is how hoja-de-vida paints it, in CV Viva's skinplanlang.ficha-tecnica.json · technical-record contract v1.3.1

The showcase · Technical sheet

  • Unsealed
  • H1
  • 4 sprints
  • v0.1.0
  • Data as of 2026-10-11

planlang

I planned, built and measured the gap.

  • Next.js static export: the showcase: seven screens in Spanish and English, no server
  • Strict TypeScript: the deterministic core: plan, verifier, playground and viewer, the same in Node and in the browser
  • Python 3.12 · LangGraph 1.2: both demos' agents, with the human pause as an interrupt
  • Claude Code by subscription: the agents' model, in batches outside CI; never in the core or the showcase
  • Canonical JSON + SHA-256: plans, cases, traces and reports with a fingerprint, checkable byte for byte
  • Vitest · Playwright · axe: the tests, including the edge cross-check between Python and TypeScript

What nobody else does

An agent's plan is written as a contract, and a verifier with no AI publishes, case by case, the gap between what was planned and what the agent did, with its failures in view.

  • 16

    criteria met across the plans of 2 demos, of 16

    measured (Demo A: 10 of 10, in verifier 1.3.0's report on run suscripcion-planlang-a-002-200-v1.5. Demo B: 6 of 6, in verifier 1.3.0's report on run suscripcion-planlang-b-001-20.)
  • 1,204

    decisions redone in another language, with 0 differences

    measured (RF-09.2 cross-check over 4 runs of 2 demos: the TypeScript edge interpreter redoes every decision Python recorded.)
  • 220

    synthetic cases with a known answer, across 2 demos

    measured (Demo A: 200 cases in run suscripcion-planlang-a-002-200-v1.5 and the single-agent baseline. Demo B: 20 cases in run suscripcion-planlang-b-001-20 and the single-agent baseline.)
  • 0

    model calls when visiting the showcase

    declared (Set by the architecture: the showcase is a static export with precomputed data; the package is tested without a single request outside its origin.)
  • 5.214US$

    nominal cost of running each demo once (220 cases)

    computed (Demo A: US$ 4.9206 for 200 cases. Demo B: US$ 0.293 for 20 cases. Sum of the nominal cost the CLI declares per call, over each run's traces; through the subscription it was not paid separately.)
01

Who it's for, and what it solves

The person before the technology.

Who it's for

For whoever plans, builds or approves an AI-agent project and today measures what the agent does without having written down first what it was supposed to do: they look at traces, run loose evaluations and decide by eye when a result is enough.

The promise

You write the plan as a contract —decisions, risks, assumptions, criteria and thresholds, each one measurable— and planlang uses it to build the agent, run it on cases with a known answer and publish the gap. Then you move a threshold and see what it would have cost.

02

What it has

6 groups · 20 features.

  • Plan

    4 features

    The plan as a contract: the interview, the templates, the validator and the builder's contract.

  • Run

    6 features

    Cases with a known truth, both demos and batch runs.

  • Measure

    5 features

    The gap verifier and assumptions measured for real.

  • Play

    1 feature

    Move the thresholds over the real traces.

  • Understand

    1 feature

    The real graph, node by node, against the plan.

  • Show

    3 features

    The bilingual showcase and its records.

03

Limits, and what it never does

What it chose not to be counts as much as what it is.

Limits, on purpose
  • It is a simulation: it handles no real cases and decides on no one.
  • The interviewer runs in the console, not in the showcase: here you see the plan it drafted for demo B, reviewed and approved by a person.
  • It measures what the plan declared; what it did not foresee shows up as a gap, not as a verdict.
Never
  • Uses real data: every case, member, physician, applicant and watchlist is synthetic.
  • Lets a model decide whether the agent got it right.
  • Denies or rejects a case without a person reviewing it.
  • Hides an unfavorable result.
04

Where it stands

The pinned version, not real time.

  1. H1cycle
  2. 4closed sprints
  3. —build closed
  4. v0.1.0repo version
  5. 16recorded decisions

In hoja-de-vida, the app's waiting list goes here, and it promises no date. Shown here; not handed over.

hoja-de-vida builds the app's record when it compiles: the facts come from docs/brochure-export.json and the curation (headline, featured figures, limits, never) from its complement. Here it is painted with the complement planlang proposes.

“How it works” does not appear: the app's record carries no process (optional in v1.3.1) and the section is renumbered. The blocks follow the six groups of the product vision.

Expert

What is delivered: docs/brochure-export.json

planlang delivers the export (brochure-export contract 1.0.0); with it and the complement, hoja-de-vida builds this record, checked here against technical-record contract v1.3.1. One file per language; the Spanish one is delivered.

Where each figure comes from

  • 16 criteria criteria met across the plans of 2 demos, of 16 · measuredDemo A: 10 of 10, in verifier 1.3.0's report on run suscripcion-planlang-a-002-200-v1.5. Demo B: 6 of 6, in verifier 1.3.0's report on run suscripcion-planlang-b-001-20.
  • 1,204 decisions decisions redone in another language, with 0 differences · measuredRF-09.2 cross-check over 4 runs of 2 demos: the TypeScript edge interpreter redoes every decision Python recorded.
  • 220 cases synthetic cases with a known answer, across 2 demos · measuredDemo A: 200 cases in run suscripcion-planlang-a-002-200-v1.5 and the single-agent baseline. Demo B: 20 cases in run suscripcion-planlang-b-001-20 and the single-agent baseline.
  • 0 calls model calls when visiting the showcase · declaredSet by the architecture: the showcase is a static export with precomputed data; the package is tested without a single request outside its origin.
  • 5.214 US$ nominal cost of running each demo once (220 cases) · computedDemo A: US$ 4.9206 for 200 cases. Demo B: US$ 0.293 for 20 cases. Sum of the nominal cost the CLI declares per call, over each run's traces; through the subscription it was not paid separately.
tagline (es · en)Measure34 · 38Limit≤ 80StatusFits
titular (es · en)Measure174 · 176Limit≤ 240StatusFits
para_quien (es · en)Measure223 · 244Limit≤ 400StatusFits
intro (es · en)Measure265 · 267Limit≤ 400StatusFits
stack[]Measure6Limit1–8StatusFits
cifras[] · fuenteMeasure5 · 5Limit3–5 · allStatusFits
bloques[]Measure6Limit2–10StatusFits
limites[] · nunca[]Measure3 · 4Limit2–4 · 2–5StatusFits
hitos[]Measure5Limit3–5StatusFits
linksMeasure0Limit0StatusFits

FitsThe whole record validates against the schema and the process rules.

3Agent B's record

for the showcase's Agents front

Agent B · due-diligence onboarding · this is how hoja-de-vida paints it, in CV Viva's skinplanlang-demo-b.ficha-tecnica.json · technical-record contract v1.3.1

The showcase · Technical sheet

  • Unsealed
  • H1
  • 4 sprints
  • v1.1.0
  • Data as of 2026-10-04

Agent B · due-diligence onboarding

Approves the clean ones; every match, high score or rejection goes to a person.

  • LangGraph 1.2: the agent's graph: typed state, conditional edges and the officer's pause with interrupt
  • LangChain 1.4: the model adapter and schema-bound structured output
  • Python 3.12: the nodes, the guards, the name similarity and the trace exporter
  • Claude Code · sonnet: extracts the documents and investigates the gray zone; the official binary, through the author's subscription
  • Deterministic rules: lists, score, file and guards, no model
  • planlang-trace/v1: the traces' own format, with a fingerprint; the only thing the verifier reads

What nobody else does

An onboarding agent whose plan came out of an interview and is verified case by case: no list match and no rejection goes out without a person, and every conclusion in the file cites its rule.

  • 100%

    extraction accuracy, one run

    measured (Plan B's criterion C5, measured by the verifier: the fields extracted from the three documents are the known truth's in all 20 cases, in a single run.)
  • 11

    of 20 cases went through the officer

    measured (Human pauses recorded in the traces: the officer saw the documents, the matches, the investigation and the score before deciding.)
  • 0

    list matches without a person

    measured (Plan B's criterion C1 over the 5 cases that are on a list: every one went through the officer.)
  • 0

    rejections without a person

    measured (Plan B's criterion C2 over 20 cases: every rejection, and every approval at high risk, went through the officer.)
  • 0.015US$

    nominal cost per case

    computed (US$ 0.293 for the run over 20 cases: the nominal cost the CLI declares per call, summed over the traces. Through the subscription it was not paid separately.)
01

Who it's for, and what it solves

The person before the technology.

Who it's for

For a financial institution —a synthetic one— that onboards customers with due diligence: today an analyst checks every name against the control lists by hand, cannot tell which alarms were namesakes and leaves no written reason for each decision.

The promise

The agent reads the application's three documents, checks the name against the lists, investigates the context from the start of the gray zone and scores the risk with rules that ignore the name; it approves only the clean ones, brings the rest to the officer with the evidence and leaves a file that cites the rule or match behind each conclusion.

02

How it works

The process in BPMN: one lane per actor, the decision where it is made, and the loop in plain sight.

One onboarding application

Here CV Viva draws the diagram with its BPMN engine, from these steps and flows. This preview does not draw it: it shows what the record hands over, lane by lane and in reading order.

Applicant
  1. step 1start: An application
  2. step 2Hands in three documents
  3. step 13Receives the reply
  4. step 14end
The agent
  1. step 3Looks for hidden instructions
  2. step 4Extracts the fields
  3. step 5Checks the name against the lists
  4. step 6decision: Similarity from the gray zone up?
  5. step 7Compares the context
  6. step 8Scores the risk without the name
  7. step 9decision: To the officer?
  8. step 11Builds the file with its citations
  9. step 12The guard filters the output
Compliance officer
  1. step 10Reviews the full case and decides
  1. step 10No rejection and no list match goes out without the officer; in this demo, the officer was simulated in batch.
  2. step 7The investigator concludes, it does not decide: if it says “same person”, the case goes to the officer.
  3. step 12A document never decides which action runs.

Process declared by the app itself in its export.

03

What it has

9 groups.

  • Input guard

    Flags instructions hidden in the documents before any model reads them.

  • Extractor

    Turns the three documents into fields, with the catalog codes.

  • List checker

    Checks the name against the lists, exactly and approximately, no model.

  • Context investigator

    From the start of the gray zone: a namesake or the same person? It concludes, it does not decide.

  • Risk score

    Declared rules on activity, funds and income; the name does not count.

  • Decision

    The rules written in the plan decide whether the case goes to the officer.

  • Human pause

    The compliance officer sees the full case before deciding.

  • File

    Every conclusion with its citation, the reply and, on a rejection, its document.

  • Output guard

    Fixed rules: no applicant data, no action off the list.

04

Limits, and what it never does

What it chose not to be counts as much as what it is.

Limits, on purpose
  • It decides on synthetic cases: it is a demonstration, not a service.
  • Its compliance officer was simulated following the known truth, in 20-case batches outside CI with breaks between them.
  • Its plan declares no officer minutes per case: cases are counted, not minutes.
  • In the 200-case batch (a record), B-180 was approved without the officer: the extractor misread the funds' jurisdiction and the score could not see it.
Never
  • Rejects without a person reviewing it.
  • Approves on its own someone who matches a list.
  • Uses the name or nationality to score the risk.
  • Lets a document change what it does.
  • Writes a conclusion without citing its rule or match.
05

Where it stands

The pinned version, not real time.

  1. v1.1plan version
  2. 2026-10-04published run
  3. 9 of 9contract pieces
  4. 80verified decisions

Shown here; not handed over.

Expert

What is delivered: content/agentes/planlang-demo-b.ficha-tecnica.json

Checked against hoja-de-vida's technical-record contract v1.3.1. One file per language: the contract takes the record in one language; the Spanish one is delivered.

Where each figure comes from

  • 100% extraction accuracy, one run · measuredPlan B's criterion C5, measured by the verifier: the fields extracted from the three documents are the known truth's in all 20 cases, in a single run.
  • 11 of 20 cases went through the officer · measuredHuman pauses recorded in the traces: the officer saw the documents, the matches, the investigation and the score before deciding.
  • 0 list matches without a person · measuredPlan B's criterion C1 over the 5 cases that are on a list: every one went through the officer.
  • 0 rejections without a person · measuredPlan B's criterion C2 over 20 cases: every rejection, and every approval at high risk, went through the officer.
  • 0.015 US$ nominal cost per case · computedUS$ 0.293 for the run over 20 cases: the nominal cost the CLI declares per call, summed over the traces. Through the subscription it was not paid separately.
tagline (es · en)Measure78 · 79Limit≤ 80StatusFits
titular (es · en)Measure206 · 192Limit≤ 240StatusFits
para_quien (es · en)Measure223 · 247Limit≤ 400StatusFits
intro (es · en)Measure334 · 348Limit≤ 400StatusFits
stack[]Measure6Limit1–8StatusFits
cifras[] · fuenteMeasure5 · 5Limit3–5 · allStatusFits
bloques[]Measure9Limit2–10StatusFits
limites[] · nunca[]Measure4 · 5Limit2–4 · 2–5StatusFits
hitos[]Measure4Limit3–5StatusFits
proceso.pasos[].textoMeasure34Limit≤ 60StatusFits
proceso.carriles[]Measure3Limit1–5StatusFits
linksMeasure0Limit0StatusFits

FitsThe whole record validates against the schema and the process rules.