agentsclimarketplace

Save

Skill SongYunSeop/oh-my-til/skills/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

Install
npx -y skills add SongYunSeop/oh-my-til --skill save

Assembled 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. For Read/Edit/Glob/Write tools, substitute the resolved value before passing it as an argument (e.g. ${TIL_PATH}/SCHEMA.md → 40-Resources/til/SCHEMA.md). Default til when not injected; call MCP til_get_path if 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 items
  • til_list: Check for duplicate existing TILs
  • til_save_note: Save TIL note (server guarantees frontmatter/path rules, auto_check_backlog auto-checks backlog)

Step 0: Load Schema and Surface Augmentation Candidates

  1. Read ${TIL_PATH}/SCHEMA.md for current TIL conventions. If missing, fall back to built-in defaults and notify the user once: "${TIL_PATH}/SCHEMA.md not found — using built-in defaults. Run /omt-setup to seed."

    • Built-in defaults: required frontmatter title, date, category, tags, aliases; tags must include "til"; body links use [name](path.md), not [[wiki]]; cross-references via related: frontmatter array.
  2. 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→Edit on that file instead of til_save_note. This is the compounding default — prefer it whenever a clear candidate exists.
      • Create new: continue with the new-file flow.
    • If no candidates: continue with the new-file flow (no question needed).
  3. The til_get_context result from this step also populates link candidates — Step 2 reuses it without calling again.

Step 1: Confirm Topic and Path

  1. Identify topic and category. Ask the user if unclear.
  2. If augmenting (Step 0 selection): use the chosen TIL's path; skip the existence check.
  3. If creating new: use Read to check if ${TIL_PATH}/{category}/{slug}.md exists. 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).

  1. Existing TIL/backlog items → use markdown links in the body
  2. 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 via date +%Y-%m-%dT%H:%M:%S command and pass it
  • tags: 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 /til follow-up session (preserve existing content + reinforce, add updated)
  • 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):

  1. TIL MOC (./${TIL_PATH}/TIL MOC.md): Add item to category section (create if not exists)
  2. Backlog:
    • New file mode: Already handled by til_save_note's auto_check_backlog: true (no separate call needed)
    • Augment mode: Call til_backlog_check directly if the augmented TIL maps to a backlog item — Step 0 selected augment, so Step 3 used Read→Edit and auto_check_backlog was not triggered

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.

  1. Run the fast checks scoped to the current file (or its category).
  2. Parse the ## Violations block in the report:
    • No violations found. → exit loop, proceed to Step 7.
    • Violations present → classify and act:
      • Auto-fixable (trivial frontmatter — tags missing "til", malformed date, related array shape): fix via Edit.
      • User-decision (MOC entry placement, aliases content, ambiguous values): surface to the user via AskUserQuestion instead of auto-applying — record the user's choice in this iteration's fix set.
    • Increment iteration counter after each round.
  3. Re-run /til-lint --fast. Repeat up to max 3 iterations.
  4. 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 ## Violations format, log a warning and treat as "no violations" to avoid blocking. Recommend a manual /til-lint run 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 ## References section with links to the raw files: [Source Title](raw/{category}/{slug}.md). Include original URLs alongside raw paths when available.

Keep looking

Skills are one crate of 626,194. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.