diff --git a/AGENTS.md b/AGENTS.md
index 744824e..d339114 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,339 +1,91 @@
-# Basecoat – Agent Guide
+# Agent Rules
-## What is Basecoat?
+## Communication
+- Keep answers concise, technical, and to the point.
+- Do not use filler or glazing openers.
+- Keep explanations MECE: separate facts, decisions, risks, and open questions.
+- If scope is partial, state exactly what was not included.
+- Challenge incorrect assumptions with evidence from code, docs, or upstream sources.
-Basecoat is a vanilla JavaScript/HTML/CSS port of shadcn/ui components. It reuses shadcn/ui's design patterns and Tailwind CSS classes while maintaining semantic HTML, native browser elements, and full accessibility (ARIA attributes, proper hierarchies, keyboard navigation). The goal is to provide shadcn-quality components without React dependencies.
+## Project Intent
+- Basecoat is a Tailwind CSS, vanilla HTML, CSS, and JavaScript implementation of shadcn/ui's visual language for non-React stacks.
+- Basecoat maps upstream shadcn/ui concepts onto simpler semantic markup; it is not a React, Radix, Base UI, `cn-*`, or `data-slot` DOM port.
+- Prefer the browser platform: native elements, semantic HTML, CSS state selectors, and small vanilla JS only when needed.
-Basecoat is not a literal DOM port of shadcn/ui. It is an alternative implementation with the same visual language and comparable component coverage, but with simpler markup, less JavaScript, less CSS, and no React/runtime primitive dependency.
+## Source Boundaries
+- Do not hand-edit build outputs:
+ - `packages/*/dist/**`
+ - `_site/**`
+- Generated source entrypoints such as `src/css/basecoat-vega.css` are committed, but must be regenerated through `scripts/generate-css-entrypoints.js` or build scripts, not manually maintained.
-## Quickstart
+## Public API and Markup
+- Keep public component APIs small: usually one root class, semantic child elements, documented ARIA/data attributes only when needed, and minimal JS for behavior.
+- Avoid required child classes when meaningful markup can identify children: `input`, `textarea`, `select`, `button`, `a`, `label`, `fieldset`, `legend`, `header`, `section`, `footer`, `svg`, `kbd`, `hr`.
+- Add new child classes, wrappers, `data-*` attributes, macro arguments, or public selectors only as intentional API.
+- Do not add roles for styling; ARIA must describe behavior or accessibility state.
+- Prefer intentional divergence over awkward imitation when upstream markup does not map cleanly to Basecoat.
-- Install deps: `npm i`
-- Dev docs server: `npm run docs:dev`
-- Build CSS/JS: `npm run build`
-- Build static docs: `npm run docs:build`
+## Accessibility
+- Start with the native element that matches the control.
+- Use `