name: rlat-learn
description: >-
Teach an rlat knowledge model (.rlat) the world it serves — from inside the
session, on the user's subscription, no API key. Extract durable WORLD facts,
standing constraints, and tried-and-falsified findings from what the USER said,
apply the four capture gates (incl. the privacy gate: facts about the person
never land), confirm with the user, then land each via the key-free
rlat capture-attribute. Trigger when the user says "remember this",
"rlat should know this", "teach the knowledge model", "capture that as a
constraint", "record that X didn't work", "save what we learned about the
project/tenant/garden", or at a session's natural end when durable world facts
surfaced. NOT for: personal preferences or facts about the user themself (the
privacy gate drops them); corpus content that already lives in the documents
(build/refresh handles those); session-transient state.
allowed-tools: Bash(rlat:*), Read, Glob, Grep
rlat-learn — teach the knowledge model its world, in-session
A .rlat carries more than documents: stable world facts, standing
constraints, and tried-and-falsified findings — the three content classes
that measurably change answers (receipts on the project's benchmarks page).
The CLI's background hook can mine these automatically with an API key; this
skill is the subscription path: you are the extractor, the user confirms,
and the landing command is key-free. Strictly better in one way — every fact is
human-approved before it enters the file.
The four gates (apply to every candidate — when in doubt, DROP)
These are the validated gates of the production miner (E2c: precision 0.86, recall 1.00, zero person-fact leaks). Mirror them exactly:
- DURABLE + STANDING — true before this session, persists after it. Not transient state, not something discovered or changed during the session (a version a command just printed; "right now X is failing").
- STATED BY THE USER — first-person/possessive ("our tenant…", "my garden…", "the practice never…"). Not your own statements, not a corpus fact, not a hypothetical.
- PREMISE-BEARING — knowing it would change the correct answer to a realistic future question. Drop opinions and incidental nouns.
- ABOUT THE WORLD, not the person (the privacy gate) — true for anyone who uses this knowledge model (the tenant, the project, the garden, the practice). Drop the user's role, machine, habits, and preferences entirely. The band is shareable; person-facts never land.
Classify each surviving fact
| Kind | What it is | Example |
|---|---|---|
attribute |
A stable world fact | "The tenant runs an F64 capacity." |
constraint |
A standing hard rule — served on EVERY query | "No preview features in production." |
falsified |
Tried and failed — include the evidence in the text | "Tried nightly full rebuilds; falsified by the May cost review." |
The loop
Collect — re-read the conversation for USER statements that pass all four gates. Phrase each ≤30 words, third-person, self-contained, about the world ("The tenant…", "The garden…"), never about the person.
Confirm — show the user the candidate list with proposed kinds and subject keys. Let them edit, drop, or re-kind each one. Nothing lands without their say-so.
Land — find the knowledge model (
Glob "*.rlat"; prefer the project-named one, ask if several). For each approved fact:rlat capture-attribute <km.rlat> "<fact>" --kind <attribute|constraint|falsified> [--attribute-key "<subject>"]Give a
--attribute-key(a short normalized subject, e.g."capacity","water restrictions") whenever the fact is a value of a subject that can change — at serve time the newest value per subject wins, so a later correction supersedes cleanly. Leave it off for one-off facts.Receipt — tell the user what landed and where to review or remove it:
rlat lens/rlat profile(full trail:rlat audit,rlat trace). Constraints will now lead everyrlat search --format contextoutput as "Standing constraints for this environment:".
Worked example
User, during a session: "Remember our deploys only happen on Tuesdays, and we already tried blue-green — it broke the warm cache."
- Gate-check: both durable, user-stated, premise-bearing, about the world. ✓
- Classify: constraint + falsified.
- Confirm with the user, then:
rlat capture-attribute project.rlat "Deploys to production happen on Tuesdays only." --kind constraint --attribute-key "deploy window"
rlat capture-attribute project.rlat "Tried blue-green deploys; falsified — broke the warm cache (2026-05)." --kind falsified
- Receipt: "Landed 1 constraint + 1 falsified finding into project.rlat —
review with
rlat lens. The deploy rule now precedes every context serve."