一键导入
link
Analyze the vault and create [[]] links between notes. Triggers this skill when the user says "/link", "do the linking", "link my notes" or "vault link".
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Analyze the vault and create [[]] links between notes. Triggers this skill when the user says "/link", "do the linking", "link my notes" or "vault link".
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Generates a complete eval.json for a Claude Code skill via 2-pass pipeline — local draft with Ollama (qwen2.5-coder:14b, $0, ~3min) then Sonnet refinement (claude -p headless, $0 via Max subscription). Launches final verify-eval for validation. Use when you want to cover a skill that doesn't yet have an eval.json, or in batch across multiple skills. Target: increase coverage of the skill auto-evaluation loop (ticket auto-evals-binaires-evaluateskills). Ex: /author-eval closeweek, /author-eval (no arg → interactive list), /author-eval --random 5 (batch).
End-of-day wrap-up — synthesize sessions, update daily note with observed patterns, detect WIP hobby in progress, verify essay-check overdue. Trigger when the user says one of these phrases: "closeday", "I'm stopping", "I'm done", "that's finished", "end of session", "good night", "good day", "stopping for today", "that's enough", "day finished", "I'm stopping now", "it's done" or via /closeday.
Guided commit on explicit request /commit — breaks changes into atomic commits ordered by layer, passes two validations (file selection, then message), handles branch (creation/switch with stash), then executes git add + git commit. Use whenever the user says /commit, 'commit that', 'make the commit', or wants to commit finished work. Never push, merge, rebase or reset EVER. Never commit outside this skill.
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
Scan the daily notes to extract ideas to capitalize on and links to process. Use when the user says "harvest", "do the harvest", "scan my notes", or when /harvest is late in the command-tracker, or at the end of a session if daily notes have been mentioned.
Complete vault scan over an extended period to detect emerging patterns, recurring ideas across different contexts, and deep connections. Use once a month or when the user says "harvest deep", "deep harvest", "analyze the vault".
| name | link |
| description | Analyze the vault and create [[]] links between notes. Triggers this skill when the user says "/link", "do the linking", "link my notes" or "vault link". |
This skill analyzes the vault and proposes Obsidian [[]] links between notes that discuss the same subjects. It never modifies a note without explicit validation from {USER_NAME}.
Anchoring philosophy: the role is to make the graph traversable, not to generate understanding. Claude connects. {USER_NAME} thinks. A well-traversable graph allows other commands like /emerge, /trace or /connect to work correctly — that is the real goal of linking.
These rules apply from the moment suggestions are generated, not after.
Do not link to an aggregate/tracking note when a specific note on the subject exists. Example: a note about Drukhari should point to [[Drukhari - Squidmar Color Scheme]], not to [[tracking-armies]] (too generic).
[Hobby-project] and [Work-project] may share a topic but are independent projects in the vault. Do not create cross-links between them — the common subject is not enough, the notes must complement each other functionally.
A note from [Organization-project] should not link to personal collection notes. The two contexts are separate even if the topic overlaps.
Read the complete content of the source note (body text, "See also" sections, "Connections", inline links → [[...]]) before suggesting a link. Never propose a link that already exists, regardless of its form in the note.
A note that documents a tool for a specific project (ex: UX analytics for [project-name]) should point to the project directly, not to the note that aggregates the vision or ecosystem. The resource is operational — the hub is strategic. The common subject is not enough: there must be functional complementarity between the two notes.
Ignore the [[ ... ]] syntax in bash code blocks (ex: [[ $EUID -ne 0 ]]), and do not break the link at | when it is \| (escaped pipe in Obsidian table = valid link with alias, not a malformed link). Verify by actual grep '\]]' that corruption truly exists before proposing a "cleanup" — a destructive edit on a false positive breaks table rendering.
Do not launch a similar session without explicit signal. Note the context of the refusal (type of notes, scope, theme) to improve future detection.
If {USER_NAME} specifies a folder or note → limit to that scope. Without specification → scan all folders except 00 - Daily notes/ (too much volume, ephemeral links), including mandatory 99 - Claude Code/Sessions/.
List the folders that will be analyzed and wait for confirmation from {USER_NAME}.
Minimal validation before continuing:
Before reading note content, perform a structural scan to prioritize reading. Orphans and deadends are the priority candidates — they benefit most from linking.
⚙️ Harness trap — bash scan backgrounded too early (capitalized 2026-06-01): if structural scan goes through a bash script (faster than Glob/Grep on large scope), the harness may background the command before the process finishes → file reads arrive on incomplete results. Validated workaround: a single script with end marker (ex:
/tmp/linkscan.shthat writes a sentinel on last line), read as one block after marker confirmation — never separate bash commands +sleep.
For each folder to analyze:
.md files (pattern: folder/**/*.md)\[\[: 0 result → deadend (note without outgoing link)\[\[X(\|[^\]]+)?\]\] in the analyzed scope (replace X with the file slug without .md, accept aliases via |): 0 result → orphan (note without incoming link)Prioritize notes that are both orphans AND deadends (complete isolation).
Expected result: list of orphans, deadends, and hubs (notes with 5+ incoming references).
Use Grep with pattern \[\[([^\]]+)\]\] on the scope to extract all links. For each link found (without the alias suffix |...), use Glob to verify that the file link-target.md exists. List links that do not correspond to any file.
If broken links exist: present to {USER_NAME} with suspected reason ("note to create" vs "malformed link"). Wait for instruction before acting.
Read the priority notes identified in Step 2 in this order:
03 - Knowledge/, 04 - Projects/, 99 - Claude Code/) — these folders contain the most recently modified notes by defaultIf the scope exceeds 30 notes, launch multiple passes with Read in parallel (10-12 notes per pass). For each note:
Also identify missing bridges between clusters: two groups of notes gravitating around the same subject without crossing. Propose 1-2 bridge links per cluster pair identified.
Limit to 30-40 suggestions max per session — quality > quantity.
If note A proposes a link to B, do not automatically propose the link B → A. Evaluate each direction separately based on the source note's content: does A discuss B functionally? Does the A → B link add value to A's reader?
For each candidate link, evaluate on 2 dimensions:
Score = Strength × Impact (max 25).
Case "no relevant link": if no candidate link reaches score 5, indicate to {USER_NAME} "no links proposed for this scope — notes too isolated or already well-connected" and stop (do not continue to Step 5).
Present retained links in table format:
### Suggested links
| Source note | Link to add | Target note | Reason | Score |
|-------------|-------------|-------------|--------|-------|
| vault-second-brain.md | [[{USER_NAME}]] | {USER_NAME}.md | Personal context directly related | 20 |
| NMM.md | [[Balthasar-Gold]] | Balthasar-Gold.md | Painting mentioned in the technique | 16 |
Wait for {USER_NAME} validation before adding anything. {USER_NAME} can reject individual links or all suggestions.
For each link validated by {USER_NAME}, use Edit to add [[note-name]] at the relevant place in the source note — at the end of the note in a ## See also section if no natural place exists.
## See also
- [[{USER_NAME}]]
- [[vault-second-brain]]
After adding all links: continue to Step 6 — do not stop here.
Scope: use all folders defined in Step 1 — not just those where links were added. A folder with no added links may still be missing INDEX.md or have missing entries.
Only process folders with a real delta — ignore folders already up-to-date.
For each folder in Step 1 scope:
folder/*.md → list of notes (exclude INDEX.md itself and subfolders)INDEX.md absent → folder candidate for creationINDEX.md present → read its content, extract already-listed slugs, compare with Glob → note missing entriesFor each note absent from the index (or all if creation):
title (or name) and tags| [[slug]] | 1-line description | #tag1 #tag2 |Display affected folders and new entries:
### INDEX.md to update
**03 - Knowledge/** — creation
| Note | Description | Tags |
...
**02 - Hobbies/** — 2 entries added
| [[new-note]] | ... | ... |
Wait for {USER_NAME} validation before writing. {USER_NAME} can validate in bulk or adjust entries.
INDEX.md with header # Index — [Folder Name] + complete tableINDEX.md — append new lines in the existing table (do not rewrite already-present entries)After writing all INDEX.md files: update the tracker (99 - Claude Code/command-tracker.md) if the file exists — /link line → replace the date with today's date in YYYY-MM-DD format. Do not block if the tracker does not exist.
Each time {USER_NAME} refuses a link (or all suggestions) with an explanation, propose capitalization: add the heuristic to the "Learned heuristics" section with the general pattern (not the specific example) so the rule applies to future sessions.
If {USER_NAME} refuses the entire result: note the context (type of notes, scope, theme, reason for refusal) — do not relaunch a similar session without explicit signal.