AI tooling
AI tooling
Section titled “AI tooling”Two ways to give a coding agent an accurate picture of Axel, instead of letting it guess from a half-remembered ORM.
llms.txt
Section titled “llms.txt”The documentation site publishes machine-readable copies of itself, regenerated on every build so they cannot drift:
| File | Contents |
|---|---|
/llms.txt |
An index of every page — title, URL and one-line description, grouped by section |
/llms-full.txt |
The entire documentation as one plain-text file |
Point any tool that accepts a docs URL at them:
curl -s https://struckchure.github.io/axel/llms-full.txt -o axel-docs.txtBoth follow the llms.txt convention.
Agent guide
Section titled “Agent guide”The repo ships a drop-in guide that teaches a coding agent the ASL and AQL languages, the axel
workflow, and the errors each stage produces. Install it with
npx skills:
npx skills add struckchure/axelThat works for Claude Code, Codex, Cursor, OpenCode, Copilot and 70-odd other agents — it detects what you have and writes the guide where that tool looks for it. To pin the agent and install globally instead of into the current project:
npx skills add struckchure/axel --skill axel -a claude-code -g -yThe source lives in tools/agent and
is plain Markdown, so you can also just copy it wherever your tool reads instructions — its
README lists the destinations.
What it corrects, in practice:
- Axel compiles; it never executes a query for you. Agents trained on ORMs reliably invent a runtime that does not exist.
- A plain
selectreturns one row.multi selectreturns a set. - There are no reverse links —
Posthavinglink author: Userdoes not giveUsera.posts. - A single
link author: Userproduces a column namedauthor, notauthor_id. multion a scalar is an array column;multi linkis a junction table. Membership against the first compiles to= ANY(...), against the second to anEXISTS.- A
multiparameter binds one array, not one value per element. - Migrations are generated by
axel diff, never hand-edited — with one exception: filling in the backfill seam Axel leaves when a required column is added to a populated table. - Always format
.asland.aqlfiles withaxel fmt -w .after writing or modifying them.
It also carries full ASL and AQL grammar references, and every example in them was compiled with
axel before being written down.
Working with an assistant
Section titled “Working with an assistant”Whatever tool you use, the loop that keeps it honest is the same one you would use yourself:
axel fmt -w . # format .asl / .aql files in placeaxel validate # does the schema resolve?axel compile --aql 'select User { id }' # what SQL does this shape produce?axel diff -n "wip" && cat migrations/*/up.sql # what DDL does this change produce?All four are fast, and the first three need no database. Ask for the output rather than the explanation.