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.
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.** [](https://bun.sh) [](https://www.typescriptlang.org/) [](https://claude.com/claude-code) [](#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