↑ Top

Case study · 2026

My design agent OS

I built a small AI design team that works inside my real tools and remembers what we decided. Every session should start where the last one ended. That’s the concept. I call it gAbI: my name, with the AI already inside.

Role
Designer and builder, solo
Context
UX Lead at a fintech, four products
Built with
Claude Code, MCP, plain Markdown
Status
In daily use
design-agent-os · claude

› Should the clients widget show a goal, like “import 50 clients”?

orchestrator → product-strategist, critic

product-strategist

⎿ metabase.query clients per merchant, full base

  spread is huge · the median merchant has only a handful

A fixed goal is trivial for a chain and out of reach for a solo practitioner.
Show momentum instead: “↑ 12 this month”.

critic

Agree. And clients added automatically would fill a goal on their own,
so reaching it wouldn’t mean anything.

Next step: momentum badge, no goal. Want a handoff note for dev?

Reconstructed from a real decision, shortened. One question, real data, one next step.

The problem

Every AI chat started from zero.

I lead UX across a merchant app, a consumer app, a risk platform and a design system, in a regulated industry. The context that makes an answer good lived in my head and in dozens of Confluence pages: who the users are, what we already decided, which rules we can’t break.

So I kept re-explaining. The answers I got back were generic, confident, and often wrong in ways only I could spot.

How it works

One orchestrator, seven specialists, my real tools, and a memory that stays tidy.

Me
Orchestratorroutes, merges, returns one next step

Specialists

  • Product strategistframes problems and tradeoffs
  • Research synthesizerevidence apart from opinion
  • Service designerflows, states, edge cases
  • Design system architecttokens, components, states
  • UI experthierarchy and polish
  • Regulatory advisorrules into UX, flags Legal
  • Criticchallenges before polish

Tools, via MCP

  • Figma
  • Jira
  • Confluence
  • Metabase
  • PostHog
  • Slack
Memoryone-line hooks, one fact each
Knowledge basethe full decision and why
Agent rulesstanding defaults per specialist

/close writes each new learning back to the right layer

Key decisions

The interesting part isn’t the AI. It’s deciding what it should know, do, and never do.

  1. Each agent has a mission, grounded defaults and hard rules. The orchestrator picks the fewest agents a task needs and merges what they say into one next step. A single all-knowing prompt gave me average answers. Seven narrow ones give me opinions.

    .claude/agents/critic.md

    ---
    name: critic
    description: Challenges weak reasoning, vague UX
      logic, untested assumptions, and overdesigned
      solutions before they move forward.
    ---
    
    ## Mission
    Stress-test ideas before they are finalized.
    Find weak logic, vague framing, missing evidence,
    hidden risks, while the work can still change cheaply.
    
    ## When to use
    - a flow looks clean but may fail in reality
    - polish is being mistaken for clarity
  2. Memory holds a one-line hook. The knowledge base holds the full decision and why. The agent holds the standing rule. The same fact never gets copied into all three, so nothing drifts out of sync.

    Memory one line

    A hook that tells the next session this decision exists, and where to find it.

    Knowledge base the full decision

    What was decided, why, and what we rejected along the way.

    Agent rule how to behave next time

    The standing default a specialist carries into every future task.

    The same decision at three altitudes.
  3. When a decision locks or a screen ships, I run /close. It sorts every new learning into the right layer, asks before touching a source-of-truth doc, and never commits on its own. The next session starts where this one ended.

    /close

    › /close clients widget

    Closed: clients widget direction

    memoryclients-widget.mdupdated
    kbmerchant/clients-feature.mdupdated
    agentproduct-strategist.mdrule added

    To confirm: is the count account-wide or per branch?

    Nothing committed. Suggested: docs: capture clients widget

  4. Agents query analytics, draft Jira tickets and Confluence pages, and edit Figma. But once I have edited a shared page, they insert changes surgically instead of rewriting it, and nothing goes out without me.

    confluence · clients widget spec

    Page last edited by Gabi → insert, don't rewrite

    ## States

    Default: client count + momentum badge

    − Loading: spinner and time estimate

    + Loading: badge reads “1 list loading”, no spinner, not blocking

    Empty: one line of copy, one action ← Gabi’s edit, kept

    1 line changed. Publish? [waiting for you]

  5. The regulatory advisor turns consumer-credit rules into product and UX implications. It is designed to stop there: it flags what needs Legal and never gives a legal conclusion. Knowing when to hand over is part of the design.

    regulatory-advisor

    › Can the payment reminder say “last chance”?

    UX implication

    Urgency in credit messages pressures people. Keep it factual:
    amount, date, how to pay, where to get help.

    Needs Legal

    Whether this message falls under consumer-credit rules (CCD2).

    Not a legal conclusion. Flagged for review.

.claude/agents/critic.md

---
name: critic
description: Challenges weak reasoning, vague UX
  logic, untested assumptions, and overdesigned
  solutions before they move forward.
---

## Mission
Stress-test ideas before they are finalized.
Find weak logic, vague framing, missing evidence,
hidden risks, while the work can still change cheaply.

## When to use
- a flow looks clean but may fail in reality
- polish is being mistaken for clarity

Memory one line

A hook that tells the next session this decision exists, and where to find it.

Knowledge base the full decision

What was decided, why, and what we rejected along the way.

Agent rule how to behave next time

The standing default a specialist carries into every future task.

The same decision at three altitudes.
/close

› /close clients widget

Closed: clients widget direction

memoryclients-widget.mdupdated
kbmerchant/clients-feature.mdupdated
agentproduct-strategist.mdrule added

To confirm: is the count account-wide or per branch?

Nothing committed. Suggested: docs: capture clients widget

confluence · clients widget spec

Page last edited by Gabi → insert, don't rewrite

## States

Default: client count + momentum badge

− Loading: spinner and time estimate

+ Loading: badge reads “1 list loading”, no spinner, not blocking

Empty: one line of copy, one action ← Gabi’s edit, kept

1 line changed. Publish? [waiting for you]

regulatory-advisor

› Can the payment reminder say “last chance”?

UX implication

Urgency in credit messages pressures people. Keep it factual:
amount, date, how to pay, where to get help.

Needs Legal

Whether this message falls under consumer-credit rules (CCD2).

Not a legal conclusion. Flagged for review.

01 / 05

What I learned

  • Context is the product. The model was never the bottleneck. What it knew about my product was.
  • Memory needs rules, or it rots. Without a clear home for each fact, notes contradict each other within weeks.
  • The best agent disagrees with me. The critic catches more weak thinking than any polished answer ever did.

Brasil mix tape

Tap to play