Scan, then write AGENTS.md and SKILL.md — same content, both conventions, one source. Refuses to overwrite a file you wrote by hand.
Your agent context file is a lockfile that nothing locks.
Every coding agent reads a context file, and every context file rots the moment nobody updates it by hand. skillfile writes yours from a scan of the repo, stores a hash of what it saw, and fails your build when the two stop matching. No LLM calls, no API key, nothing to hallucinate.
It reads six things, writes three files, and remembers one number.
Nothing here is inferred or generated by a model. Every line of output traces to a file already in your repo, which is why the same repo always produces the same bytes.
Break the repo and watch the build turn red.
The whole product is one comparison: does the hash in SKILLFILE.md still describe the repo in front of it? Change something below. Note what the last button does — and what it doesn't.
"scripts": { "test": "node test/smoke.js", "build": "tsc -p ." }, "dependencies": { "commander": "^12.1.0" }
---
generated-by: https://skillfile.pro
source-hash: 53183589327afae1
---
Three of these change what an agent needs to know. One of them doesn't.
This is skillfile's own repo, scanned by skillfile.
Not a mockup. The panel on the right is the real committed AGENTS.md in github.com/d08m/skillfile, produced from the panel on the left.
// package.json name: skillfile description: Generate and keep fresh… scripts: test: node test/smoke.js check-tools: node scripts/check-tools.js // structure .github/ bin/ scripts/ site/ src/ test/ test-fixtures/ // tooling markers .github/workflows → CI configured test/ → test directory
~1s
no model
<!-- skillfile:generated -->
# skillfile
Generate and keep fresh cross-agent
context files, deterministically.
## Commands
- `test`: `node test/smoke.js`
- `check-tools`: `node scripts/…`
## Structure
- `bin/` - `src/` - `test/`
## Tooling
- CI configured (`.github/workflows`)
- Has a dedicated test directory
Nothing else to learn.
Re-scan and rewrite. Sub-second and free: there is no model in the loop, so there is nothing to pay for and nothing to invent.
Exit non-zero if the repo drifted since generation. In CI, a stale context file blocks the merge that made it stale.
Four lines, and the file keeps itself honest.
# .github/workflows/ci.yml - run: npm install - run: npm test # a stale AGENTS.md fails the build, same as a stale lockfile - run: npx skillfile check
This site is readable without rendering it.
If you are an agent evaluating whether to install this, skip the page. These are plain text, no markup, no JavaScript.
.claude/skills/skillfile/SKILL.md and you can run the tool correctly without reading anything else.A floor, not a ceiling.
skillfile will not capture your architecture philosophy or the war stories behind your conventions. Keep writing those by hand — it refuses to touch a hand-written file for exactly that reason.
It also won't guess. A repo that declares no commands anywhere renders "no scripts declared", because an invented command that an agent then runs is worse than silence.
What it guarantees is the floor: any agent, any tool, cold session, always knows your real commands, real structure and real dependencies — and CI proves that stays true.
Optional targets for CLAUDE.md, GEMINI.md, Cursor rules and Windsurf are one flag away, generated from the same scan.