agentleFS
jramsahaijramsahai/obsidian-mcp-brain/resurfacing/SKILL.md

resurfacing

Skill0 starsChanged 2 months agoMITView on GitHub

Monthly pass (on demand or by cron) that finds projects, people, and knowledge notes that have gone quiet — no dated entry in 90+ days — and asks the user what to do with each: keep, archive, or link elsewhere. Read-mostly until the user answers; only then archives or links the specific notes named, and nothing else. NOT for: weekly project staleness at 14 days (weekly-review's Quiet Projects), who to reach out to at 60 days (people-notes -> Cadence), or nightly linking and inbox triage (nightly-consolidation).

The file

We split this skill into the rules it gives an agent

8 rules. About 0 are common, 5 are distinctive, and 3 are 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.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Run the three vault_list calls above.

    line 26
  2. Distinctive:

    Wait for the user's answers.

    line 35
  3. Distinctive:

    Keep -> no write; the note is unchanged.

    line 38
  4. Distinctive:

    Never write to a note the user did not name in their answer, and never act on more than the 15 items proposed in that run.

    line 40
  5. Very specific:

    Never set status: Archived or call obsidian__relate for a note without an explicit answer from the user naming that note.

    line 56
  6. Distinctive:

    Do not infer "no answer" as agreement to archive — silence changes nothing.

    line 57
  7. Distinctive:

    Do not invent facts about why a note is stale beyond what the note itself and its links show.

    line 58
  8. Very specific:

    Follow second-brain permission guardrails.

    line 59

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Resurfacing

Once a month (or on demand), surface the notes nobody has touched in a long time and let the user decide their fate. This skill never decides on its own — it proposes, the user answers, and only the answered notes change. Read second-brain for shared vault conventions and the obsidian__* tool surface.

Data Source

  • obsidian__vault_list type="project" stale_days=90, obsidian__vault_list type="person" stale_days=90, and obsidian__vault_list type="knowledge" stale_days=90 — each returns notes with no dated entry at all, or one older than 90 days. last_entry_date is the note's own dated content (an Activity Log block, a Conversation History row), not file modified time, so a consolidation pass touching a file cannot hide a genuinely quiet note.
  • Daily, synthesis, review, index, and MOC notes are deliberately out of scope — do not list them here even if vault_list would return them for one of those types. A daily note has no dated entries of its own to log against, a synthesis or review is a point-in-time record that is supposed to age, and an index/MOC is a hub, not a thread that goes quiet. None of them can sensibly be "kept, archived, or linked elsewhere."

Workflow

  1. obsidian__vault_status first, for today's date and orientation.
  2. Run the three vault_list calls above. Merge the results into one list.
  3. Sort oldest first: a null last_entry_date (never logged at all) sorts ahead of every real date — it is the quietest a note can be.
  4. Cap the run at 15 items. If more exist, say in the reply how many were left out.
  5. For each note, read enough of it to propose exactly one action:
    • keep — still plausibly relevant despite no dated entry (created recently, or referenced from other active notes).
    • archive — nothing suggests it is still live: no recent references, no open pending topics, the described work reads finished or abandoned.
    • link to [[X]] — a specific other note in the vault now clearly covers the same ground (a merged project, a renamed topic), and this one should point at it rather than stand alone. Never invent a reason for archiving or linking. When none of the three is clearly right, propose keep and say why the note is uncertain rather than guessing archive — archiving is the one action here that changes the note's status, so it gets the benefit of the doubt.
  6. Reply to the invoking channel with one line per note: name as a wikilink, its last_entry_date (or "no dated entry"), and the proposed action. Write nothing to the vault in this step.
  7. Wait for the user's answers. Apply only what they actually said, one note at a time:
    • Archive -> obsidian__note_set_field note="[Note Name]" field="status" value="Archived".
    • Link to another note -> obsidian__relate note="[Note Name]" target="[Other Note]" reason="why they're now the same thread".
    • Keep -> no write; the note is unchanged.
    • An answer that does not map onto one of these two write tools: do not invent a call. Say so in the reply instead of leaving it silently unresolved.
  8. Never write to a note the user did not name in their answer, and never act on more than the 15 items proposed in that run.

Output Shape

**Resurfacing — YYYY-MM-DD**

1. [[Note Name]] — last entry 2026-05-02 — proposed: archive
2. [[Other Note]] — no dated entry — proposed: keep
3. [[Third Note]] — last entry 2026-04-11 — proposed: link to [[Related Note]]

Reply with each number's answer (keep / archive / link to a note) and I'll apply it.

Safety

  • Never set status: Archived or call obsidian__relate for a note without an explicit answer from the user naming that note.
  • Do not infer "no answer" as agreement to archive — silence changes nothing.
  • Do not invent facts about why a note is stale beyond what the note itself and its links show.
  • Follow second-brain permission guardrails; this skill has no delete or move capability regardless.

Cron Invocation

Scheduled monthly, the 15th at 09:00. Use the same workflow as an on-demand run. Deliver the list to the configured channel and stop — a scheduled run proposes for the next conversation to answer; it never assumes anything about notes the user has not yet responded to.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.