Skip to content

AI tooling

Two ways to give a coding agent an accurate picture of Axel, instead of letting it guess from a half-remembered ORM.

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:

Terminal window
curl -s https://struckchure.github.io/axel/llms-full.txt -o axel-docs.txt

Both follow the llms.txt convention.

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:

Terminal window
npx skills add struckchure/axel

That 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:

Terminal window
npx skills add struckchure/axel --skill axel -a claude-code -g -y

The 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 select returns one row. multi select returns a set.
  • There are no reverse linksPost having link author: User does not give User a .posts.
  • A single link author: User produces a column named author, not author_id.
  • multi on a scalar is an array column; multi link is a junction table. Membership against the first compiles to = ANY(...), against the second to an EXISTS.
  • A multi parameter 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 .asl and .aql files with axel 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.

Whatever tool you use, the loop that keeps it honest is the same one you would use yourself:

Terminal window
axel fmt -w . # format .asl / .aql files in place
axel 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.