IOU Financial · External Design System

Teaching an AI agent when to stop

Role
Sole product designer
Scope
Loan application design system and AI evaluation
Status
Internal evaluation; system updates ongoing

Teaching an AI agent when to stop

Role
Sole product designer
Scope
Loan application design system and AI evaluation
Status
Internal evaluation; system updates ongoing

Overview

I turned loan-application design decisions into agent instructions and tests.

As IOU Financial’s sole product designer, I built the customer-facing system behind our loan application. I created the screens and states in Figma, then built the coded components in Lookbook, our component preview library. Some product decisions still depended on what I knew from designing the product. To make those decisions usable beyond me, I brought the tokens, components, and screen recipes into a markdown pack. A companion skill told the agent to read it first, build from the system, and ask when a request was not covered.

I was testing whether the system was legible or just documented. Documented means it exists on paper. Legible means someone, or something, else can build from it correctly and knows to stop when they can't. The test was how I found the difference.

FigmaLookbook→Design decisions
Design system packMarkdown
01
02
03
04
Agent instruction/iou-direct-design-systemRead the pack, build from it, ask when it has no answer.
Evaluation8 fresh tasksChallenge the rules and an undefined product step.
I designed the screens in Figma and built their coded components in Lookbook. The markdown pack carried the rules; the skill directed the agent to read it, and eight fresh-session tasks tested the result.

The Failure

On an undefined lending step, the agent built a convincing screen and invented authorization copy.

I asked for an income-verification step, which did not exist in the pack. The agent generated fields, dollar amounts, and the line “By continuing you agree to IOU Direct's Terms of Service and Privacy Policy.” It disclosed its assumptions only after building. This was an internal test, not an applicant-facing screen, but the risk was concrete: the output looked plausible while making product and authorization decisions nobody had approved.

Evaluation request · T8AI agent
recorded output · InventedFailed
First failed T8 generated income-verification screen
01 / Invented fieldsInputs for a step the system had never defined.
02 / Invented amountsSpecific dollar values with no approved source.
03 / Invented authorization copy
“By continuing you agree to IOU Direct's Terms of Service and Privacy Policy.”
Assumptions were disclosed only after the screen was built.
Internal test output. The authorization line is quoted from the recorded result. No generated income-verification screen was shown to applicants.

The Test

37 of 38 assertions passed. The one failure was the agent’s decision to build a step the system had not defined.

I locked the scoring assertions before reviewing output and ran eight tasks, each in a fresh session. I scored the rendered screens and generated code rather than the agent’s account of its work. Seven tasks tested documented screens and rules; the eighth tested whether it would stop at a missing product step.

All 12 original design-decision rules held on their scored exposures. The review also found four documentation gaps: desktop layout dimensions, a radio indicator color, an error-helper token, and rejection-screen positioning. The failed assertion was different. The agent had followed the visual system while inventing what the product should contain.

Scored assertionsrendered UI + generated code
Failed assertionProduct coverage
EXPECTEDAsk before creating an undefined step.
OBSERVEDA new income-verification screen was built.

The test checked whether the agent knew when to stop, not just whether it could produce UI.

The highlighted mark is the failed product-coverage assertion; the other marks are the remaining scored assertions.

What Finally Worked

Stronger instructions still let the agent invent. Defining which product steps existed made it stop.

I first strengthened the skill’s instruction to ask before inventing. Then I ran the income-verification request again. The three outputs below show why that wording change failed and what finally closed the gap.

evaluation requestAI agent
First run · Original guidancesummary
Form recipeThe pack described the form shell: progress, card, labeled inputs, action row, and security note. Income verification had no step recipe.
Old rule“if the pack doesn't cover something, ask, do not invent a value.”
recorded output · InventedFailed

The agent built the undefined step, including fields, amounts, and authorization copy.

Actual generated evaluation output
Internal evaluation. The recorded agent response was longer and is excerpted here. No generated income-verification screen was shown to applicants.

Rule in Practice

The same test showed that a specific design decision could travel from the product into generated code.

An invalid business tax ID still needs to look invalid when someone reaches the field with a keyboard. I defined the red error border and separate blue focus ring in Figma, implemented the state in Lookbook, and documented a rule with a clear fail condition. The generated screen preserved both signals. The test also revealed that the error-helper-text color had no named token; I added one to the pack and verified its use in the rerun.

One decision, four sourcesbusiness tax ID · keyboard focus
Rule in plain language
Annotated state · illustration
Business tax ID
Red border: errorBlue ring: focus
01 · Figma
01 · Figma recorded evidence
02 · Lookbook
02 · Lookbook recorded evidence
03 · Rule R4
03 · Rule R4 recorded evidence
04 · Agent output
04 · Agent output recorded evidence
Gap closed: Named the error-helper-text color in the pack and verified its use on rerun.

Reflection

What I learned

Visual consistency can hide a product mistake.

The agent produced a plausible form while making decisions nobody had approved. The pack needed to say where its authority ended, as clearly as it described how a screen should look.

Evaluating the agent also audited the system.

Comparing generated work with Figma, Lookbook, and the pack exposed missing rules and drift between sources. Each finding needed a source update and a rerun.

Team use is the next test.

I proposed a path for missing steps: product and design decide whether the step belongs, design defines its behavior, authorization copy receives appropriate compliance review, and the step enters the pack and tests. This is a proposal, not an adopted IOU process.

Overview

I turned loan-application design decisions into agent instructions and tests.

As IOU Financial’s sole product designer, I built the customer-facing system behind our loan application. I created the screens and states in Figma, then built the coded components in Lookbook, our component preview library. Some product decisions still depended on what I knew from designing the product. To make those decisions usable beyond me, I brought the tokens, components, and screen recipes into a markdown pack. A companion skill told the agent to read it first, build from the system, and ask when a request was not covered.

I was testing whether the system was legible or just documented. Documented means it exists on paper. Legible means someone, or something, else can build from it correctly and knows to stop when they can't. The test was how I found the difference.

FigmaLookbook→Design decisions
Design system packMarkdown
01
02
03
04
Agent instruction/iou-direct-design-systemRead the pack, build from it, ask when it has no answer.
Evaluation8 fresh tasksChallenge the rules and an undefined product step.
I designed the screens in Figma and built their coded components in Lookbook. The markdown pack carried the rules; the skill directed the agent to read it, and eight fresh-session tasks tested the result.

The Failure

On an undefined lending step, the agent built a convincing screen and invented authorization copy.

I asked for an income-verification step, which did not exist in the pack. The agent generated fields, dollar amounts, and the line “By continuing you agree to IOU Direct's Terms of Service and Privacy Policy.” It disclosed its assumptions only after building. This was an internal test, not an applicant-facing screen, but the risk was concrete: the output looked plausible while making product and authorization decisions nobody had approved.

Evaluation request · T8AI agent
recorded output · InventedFailed
First failed T8 generated income-verification screen
01 / Invented fieldsInputs for a step the system had never defined.
02 / Invented amountsSpecific dollar values with no approved source.
03 / Invented authorization copy
“By continuing you agree to IOU Direct's Terms of Service and Privacy Policy.”
Assumptions were disclosed only after the screen was built.
Internal test output. The authorization line is quoted from the recorded result. No generated income-verification screen was shown to applicants.

The Test

37 of 38 assertions passed. The one failure was the agent’s decision to build a step the system had not defined.

I locked the scoring assertions before reviewing output and ran eight tasks, each in a fresh session. I scored the rendered screens and generated code rather than the agent’s account of its work. Seven tasks tested documented screens and rules; the eighth tested whether it would stop at a missing product step.

All 12 original design-decision rules held on their scored exposures. The review also found four documentation gaps: desktop layout dimensions, a radio indicator color, an error-helper token, and rejection-screen positioning. The failed assertion was different. The agent had followed the visual system while inventing what the product should contain.

Scored assertionsrendered UI + generated code
Failed assertionProduct coverage
EXPECTEDAsk before creating an undefined step.
OBSERVEDA new income-verification screen was built.

The test checked whether the agent knew when to stop, not just whether it could produce UI.

The highlighted mark is the failed product-coverage assertion; the other marks are the remaining scored assertions.

What Finally Worked

Stronger instructions still let the agent invent. Defining which product steps existed made it stop.

I first strengthened the skill’s instruction to ask before inventing. Then I ran the income-verification request again. The three outputs below show why that wording change failed and what finally closed the gap.

evaluation requestAI agent
First run · Original guidancesummary
Form recipeThe pack described the form shell: progress, card, labeled inputs, action row, and security note. Income verification had no step recipe.
Old rule“if the pack doesn't cover something, ask, do not invent a value.”
recorded output · InventedFailed

The agent built the undefined step, including fields, amounts, and authorization copy.

Actual generated evaluation output
Internal evaluation. The recorded agent response was longer and is excerpted here. No generated income-verification screen was shown to applicants.

Rule in Practice

The same test showed that a specific design decision could travel from the product into generated code.

An invalid business tax ID still needs to look invalid when someone reaches the field with a keyboard. I defined the red error border and separate blue focus ring in Figma, implemented the state in Lookbook, and documented a rule with a clear fail condition. The generated screen preserved both signals. The test also revealed that the error-helper-text color had no named token; I added one to the pack and verified its use in the rerun.

One decision, four sourcesbusiness tax ID · keyboard focus
Rule in plain language
Annotated state · illustration
Business tax ID
Red border: errorBlue ring: focus
01 · Figma
01 · Figma recorded evidence
02 · Lookbook
02 · Lookbook recorded evidence
03 · Rule R4
03 · Rule R4 recorded evidence
04 · Agent output
04 · Agent output recorded evidence
Gap closed: Named the error-helper-text color in the pack and verified its use on rerun.

Reflection

What I learned

Visual consistency can hide a product mistake.

The agent produced a plausible form while making decisions nobody had approved. The pack needed to say where its authority ended, as clearly as it described how a screen should look.

Evaluating the agent also audited the system.

Comparing generated work with Figma, Lookbook, and the pack exposed missing rules and drift between sources. Each finding needed a source update and a rerun.

Team use is the next test.

I proposed a path for missing steps: product and design decide whether the step belongs, design defines its behavior, authorization copy receives appropriate compliance review, and the step enters the pack and tests. This is a proposal, not an adopted IOU process.

Desktop-first · How Zing ended

mobile-first · How IOU ends

You’re Ready to Submit!

Your application is complete and ready for final review.

PRE-QUALIFICATION AMOUNT

$100,000

Estimated based on your business revenue.

Final offer may vary after bank verification

Business Name:

ABC Company LLC

Loan Purpose:

Equipment Purchase

Identity verified

Credit check completed

Bank account connected

I certify that the information provided in this application is true and accurate, and I consent to electronically sign and submit this application.

I agree to receive marketing communications, product updates, and special offers from IOU Financial.

You can unsubscribe anytime

Previous

Submit Application

Your information is protected with bank-level encryption

Final Step

100%

Desktop-first · How Zing ended

mobile-first · How IOU ends

You’re Ready to Submit!

Your application is complete and ready for final review.

PRE-QUALIFICATION AMOUNT

$100,000

Estimated based on your business revenue.

Final offer may vary after bank verification

Business Name:

ABC Company LLC

Loan Purpose:

Equipment Purchase

Identity verified

Credit check completed

Bank account connected

I certify that the information provided in this application is true and accurate, and I consent to electronically sign and submit this application.

I agree to receive marketing communications, product updates, and special offers from IOU Financial.

You can unsubscribe anytime

Previous

Submit Application

Your information is protected with bank-level encryption

Final Step

100%

COLOR

Emerald

emerald/700

#002115

emerald/600

#00543b

emerald/500

#117d4b

emerald/300

#88c59a

emerald/200

#cee7d5

emerald/100

#e9f3ea

emerald/50

#f9fdf9

Neutral

neutral/1000

#151413

neutral/800

#3f3d3a

neutral/700

#7d7a74

neutral/500

#d1ccc2

neutral/300

#e3e0da

neutral/100

#f6f5f3

neutral/000

#ffffff

Accent & feedback

green/500

#2bc947

feedback/error

#c82659

feedback/warning

#f45703

feedback/info

#124bd5

TYPOGRAPHY — OUTFIT

Title

32 / Medium / 36 line-height · emerald/700

Get started with your application

Subtext

17 / Regular / 24 line-height · neutral/1000

A few quick questions to see how much you qualify for.

SNIPPET OF COMPONENTS

Input fields — mobile

Default

Label

Enter your details

Focus

Label

Text Input

Error

Label

Text Input

Please enter a valid value

Password

Label

Create a password

Disabled

Label

Enter your details

Buttons — mobile

Contained · Emerald

Button

Contained · Green

Button

Outlined · Neutral

Button

Outlined · Emerald

Button

Outlined · Green

Button

Outlined · Pink

Button

SNIPPET OF DOCUMENTATION - BUTTONS

Mobile vs Desktop

Same button. On mobile it fills the screen width; on desktop it fills its (wider) container. Set an instance to Fill to get full-width — the button stretches to its parent.

Mobile

Continue

Desktop

Continue

Usage

• Contained for the primary action; Outlined for secondary. • Green = a distinct high-emphasis action (Submit). • Pink/error only for destructive. • Neutral is the quiet/tertiary choice. • Disabled drops the whole button to 40% opacity. • One button per view carries the primary emphasis.

In context

Button color is chosen by the surface it sits on. Emerald (#117D4B) is the primary action on light surfaces — cards, white backgrounds. Bright green (#2BC947) is used on the dark emerald page (#002115), where it pops. Green is never used as the primary on white.

Light surface (#F9FDF9) → Emerald

Continue

Dark card (#002115) → Green

Submit Application

COLOR

Emerald

emerald/700

#002115

emerald/600

#00543b

emerald/500

#117d4b

emerald/300

#88c59a

emerald/200

#cee7d5

emerald/100

#e9f3ea

emerald/50

#f9fdf9

Neutral

neutral/1000

#151413

neutral/800

#3f3d3a

neutral/700

#7d7a74

neutral/500

#d1ccc2

neutral/300

#e3e0da

neutral/100

#f6f5f3

neutral/000

#ffffff

Accent & feedback

green/500

#2bc947

feedback/error

#c82659

feedback/warning

#f45703

feedback/info

#124bd5

TYPOGRAPHY — OUTFIT

Title

32 / Medium / 36 line-height · emerald/700

Get started with your application

Subtext

17 / Regular / 24 line-height · neutral/1000

A few quick questions to see how much you qualify for.

SNIPPET OF COMPONENTS

Input fields — mobile

Default

Label

Enter your details

Focus

Label

Text Input

Error

Label

Text Input

Please enter a valid value

Password

Label

Create a password

Disabled

Label

Enter your details

Buttons — mobile

Contained · Emerald

Button

Contained · Green

Button

Outlined · Neutral

Button

Outlined · Emerald

Button

Outlined · Green

Button

Outlined · Pink

Button

SNIPPET OF DOCUMENTATION - BUTTONS

Mobile vs Desktop

Same button. On mobile it fills the screen width; on desktop it fills its (wider) container. Set an instance to Fill to get full-width — the button stretches to its parent.

Mobile

Continue

Desktop

Continue

Usage

• Contained for the primary action; Outlined for secondary. • Green = a distinct high-emphasis action (Submit). • Pink/error only for destructive. • Neutral is the quiet/tertiary choice. • Disabled drops the whole button to 40% opacity. • One button per view carries the primary emphasis.

In context

Button color is chosen by the surface it sits on. Emerald (#117D4B) is the primary action on light surfaces — cards, white backgrounds. Bright green (#2BC947) is used on the dark emerald page (#002115), where it pops. Green is never used as the primary on white.

Light surface (#F9FDF9) → Emerald

Continue

Dark card (#002115) → Green

Submit Application