Skip to main content

felt

Use whenever working in a project that contains a `.felt/` directory — read it before other tools — and whenever the user mentions fibers or asks to "file this", "record a decision", "close this fiber", "update the outcome", "clean up fibers", "consolidate", "archive", "sweep", "maintenance pass", or "extract from the session". Covers what a fiber is, filing and searching, keeping outcomes and bodies current, project-specific frontmatter, syncing the store, the end-of-session sweep, and tending the tree.

Source facts

Repository
cailmdaley/felt
Last source activity
October 26, 2026 at 20:29
Detected SKILL.md language
English
Stars
8
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
felt
description
Use whenever working in a project that contains a `.felt/` directory — read it before other tools — and whenever the user mentions fibers or asks to "file this", "record a decision", "close this fiber", "update the outcome", "clean up fibers", "consolidate", "archive", "sweep", "maintenance pass", or "extract from the session". Covers what a fiber is, filing and searching, keeping outcomes and bodies current, project-specific frontmatter, syncing the store, the end-of-session sweep, and tending the tree.
# felt felt is a memory store of Markdown files kept in Git. Each *fiber* is one thing worth keeping track of — a todo, a decision, a finding, a spec, a reference note — in its own folder under `.felt/`, and folders nest: ``` .felt/bao-analysis/ ├── bao-analysis.md └── damping-prior/ ├── damping-prior.md └── sigma-scan.png ``` That fiber's id is its path, `bao-analysis/damping-prior`, or its slug `damping-prior` alone when unique. `damping-prior.md`: ```markdown --- name: BAO damping scale in the fiducial fit status: closed tags: [decision] outcome: Fixed Σ_nl at the simulation-calibrated 5.5 Mpc/h — freeing it widens the α error ~30% with no shift in the mean. --- The fiducial fit in [[bao-analysis]] needs a value for the damping scale Σ_nl, degenerate with the peak amplitude at our signal-to-noise. Freed, Σ_nl runs to the prior edge in a third of the mocks ([[bao-analysis/mock-validation]]): ![Σ_nl scan](sigma-scan.png) ``` - **path** — containment: this fiber belongs to `bao-analysis`. `felt tree` walks it; `felt nest` changes it. - **outcome** — the conclusion in one sentence that stands alone: what was learned or decided, and why. Listings lead with it, so "done" is a failed outcome. - **status** — opt-in, for todos: ○ `open`, ◐ `active`, ● `closed`. A finding or decision recorded after the fact has none. `felt ls` lists open and active fibers. - **body** — opens with a lede readable alone (`felt show -d summary` shows only that). `[[wikilinks]]` sit in the sentence that says why the link matters. - **companion files** — plots, PDFs, reports sit beside the markdown and move with it. - **your own fields** — any frontmatter a project needs survives every edit (`--set key=value`, or edit the file). An `inputs:` entry with `from: <fiber>` declares a data-flow edge (`felt show <id> --consumers`). - **stamps** — `id:` (a ULID that survives moves), `created-at`, `updated-at`, `closed-at` are felt's; leave them alone. A bare `.felt/<slug>.md` at a store's root is the project's entry point. A project's `.felt` may be a symlink into a larger shared store: `felt ls` and `tree` stay in the project's view, `felt find` searches the whole store, and any id works with `show` and `edit`. Linking a project into a store has a data-loss trap: follow <https://cailmdaley.github.io/felt/concepts/cross-project/>. ## Commands ``` felt show <id> # read by address (-d compact | summary) felt find "word" # does a fiber on this exist? whole store; body search is default felt tree -L 1 # orient felt add <parent>/<slug> "name" -o "outcome" [-t tag] [-s open] felt edit <id> -s closed -o "what was learned" felt ls [-t tag] # open and active work felt sync / felt sync --push # merge the store's upstream / publish ``` `felt <verb> --help` has the rest. Edit bodies and long outcomes in the file itself (`.felt/<path>/<slug>.md`); put a multi-sentence outcome in a `|-` block scalar. Plain queries search bodies by default, placing name/slug hits before metadata hits and marking body-dependent hits; `--no-body` restores the metadata-only scope. ## Practice **Sync first; commit your own files.** `felt sync` before substantive work. Other sessions write to the same store, so commit only the fibers you changed, by path, then `felt sync --push`. Resolve conflicts from context; never discard another session's edits, and report a sync you couldn't complete. **Search before you file.** When a fiber already holds the concern, extend it; a second one splits its history. **File while it's fresh.** When a decision, finding or correction from the user lands, file it under its parent then, without asking — reconstructed later, it has drifted. No empty stubs. **Correct, don't append.** A body says what is true now. When understanding moves, rewrite the sentences it moved, outcome first; git holds the history. No "Update:" paragraphs or "v2" markers. **Sweep before you leave.** File what stayed implicit — including what you decided *not* to do — and bring the outcome and status of every fiber you touched up to date. **Tidy where you touch.** Open and active mean todo; close what's stale, and drop status from containers. Ask before deleting fibers or merging where the synthesis needs domain judgment. For a larger pass — regrouping, consolidating — read [references/tending.md](references/tending.md).
View on GitHub