taste-prune
Skill0 starsChanged 4 months agoMITView on GitHub
Prune and tighten a TASTE.md file β resolve π© contradictions, retire stale low-N rules, tighten phrasing, and surface emerging patterns. Use when the user wants to clean up, audit, trim, or review their TASTE.md, when π© markers have accumulated, or when TASTE.md has grown unwieldy.
In this repository7 other files it gives its agents.
- apify-scraperSkill
- lessons-pruneSkill
- lessonsSkill
- obsidian-canvas-creatorSkill
- obsidian-excalidrawSkill
- recallSkill
- tasteSkill
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 5 are distinctive, and 1 is very specific to this project.
β0
Common Β· estimate
Many files like this have a rule of this kind.
β5
Distinctive Β· estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 119
Collapse premature subsections: If a domain subsection (Design, Writing, etc.) has only 1 rule, remove the subheading and put the rule β¦
- Distinctive: line 121
Surface cross-domain patterns: If 3+ rules across different domains resolve the same underlying force (e.g., "plain vs clever" appears in β¦
- Distinctive: line 168
Only ever add the specific TASTE.md you pruned (use its real path for a nested file) β never git add -A.
- Distinctive: line 184
Never silently delete π© markers: Every one must be resolved interactively or the user must explicitly say "dismiss all π©s as one-offs."
- Very specific: line 185
Never decrement
(N)counters: If a rule is wrong, cut it or rewrite it β don't reduce N. - Distinctive: line 189
Tension groupings require explicit approval: Don't restructure the file by adding a Tensions section unilaterally.
β βCommonβ is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. βVery specificβ is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Prune TASTE.md
Walk every π© marker forcing a resolution decision, then audit the remaining rules for staleness, vagueness, and redundancy. Goal: keep TASTE.md sharp and load-bearing.
Before you start
- Read the TASTE.md in scope in full. A repo may have a cross-cutting root TASTE.md plus nested subdirectory-scoped ones. Prune the file the user pointed at, or the root by default. Note siblings exist but don't merge them β each is scoped to its subtree deliberately; keep the root cross-cutting and push area-specific rules down.
- Read context files β
CLAUDE.md,LESSONS.md, and your auto-memory (e.g..claude/memory/MEMORY.md) if they exist. These are redundancy references: if a TASTE rule duplicates content there, it's a candidate to cut. - Assess current state:
- Count
π©markers. Each one is an unresolved decision that blocks completion. - Count rules per domain subsection. Subsections with only 1 rule may be premature (collapse them back to flat).
- Note rules at
(1)older than ~3 months (checkgit log -Lif needed). These are "never reinforced" candidates. - Total rule count. Target: under 30 rules across all subsections. Over 50 is overdue for pruning.
- Count
- Ask about scope: "Walk all π© markers, then full prune β or just π© resolution this round?" Default to all if the user said
/taste-prunewithout qualification. Establish a clean git baseline. Prune is destructive, so the pre-prune state must be its own recoverable commit before you cut anything. Check
git statusforTASTE.md:- Dirty (uncommitted edits): commit it first, scoped β
git add TASTE.md && git commit -m "context(taste): checkpoint before prune". Nevergit add -A. - Clean: HEAD is already your baseline; nothing to do.
This guarantees every rule you're about to cut or rewrite is preserved at a known SHA, recoverable with one command.
- Dirty (uncommitted edits): commit it first, scoped β
Phase 1 β Resolve π© markers
This phase is non-skippable: every π© must be addressed before any other cleanup happens.
For each rule with a π© marker, present:
π© {Subsection} / "{Rule excerpt}"
Marked {date}: {context from the marker}
Resolve:
[a] Retire the rule entirely
β The contradiction shows the rule is wrong, not just narrow.
[b] Rewrite trigger condition to exclude the contradicting case
β The rule is right in general but its `When [context]` was too broad.
Propose a narrowed trigger; user can edit.
[c] Dismiss as one-off β strip π©, keep the rule as-is
β The contradicting moment was situational, not a real counter-pattern.
[d] Scope it β move the contradicting variant to a subdirectory-scoped TASTE.md
β The contradiction is a genuine per-area divergence, not a narrowing.
Both rules are right, each in its own subtree. Only when that subdir's
taste is substantial and usually out-of-scope elsewhere; otherwise prefer
[b]. The nested file gets a precedence header + names the root rule it overrides.
Choice? [a/b/c/d]Apply each decision before moving to the next π©. After all π© markers are resolved, the file is in a clean state β counters preserved, narrowing applied, dead rules cut.
Worked example β narrowing a trigger (path [b])
Rule in TASTE.md:
- Writing / "When writing emotional content, prefer honest plainness over
symmetrical phrasing, because concrete beats clever. (2)
π© 2026-04-22: chose symmetrical hook for YouTube thumbnail"
Presented:
π© Writing / "When writing emotional content, prefer honest plainness..."
Marked 2026-04-22: chose symmetrical hook for YouTube thumbnail
Choice? [a/b/c]
User picks [b]. Propose:
Narrowed trigger: "When writing emotional content in long-form prose..."
Reason: thumbnails/hooks have different forces β memorability rewards symmetry.
Result: "When writing emotional content in long-form prose, prefer honest
plainness over symmetrical phrasing, because concrete beats clever. (2)"
Counter preserved. π© stripped.The instinct on [b] is to find the smallest phrasing change that excludes the contradicting case without gutting the rule. If you can't narrow without making the trigger awkward or near-empty, that's a signal the rule was wrong in shape β escalate to [a].
Phase 2 β Classify remaining rules
For each rule still in the file, classify:
| Category | Action | What it means |
| Sharp | Keep | When [context] has fired in real sessions (Nβ₯2), rule held up, phrasing is specific. |
| Stale | Cut or ask | (1) for many months, no recent reinforcement, no clear current use case. |
| Vague | Tighten | When [context] is too broad to match reliably (e.g., "When working with codeβ¦"). Rewrite. |
| Redundant | Merge | Two rules cover overlapping triggers with the same preference. Combine. |
| Misplaced | Flag | Belongs in LESSONS.md (gotcha), your process/workflow docs (workflow), CLAUDE.md (architecture), memory (single fact), or a subdirectory-scoped TASTE.md (area-specific taste that shouldn't sit in the cross-cutting root). |
Decision tree per rule
Apply in order; short-circuit on first match:
1. Does the `When [context]` describe a situation specific enough to match in a future session?
β No: tighten (vague)
2. Is the `because [principle]` cited in TASTE.md's Principles section?
β No: propose adding the principle, OR rephrase to cite an existing one.
3. Does another rule in the file cover the same trigger context?
β Yes: merge
4. Is `(N) == 1` and the rule has been in the file >3 months without a π© (no contradiction either)?
β Ask the user: "This rule has never been reinforced. Still relevant?"
5. Does this rule actually express a *judgment call*, or is it a factual gotcha / workflow step / single fact?
β Not a judgment call: move to LESSONS / process docs / memory
6. None of the above:
β Keep (sharp)Subsection hygiene
This is easy to skip β do it deliberately, not as an afterthought.
- Collapse premature subsections. If a domain subsection (Design, Writing, etc.) has only 1 rule, remove the subheading and put the rule under Decision Rules flat. Subsections should emerge from data, not anticipation.
- Graduate a subsection to a nested file when warranted. If a subsection has grown into a distinct sub-project domain (β₯~3 rules) whose taste is usually out-of-scope elsewhere, flag it as a candidate to move into a subdirectory-scoped TASTE.md (progressive disclosure β it loads only when working in that subtree). Don't move it unilaterally; propose it, since it changes file layout and discovery wiring.
- Surface cross-domain patterns. If 3+ rules across different domains resolve the same underlying force (e.g., "plain vs clever" appears in Writing and Design), flag it to the user as a candidate Tension grouping. Do not create the grouping unilaterally β it changes file structure.
Phase 3 β Audit Principles
- Orphan principles β Principles not cited in any Decision Rule's
becauseclause. Ask: "Still load-bearing, or candidate to cut?" - Missing principles β
becauseclauses citing a value that isn't in the Principles section. Propose adding it, or rewording the rule to cite an existing principle. - Format check β Principles use
[aphorism] β [clarifier]form on a single line. The aphorism is the citable handle; the 5-15 word clarifier prevents misreading when read cold. Tighten any that bury the aphorism in the clarifier, omit the clarifier entirely, or whose clarifier just restates the aphorism.
Phase 4 β Present and apply
Show the user a structured summary before any writes:
TASTE.md prune proposal
Phase 1 β π© resolutions:
[resolved interactively above]
Phase 2 β Rule changes:
Cut (stale): X rules
Cut (misplaced): Y rules β see recommendations
Rewritten (vague/narrowed): Z rules
Merged: A rules combined into B
Phase 3 β Principles:
Added: ...
Cut: ...
Tightened: ...
Subsections:
Collapsed: ...
Pattern flagged for Tension grouping: ...
Apply all? [y / n / by-phase]by-phase means walk Phase 2 β Phase 3 β subsections one at a time, getting [y/n] per phase. Use it when the user wants to commit between phases or veto a single phase's worth of edits.
Apply all approved edits in a single pass, then commit β scoped, immediately, so the prune is its own atomic, identifiable commit. A prune is one semantic op, so it's a single commit (or one per phase if the user chose by-phase), following the ledger grammar (see the lessons skill's Commit protocol). List what was cut or retired so a wrongly-removed rule is greppable in git log later:
git add TASTE.md
git commit -m "context(taste): prune β cut N, rewrote M, resolved K π©" -m "cut: <rule key 1>
cut: <rule key 2>
rewrote: <rule key 3>"Only ever add the specific TASTE.md you pruned (use its real path for a nested file) β never git add -A. Skip the commit only on a true no-op. Then verify it landed (git status + git log -1 --stat) and register the repo in the machine-wide ledger index:
mkdir -p ~/.claude/context-ledger
r=$(git rev-parse --show-toplevel)
grep -qxF "$r" ~/.claude/context-ledger/repos 2>/dev/null || echo "$r" >> ~/.claude/context-ledger/reposReport the recovery line to the user: the prune commit SHA plus git revert <sha> to undo the entire prune in one step.
Rescue pass
Before writing, do a final scan of everything being cut. Ask: "Any of these look like they'd be painful to re-derive if cut?" Show the full cut list. A cut taste rule is harder to recover than a cut gotcha β it required real session experience to articulate.
Rules
- Never silently delete π© markers. Every one must be resolved interactively or the user must explicitly say "dismiss all π©s as one-offs."
- Never decrement
(N)counters. If a rule is wrong, cut it or rewrite it β don't reduce N. - Preserve
(N)on rewrites. When narrowing a trigger, the prior reinforcements still count. On merges, default to sum β each prior(N)represents an independent confirmation of the underlying judgment, so summing reflects real cumulative evidence. Use max only when you suspect a single session reinforced both rules in parallel (double-counting). Ask the user if uncertain. - Never move rules across files without telling the user. Flag misplaced rules in the proposal; the user decides whether to move them.
- Use
(N), never[N].(N)is the counter convention across these skills. (Square brackets also render as checkboxes in Obsidian.) - Tension groupings require explicit approval. Don't restructure the file by adding a Tensions section unilaterally.
- If TASTE.md is already clean (no π©, all rules sharp, principles cited), say so and exit. Don't manufacture work.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

