astro-conversion-kit
AGENTS.md114 starsChanged 22 days agoMITView on GitHub
This repository is a set of Agent Skills that convert a live website into a static Astro site with URL, content, SEO and visual parity, then take it through launch. Each skill is a folder under skills/ with a SKILL.md, plain Node scripts in scripts/ and, where needed, references/. The scripts do everything that must be exact; the skills tell you when to run them and how to read what they print. If a person pasted this repository's link with…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,700 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository9 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- capture-siteSkill
- convert-siteSkill
- launch-auditSkill
- parity-gatesSkill
- post-launchSkill
- pre-launchSkill
- suggest-improvementsSkill
- visual-reviewSkill
The file
We split this AGENTS.md into the rules it gives an agent
6 rules. About 0 are common, 1 is distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 9
If a person pasted this repository's link with a site to convert, start with convert-site.
- Very specific: line 45
The live site is read-only: Only these read it, paced: the capture scripts, shoot.mjs and styles.mjs on live, css-coverage.mjs, …
- Distinctive: line 55
One intake message, then no stops: Ask everything once, each question with a stated default.
- Very specific: line 61
Gates are not softened: No flag turns a failure into a warning.
- Very specific: line 97
No real email addresses in code, tests or docs.
- Very specific: line 98
Never edit skills/pre-launch, skills/launch-audit or skills/post-launch here.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
astro-conversion-kit: instructions for agents
This repository is a set of Agent Skills that convert a live website into a static Astro site with
URL, content, SEO and visual parity, then take it through launch. Each skill is a folder under
skills/ with a SKILL.md, plain Node scripts in scripts/ and, where needed, references/.
The scripts do everything that must be exact; the skills tell you when to run them and how to read
what they print.
If a person pasted this repository's link with a site to convert, start with convert-site. It
runs every other skill in order.
Install the skills as one set
The skills call each other and share script libraries, so install all eight together. Any one of these works:
npx skills add ethanplusai/astro-conversion-kitinstalls them into your agent's skills folder.- In Claude Code:
/plugin marketplace add ethanplusai/astro-conversion-kit, then/plugin install astro-conversion@astro-conversion-kit. - From a clone:
git clone https://github.com/ethanplusai/astro-conversion-kit,npm install,npx playwright install chromium, and read eachskills/<name>/SKILL.mdby path.
Then run node skills/convert-site/scripts/preflight.mjs and install whatever it reports missing
that you can install yourself. Never ask the person for a password or a token in chat.
Which skill when
| Skill | Use it when |
convert-site | Asked to convert, rebuild, migrate or clone a site to Astro. The orchestrator: intake, plan, scaffold, build, PR, runbook. Resumes a run from .conversion/state.json. |
capture-site | The live site has to be crawled and saved: pages, head tags, redirects, media, fonts, feeds, screenshots. Read-only and paced. |
parity-gates | Freezing the capture into baseline/, or checking a build against it: routes, redirects, SEO, text, links, media, sitemap, feeds, forms, scripts. |
visual-review | Comparing the new site with the live one: screenshots at 390, 768 and 1440 px, pixel diff, computed styles, contact sheet. |
suggest-improvements | The conversion is built and gated, and the person needs the list of things worth fixing that the build reproduced on purpose. |
pre-launch | Before any launch: gates the repository and its production build. Exits 1 if anything fails. |
launch-audit | Auditing a staging or live URL for what would go wrong at launch, including redirect coverage for a domain cutover. |
post-launch | DNS has moved or is about to, and for the 30 days after: verifies the cutover and diffs production against the pre-launch baseline. |
pre-launch, launch-audit and post-launch are vendored from
website-launch-skills and also work on
sites this kit did not build.
The rules
- The live site is read-only. Only these read it, paced: the capture scripts,
shoot.mjsandstyles.mjson live,css-coverage.mjs,launch-audit --old-urlandpre-launch --predecessor-url. Analytics are blocked on their live page loads, so no visit is counted. The capture scripts (capture, media, assets, fingerprint) pace each host (by default 400 ms between request starts, up to 4 in flight, 6 for media;--politefor one at a time, 2.5 s apart) and drop to one request at a time with a doubled delay on 429 and 503; the Chromium steps (shoot,css-coverage,styles) load one page at a time, 500 ms apart;launch-auditandpre-launchkeep their own pacing. They stop after three consecutive blocks with state saved so a crawl resumes. Never submit a form on it, never log in, never change anything. - One intake message, then no stops. Ask everything once, each question with a stated default. Anything that later needs an account or token you do not have goes into the runbook's "needs you" list, and the run carries on.
- The default build equals live. Content is moved from the captured markup, never retyped or
tidied. A deliberate difference is an entry in
exceptions.jsonwith a reason; an improvement is a proposal inproposals.json, shipped only whenPROPOSALS=onuntil a person approves it. - Gates are not softened. No flag turns a failure into a warning. Never edit
baseline/to make a gate pass. If a gate is wrong about a site, say so and fix the gate. - A skip is not a pass, and "Not covered" is never a pass. Repeat every "Not covered" section to the person verbatim, in the PR and in your report.
- Nothing is committed to the site's
mainbut the scaffold. Apart from the scaffold commit that init-site makes on a new or empty repository, nothing is committed tomain; all work goes onastro-rebuildand reachesmainthrough a pull request the person merges. Never force-push. - Never touch DNS, the old host, or a hosting dashboard setting beyond the deploys the runbook names. The person launches.
- Test submissions go only to the address the person gave at intake, never to an address found on the site.
- No secrets in any repository. Credentials come from the environment or the CLI's own login.
Agent capabilities
Nothing here needs a particular agent. If your agent can run subagents, the capture and the visual review can be split across them; if it has its own browser, use it for the judgment step of the visual review. Without either, run the scripts in order: every gate and diff is a script and runs anywhere Node runs.
Resuming
A run writes .conversion/state.json in the site repository (phase, counts, decisions, last gate
results). In a new session, open the site repository, read that file with
node skills/convert-site/scripts/state.mjs --dir <site> get, and continue from the recorded
phase. The capture keeps its own crawl state and resumes where it stopped.
Working on this repository
- Node 22.23.4 or newer on the 22 line, or 24.22.1 or newer (
.nvmrcpins the version CI uses). npm testruns every test against the fixture site intest/fixture/;npm run hygienechecks tracked files and commit messages. Both must pass before every commit.- Live sites are never contacted by tests. Tests pass
--delay 0against the fixture. - Conventional commit subjects (
feat:,fix:,test:,docs:,chore:). Commit messages carry no trailers of any kind: no co-author, session or sign-off lines. The hygiene check fails the build on them. - No real email addresses in code, tests or docs; use
@example.com. - Never edit
skills/pre-launch,skills/launch-auditorskills/post-launchhere. Change them upstream, then runnode scripts/sync-launch-skills.mjs. - New dependencies need a reason in docs/dependencies.md and are rarely the right answer.
CLAUDE.mdis a copy of this file and a test keeps them identical. EditAGENTS.md, then copy.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

