00How I work

How I build with Claude Code

One session per project, three at most, every change checked on my own laptop first, and a rules file that learns from my corrections. The whole setup, written so you don’t need to code to follow it.

Adam Perlis
October 2026 · about 12 minutes

371
Claude Code sessions on this laptop
3
projects at once, at most
10
skills I’ve built and shared
24GB
of memory: one ordinary laptop

People keep asking how I actually work with Claude Code. Not the prompts, the setup.

How many sessions, which one does what, when to look at the work, what a branch is for. So here it is, with the pictures I end up drawing on calls when I explain it.

First, the part that surprises people: I almost never open the code. I haven’t needed to dig into it to fix something in six to eight months. When something comes out wrong, the cause is usually my prompt. My job is the part Claude can’t do alone: deciding what we’re making, showing it what good looks like, and saying no fast.

01Sessions

I’m the quarterback

Each project gets its own Claude Code session, and I talk to it directly. When a new idea comes up mid-session, Claude offers to spin it off as a side task. Side tasks run alongside the main one, and they even check with each other before touching the same thing. A coloured dot next to each session tells me which one needs me.

I keep three projects going at most. Past that my laptop maxes out, and so does my head. I’m reading what each one is doing and redirecting it when it heads the wrong way, and I can’t do that for four.

A setup I see a lot puts an agent in the middle instead: a “quarterback” that takes your request, writes a brief, and hands it to worker agents, whose results get stitched together before you see anything. It sounds efficient. In practice every hand-off costs time and context, and one thread trying to understand everything at once ends up asking more questions than it answers.

A relay in the middleYoufeedbackQuarterback agentbriefDispatcherassignsWorkerWorkerWorkercombinedIntegration roundback for review4 hand-offs before you see a changeDirect, three projects at mostYoudirectSourceone sessionWalkieone sessionGaiaone sessionapplycronsprivacyattachroutineemailside tasks, each in its own worktree, merge back when I say solocalhost:3000localhost:3001localhost:3002each one previews on my own laptop0 hand-offs. I see changes in seconds.
Same goal, two paths. With a relay, feedback passes through four hand-offs before anything changes. Working direct, I talk to each project myself. The side tasks are real ones from my Source, Walkie and Gaia projects this week.

Where an agent in the middle does help

Research, and questions that cut across the whole business. I keep an always-on assistant in ChatGPT for that. I asked it to review a month of my X and LinkedIn posts and tell me what worked, and on its own it caught a mistake in a report I was about to send. Claude’s version of this is in preview. Jobs that repeat on a schedule, like a weekly newsletter, run as scheduled tasks instead.

If you already run a quarterback, test it. Give the same small task to it and to a plain project session, side by side. Compare how long until you see a preview, how long in total, and how thorough each one was. Let the numbers decide.

Plan in Claude Code too

I do my planning inside Claude Code now, not in the regular Claude chat, because the chat can’t see my project folders. One long chat per project works fine. It compacts its own history as it goes and spins off side tasks when the work splits.

02The fast loop

See it in seconds, ship it once

When every change rides the full pipeline, a round can take most of an hour, even for “add a little space under the headings”. So I split the work into two loops. A fast one runs on my laptop, for looking and adjusting. A slow one runs once, when a feature is done.

Through a pipeline: every change takes the long wayYourfeedbackQuarterbackwrites a briefDispatcherpicks a workerWorkeron a branchIntegrationroundChecksthe full runYoureviewthe next round can take most of an hour, even for a spacing tweakMy way: look on my laptop, ship onceI askfor a changeClaudeedits the codePreviewupdates liveI lookin ChromeMergeto mainChecksrun onceLivefor userslooks rightseconds, as often as I likeonce per finished feature
Top: a spacing tweak costs a full round. Bottom: tweaks loop on my laptop in seconds, and the merge, the checks and the release happen once.

Setting it up

Every project I work on has a preview of itself running on my laptop, called a dev server. I don’t start it myself. I ask:

can you spin up the dev server
Me
  1. Open it in your own browser. Claude gives you an address like localhost:3000. I prefer Chrome to the preview built into Claude, and the page updates as Claude edits.
  2. Make it look real. I point my local copy at the real database, so it matches what users see. Not textbook, but it works for me. If that makes you nervous, ask Claude to make realistic sample data instead.
  3. Batch the small stuff. Send the whole list of wording, image and spacing fixes in one message and watch them land.
  4. Run the full checks once, when a feature is done and merged. Running them on every tweak is slow, and on GitHub it burns through the free minutes.
03Branches

Branches and worktrees, without the jargon

Claude creates these for you. Your job is to know where a change belongs, and to be the one who says “merge”.

Main
What’s live. Nothing lands here until you say so.
A branch
A separate line of work for something big or risky. It can live for days or weeks without touching main.
A worktree
A second copy of the project folder with its own branch, so two sessions can work on the same project at once without colliding. It’s short-lived and merges back when you approve. My Source folder has a dozen of these sitting next to it right now.
mainwhat’s liveside task (worktree): a new buttonsmall fixesside task: a bug fixI say “ship it”branch: a big experimentstays off main until it’s readylater
Worktrees are short side trips that come back fast. A branch is a long road beside main for something that isn’t ready. Main only moves when I say so.

Which one is it?

A review list usually mixes tiny fixes with real features. Here’s where each kind goes.

“This wording is wrong.” “Wrong photo.” “More space under the headings.”
Right in the session you’re in. Check it on your laptop, and send the whole list at once.
“If someone doesn’t have an invite, show them a different button.”
A side task. Claude spins up a worktree, it runs alongside, and it merges back when it looks right.
“Let’s add a whole new feature that could break things.”
Its own branch. It stays off main until it’s ready for users.

At the end of a session I say some version of this. If a change could break something else that isn’t ready yet, I hold the merge.

This looks good. Merge to main and push to production.
Me
04Rules

Write the rules down

Every time Claude gets something wrong and I correct it, I ask it to add the fix to the rules. Each project has a short file called CLAUDE.md, plus an AGENTS.md so Codex follows the same rules. A global file covers every project on my laptop. Sessions read all of it before they start, so I stop repeating myself.

Claude gets something wrongI correct it“Add that to the rules”then Claude writes it inGlobal rules · every projectNever commit files holding real keysCLAUDE.md + AGENTS.md · per projectOur stack, our commands, how we shipMemoryLessons Claude saved from past sessionsEvery new sessionreads these first
Corrections turn into rules. Rules live in three places, and every new session reads all of them before it starts.

Two real ones from my global file

  1. Never commit secrets. Files holding real keys or passwords are never committed or pasted into a message, in any project, even private ones.
  2. Check the Mac before an App Store upload. My Mac often runs a beta of macOS, and Apple rejects apps built on one with a misleading error. Now Claude checks before every upload, in every app.
05Design

Design that sticks

Out of the box, Claude’s design is bad. With deliberate direction, it nails it. Give it something concrete to study, then turn what it learned into a written system it has to follow.

01Find a referenceX posts, sites, videosyou love02Claude studies itframe by frame, andthe page’s structure03Write the systemcolours, type, spacingin CLAUDE.md04Build from a kitTailwind and shadcn/uino one-off styles05Review itpoint at what’s off,watch it changesomething new? add it to the system first
The loop back from review to the written system is what stops the drift: a new pattern gets added to the system, then used.

This is the message that started this site, sent with two motion reels I’d saved from X:

study the style of this i want my website to look and feel just like it. look at the fonts, architecture, hierarchy, layout, animations, movement.
Me · #4 · 15 Oct
  1. Feed it videos. On X, tap the share arrow on a post, copy the link, and hand it to the Watch skill. It steps through the video frame by frame and pulls the transcript, so it understands motion as well as layout.
  2. Feed it live sites. A cloning skill studies a site’s layout and structure, so Claude builds with the same bones. Keep the bones, then make it yours.
  3. Pick one component kit and say so in CLAUDE.md. I use Tailwind with shadcn/ui, so Claude reaches for pieces that already exist instead of inventing new ones.
  4. Define colours, type sizes and spacing in one place, then add the rule: use these, never one-off values. When it needs something new, it adds it to the system and tells you.
06Skills

The skills I lean on

A skill is a saved set of instructions Claude loads for a certain kind of job. Some of mine I built and share for free; the rest come from people I follow. I counted how often each one actually ran, across all 371 Claude Code sessions on my laptop.

05101520sessionsFull Code20SEO / AEO / GEO13Watch11UX Copywriting10Feature Video5Frontend Design Director4GSAP4Ditto3
Mine, free on GitHub. Someone else’s, or not public. Counted as sessions that ran each skill at least once.

Other people’s, that I use all the time

  • Watch ↗ give it a video link (X, YouTube, Loom) and it studies the video frame by frame and pulls the transcript. My go-to for motion and UI references
  • GSAP ↗ the official skills for GSAP, the animation library behind most of my scroll and motion work
  • Ditto ↗ turns a reference site’s layout into code, so Claude builds with the same bones. I keep the structure and throw away the look
  • Security Audit ↗ Cloudflare’s free skill: checks a codebase for exposed keys and security holes
  • Ralph loop ↗ keeps Claude working on a task until it’s actually done, instead of stopping after the first pass. I pair it with Full Code
  • UX Copywriting writes and reviews the words inside a product: buttons, errors, empty states, onboarding

The ones I’ve built

All free on GitHub. Most live in my plugin marketplace, so you add it once and install any of them by name:

claude plugin marketplace add adamperlis/adam-plugins

claude plugin install fullstack-coding@adam-plugins

Swap fullstack-coding for any name in grey below.
  • Full Code ↗ fullstack-coding My build skill. It plans first, builds, writes tests, and checks the work against the plan. Everything takes about 20% longer and needs far less rework
  • SEO / AEO / GEO ↗ seo-aeo-geo Gets a site found on Google and cited by ChatGPT, Perplexity and Gemini. The research behind it refreshes every week
  • Frontend Design Director ↗ frontend-design-director Designs, builds and critiques marketing sites, starting from what kind of site it is
  • Design Constraints ↗ design-constraints Designs UI from explicit spacing and type rules instead of letting the model guess
  • Video Skills ↗ video-skills Eleven skills for product demos, brand films, feature clips and thumbnails. Feature Video is one of them
  • Awwwards Motion ↗ awwwards-motion Spring physics, shaders and interactive 3D for award-level sites
  • UI Motion ↗ ui-motion Kinetic type heroes, scroll-linked blur sections and a shader field you smear with a finger
  • Social Video ↗ social-video Briefs, scripts and shot lists for Reels, TikTok and Shorts
  • Webflow to Astro ↗ Moves a Webflow site to Astro and Tailwind on Cloudflare, page for page, so you can cancel the Webflow plan
  • Gaia Brand ↗ gaia-brand Our baby app’s whole brand as a skill, and a good model for making a design system stick
07What I build with

The libraries, and where I find good stuff

You don’t need to learn these. Name your stack in CLAUDE.md, so Claude doesn’t reach for a new library every week. This is what shows up across my projects most.

Apps and sites
TypeScript, React, Next.js, Vite, and Astro with Sanity for marketing sites
Look and feel
Tailwind CSS, shadcn/ui, Lucide icons, GSAP and Lenis, Framer Motion, Three.js
Data and accounts
Neon, Supabase, Prisma, Zod, Zustand
Hosting
Vercel and Cloudflare
Mobile and desktop
Expo for iPhone apps, Tauri for desktop, fastlane for the stores
Watching it run
PostHog, Sentry, Vitest, Playwright

Where I find good stuff

Bookmark these. When something catches your eye, paste the link into Claude and ask for something like it. Most of them are built for exactly that.

  • ui.shadcn.com ↗ the component kit I build on. Claude knows it inside out, so it stays consistent
  • tailwindcss.com ↗ the styling system almost all my projects use
  • libraries.dev ↗ ready-made React effects, like a glow that travels around a border, made to paste into Claude Code
  • transitions.dev ↗ forty-odd ready UI transitions, and an agent that finds and fixes janky animation
  • aicss.dev ↗ components for AI products: thinking states, tool calls, streaming text

From my saves on X

Things I’ve bookmarked or liked lately that are worth a look.

Components to copy

Effects and motion

Handy tools

Inspiration

08Housekeeping

Keeping it all running

Let the laptop breathe

My laptop is an M4 MacBook Pro with 24GB of memory, and three heavy sessions is its ceiling. Old dev servers and iPhone simulators pile up and eat memory and disk. When things slow down, I open a fresh session and say something like:

Take a look at all our running servers. Anything super old, kill it. Any old iOS simulators, kill those. Delete any cache data we don’t need.
Me

Two plans, rotated

I pay $100 a month for Claude and $100 for ChatGPT. When I’m around 80% of my Claude limit, I ask each session to wrap up, then paste its notes into Codex in the same project folder and keep going. Same folder, same code, so either one can pick up where the other left off.

Commit everything in this project, then write instructions I can pass over to Codex to pick this back up where we left off.
Me

The App Store, when you get there

Set up an Apple developer account (about $100 a year) and let Claude do the setup. It handles roughly three quarters of it on its own; the rest is tedious clicking. Once it works, add fastlane ↗, which sends builds from your project straight to the App Store and Google Play, so you never click through their sites to submit.

09If you want to work this way

The short version

  1. Be the quarterback. Talk to each project’s session yourself. Keep agents in the middle for research, not building.
  2. One project, one session, three at most. Past that, you stop steering and start skimming.
  3. Look first, ship once. Keep a preview running on your laptop. Only finished work goes through the checks and goes live.
  4. Main is what’s live. Side tasks get a worktree, big experiments get a branch, and nothing merges until you say so.
  5. Write the rules down. Every correction goes into CLAUDE.md, so you never say it twice.
  6. Show it, don’t describe it. A reel or a live site carries more than any adjective. Then make the system a rule.
  7. Review the result, not the code. Check that it does what you asked. When it doesn’t, look at your prompt first.

The same workflow built this site and Gaia.

Want your team working like this?

I help founders and teams set up Claude Code and ship with it, from the first session to the App Store.