Your project's feature list.
Vim's bargain is operators × text objects.
d2w, ci", >ap — small orthogonal verbs
applied to precisely addressed nouns, repeatable with ., fannable with
:g. That grammar is why vim outlived every editor that set out to
replace it.
conjurer.nvim ported the grammar to
generated edits: ~{motion} is an operator whose effect is
rewrite this region toward an intent. Same verbs, same nouns, a new
effect.
scry raises the noun from a region in a file to a capability.
Put the cursor on Tailor a checklist to your own situation, press
~, say what you want. The change lands across compile.ts,
c/[slug].astro, copy.astro and c/index.astro.
Four files, one intent, and you never opened one.
. repeats it on the next feature.
:g/^feature.*export/normal ~ fans it across every capability that
matches. Nothing new to learn.
Adding a capability is the same verb, because an address exists before the file
does: route print names src/pages/print.astro whether or
not anything is there yet. Write the feature you want with the members it should
have, and cast — absent members are files to create.
The rest of scry keeps that map accurate: the checks say whether what you asked for actually landed, and the kinds say where a member's file lives.
An absent claim is work to do, written
in the same file as everything that already holds. ~ on the
feature takes it from here.
A broken rule comes with the line that broke it. An intact one only means the pattern didn't match.
✓ done can still describe a fraction of the
product, so the header counts the files no feature claims —
12 of 58 files undescribed — and :ScryUnclaimed lists them.
Each one is a decision: give it to the feature that owns it, or name the
feature nobody wrote down. Without it, "everything done" could just mean a
small map.
✓ done, and the rules were
re-checked against what actually landed — not taken on trust.:h scry is the manual| In the glass | Does |
|---|---|
| ~ | Cast an intent across the whole feature under the cursor. The verb. |
| + | Fill in what is missing here — again to stop a pass. |
| <Tab> | Show or hide what a feature is made of. |
| <CR> | Open what this line is about — the code, or the evidence. |
| ]d [d | Next or previous feature that needs attention. |
| g? | Explain what this buffer is telling you. |
| Command | Does |
|---|---|
| :Scry | Open the glass. Everything is checked the moment you look. |
| :ScryCheck | Look again — fresh verdicts from what's on disk. |
| :ScryConjure | What ~ does, as a command. |
| :ScryExercise | Run the specs. The only command that executes your code. |
| :ScryTests | Find the tests that exercise your features, from their imports. |
| :ScryUnclaimed | List the files no feature describes, in the quickfix list. |
| :ScryDiscard | Drop the last cast's unsaved changes. |
| :ScryTidy | Gather every block of a re-opened feature into one. |
| :ScryLint | Flag feature names that are hard to read — never a verdict, the wording is yours. |
require("scry").setup({ map_path = ".scry/map.scry", resolver = "", -- "" = treesitter + rg test = { cmd = {} }, -- one spec; path appended sources = {}, -- what counts as claimable })
u, saved only by you.