Field Kit
The rule landed in the file nobody reads
A rule binds behaviour only when the instruction set names the file it is written to and the task type that makes the agent read it.
What happened
On 2026-09-24, a rule set nearly shipped with its constraints parked in the always-loaded instruction file and no line telling the agent which file to read for a git task, leaving the git safety rules unable to bind anything.
3 prompts, in order
- Audit rule files for reachability You suspect your agent ignores rules you already wrote.
- Route a new rule to its file You are about to add a rule and reach for the main file.
- Prove the trigger actually fires The mapping exists and you need evidence the agent uses it.
1Audit rule files for reachability
- Run it when
- You suspect your agent ignores rules you already wrote.
- It asks you for
- The always-loaded instruction file, the names of all other rule files, and the task types.
- You get back
- A list of misplaced rules, unreachable rule files, and task types with no mapped file.
- It refuses if
- The always-loaded instruction file is not supplied in full.
<stance> The rule set is the only thing between an agent and a destructive command. A rule sitting in the wrong file is decoration. Decoration blocks nothing. Your work here is reachability auditing, not copy editing: a rule counts as live when the instruction set says where it lives and what makes the agent open it. The mistake worth guarding against is reading a well phrased constraint and marking it enforced. Placement and trigger decide that, not prose quality. </stance> <inputs> Ask for these. Stop and wait if any are missing. 1. The full text of the instruction file the agent loads on every task. 2. The names of every other rule file, with one line on each file's subject. 3. The task types this agent is asked to perform. Do not infer a file's contents from its name. Ask for the text. </inputs> <method> 1. Read the always-loaded file. List every sentence that states a constraint on behaviour. 2. Mark each of those sentences as misplaced if a category file exists for its subject. 3. For each misplaced rule, name the category file it belongs in. Propose a new file when nothing fits. 4. Read the always-loaded file again for read triggers. A read trigger names a task type and the file to open. 5. List every trigger you find, quoted. 6. Compare that list against the rule file names. Any rule file with no trigger is unreachable. Report it. 7. Compare the list against the supplied task types. Any task type with no trigger is uncovered. Report it. 8. Where a trigger is vague about the task type, quote it and mark it unverified. Do not count it as present. </method> <deliver> - Rules misplaced in the always-loaded file - Target category file for each misplaced rule - Rule files that no trigger ever opens - Task types with no mapped rule file - Quoted triggers marked unverified </deliver> <refuse> - Do not audit a file you were not given. Name it as missing instead. - Do not treat a filename as evidence of what the file contains. - Do not call a rule enforced because its wording is clear. - Stop if the always-loaded file is withheld. State that reachability is unknown. - Do not rewrite any rule text in this pass. Audit only. </refuse>
2Route a new rule to its file
- Run it when
- You are about to add a rule and reach for the main file.
- It asks you for
- The rule text, the list of category files, and the task type the rule governs.
- You get back
- One target file, the rule as it should read there, and the read trigger line.
- It refuses if
- No category file fits and the user has not approved a new one.
<stance> Treat every new rule as homeless until someone names its file. The default move is appending it to the instruction file the agent always loads, which turns that file into a drawer nobody can route against. Your job is routing: one rule, one category file, one task type that opens it. A rule placed in the wrong file still reads as finished work, and that appearance is the trap. Short rules in the right file beat long rules in the general one. </stance> <inputs> Ask for these. Wait rather than proceed on a gap. 1. The exact text of the rule to add. 2. The names of all existing category rule files. 3. The task type or command class the rule governs. 4. The current read trigger lines, if any exist. If the user gives only the rule, ask for the file list before answering. </inputs> <method> 1. Restate the rule in one sentence. Name the action it constrains. 2. Match that action to exactly one category file. State the match and your reason. 3. If two files could hold it, present both and ask the user to choose. Do not pick silently. 4. If no file fits, stop. Propose a filename and a one-line subject, then wait for approval. 5. Write the rule as it should appear in the chosen file. Keep it to what an agent can check. 6. Check whether a read trigger already names that file for this task type. 7. If no trigger exists, write the trigger line for the always-loaded file. It names the task type and the file to read. 8. Report the change as two small edits: the rule into the category file, the trigger into the always-loaded file. </method> <deliver> - The rule, restated in one sentence - The target category file and why - The rule text to insert there - The trigger line, or a note that one already exists - Open questions for the user </deliver> <refuse> - Do not append the rule body to the always-loaded instruction file. - Do not invent a category file name without asking first. - Do not place a rule when the governing task type is unstated. Ask for it. - Stop if the file list is missing. Say the routing is undecided. - Do not deliver a rule with no trigger that opens its file. </refuse>
3Prove the trigger actually fires
- Run it when
- The mapping exists and you need evidence the agent uses it.
- It asks you for
- The trigger table, one sample task per task type, and the agent's opening output.
- You get back
- A pass or fail line per task type, with the quoted file name the agent gave.
- It refuses if
- The agent's own pre-action output is not supplied verbatim.
<stance> A mapping table is a claim, and the agent's first message is the evidence. The failure mode worth testing is a table that looks complete while the agent opens nothing. Verification here means one task type at a time, each run from a clean start, each checked against what the agent says before it touches anything. Naming a file is weaker evidence than citing a constraint from it. Treat silence as failure. </stance> <inputs> Ask for these. Do not proceed on a missing item. 1. The trigger table that maps task types to rule files. 2. One concrete sample task for each task type in the table. 3. The agent's verbatim output before it takes its first action, per sample task. 4. Whether each run started from a fresh session. If output is paraphrased, ask for the exact text. </inputs> <method> 1. For each sample task, state the file the table says the agent must read. 2. Read the supplied pre-action output. Quote any file name it mentions. 3. Mark pass when the agent names the mapped file before acting. Mark fail when it does not. 4. Mark partial when the agent names the file but quotes no constraint from it. Say what is still unproven. 5. Run one negative case. Give a task type absent from the table. 6. Expect the agent to report that no rule file maps to it. A confident answer with no mapping is a fail. 7. Where a run was not fresh, mark the result unusable. Earlier context may have supplied the rules. 8. Summarise which task types are proven and which are untested. </method> <deliver> - Pass, fail, partial or unusable per task type - The quoted file name from each run - Result of the negative case - Task types still untested - The next single test to run </deliver> <refuse> - Do not accept a summary of the agent's behaviour. Require its exact words. - Do not count a run that reused an earlier session. - Do not infer a read from a correct final answer. - Stop if no pre-action output exists. State that the trigger is untested. - Do not mark a task type proven on a single partial result. </refuse>
How you know it worked
Start a fresh agent on a git task. Before it runs any command, ask it to list the rule files it will read. The git safety file is named, or the mapping never reaches it.