Employee Pattern Library
When AI agents write the UI, design owns the system that shapes it.
Generated UI now begins with the Home Lending Employee Pattern Library, shaped by the mistakes agents actually make. Replacing the layout API agents got wrong most often cut misuse from ~95% to near zero1, and the replacement held across three model generations2. Design ships the code every first-party employee platform imports.
The component API shapes generated UI before review begins.
A team asks an agent to build an employee workflow.
The API shapes the result before design or engineering reviews it.
Unity would bring every Home Lending employee product into one architecture. A shared design-system foundation had not made employee applications feel like one system, because each team decided for itself how the pieces fit together.
Three forces made a Home Lending layer necessary.
- 01The quality gap
Consumer products felt coherent. Employee tools looked like separate teams had designed them in isolation.
- 02Project Unity
Products that once lived apart enter one architecture. Cohesion becomes structural.
- 03A composable core
MDS supplies the foundation while product teams own more component-level decisions.
The necessityHome Lending needed one opinionated layer, decided once for every product entering Unity.
Product leadership wanted employee tools to match the quality of consumer products while retaining the denser workflows enterprise software requires. The inconsistency lived above individual components: teams used Chase Manhattan Design System (MDS), but each composed its parts differently. Home Lending needed an opinionated layer that made those decisions once for every product entering Unity.
I brought the employee design teams together to define that shared language. The library had no engineering team, so design also had to own the production package.
MDS gave product teams room to decide. Its APIs gave agents room to guess, and the guesses still compiled.
MDS intentionally leaves composition decisions to product teams. Its API names, event contracts, composition patterns, and defaults also differ from conventions common across other systems. Engineers learn those differences; agents default to the conventions in their training, producing code that looks finished while nesting parts incorrectly, doubling spacing, or applying the wrong default.
Four places MDS differed from common conventions.
| Difference | What the agent encountered | What commonly appeared instead1 |
|---|---|---|
| API naming | MDSMDS uses different prop names for similar ideas across components. | Instead1The agent reused the vocabulary it had seen most often. |
| Semantics | MDSMDS gives related events different contracts. | InsteadThe agent guessed at the boundary and produced plausible code. |
| Composition | MDSA simple card required several components and a spacing wrapper. | InsteadThe agent nested parts incorrectly and added spacing twice. |
| Defaults | MDSLayout centered content where common systems default to stretch. | InsteadThe agent generated the common behavior, not the MDS default. |
Review fixes one result. It does not change the API, so the same mistake returns on the next run.
Validation corrected each run, but the same failure kept returning. The fix that finally held was removing the cause from the API.
The evaluation loop separated tooling problems from component problems. The Agent UI SDK handles isolated mistakes through guidance or automated checks. When the same rule fires in nearly every run, the component is creating the failure and the library changes.
Layout across three interventions.
- ~95%No validationLayout misused in nearly every generation.
- ~95%1Validation addedThe same rules corrected every run.
- Near zeroComponent replacedNear-zero misuse without special guidance.
The correction kept returning until the component changed. Validation exposed the cause; it could not remove it.
I set a narrow boundary for the library: build on MDS, add what Home Lending needs, and replace an inherited API only when repeated evidence shows that the API causes the failure.
Set the boundary with MDS
The library extends MDS in three layers.
Use MDS when its supported framework meets the need.
Combine MDS parts when a Home Lending pattern repeats.
Add custom code only when a capability is missing or an inherited API keeps failing.
Custom code is the narrowest layer. It is reserved for a missing product capability or a failure traced to the inherited API.
Ship the standard, not another specification
No engineering team staffed the library, so I used agents to build the package, reviewed the components in Storybook, and published them to the internal registry. Engineering imports the same code that design approved. The standard no longer depends on a handoff or a team interpreting a specification.
The library in Storybook: 13 components extending the firm's core system.3
- AppShell
- ▸ Surface
- VStack
- DataGrid
- HStack
- Spacer
Storybook is where design and engineering meet the same artifact. Design reviews the rendered component; engineering imports that exact component from the package.
Fill the gaps MDS leaves open
MDS did not include the data grid or application structure Home Lending needed, so the library adds both. AppShell separates shared navigation from page layout: standalone products use the full shell, while products inside Unity inherit its navigation. Named regions and strong defaults support complex side rails and responsive layouts without asking each team to design the structure again.
Custom components fill genuine gaps in the core.
These are additions, not replacements. Standalone products use the full AppShell; products inside Unity inherit its navigation and use only the content layout.
Replace the API only when the API is the problem
I replace a component only when using it correctly requires guidance so specific that the agent loses flexibility. Layout reached that point first: validation caught the same misuse on nearly every run. Tile followed; agents latched onto prescribed examples and branching paths instead of composing freely. I replaced Layout with HStack, VStack, and Spacer, and Tile with Surface. The simpler APIs held across three model generations without changes to their code or guidance2.
The same card generated with Tile and Surface.
Surface removes the need for prescriptive guidance. Its simpler structure lets agents adapt the component without relying on narrow examples and branching paths.
Feed the evidence back to MDS
Replacing an MDS component locally does not end the relationship with the core system. When evaluations trace a repeated failure to an MDS API, I bring the evidence to the central team during our monthly working sessions. Together, we improve MDS components and the tooling that helps agents use them.
The library is mandated across Home Lending and now turns production evidence into improvements for the central design system.
- Scope
- The 13-component library extends MDS through Home Lending themes, reusable employee patterns, missing capabilities, and targeted replacements.
- In motion
- I review Home Lending API findings with the MDS team each month and work with them to improve its components and AI tooling.
- Trajectory
- The library shows that a product team can operate its own MDS layer without a dedicated engineering team and feed its findings back into the core system.
- Measuring
- The team tracks adoption on new employee work, component misuse in generated code, and whether the APIs continue to hold through model changes without retuning.
1~95% to near zero — Comes from repeated evaluation runs of the flagship Layout component across three states: no validation, validation rules firing, and replacement with Stacks.
2Three model generations — The replacement APIs held across Opus 4.6, 4.7, and 4.8 without changes to their code or guidance.
313 components — The current library extends the firm's core design system with 13 components, hosted in Storybook and distributed through the internal package registry.
Contact
When agents write the UI, does the design system become the strongest place to put a design decision? If you're rebuilding one for that, let's talk.
Agent UI SDK + Eval Framework
The threadThe design system changes when repeated failures point back to the API. The next case is the instrument that separates a component failure from a tooling one.