Overall, Best Financial AI Agent, Best Identity/Fraud, and Most Unexpected
CRS is how the credit analyst decides, and how it stops a synthetic identity
The credit desk's analyst agent runs seven CRS checks on every applicant's guarantor before it may set terms: TransUnion, Equifax and Experian reports, TransUnion identity verification, Fraud Finder, PitchPoint public records and a reverse phone lookup. The box enforces it: the decision tool refuses to record anything until those checks have run in the same task, and every decision carries their request ids. The agent never holds the CRS login.
Proof APP-1043 has clean-looking numbers and a 640 score, and the simple rule approves it for $20,000. CRS, live: identity fails with codes 2201, 2202 and 2101, Fraud Finder scores it 88, nobody owns its phone, and 9 credit inquiries landed between Aug 19 and Sep 12. The analyst put it on fraud hold and the controller confirmed it. Every merge-gate run repeats this live.
What CRS asked for
From CRS's track description, as copied into the project's track plan (docs/tracks.md). CRS judges four prizes: Overall, Financial AI Agent, Identity/Fraud, and Unexpected.
CRS central, not bolted on.
MetCRS is the analyst's main source. Rule CHK-1 says no terms before the CRS checks, and the
credit-desk.credit_decisiontool enforces it: it refuses a decision on an application whose seven checks have not run in the same task. Bands come from the lowest bureau score, fraud stops from identity codes and the Fraud Finder score.Live against the sandbox.
MetEvery
./demorun calls the CRS sandbox live. On Oct 23 all six applicants were checked live (42 calls) and every answer matched its CRS persona. Recorded answers are used only if CRS cannot be reached, and the result says which source answered.Useful.
MetThree of the case's 14 planted errors rest on CRS answers: the synthetic identity (APP-1043), a lien and a judgment the applicant denied (APP-1044), and three bureaus that disagree (APP-1045). The live Droid run
73c47bcaught all three, and the bureau scores set the band and limit on every application.Creative.
MetCRS runs as a tool inside an operating system for agents. The agent asks the box; the core logs in to CRS with keys from a root-only vault, makes the calls and returns a summary with each request id. A hijacked or confused agent cannot pull reports it was not asked to, or see the login.
Test identities only.
MetEvery applicant's guarantor is copied from one of CRS's 20 sandbox personas (
sandbox/crs-personas.json). The businesses around them are made up.Best Financial AI Agent.
MetThe analyst is an agent that does the work: runs the checks, compares them with the application, the business credit file and the bank, sets band, limit and terms by rule, and routes what it may not decide alone to the controller.
Best Identity/Fraud.
MetFraud stops are rules the tools hold the agent to: identity codes 2201, 2202 and 2301 (FRD-1), Fraud Finder 70 or more (FRD-2), and compound signals (FRD-4). A fraud hold stops every shipment and always goes to a person.
Most Unexpected.
MetCredit data as a guard for agents: the same box that stops a booby-trapped web page from stealing keys uses CRS to stop a fake customer from talking an AI desk into $20,000 of credit.
Screenshots



Open it yourself
- The CRS client and the seven checksOne login per box process; a failed login is never retried, because repeated failures disable the account.
- What the desk calls and how it reads CRS answersRoutes, bodies, how to read each answer, and the live results for every applicant.
- Raw CRS answers recorded on Oct 23
- The credit desk write-up (Hyphenate)The whole desk: the seats, the 14 planted errors, the scores.
- Docs: the credit desk app
Evidence
Live CRS results for the six applicants, Oct 23
Seven checks each, 42 calls, every result matched the persona the guarantor uses.
| Application | TransUnion / Equifax / Experian | Inquiries | Identity | Fraud Finder | Public records | Phone owner | Desk conclusion |
|---|---|---|---|---|---|---|---|
| APP-1041 | 770 / 770 / 770 | 2 | verified | 9 | none | the guarantor | Approve $8,000 Net 30 (analyst) |
| APP-1042 | 790 / 790 / 790 | 1 | verified | 11 | none | the guarantor | Propose $40,000; controller approves |
| APP-1043 | 640 / 640 / 640 | 9, Aug 19 to Sep 12 | fails: 2201, 2202, 2101 | 88: prepaid VoIP, owner does not match, email first seen Oct 15, IP over 1,000 miles away | none | no one | Fraud hold, though a simple rule approves $20,000 |
| APP-1044 | 690 / 690 / 690 | 2 | verified | 10 | $12,300 judgment, unsatisfied; $7,450 tax lien, unreleased | the guarantor | Band C, $7,500 Net 15; controller |
| APP-1045 | 760 / no file / 700 with one collection | 1 | verified | 11 | none | the guarantor | Band B, $15,000; controller |
| APP-1046 | 815 / 815 / 815 | 1 | verified | 9 | none | the guarantor | $21,000 on verified revenue; controller |
Every merge, live
From the Oct 24 merge-gate run on the x86 test VM:
track credit-desk
ok CRS (CRS sandbox, live): APP-1043's identity fails (2201, 2202, 2101) and its fraud score is 88
ok the fraud referral paused the analyst until the controller answers
ok the fraud hold is in the log with the controller's OK, its rule ids (FRD-1, FRD-2) and the 7 CRS request ids it rests on
ok the simple rule would have approved APP-1043 for $20,000 on the same CRS answers; the desk held it
ok no CRS or Nessie key is anywhere in the log
The decision the analyst recorded, live Droid run 73c47b
credit-desk.credit_decision APP-1043 outcome: fraud hold limit: 0
identity_codes: 2201 SSN_NOT_ASSOCIATED_WITH_NAME, 2202 DOB_MISMATCH, 2101 ADDRESS_MISMATCH
fraud_score: 88 phone_type: VoIP_prepaid phone_owner_match: false
email_first_seen: 2026-10-15 ip_distance_miles: >1000
crs_request_ids: transunion bdd5f423 equifax 97455d31 experian 2a171fe7 identity 303ddb55
fraud 428f0f74 public_records dbe01fb0 phone_owner 26510204
rules: FRD-1 FRD-2 FRD-3 FRD-4 FRR-1 FRR-2 FRR-3 GEN-1 CHK-1 CHK-3
approved_by: controller (scripted for the scored run)
Request ids are cut to 8 characters here; the log has them in full. In that run the analyst also found APP-1044's unsatisfied judgment and unreleased tax lien, which its application denied, and banded APP-1045 on its lowest bureau because Equifax returned no file.
How it works
- TaskThe analyst asks for the checks
credit-desk.crs {"application_id": "APP-1043"}, through the task's broker socket. - GurtOS coreThe tool logs in to CRSUsername and password from the root-only vault. One login per box process.
- OutsideSeven CRS callsThree bureau reports, identity, Fraud Finder, public records, phone owner.
- GurtOS coreA summary back to the agentScores, codes, signals and each call's request id, into the action log. Never the login.
- TaskThe analyst proposes a decisionBand, limit and terms by rule, or a fraud hold.
- GurtOS coreCHK-1 and the controller gateNo checks, no decision. A fraud hold waits for a person.
- YouThe controller confirmsOn the portal or a phone. The decision is logged with the request ids.
- Task
- its own Linux user, its own copy of the files, no keys
- GurtOS core
- the GurtOS service on the box, root, the only part that reads the vault
- Outside
- a service outside the box
- You
- a person, on the portal, a phone, Jira or a chat
| Check | CRS product and route |
|---|---|
| Credit report, each bureau | /transunion/credit-report/standard/tu-prequal-fico9, /equifax/credit-report/standard/efx-prequal-vantage4, /experian/credit-report/standard/exp-prequal-vantage4 |
| Identity | /transunion/identity-manager-verification/basic |
| Fraud | /fraud-finder/fraud-finder (name, phone, email, address and the IP the application came from) |
| Public records | /pp/fcrablj/data (PitchPoint bankruptcies, liens, judgments) |
| Phone owner | /accurate-append/reverse |
Responsible by rule. The desk pulls only on owners who signed a personal guarantee and a credit check consent. It pulls only what a trade-credit decision needs: no criminal or eviction searches (rule CHK-2). Only the controller sees a fraud referral, and the applicant is told "We need to verify some information before we can offer terms", never which check failed (rule FRR-3). The CRS client logs in once per box process and never retries a failed login.
Read carefully. Things the desk handles that CRS's sandbox does: credit reports return errors as HTTP 200, file
status says when a bureau has no file, Fraud Finder takes ipAddress (a field named ip is ignored), and a single
PitchPoint record comes back as an object rather than a list. sandbox/crs.md has the rest.
Try it
On a box with CRS_USERNAME and CRS_PASSWORD in its vault:
curl -s -X POST localhost:7700/t/credit-desk/run -d '{"case": "fogline-2026-10", "seats": ["analyst"]}'
Or run the seven checks on their own, as root on a test VM, from a copy of tracks/credit-desk:
sudo node sandbox/crs-check.ts /tmp/crs-out cases/fogline-2026-10
To try another CRS persona, copy an application, paste a guarantor from sandbox/crs-personas.json (P05 subprime,
P12 identity mismatch, P14 deceased SSN, P16 fraud alert), check it with check-case.ts, and run it with
{"dir": "/path/to/case"}.
Live, test and simulated
| Part | State | Details |
|---|---|---|
| CRS credit, identity, fraud, public records, phone owner | Live | The CRS sandbox, five products, called live in every ./demo run. |
| Identities | Test data | CRS's own sandbox personas only. No real person is pulled. |
| Business credit | Simulated | No sandbox route covers business credit, so the business file is made up and labeled "simulated": true. |
| Recorded answers | Simulated | Saved live answers from Oct 23, used only when CRS cannot be reached. The summary then says so. |
Limits
- The sandbox returns results only for its 20 personas, so every guarantor is one of them.
- Business credit is simulated until the sandbox has a route for it.
- The desk reads CRS answers as summaries (scores, codes, signals). Full reports stay in CRS's retention, reachable by request id.
- Questions we have for CRS are in
sandbox/crs.md, including one about every sandbox Experian tradeline carrying the same charge-off amount.