Skip to content

Driftfold

Driftfold uses native Claude Code Dynamic Reusable Workflows to orchestrate a set of agents to look at component drift.

Core trick

Crawls component source for className strings and clusters near-duplicate variants so they can be folded into canonical cva variants.

Tags

Description

Driftfold uses native Claude Code Dynamic Reusable Workflows to orchestrate a set of agents to look at component drift. With Agentic coding, building out pages is much quicker, but usually you build them out in a silo and your components start to drift several different types of buttons, several different types of cards. Driftfold is meant to help you see at a glance where the drift is happening, be able to create new styles based on that, replace the ones based off of a subsequent session and bring your entire app so a consistent look.
theromeapp/driftfold★ 00 forksTypeScriptCreated Jun 13, 2026 · last push Jun 14, 2026

README excerpt

<div align="center">

# DriftFold

**Crawl your shadcn/cva component drift, see it all on one page, and fold it back into canonical variants.**

[![Built with Bun](https://img.shields.io/badge/built%20with-bun-000?logo=bun&logoColor=white)](https://bun.sh)
[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![Claude Code Workflow](https://img.shields.io/badge/Claude%20Code-workflow--native-d97757)](https://claude.com/claude-code)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#contributing)

</div>

---

You built a `<Button>` once. It was clean. It was good.

Then it went out into the world. Across 40 pages, a dozen different people pasted
`className="bg-blue-600 rounded-full shadow-lg"` onto it — each in a slightly different way.
One person wrote `bg-blue-600`. Another wrote `bg-[#2563eb]` (same pixels, different code).
Someone hand-rolled a red button that already existed as `variant="destructive"`. Nobody
*decided* any of this. It just **drifted**.

The problem isn't that the drift exists. It's that **no one can see all of it at once** — so it
never gets fixed.

DriftFold fixes that. It finds every override, clusters the ones that are secretly the same,
shows you the entire mess on a single annotatable page, has Opus propose what each cluster
*should* become — and once you've marked your decisions, rewrites the call sites and writes the
lint rule that stops it from ha

Team