tpierrain/kenjaku/file-back
Claude Code and agent skill by tpierrain/kenjaku
- community
Checking that the SKILL.md file is still in the repository.
File a hard-won answer back into the vault as a durable note (Axis 1): after a substantive exchange, PROPOSE distilling it into a topic / decision / person / meeting page — with a suggested target zone, tags and [[links]] — then write it only once the user says yes. The write goes through a deterministic builder so the note is taxonomy-conformant by construction (never re-introduces the defects /lint reports). Triggered by '/file-back', 'file this back', 'save this answer', 'turn this into a note', 'garde cette réponse', 'classe ça dans mon cerveau', 'fais-en une note durable'.
Install
npx vskill@latest install tpierrain/kenjaku/file-backSKILL.md
file-back — file the good answer back ("don't let this evaporate")
A second brain that only ever captures raw input slowly rots: the hard-won synthesis of a goodexchange evaporates when the session ends. This skill is the "answers filed back" half of theKarpathy LLM-Wiki compile discipline (see ADR 0033): when a conversation produced something worthkeeping, offer to distil it into a durable, well-linked note — so next time the brain knows it.
Principle
One promise: turn a substantive answer into a durable, conformant note — proposed first, written only on yes.
- The judgment is yours (and the user's): is this worth keeping? what type of note? where does it belong?
- The write is deterministic (ADR 0009): the note's path, its frontmatter (
type/created/
updated/tags) and its woven [[links]] are built by a tested helper, conformant by construction — so a filed-back note never shows up later in a /lint report.
- The write is confirmed, never silent (the brain's write posture): propose, let the user say yes.
When to use it
After an exchange that produced durable value: a synthesised answer, a decision reached, a profile of a person that emerged, the notes of a meeting. Offer it; do not nag on every trivial turn. Good signals: the user says "keep this" / "garde ça", or you can feel the answer took real work and would be costly to reconstruct.
Procedure
1. Decide the shape (judgment)
Pick, from the vault taxonomy (see the constitution, §"Note format"):
- type → one of
topic,decision,person,meeting(the four durable, non-raw zones). topic→ a cross-cutting concept (topics/<slug>.md).decision→ a dated decision record (decisions/<date>-<slug>.md).person→ a person page (people/<firstname-lastname>.md).meeting→ dated meeting notes (meetings/<date>-<slug>.md).- title → a clear, human title (the builder slugifies it: kebab-case, no accents).
- tags → at least one (required for conformance).
- body → the distilled synthesis, in the user's language. Be concise and self-contained.
- links → the existing notes this connects to, as
[[people/jane-doe]],[[topics/rag]]paths.
Prefer targets that already exist (run /lint if unsure) so you don't create dangling links.
- distinguish (
persononly) → what tells this person apart from everyone the vault already
knows by that first name: their role, their organisation, and the other cards by name. It becomes the card's homonymy block, under the title. Give it whenever the first name is not obviously unique — a card that does not say which Romain moves the ambiguity into the vault instead of resolving it, and the next resolution inherits it. See the identity discipline in `sync-sources`.
- sources (required on every note, the builder refuses without it) → what this note was
built from, as [{"tier":…,"ref":…}], one entry per source actually read:
verbatim→ the raw thing itself: a transcript's own turns, the message as sent, the document.conversation→ this exchange, when the note distils what was worked out here and nothing external.human-summary→ someone's recap of something they attended or read.ai-summary→ a note-taker's synthesis (Gemini, Noota, Fathom, tl;dv, Otter, Fireflies, Read.ai…).
The ref names the document, the section and the date, so the reading can be gone back to. A search-result snippet is not a source and is refused as such: open the document and declare the tier you actually read. When a document holds both a summary and the verbatim — a Meet export is exactly that, the AI notes first, the transcription below — the verbatim is the source; read it, and declare the summary too only if you leaned on it. The weakest declared tier is stamped as source_tier: in the frontmatter, so "which notes here rest on an AI synthesis?" stays a query rather than a re-read.
- confidence (
person— required, the builder refuses without it) → what this card's identity
actually rests on: {"level":"observed|probable|unverified","basis":"…"}. Same scale as the claim discipline, deliberately: observed = you read the full name at a source you can cite, probable = you resolved it from context, unverified = you could not confirm it. The basis says on what (the source, its date, the card it matched). It becomes the card's confidence block and a frontmatter field. Required rather than offered because a conformant card born of a guess is indistinguishable from one born of a signed source, and the vault reads both as truth forever.
2. Propose (never write yet)
Show the user, plainly: the target path, the type/tags, the [[links]], and the body you intend to file. Ask for a yes. Adjust to their edits.
3a. New page → write via the deterministic builder
Once confirmed, from the brain folder, pipe a JSON spec to the builder (it stamps today's date, writes under vault/, and refuses to overwrite):
dateis required for dated types (decision,meeting), e.g."date":"2026-07-17".- Exit 0 = written (it prints
✓ Filed back: vault/<path>); relay that path. - Exit 1 = refused (note already exists) or invalid spec; read the message verbatim — if it already
exists, this is a living page, so go to 3b instead.
- Exit 1, third case: a
personwhose first name the vault already holds and nodistinguish.
The message names the homonym cards it found. This is not a tool failure to work around: read those cards, and either say which one this is (add distinguish, re-run) or, if the name cannot be resolved, say so to the user and file nothing — never re-run with a surname you supplied.
- Exit 1, fourth case: a
personwith noconfidence. Answer it honestly rather than reaching for
the level that unblocks the write: unverified written down costs nothing, and is exactly what the next resolution needs to know.
- Exit 1, fifth case: no
sources. Same posture — do not reach for the tier that unblocks the
write. If what you have is an AI synthesis, say ai-summary; a note that says so is a note whose reader can go and check, and a backlog built on a Gemini recap once welded a surname onto a first name, rendered an unanswered question as settled and inverted a fact, with the verbatim sitting further down the very same file.
3b. Existing living page (person / topic) → append a dated section
Filing back never overwrites. When the target already exists, refine it additively: append a dated section and bump its updated:. Keep it conformant, mirroring the builder's shape:
This edit is the brain's normal confirmed write (the auto-commit hook persists it). ⚠️ This path does not go through the builder, so nothing here refuses an undeclared section — the header is yours to write, in the builder's own shape and with the same four tiers (📄 verbatim / 💬 this conversation / 📝 human synthesis / 🤖 AI synthesis). An addition that does not say what it rests on is the same defect as a note that does not, only on a page the vault already trusts.
Promoting a confidence marker. When a card marked 🟡 or 🔴 is later confirmed, do not hand-edit its frontmatter (that is how a page ended up with two updated: keys and became unreadable). Pipe the new level to /refresh-note, which rewrites the field and the visible block together — and writes that block for the first time on a card that predates it, in the builder's own slot:
Guardrails
- Propose first, write on yes. This skill never files a note the user hasn't agreed to.
- Never overwrite. New pages go through the builder (which refuses to clobber); existing living
pages are appended to, not replaced.
- Conformant by construction. Let the builder produce the frontmatter and links — do not hand-roll
a note that /lint would then flag.
- Do not run git — every accepted change is versioned for you: the builder commits the note it just wrote, and the hook covers anything you write with
Write/Edit. If it prints⚠️ … NOT committed, relay that line: it is the one case where a note exists only on this machine. - Prefer existing link targets so you don't trade evaporation for dangling links.
Out of scope
- Deciding on its own that an exchange is worth keeping and filing it unattended (always proposed).
- Bulk-consolidating many raw captures into higher-order pages (that is Track C, a separate gesture).
- Merging/deduping against an existing page's content beyond appending a dated section (Track C / D).
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingengine-skills/file-back/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/tpierrain/kenjaku/file-back)