The interchange: every project runs through it
How I work with Claude
Claude is part of how I design, the way a sketchbook and a second pair of eyes are. It draws the options, checks the work against rules I wrote, and tries to break what I think is finished. The decisions stay mine.
Tracking links: one line, or a row per link?
I even wrote it a style guide for talking to me in the terminal: my ask in a box, results on labelled lines, every question answerable with one letter. Try answering.
- The setup
- Claude Code in the terminal, custom subagents, skills and plugins, claude.ai Artifacts as a design canvas, Claude in Chrome, MCP connectors to Figma and Notion, and memory that carries rules from one session to the next.
- What stays mine
- The product decisions, the design systems, and the rules everything is checked against. Nothing merges without my word.
- Where it shows
- My own app in testing, a summer at Sollo with 70+ merged pull requests in eight weeks, and this site.
Options before answers
I never ask for the answer. I ask for two to four options, drawn side by side on a canvas with a recommendation marked, and I answer with a letter. The canvas is a claude.ai Artifact: a live page, so an option can be clicked, resized and read in both themes before a line of the product changes. The pick is written down with its date and reason, and only then does building start.
One agent, one job
I keep agents narrow, and give each one the model its job needs: the checks that run on every change get the smallest, and the ones that need judgement get the strongest. These are the checkers I run on my own app. Open any of them:
Rule guardHaikuChecks a change against the project’s written rules.
Reports every violation and fixes none of them, so the report cannot hide a quiet rewrite.
VerifierHaikuRuns the checks and returns only what failed.
The cheapest agent in the roster and the one that runs most, so it gets the smallest model.
BreakerOpusTries to make a finished change fail.
Mutation testing included. It reports only what it actually broke, with the failing case written out.
WalkerOpusDrives the running app on a simulator.
It keeps the screenshots to itself and comes back with sentences, so my context stays clean.
ScribeSonnetWrites each decision into the project’s rules after a merge.
With its date and my own words, so the reason survives the session that made it.
None of them commits, stages, pushes, branches or merges. An agent that hits a question it cannot answer stops and says so instead of guessing.
The kit
- Claude Code
- Custom subagentsCustom skillsPlan, then buildGit worktrees for parallel sessionsHooksMemoryProject rules
- Skills and plugins
- BrainstormingWriting plansSubagent-driven developmentCode reviewSkill creatorFrontend designdesign-md, my own skill for the open design.md format
- On claude.ai
- Artifacts as a design canvasInteractive design decks
- Connected
- Claude in ChromeFigma, through MCPNotion, through MCP
At Sollo I added a hook that sends every push through the team’s review agents, and used parallel reviewers before each pull request.
What it taught me
- Ask for options, not answers.A recommendation you can overrule beats an answer you have to argue with.
- Write the decision down.Or the next session will undo it, confidently.
- One agent, one job.A builder that also checks its own work passes itself.
- Green is not proof.Put the bug back and watch the test go red. If it stays green, it was never guarding anything.
- Look, then walk.A screen at phone size and a walk on a real phone find what thousands of tests cannot.
- It never merges. I do.Every change passes the required checks, and the button is mine.
