Save
Save learning content as a TIL file and update MOC and backlog. Use when the user says 'save this', 'write up what I learned', 'document this as a TIL', or wants to persist a learning conversation as a note.From its SKILL.md
npx -y skills add SongYunSeop/oh-my-til --skill saveAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.6 KB, as published. Nobody here has run it
TIL_PATH: All
${TIL_PATH}/...references below resolve to the vault's configured TIL path (injected at SessionStart). Bash expands${TIL_PATH}automatically. ForRead/Edit/Glob/Writetools, substitute the resolved value before passing it as an argument (e.g.${TIL_PATH}/SCHEMA.md→40-Resources/til/SCHEMA.md). Defaulttilwhen not injected; call MCPtil_get_pathif you need the current value.
Save Skill
Learning conversation → Save TIL file → Update MOC/backlog → Review document → Commit.
MCP Tools
til_get_context: Find related TILs and backlog itemstil_list: Check for duplicate existing TILstil_save_note: Save TIL note (server guarantees frontmatter/path rules, auto_check_backlog auto-checks backlog)
Step 0: Load Schema and Surface Augmentation Candidates
-
Read
${TIL_PATH}/SCHEMA.mdfor current TIL conventions. If missing, fall back to built-in defaults and notify the user once: "${TIL_PATH}/SCHEMA.mdnot found — using built-in defaults. Run/omt-setupto seed."- Built-in defaults: required frontmatter
title, date, category, tags, aliases;tagsmust include"til"; body links use[name](path.md), not[[wiki]]; cross-references viarelated:frontmatter array.
- Built-in defaults: required frontmatter
-
Surface augmentation candidates with
til_get_context(topic = current learning subject, category if known).- If 1+ related TIL found: present top 3 as candidates and use
AskUserQuestion: "Augment existing? / Create new?".- Augment: Step 1 reuses the chosen TIL's existing path (skip slug creation). Step 3 uses
Read→Editon that file instead oftil_save_note. This is the compounding default — prefer it whenever a clear candidate exists. - Create new: continue with the new-file flow.
- Augment: Step 1 reuses the chosen TIL's existing path (skip slug creation). Step 3 uses
- If no candidates: continue with the new-file flow (no question needed).
- If 1+ related TIL found: present top 3 as candidates and use
-
The
til_get_contextresult from this step also populates link candidates — Step 2 reuses it without calling again.
Step 1: Confirm Topic and Path
- Identify topic and category. Ask the user if unclear.
- If augmenting (Step 0 selection): use the chosen TIL's path; skip the existence check.
- If creating new: use
Readto check if${TIL_PATH}/{category}/{slug}.mdexists. If it does, ask the user to confirm merge or overwrite.
Step 2: Confirm Link Candidates
Reuse the til_get_context result from Step 0 (do not call again).
- Existing TIL/backlog items → use markdown links in the body
- Concepts that don't exist → confirm with user, then add only to related notes
Step 3: Save TIL File
Path: ./${TIL_PATH}/{category}/{topic-slug}.md (slug: lowercase English with hyphens)
Save new file: Save using the til_save_note MCP tool. The server guarantees frontmatter (title, date, category, tags, aliases) and path rules.
til_save_note(category, slug, title, content, tags, date, fmCategory, aliases, auto_check_backlog: true)
date: Get local time viadate +%Y-%m-%dT%H:%M:%Scommand and pass ittags: Must include "til"aliases: ["Korean title", "English title"]content: Body markdown excluding frontmatter- If raw sources were used during the learning session, include them in the body's References section as local links:
[Title](raw/{category}/{slug}.md)
When a file with the same slug exists (detected by Read in Step 1):
- Auto-merge only when continuing a
/tilfollow-up session (preserve existing content + reinforce, addupdated) - Otherwise: ask user to confirm merge or overwrite
- For merge: use Read→Edit directly on existing content instead of
til_save_note
TIL Body Template
Read references/templates.md for the exact TIL body and MOC templates.
- Links:
[display name](${TIL_PATH}/{category}/{slug}.md)— no[[wiki links]]
Step 4: Update Related Files
Update the related index files directly in sequence (no subagents — parallel edits can race and corrupt shared files like MOC):
- TIL MOC (
./${TIL_PATH}/TIL MOC.md): Add item to category section (create if not exists) - Backlog:
- New file mode: Already handled by
til_save_note'sauto_check_backlog: true(no separate call needed) - Augment mode: Call
til_backlog_checkdirectly if the augmented TIL maps to a backlog item — Step 0 selected augment, so Step 3 usedRead→Editandauto_check_backlogwas not triggered
- New file mode: Already handled by
MOC: Read → find position → Edit. Create file if not exists.
Step 5: Document Review
Display full saved TIL content → use AskUserQuestion to confirm ("Looks good" / "Needs revision").
Step 6: Auto-lint Loop
After saving (Step 3) and updating related files (Step 4), apply til-lint Check 1 (Frontmatter) + Check 2 (Orphan/MOC) rules inline in fast mode — refer to skills/til-lint/SKILL.md for the rule definitions and emit a ## Violations block matching the documented structure for self-parsing. til-lint stays read-only — /save applies the fixes.
- Run the fast checks scoped to the current file (or its category).
- Parse the
## Violationsblock in the report:No violations found.→ exit loop, proceed to Step 7.- Violations present → classify and act:
- Auto-fixable (trivial frontmatter —
tagsmissing"til", malformeddate,relatedarray shape): fix viaEdit. - User-decision (MOC entry placement,
aliasescontent, ambiguous values): surface to the user viaAskUserQuestioninstead of auto-applying — record the user's choice in this iteration's fix set.
- Auto-fixable (trivial frontmatter —
- Increment iteration counter after each round.
- Re-run
/til-lint --fast. Repeat up to max 3 iterations. - If iteration 3 still has unresolved violations, use
AskUserQuestion:- Commit with remaining violations: proceed to Step 7. Surface the residual violations in the user-facing summary.
- Try fixing again: continue for one extra round, then ask again. The cap does not auto-reset.
- Abort: stop, report current state, do not commit.
Parsing fallback:
- If til-lint output cannot be parsed as the documented
## Violationsformat, log a warning and treat as "no violations" to avoid blocking. Recommend a manual/til-lintrun in the summary.
Track the iteration counter explicitly. A missing counter is the failure mode that turns this into an unbounded loop.
Step 7: Register for Review
Ask via AskUserQuestion: "Would you like to add this TIL to spaced repetition review?"
If user agrees, call til_review_update (action: "review", grade: 4) to create SRS metadata.
Step 8: git commit
📝 til: {English title}({Korean title}) - {category} (no push)
Rules
- frontmatter required: date, category, tags, aliases (fill in any missing fields before saving)
- tags must include "til" (used to filter TILs on the static site)
- No
[[wiki links]]— use[display name](path)format only (links must work in static sites and non-Obsidian editors) - Always update MOC/backlog after saving the TIL
- Use callouts:
> [!tldr],> [!example],> [!warning],> [!tip] - Visualize complex concepts with Mermaid diagrams (max 1 per TIL)
- Use placeholder values for sensitive information (avoid leaking real credentials)
- If the TIL was created from raw sources, add a
## Referencessection with links to the raw files:[Source Title](raw/{category}/{slug}.md). Include original URLs alongside raw paths when available.