oh-my-til 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.ko.md CHANGED
@@ -101,15 +101,6 @@ ELECTRON_VERSION=37.10.2 npx oh-my-til init /path/to/your/vault
101
101
 
102
102
  > Electron 버전 확인: Obsidian 개발자 도구(Ctrl+Shift+I)에서 `process.versions.electron` 실행
103
103
 
104
- #### Claude Code로 설치
105
-
106
- ```bash
107
- git clone https://github.com/SongYunSeop/oh-my-til.git
108
- cd oh-my-til
109
- claude
110
- # 실행 후: /install-plugin /path/to/your/vault
111
- ```
112
-
113
104
  #### 수동 설치 (소스에서)
114
105
 
115
106
  ```bash
@@ -149,7 +140,6 @@ MCP 서버 연결 시 Claude Code에서 사용할 수 있는 도구:
149
140
 
150
141
  | 도구 | 설명 |
151
142
  |------|------|
152
- | `vault_get_active_file` | 현재 열린 파일 가져오기 |
153
143
  | `til_list` | 카테고리별 TIL 파일 목록 (`search` 필터 지원) |
154
144
  | `til_save_note` | TIL 노트 저장 (frontmatter/경로 규칙 보장, 백로그 자동 체크) |
155
145
  | `til_backlog_status` | 백로그 진행률 요약 (체크박스 카운트) |
@@ -171,6 +161,9 @@ MCP 서버 연결 시 Claude Code에서 사용할 수 있는 도구:
171
161
  | **backlog** | `/backlog [카테고리]` | 학습 백로그 조회 및 진행 상황 요약 |
172
162
  | **save** | *(/til에서 자동 호출)* | TIL 마크다운 저장 + Daily 노트, MOC, 백로그 연동 |
173
163
  | **til-review** | `/til-review [카테고리]` | SRS 기반 간격 반복 복습 세션 (SM-2 알고리즘) |
164
+ | **dashboard** | `/dashboard` | 학습 대시보드 — 통계, 활동 히트맵, 카테고리, 백로그 진행률 |
165
+ | **omt-setup** | `/omt-setup [서브커맨드]` | 통합 설정 — init, deploy, oh-my-til 관리 |
166
+ | **setup-obsidian** | `/setup-obsidian` | 현재 vault에 Obsidian 데스크톱 플러그인 설치 |
174
167
 
175
168
  ## 개발
176
169
 
@@ -191,7 +184,7 @@ src/
191
184
  │ ├── context.ts # 학습 컨텍스트 헬퍼 (순수 함수)
192
185
  │ ├── stats.ts # TIL 통계 순수 함수
193
186
  │ ├── srs.ts # SRS 간격 반복 (SM-2 알고리즘, 복습 카드/통계)
194
- │ ├── migrate-links.ts # Wikilink [[]] → [](path) 변환
187
+ │ ├── migrate-links.ts # Wikilink [[]] → [](path) 변환 (내부 유틸리티)
195
188
  │ ├── keyboard.ts # Shift+Enter → \n (멀티라인 지원)
196
189
  │ ├── env.ts # macOS PATH 보정 (Homebrew)
197
190
  │ ├── skills.ts # 버전 비교/플레이스홀더 치환 순수 함수
@@ -212,7 +205,7 @@ src/
212
205
  │ └── tools.ts # MCP 도구 정의 (FileStorage + MetadataProvider 사용)
213
206
  ├── plugin-install.ts # 플러그인 에셋 자동 설치/업데이트 (skills, agents, CLAUDE.md 섹션)
214
207
  ├── cli/ # 독립 CLI 진입점
215
- │ ├── index.ts # npx oh-my-til init / serve / deploy
208
+ │ ├── index.ts # npx oh-my-til init / serve / mcp / install-obsidian / deploy
216
209
  │ └── obsidian-install.ts # Obsidian 플러그인 자동 설치 (Electron 감지, node-pty 재빌드)
217
210
  └── obsidian/ # Obsidian 플랫폼 어댑터
218
211
  ├── main.ts # 플러그인 진입점
package/README.md CHANGED
@@ -101,15 +101,6 @@ ELECTRON_VERSION=37.10.2 npx oh-my-til init /path/to/your/vault
101
101
 
102
102
  > To find your Electron version, open Obsidian's Developer Tools (Ctrl+Shift+I) and run `process.versions.electron`.
103
103
 
104
- #### Using Claude Code
105
-
106
- ```bash
107
- git clone https://github.com/SongYunSeop/oh-my-til.git
108
- cd oh-my-til
109
- claude
110
- # Then run: /install-plugin /path/to/your/vault
111
- ```
112
-
113
104
  #### Manual Installation (from source)
114
105
 
115
106
  ```bash
@@ -149,7 +140,6 @@ When the MCP server is connected, Claude Code can use these tools:
149
140
 
150
141
  | Tool | Description |
151
142
  |------|-------------|
152
- | `vault_get_active_file` | Get the currently open file |
153
143
  | `til_list` | List TIL files grouped by category (supports `search` filter) |
154
144
  | `til_save_note` | Save a TIL note with validated frontmatter and path conventions (auto backlog check) |
155
145
  | `til_backlog_status` | Backlog progress summary with checkbox counts |
@@ -171,6 +161,9 @@ The plugin auto-installs these skills to `.claude/skills/`:
171
161
  | **backlog** | `/backlog [category]` | View learning backlog and progress |
172
162
  | **save** | *(auto-invoked by /til)* | Save TIL markdown with Daily note, MOC, and backlog updates |
173
163
  | **til-review** | `/til-review [category]` | SRS-based spaced repetition review session (SM-2 algorithm) |
164
+ | **dashboard** | `/dashboard` | Learning dashboard — stats, activity heatmap, categories, backlog progress |
165
+ | **omt-setup** | `/omt-setup [subcommand]` | Unified setup — init, deploy, and manage oh-my-til |
166
+ | **setup-obsidian** | `/setup-obsidian` | Install the Obsidian desktop plugin in the current vault |
174
167
 
175
168
  ## Development
176
169
 
@@ -191,7 +184,7 @@ src/
191
184
  │ ├── context.ts # Learning context helpers (pure functions)
192
185
  │ ├── stats.ts # TIL statistics (pure functions)
193
186
  │ ├── srs.ts # Spaced repetition (SM-2 algorithm, review cards/stats)
194
- │ ├── migrate-links.ts # Wikilink [[]] → [](path) conversion
187
+ │ ├── migrate-links.ts # Wikilink [[]] → [](path) conversion (internal utility)
195
188
  │ ├── keyboard.ts # Shift+Enter → \n (multiline support)
196
189
  │ ├── env.ts # macOS PATH resolution (Homebrew)
197
190
  │ ├── skills.ts # Version comparison / placeholder substitution
@@ -212,7 +205,7 @@ src/
212
205
  │ └── tools.ts # MCP tool definitions (FileStorage + MetadataProvider)
213
206
  ├── plugin-install.ts # Plugin asset auto-install/update (skills, agents, CLAUDE.md section)
214
207
  ├── cli/ # Standalone CLI entry point
215
- │ ├── index.ts # npx oh-my-til init / serve / deploy
208
+ │ ├── index.ts # npx oh-my-til init / serve / mcp / install-obsidian / deploy
216
209
  │ └── obsidian-install.ts # Auto-install Obsidian plugin (Electron detection, node-pty rebuild)
217
210
  └── obsidian/ # Obsidian platform adapter
218
211
  ├── main.ts # Plugin entry point
package/dist/cli.js CHANGED
@@ -39903,25 +39903,25 @@ var StdioServerTransport = class {
39903
39903
  };
39904
39904
 
39905
39905
  // skills/til/SKILL.md
39906
- var SKILL_default = '---\nname: til\ndescription: "Today I Learned \u2014 research a topic, learn interactively, then save as TIL markdown"\nargument-hint: "<topic> [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# TIL Skill\n\nTopic research \u2192 Interactive learning \u2192 Save TIL.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (detect same/similar topics)\n- `til_get_context`: Find related TILs and backlog items, link candidates\n- `vault_get_active_file`: Check the file the user is currently viewing\n\n## Phase 1: Topic Research\n\n1. Use `Read` to check if `til/{category}/{slug}.md` exists \u2192 if so, offer to expand the existing TIL or start a new topic\n2. Use `til_get_context` to check existing TILs. Fall back to `til_list` if MCP is unavailable\n - When learning a backlog item, call `til_backlog_status`(category) \u2192 reference `sections[].items[].sourceUrls`\n - 1 URL: fetch directly with `WebFetch`\n - 2+ URLs: pass all URLs to a single `til-fetcher` subagent\n3. If no existing TIL is found, research the topic via web search\n4. Collect key concepts, examples, and references \u2192 summarize\n\n## Phase 2: Interactive Learning\n\n1. Explain based on research results\n2. Follow-up mode: focus on new perspectives; do not repeat existing content\n3. Answer user questions\n4. Move to Phase 3 only when the user explicitly requests to save\n\n## Phase 3: Save\n\nFollow `/save` skill rules to save. In follow-up mode, merge into the existing file (add `updated` date).\n\n## Arguments\n\n- First: learning topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]`\n- Use placeholder values for sensitive information (example.com, your-api-key)\n';
39906
+ var SKILL_default = "---\nname: til\ndescription: \"Today I Learned \u2014 research a topic, learn interactively, then save as TIL markdown. Use when the user wants to learn about a topic, says 'teach me', 'what is X', 'deep dive into X', or asks to study something and save it as a TIL note.\"\nargument-hint: \"<topic> [category]\"\nplugin-version: \"__PLUGIN_VERSION__\"\n---\n\n# TIL Skill\n\nTopic research \u2192 Interactive learning \u2192 Save TIL.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (detect same/similar topics)\n- `til_get_context`: Find related TILs and backlog items, link candidates\n- `vault_get_active_file`: Check the file the user is currently viewing\n\n## Phase 1: Topic Research\n\n1. Use `Read` to check if `til/{category}/{slug}.md` exists \u2192 if so, offer to expand the existing TIL or start a new topic\n2. Use `til_get_context` to check existing TILs. Fall back to `til_list` if MCP is unavailable\n - When learning a backlog item, call `til_backlog_status`(category) \u2192 reference `sections[].items[].sourceUrls`\n - 1 URL: fetch directly with `WebFetch`\n - 2+ URLs: pass all URLs to a single `til-fetcher` subagent\n3. If no existing TIL is found, research the topic via web search\n4. Collect key concepts, examples, and references \u2192 summarize\n\n## Phase 2: Interactive Learning\n\n1. Explain based on research results\n2. Follow-up mode: focus on new perspectives; do not repeat existing content\n3. Answer user questions\n4. Move to Phase 3 only when the user explicitly requests to save\n\n## Phase 3: Save\n\nFollow `/save` skill rules to save. In follow-up mode, merge into the existing file (add `updated` date).\n\n## Arguments\n\n- First: learning topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]` (links must work in static sites and non-Obsidian editors)\n- Use placeholder values for sensitive information (example.com, your-api-key) to avoid leaking real credentials\n";
39907
39907
 
39908
39908
  // skills/backlog/SKILL.md
39909
- var SKILL_default2 = '---\nname: backlog\ndescription: "View learning backlog and show progress"\nargument-hint: "[category]"\ndisable-model-invocation: true\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Backlog Skill\n\nView learning backlog + summarize progress (read-only).\n\n## MCP Tools\n\n- `til_backlog_status`: Overall/per-category progress (includes sections when category is specified)\n\n## Workflow\n\n### No arguments (`/backlog`)\n\n1. Call `til_backlog_status` (fall back to `./til/*/backlog.md` Glob if MCP unavailable)\n2. If no backlog found, show `/research` guidance and exit\n3. Summarize as table: category (link), progress, completed count, last activity date, progress bar\n\n### With arguments (`/backlog category`)\n\n1. Pass category to `til_backlog_status` \u2192 use sections\n2. Output per section:\n - `## {heading} ({completed}/{total})`\n - `- (x) [{displayName}]({path})` / `- ( ) [{displayName}]({path})`\n - Do not use `- [ ]`/`- [x]` markdown checkboxes (not rendered in terminal)\n\n## Output Rules\n\n- All category/item names as `[display name](path)` markdown links\n- Do not expose raw paths\n- Progress bar: 10 slots (`\u2588` completed, `\u2591` incomplete)\n- Do not modify backlog files (read-only)\n';
39909
+ var SKILL_default2 = "---\nname: backlog\ndescription: \"View learning backlog and show progress. Use when the user asks 'what's left to learn', 'show my progress', 'learning todo', or wants to check remaining topics in their study plan.\"\nargument-hint: \"[category]\"\ndisable-model-invocation: true\nplugin-version: \"__PLUGIN_VERSION__\"\n---\n\n# Backlog Skill\n\nView learning backlog + summarize progress (read-only).\n\n## MCP Tools\n\n- `til_backlog_status`: Overall/per-category progress (includes sections when category is specified)\n\n## Workflow\n\n### No arguments (`/backlog`)\n\n1. Call `til_backlog_status` (fall back to `./til/*/backlog.md` Glob if MCP unavailable)\n2. If no backlog found, show `/research` guidance and exit\n3. Summarize as table: category (link), progress, completed count, last activity date, progress bar\n\n### With arguments (`/backlog category`)\n\n1. Pass category to `til_backlog_status` \u2192 use sections\n2. Output per section:\n - `## {heading} ({completed}/{total})`\n - `- (x) [{displayName}]({path})` / `- ( ) [{displayName}]({path})`\n - Do not use `- [ ]`/`- [x]` markdown checkboxes (not rendered in terminal)\n\n## Output Rules\n\n- All category/item names as `[display name](path)` markdown links\n- Do not expose raw paths\n- Progress bar: 10 slots (`\u2588` completed, `\u2591` incomplete)\n- Do not modify backlog files (read-only)\n";
39910
39910
 
39911
39911
  // skills/research/SKILL.md
39912
- var SKILL_default3 = '---\nname: research\ndescription: "Research a topic to identify key concepts and terms, then organize as a backlog"\nargument-hint: "<topic> [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Research Skill\n\nTopic research \u2192 Identify concepts and dependencies \u2192 Save backlog file.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (search by topic using the search parameter)\n\n## Phase 1: Topic Research\n\n1. Use `til_list(search=topic)` to check already-learned topics \u2192 avoid duplicate backlog entries\n2. Research the topic via web search, identify required concepts, terms, and prerequisites\n3. Break down into subtopics and research each directly\n4. Analyze dependencies between subtopics\n\n## Phase 2: Organize Backlog\n\n1. Sort by learning order: Prerequisites \u2192 Core Concepts \u2192 Advanced\n2. Add a one-line description per item\n3. Gather user feedback: allow adding, removing, or reordering items\n\n## Phase 3: Save\n\n1. Save to `./til/{category}/backlog.md` (auto-create folder)\n2. If `backlog.md` already exists, merge:\n - Preserve `[x]` completed items\n - Keep check state for matching items\n - Preserve existing sources, only add new items\n3. Add backlog link to TIL MOC\n4. Commit all changes: `\u{1F4CB} research: {topic} learning backlog - {category}` (do not push)\n\n## Backlog Template\n\n```markdown\n---\ntags: [backlog, {category}]\naliases: ["Backlog - {topic}"]\nupdated: YYYY-MM-DD\nsources:\n slug-a: [https://url-1]\n---\n\n# {topic} Learning Backlog\n\n## Prerequisites\n- [ ] [Concept A](til/{category}/{slug-a}.md) - description\n\n## Core Concepts\n- [ ] [Concept C](til/{category}/{slug-c}.md) - description\n\n## Advanced\n- [ ] [Concept E](til/{category}/{slug-e}.md) - description\n```\n\n## Arguments\n\n- First: research topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- One-line description per item, split into multiple files if over 20 items\n- Links: `[display name](til/{category}/{slug}.md)`\n';
39912
+ var SKILL_default3 = '---\nname: research\ndescription: "Research a topic to identify key concepts and terms, then organize as a learning backlog. Use when the user wants a learning roadmap, study plan, curriculum, or asks \'what should I learn about X\' \u2014 focuses on planning what to learn, not learning itself."\nargument-hint: "<topic> [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Research Skill\n\nTopic research \u2192 Identify concepts and dependencies \u2192 Save backlog file.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (search by topic using the search parameter)\n\n## Phase 1: Topic Research\n\n1. Use `til_list(search=topic)` to check already-learned topics \u2192 avoid duplicate backlog entries\n2. Research the topic via web search, identify required concepts, terms, and prerequisites\n3. Break down into subtopics and research each directly\n4. Analyze dependencies between subtopics\n\n## Phase 2: Organize Backlog\n\n1. Sort by learning order: Prerequisites \u2192 Core Concepts \u2192 Advanced\n2. Add a one-line description per item\n3. Gather user feedback: allow adding, removing, or reordering items\n\n## Phase 3: Save\n\n1. Save to `./til/{category}/backlog.md` (auto-create folder)\n2. If `backlog.md` already exists, merge:\n - Preserve `[x]` completed items\n - Keep check state for matching items\n - Preserve existing sources, only add new items\n3. Add backlog link to TIL MOC\n4. Commit all changes: `\u{1F4CB} research: {topic} learning backlog - {category}` (do not push)\n\n## Backlog Template\n\nRead `references/templates.md` for the exact backlog template and field descriptions.\n\n## Arguments\n\n- First: research topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- One-line description per item, split into multiple files if over 20 items (long backlogs hurt readability and cause scroll fatigue)\n- Links: `[display name](til/{category}/{slug}.md)`\n';
39913
39913
 
39914
39914
  // skills/save/SKILL.md
39915
- var SKILL_default4 = '---\nname: save\ndescription: "Save learning content as a TIL file and batch-update Daily notes, MOC, and backlog"\nargument-hint: "[topic] [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\nLearning conversation \u2192 Save TIL file \u2192 Update Daily/MOC/backlog \u2192 Review document \u2192 Commit.\n\n## MCP Tools\n\n- `til_get_context`: Find related TILs and backlog items\n- `til_list`: Check for duplicate existing TILs\n- `til_save_note`: Save TIL note (server guarantees frontmatter/path rules, auto_check_backlog auto-checks backlog)\n- `vault_get_active_file`: User file context\n\n## Step 1: Check Context\n\n1. Identify topic and category. Ask the user if unclear.\n2. Use `Read` to check if `til/{category}/{slug}.md` exists.\n\n## Step 2: Identify Link Candidates\n\n1. Use `til_get_context` or MOC/backlog to find existing TILs and backlog items\n2. Existing TIL/backlog items \u2192 use markdown links in the body\n3. Concepts that don\'t exist \u2192 confirm with user, then add only to related notes\n\n## Step 3: Save TIL File\n\nPath: `./til/{category}/{topic-slug}.md` (slug: lowercase English with hyphens)\n\n**Save new file**: Save using the `til_save_note` MCP tool. The server guarantees frontmatter (title, date, category, tags, aliases) and path rules.\n\n```\ntil_save_note(category, slug, title, content, tags, date, fmCategory, aliases, auto_check_backlog: true)\n```\n\n- `date`: Get local time via `date +%Y-%m-%dT%H:%M:%S` command and pass it\n- `tags`: Must include "til"\n- `aliases`: ["Korean title", "English title"]\n- `content`: Body markdown excluding frontmatter\n\n**When a file with the same slug exists** (detected by `Read` in Step 1):\n- Auto-merge only when continuing a `/til` follow-up session (preserve existing content + reinforce, add `updated`)\n- Otherwise: ask user to confirm merge or overwrite\n- For merge: use Read\u2192Edit directly on existing content instead of `til_save_note`\n\n### TIL Body Template\n\n```markdown\n# Title\n\n> [!tldr] One-line summary\n\n## Key Concepts\n## Examples\n## References\n- [Title](URL)\n## Related Notes\n- [TIL](til/{category}/{slug}.md)\n```\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]`\n\n## Step 4: Update Related Files\n\nUpdate the following 3 files **directly** in sequence (no subagents):\n\n1. Daily note (`./Daily/YYYY-MM-DD.md`): Add TIL link by category (create if not exists)\n2. TIL MOC (`./til/TIL MOC.md`): Add item to category section (create if not exists)\n3. Backlog: Already handled by `til_save_note`\'s `auto_check_backlog: true` (no separate call needed)\n\nDaily/MOC: Read \u2192 find position \u2192 Edit. Create file if not exists.\n\n## Step 5: Document Review\n\nDisplay full saved TIL content \u2192 use `AskUserQuestion` to confirm ("Looks good" / "Needs revision").\n\n## Step 6: Register for Review\n\nAsk via `AskUserQuestion`: "Would you like to add this TIL to spaced repetition review?"\nIf user agrees, call `til_review_update` (action: "review", grade: 4) to create SRS metadata.\n\n## Step 7: git commit\n\n`\u{1F4DD} til: {English title}({Korean title}) - {category}` (no push)\n\n## Rules\n\n- frontmatter required: date, category, tags, aliases (fill in any missing fields before saving)\n- tags must include "til" (used to filter TILs on the static site)\n- No `[[wiki links]]` \u2014 use `[display name](path)` format only\n- Always update Daily/MOC/backlog after saving the TIL\n- Use callouts: `> [!tldr]`, `> [!example]`, `> [!warning]`, `> [!tip]`\n- Visualize complex concepts with Mermaid diagrams (max 1 per TIL)\n- Use placeholder values for sensitive information\n';
39915
+ var SKILL_default4 = '---\nname: save\ndescription: "Save learning content as a TIL file and batch-update Daily notes, 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."\nargument-hint: "[topic] [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\nLearning conversation \u2192 Save TIL file \u2192 Update Daily/MOC/backlog \u2192 Review document \u2192 Commit.\n\n## MCP Tools\n\n- `til_get_context`: Find related TILs and backlog items\n- `til_list`: Check for duplicate existing TILs\n- `til_save_note`: Save TIL note (server guarantees frontmatter/path rules, auto_check_backlog auto-checks backlog)\n- `vault_get_active_file`: User file context\n\n## Step 1: Check Context\n\n1. Identify topic and category. Ask the user if unclear.\n2. Use `Read` to check if `til/{category}/{slug}.md` exists.\n\n## Step 2: Identify Link Candidates\n\n1. Use `til_get_context` or MOC/backlog to find existing TILs and backlog items\n2. Existing TIL/backlog items \u2192 use markdown links in the body\n3. Concepts that don\'t exist \u2192 confirm with user, then add only to related notes\n\n## Step 3: Save TIL File\n\nPath: `./til/{category}/{topic-slug}.md` (slug: lowercase English with hyphens)\n\n**Save new file**: Save using the `til_save_note` MCP tool. The server guarantees frontmatter (title, date, category, tags, aliases) and path rules.\n\n```\ntil_save_note(category, slug, title, content, tags, date, fmCategory, aliases, auto_check_backlog: true)\n```\n\n- `date`: Get local time via `date +%Y-%m-%dT%H:%M:%S` command and pass it\n- `tags`: Must include "til"\n- `aliases`: ["Korean title", "English title"]\n- `content`: Body markdown excluding frontmatter\n\n**When a file with the same slug exists** (detected by `Read` in Step 1):\n- Auto-merge only when continuing a `/til` follow-up session (preserve existing content + reinforce, add `updated`)\n- Otherwise: ask user to confirm merge or overwrite\n- For merge: use Read\u2192Edit directly on existing content instead of `til_save_note`\n\n### TIL Body Template\n\nRead `references/templates.md` for the exact TIL body, Daily note, and MOC templates.\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]`\n\n## Step 4: Update Related Files\n\nUpdate the following 3 files **directly** in sequence (no subagents \u2014 parallel edits can race and corrupt shared files like MOC):\n\n1. Daily note (`./Daily/YYYY-MM-DD.md`): Add TIL link by category (create if not exists)\n2. TIL MOC (`./til/TIL MOC.md`): Add item to category section (create if not exists)\n3. Backlog: Already handled by `til_save_note`\'s `auto_check_backlog: true` (no separate call needed)\n\nDaily/MOC: Read \u2192 find position \u2192 Edit. Create file if not exists.\n\n## Step 5: Document Review\n\nDisplay full saved TIL content \u2192 use `AskUserQuestion` to confirm ("Looks good" / "Needs revision").\n\n## Step 6: Register for Review\n\nAsk via `AskUserQuestion`: "Would you like to add this TIL to spaced repetition review?"\nIf user agrees, call `til_review_update` (action: "review", grade: 4) to create SRS metadata.\n\n## Step 7: git commit\n\n`\u{1F4DD} til: {English title}({Korean title}) - {category}` (no push)\n\n## Rules\n\n- frontmatter required: date, category, tags, aliases (fill in any missing fields before saving)\n- tags must include "til" (used to filter TILs on the static site)\n- No `[[wiki links]]` \u2014 use `[display name](path)` format only (links must work in static sites and non-Obsidian editors)\n- Always update Daily/MOC/backlog after saving the TIL\n- Use callouts: `> [!tldr]`, `> [!example]`, `> [!warning]`, `> [!tip]`\n- Visualize complex concepts with Mermaid diagrams (max 1 per TIL)\n- Use placeholder values for sensitive information (avoid leaking real credentials)\n';
39916
39916
 
39917
39917
  // skills/dashboard/SKILL.md
39918
- var SKILL_default5 = '---\nname: dashboard\ndescription: "Learning dashboard \u2014 stats, activity heatmap, categories, backlog progress"\ndisable-model-invocation: true\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Dashboard Skill\n\nRetrieve learning stats via the `til_dashboard` MCP tool and display in terminal.\n\n## MCP Tools\n\n- `til_dashboard`: Returns summary/heatmap/categories/backlog/trends as JSON\n\n## Output Format\n\n### 1. Summary Cards\nTotal TILs, categories, this week, streak \u2014 as table.\n\n### 2. Activity Trend\nSum heatmap cells by week \u2192 sparkline (`\u2581\u2582\u2583\u2585\u2587`).\n\n### 3. Category Status\nCategory (link), count, last modified date \u2014 sorted by file count descending.\n\n### 4. Backlog Progress\nSorted by progress descending, 10-slot progress bar (`\u2588`/`\u2591`).\n\n## Fallback (MCP Unavailable)\n\nIf `til_dashboard` is unavailable, combine `til_list` + `til_backlog_status` + `til_recent_context`.\n\n## Rules\n\n- Output as markdown links (no raw paths)\n- If no data: show "No TILs yet. Run /til to get started!"\n';
39918
+ var SKILL_default5 = "---\nname: dashboard\ndescription: \"Learning dashboard \u2014 stats, activity heatmap, categories, backlog progress. Use when the user asks 'my stats', 'how much have I learned', 'show my streak', 'learning summary', or wants an overview of their TIL activity.\"\ndisable-model-invocation: true\nplugin-version: \"__PLUGIN_VERSION__\"\n---\n\n# Dashboard Skill\n\nRetrieve learning stats via the `til_dashboard` MCP tool and display in terminal.\n\n## MCP Tools\n\n- `til_dashboard`: Returns summary/heatmap/categories/backlog/trends as JSON\n\n## Output Format\n\n### 1. Summary Cards\nTotal TILs, categories, this week, streak \u2014 as table.\n\n### 2. Activity Trend\nSum heatmap cells by week \u2192 sparkline (`\u2581\u2582\u2583\u2585\u2587`).\n\n### 3. Category Status\nCategory (link), count, last modified date \u2014 sorted by file count descending.\n\n### 4. Backlog Progress\nSorted by progress descending, 10-slot progress bar (`\u2588`/`\u2591`).\n\n## Fallback (MCP Unavailable)\n\nIf `til_dashboard` is unavailable, combine `til_list` + `til_backlog_status` + `til_recent_context`.\n\n## Rules\n\n- Output as markdown links (no raw paths)\n- If no data: show \"No TILs yet. Run /til to get started!\"\n";
39919
39919
 
39920
39920
  // skills/omt-setup/SKILL.md
39921
39921
  var SKILL_default6 = '---\nname: omt-setup\ndescription: "oh-my-til unified setup \u2014 deployment configuration"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# OMT Setup Skill\n\nManage oh-my-til configuration in one place. Operates via subcommands.\n\n## Subcommands\n\n### `/omt-setup` (no arguments)\n\nRead `oh-my-til.json`, display current configuration + subcommand guide:\n- `deploy` \u2014 GitHub Pages deployment configuration\n\n### `/omt-setup deploy`\n\nConfigure GitHub Pages deployment:\n1. Check for `.git/` (if not found, notify and exit)\n2. Check `.github/workflows/deploy-til.yml` (if exists, ask whether modification is needed)\n3. Configure deploy section in `oh-my-til.json` (title, subtitle, GitHub URL)\n4. Generate workflow YAML\n5. Show completion guide (Settings \u2192 Pages \u2192 select GitHub Actions, commit & push commands)\n\n## Rules\n\n- Preserve existing settings in `oh-my-til.json`, only add/modify the relevant section\n- Do not commit (only show the user the commands)\n';
39922
39922
 
39923
39923
  // skills/til-review/SKILL.md
39924
- var SKILL_default7 = '---\nname: til-review\ndescription: "SRS-based TIL review session (spaced repetition)"\nargument-hint: "[category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS (spaced repetition) based TIL review session. Manages review schedule with the SM-2 algorithm.\n\n## MCP Tools\n\n- `til_review_list`: List of cards due for review today + stats (load note content with `include_content: true`)\n- `til_review_update`: Record review result (grade 0-5) or remove from review\n\n## Step 1: Load Review Cards\n\nCall `til_review_list` (`include_content: true`, pass category argument if provided).\n\n- 0 cards \u2192 Show "No reviews today" + suggest registering untracked TILs (go to Step 5)\n- Cards found \u2192 Display list + proceed to Step 2\n\n## Step 2: Select Evaluation Mode\n\nSelect via `AskUserQuestion`:\n- "Simple mode (Again / Good)"\n- "Detailed mode (Again / Hard / Good / Easy)"\n\n## Step 3: Per-Card Review Loop\n\nFor each card:\n\n1. Display title, category, review info (repetition count, EF, days overdue)\n2. Use `content` already loaded in Step 1 (no additional MCP calls needed)\n3. Present key content as questions (generate 1-2 questions based on content)\n4. Wait for user answer\n5. Provide feedback (correct answer / supplementary explanation)\n6. Input evaluation via `AskUserQuestion`:\n - Simple mode: "Good (Remembered)" / "Again (Forgot)" / "Skip" / "Stop Review"\n - Detailed mode: "Again (Failed)" / "Hard (Struggled)" / "Good (Normal)" / "Easy (Perfect)"\n - Grade mapping: Again=1, Hard=3, Good=4, Easy=5\n - "Skip": do not evaluate this card, move to next\n - "Stop Review": move to Step 4\n - Skip/Stop in detailed mode: select "Other" then type "Skip" or "Stop Review"\n7. If not skipped, call `til_review_update` (action: "review", grade)\n8. Display result summary (next review date, interval)\n\n## Step 4: Completion Stats\n\nAfter all cards are done:\n- Number of cards reviewed, average grade\n- If remaining > 0, show "N more remaining, continue tomorrow"\n- Re-call `til_review_list` to display latest stats\n\n## Step 5: Register TILs (Optional)\n\nWhen no cards exist or user requests:\n- Display full TIL list via `til_list`\n- User selects files to add to review\n- Call `til_review_update` (action: "review", grade: 4) for each selected file\n\n## Rules\n\n- Max 20 cards per session (prevent overload)\n- Prioritize overdue cards (most urgent first)\n- Remove from review: if user says "remove this card", call `til_review_update` (action: "remove")\n';
39924
+ var SKILL_default7 = '---\nname: til-review\ndescription: "SRS-based TIL review session (spaced repetition). Use when the user says \'quiz me\', \'review what I learned\', \'flashcard session\', \'test my knowledge\', or wants to do spaced repetition review of their TIL notes."\nargument-hint: "[category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS (spaced repetition) based TIL review session. Manages review schedule with the SM-2 algorithm.\n\n## MCP Tools\n\n- `til_review_list`: List of cards due for review today + stats (load note content with `include_content: true`)\n- `til_review_update`: Record review result (grade 0-5) or remove from review\n\n## Step 1: Load Review Cards\n\nCall `til_review_list` (`include_content: true`, pass category argument if provided).\n\n- 0 cards \u2192 Show "No reviews today" + suggest registering untracked TILs (go to Step 5)\n- Cards found \u2192 Display list + proceed to Step 2\n\n## Step 2: Select Evaluation Mode\n\nSelect via `AskUserQuestion`:\n- "Simple mode (Again / Good)"\n- "Detailed mode (Again / Hard / Good / Easy)"\n\n## Step 3: Per-Card Review Loop\n\nFor each card:\n\n1. Display title, category, review info (repetition count, EF, days overdue)\n2. Use `content` already loaded in Step 1 (no additional MCP calls needed)\n3. Present key content as questions (generate 1-2 questions based on content)\n4. Wait for user answer\n5. Provide feedback (correct answer / supplementary explanation)\n6. Input evaluation via `AskUserQuestion`:\n - Simple mode: "Good (Remembered)" / "Again (Forgot)" / "Skip" / "Stop Review"\n - Detailed mode: "Again (Failed)" / "Hard (Struggled)" / "Good (Normal)" / "Easy (Perfect)"\n - Grade mapping: Again=1, Hard=3, Good=4, Easy=5\n - "Skip": do not evaluate this card, move to next\n - "Stop Review": move to Step 4\n - Skip/Stop in detailed mode: select "Other" then type "Skip" or "Stop Review"\n7. If not skipped, call `til_review_update` (action: "review", grade)\n8. Display result summary (next review date, interval)\n\n## Step 4: Completion Stats\n\nAfter all cards are done:\n- Number of cards reviewed, average grade\n- If remaining > 0, show "N more remaining, continue tomorrow"\n- Re-call `til_review_list` to display latest stats\n\n## Step 5: Register TILs (Optional)\n\nWhen no cards exist or user requests:\n- Display full TIL list via `til_list`\n- User selects files to add to review\n- Call `til_review_update` (action: "review", grade: 4) for each selected file\n\n## Rules\n\n- Max 20 cards per session (prevent overload)\n- Prioritize overdue cards (most urgent first)\n- Remove from review: if user says "remove this card", call `til_review_update` (action: "remove")\n';
39925
39925
 
39926
39926
  // vault-assets/claude-md-section.md
39927
39927
  var claude_md_section_default = "## Learning Workflow\n\n1. `/research <topic>` \u2014 Research \u2192 Generate backlog\n2. `/backlog [category]` \u2014 Check backlog progress\n3. `/til <topic>` \u2014 Research \u2192 Interactive learning \u2192 Save\n4. `/save` \u2014 Save TIL (auto-update Daily/MOC/backlog)\n5. `/til-review [category]` \u2014 SRS-based spaced repetition review\n\n## MCP Tools\n\n**Learning Context:**\n- `til_get_context` \u2014 Find existing TILs related to a topic (searches file paths, content, backlinks, and unresolved links)\n- `til_recent_context` \u2014 Recent learning activity (newest first)\n- `vault_get_active_file` \u2014 Currently open file\n\n**TIL Management:**\n- `til_list` \u2014 TIL list + category grouping (search filter)\n- `til_save_note` \u2014 Save TIL (ensures valid frontmatter; set auto_check_backlog to auto-mark backlog items)\n\n**Backlog:**\n- `til_backlog_status` \u2014 Backlog progress\n- `til_backlog_check` \u2014 Mark backlog item as completed (standalone use)\n\n**Review (SRS):**\n- `til_review_list` \u2014 Review card list + stats (include_content)\n- `til_review_update` \u2014 Record review result\n\n**Stats:**\n- `til_dashboard` \u2014 Learning dashboard stats\n\n### Connection\n\n```bash\n# HTTP (when using Obsidian plugin or oh-my-til serve)\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n\n# stdio (standalone without Obsidian, Claude Desktop scheduled task, etc.)\nclaude mcp add oh-my-til -- npx oh-my-til mcp /path/to/vault\n```\n";
@@ -41261,7 +41261,7 @@ function generateProfileHtml(config2, summaryCardsHtml, heatmapHtml, recentTilsH
41261
41261
  // src/cli/index.ts
41262
41262
  var path5 = __toESM(require("path"));
41263
41263
  var fs4 = __toESM(require("fs"));
41264
- var VERSION = true ? "1.0.0" : "0.0.0";
41264
+ var VERSION = true ? "1.0.1" : "0.0.0";
41265
41265
  function printUsage() {
41266
41266
  console.log(`oh-my-til v${VERSION}
41267
41267
 
@@ -41269,6 +41269,7 @@ Usage:
41269
41269
  oh-my-til init [<path>] [options] Install skills, rules, and CLAUDE.md
41270
41270
  oh-my-til serve [<path>] [options] Start MCP server (HTTP)
41271
41271
  oh-my-til mcp [<path>] [options] Start MCP server (stdio)
41272
+ oh-my-til install-obsidian [<path>] Install Obsidian desktop plugin only
41272
41273
  oh-my-til deploy [<path>] [options] Generate static site from TIL files
41273
41274
  oh-my-til version Print version
41274
41275
 
@@ -41400,6 +41401,31 @@ To start MCP server: oh-my-til serve ${basePath}`);
41400
41401
  console.log(`MCP server running on http://localhost:${port}/mcp`);
41401
41402
  console.log(`TIL path: ${tilPath}`);
41402
41403
  console.log("Press Ctrl+C to stop");
41404
+ } else if (command === "install-obsidian") {
41405
+ const obsidianDir = path5.join(basePath, ".obsidian");
41406
+ if (!fs4.existsSync(obsidianDir)) {
41407
+ console.error("No .obsidian/ folder found. Run this command inside an Obsidian vault.");
41408
+ process.exit(1);
41409
+ }
41410
+ console.log("Installing Obsidian plugin...");
41411
+ const packageRoot = path5.resolve(__dirname, "..");
41412
+ const result = installObsidianPlugin(basePath, packageRoot);
41413
+ if (result.success) {
41414
+ console.log(`Plugin installed: ${result.pluginDir}`);
41415
+ if (result.rebuilt) {
41416
+ console.log("node-pty rebuilt for Electron.");
41417
+ }
41418
+ for (const w of result.warnings) {
41419
+ console.warn(`Warning: ${w}`);
41420
+ }
41421
+ console.log("Restart Obsidian or reload the plugin to activate.");
41422
+ } else {
41423
+ console.error("Plugin installation failed:");
41424
+ for (const w of result.warnings) {
41425
+ console.error(` ${w}`);
41426
+ }
41427
+ process.exit(1);
41428
+ }
41403
41429
  } else if (command === "deploy") {
41404
41430
  const { loadOmtConfig: loadOmtConfig2 } = await Promise.resolve().then(() => (init_config(), config_exports));
41405
41431
  const omtConfig = loadOmtConfig2(basePath);
package/main.js CHANGED
@@ -48003,25 +48003,25 @@ var TILMcpServer = class {
48003
48003
  };
48004
48004
 
48005
48005
  // skills/til/SKILL.md
48006
- var SKILL_default = '---\nname: til\ndescription: "Today I Learned \u2014 research a topic, learn interactively, then save as TIL markdown"\nargument-hint: "<topic> [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# TIL Skill\n\nTopic research \u2192 Interactive learning \u2192 Save TIL.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (detect same/similar topics)\n- `til_get_context`: Find related TILs and backlog items, link candidates\n- `vault_get_active_file`: Check the file the user is currently viewing\n\n## Phase 1: Topic Research\n\n1. Use `Read` to check if `til/{category}/{slug}.md` exists \u2192 if so, offer to expand the existing TIL or start a new topic\n2. Use `til_get_context` to check existing TILs. Fall back to `til_list` if MCP is unavailable\n - When learning a backlog item, call `til_backlog_status`(category) \u2192 reference `sections[].items[].sourceUrls`\n - 1 URL: fetch directly with `WebFetch`\n - 2+ URLs: pass all URLs to a single `til-fetcher` subagent\n3. If no existing TIL is found, research the topic via web search\n4. Collect key concepts, examples, and references \u2192 summarize\n\n## Phase 2: Interactive Learning\n\n1. Explain based on research results\n2. Follow-up mode: focus on new perspectives; do not repeat existing content\n3. Answer user questions\n4. Move to Phase 3 only when the user explicitly requests to save\n\n## Phase 3: Save\n\nFollow `/save` skill rules to save. In follow-up mode, merge into the existing file (add `updated` date).\n\n## Arguments\n\n- First: learning topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]`\n- Use placeholder values for sensitive information (example.com, your-api-key)\n';
48006
+ var SKILL_default = "---\nname: til\ndescription: \"Today I Learned \u2014 research a topic, learn interactively, then save as TIL markdown. Use when the user wants to learn about a topic, says 'teach me', 'what is X', 'deep dive into X', or asks to study something and save it as a TIL note.\"\nargument-hint: \"<topic> [category]\"\nplugin-version: \"__PLUGIN_VERSION__\"\n---\n\n# TIL Skill\n\nTopic research \u2192 Interactive learning \u2192 Save TIL.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (detect same/similar topics)\n- `til_get_context`: Find related TILs and backlog items, link candidates\n- `vault_get_active_file`: Check the file the user is currently viewing\n\n## Phase 1: Topic Research\n\n1. Use `Read` to check if `til/{category}/{slug}.md` exists \u2192 if so, offer to expand the existing TIL or start a new topic\n2. Use `til_get_context` to check existing TILs. Fall back to `til_list` if MCP is unavailable\n - When learning a backlog item, call `til_backlog_status`(category) \u2192 reference `sections[].items[].sourceUrls`\n - 1 URL: fetch directly with `WebFetch`\n - 2+ URLs: pass all URLs to a single `til-fetcher` subagent\n3. If no existing TIL is found, research the topic via web search\n4. Collect key concepts, examples, and references \u2192 summarize\n\n## Phase 2: Interactive Learning\n\n1. Explain based on research results\n2. Follow-up mode: focus on new perspectives; do not repeat existing content\n3. Answer user questions\n4. Move to Phase 3 only when the user explicitly requests to save\n\n## Phase 3: Save\n\nFollow `/save` skill rules to save. In follow-up mode, merge into the existing file (add `updated` date).\n\n## Arguments\n\n- First: learning topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]` (links must work in static sites and non-Obsidian editors)\n- Use placeholder values for sensitive information (example.com, your-api-key) to avoid leaking real credentials\n";
48007
48007
 
48008
48008
  // skills/backlog/SKILL.md
48009
- var SKILL_default2 = '---\nname: backlog\ndescription: "View learning backlog and show progress"\nargument-hint: "[category]"\ndisable-model-invocation: true\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Backlog Skill\n\nView learning backlog + summarize progress (read-only).\n\n## MCP Tools\n\n- `til_backlog_status`: Overall/per-category progress (includes sections when category is specified)\n\n## Workflow\n\n### No arguments (`/backlog`)\n\n1. Call `til_backlog_status` (fall back to `./til/*/backlog.md` Glob if MCP unavailable)\n2. If no backlog found, show `/research` guidance and exit\n3. Summarize as table: category (link), progress, completed count, last activity date, progress bar\n\n### With arguments (`/backlog category`)\n\n1. Pass category to `til_backlog_status` \u2192 use sections\n2. Output per section:\n - `## {heading} ({completed}/{total})`\n - `- (x) [{displayName}]({path})` / `- ( ) [{displayName}]({path})`\n - Do not use `- [ ]`/`- [x]` markdown checkboxes (not rendered in terminal)\n\n## Output Rules\n\n- All category/item names as `[display name](path)` markdown links\n- Do not expose raw paths\n- Progress bar: 10 slots (`\u2588` completed, `\u2591` incomplete)\n- Do not modify backlog files (read-only)\n';
48009
+ var SKILL_default2 = "---\nname: backlog\ndescription: \"View learning backlog and show progress. Use when the user asks 'what's left to learn', 'show my progress', 'learning todo', or wants to check remaining topics in their study plan.\"\nargument-hint: \"[category]\"\ndisable-model-invocation: true\nplugin-version: \"__PLUGIN_VERSION__\"\n---\n\n# Backlog Skill\n\nView learning backlog + summarize progress (read-only).\n\n## MCP Tools\n\n- `til_backlog_status`: Overall/per-category progress (includes sections when category is specified)\n\n## Workflow\n\n### No arguments (`/backlog`)\n\n1. Call `til_backlog_status` (fall back to `./til/*/backlog.md` Glob if MCP unavailable)\n2. If no backlog found, show `/research` guidance and exit\n3. Summarize as table: category (link), progress, completed count, last activity date, progress bar\n\n### With arguments (`/backlog category`)\n\n1. Pass category to `til_backlog_status` \u2192 use sections\n2. Output per section:\n - `## {heading} ({completed}/{total})`\n - `- (x) [{displayName}]({path})` / `- ( ) [{displayName}]({path})`\n - Do not use `- [ ]`/`- [x]` markdown checkboxes (not rendered in terminal)\n\n## Output Rules\n\n- All category/item names as `[display name](path)` markdown links\n- Do not expose raw paths\n- Progress bar: 10 slots (`\u2588` completed, `\u2591` incomplete)\n- Do not modify backlog files (read-only)\n";
48010
48010
 
48011
48011
  // skills/research/SKILL.md
48012
- var SKILL_default3 = '---\nname: research\ndescription: "Research a topic to identify key concepts and terms, then organize as a backlog"\nargument-hint: "<topic> [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Research Skill\n\nTopic research \u2192 Identify concepts and dependencies \u2192 Save backlog file.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (search by topic using the search parameter)\n\n## Phase 1: Topic Research\n\n1. Use `til_list(search=topic)` to check already-learned topics \u2192 avoid duplicate backlog entries\n2. Research the topic via web search, identify required concepts, terms, and prerequisites\n3. Break down into subtopics and research each directly\n4. Analyze dependencies between subtopics\n\n## Phase 2: Organize Backlog\n\n1. Sort by learning order: Prerequisites \u2192 Core Concepts \u2192 Advanced\n2. Add a one-line description per item\n3. Gather user feedback: allow adding, removing, or reordering items\n\n## Phase 3: Save\n\n1. Save to `./til/{category}/backlog.md` (auto-create folder)\n2. If `backlog.md` already exists, merge:\n - Preserve `[x]` completed items\n - Keep check state for matching items\n - Preserve existing sources, only add new items\n3. Add backlog link to TIL MOC\n4. Commit all changes: `\u{1F4CB} research: {topic} learning backlog - {category}` (do not push)\n\n## Backlog Template\n\n```markdown\n---\ntags: [backlog, {category}]\naliases: ["Backlog - {topic}"]\nupdated: YYYY-MM-DD\nsources:\n slug-a: [https://url-1]\n---\n\n# {topic} Learning Backlog\n\n## Prerequisites\n- [ ] [Concept A](til/{category}/{slug-a}.md) - description\n\n## Core Concepts\n- [ ] [Concept C](til/{category}/{slug-c}.md) - description\n\n## Advanced\n- [ ] [Concept E](til/{category}/{slug-e}.md) - description\n```\n\n## Arguments\n\n- First: research topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- One-line description per item, split into multiple files if over 20 items\n- Links: `[display name](til/{category}/{slug}.md)`\n';
48012
+ var SKILL_default3 = '---\nname: research\ndescription: "Research a topic to identify key concepts and terms, then organize as a learning backlog. Use when the user wants a learning roadmap, study plan, curriculum, or asks \'what should I learn about X\' \u2014 focuses on planning what to learn, not learning itself."\nargument-hint: "<topic> [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Research Skill\n\nTopic research \u2192 Identify concepts and dependencies \u2192 Save backlog file.\n\n## MCP Tools\n\n- `til_list`: Check existing TILs (search by topic using the search parameter)\n\n## Phase 1: Topic Research\n\n1. Use `til_list(search=topic)` to check already-learned topics \u2192 avoid duplicate backlog entries\n2. Research the topic via web search, identify required concepts, terms, and prerequisites\n3. Break down into subtopics and research each directly\n4. Analyze dependencies between subtopics\n\n## Phase 2: Organize Backlog\n\n1. Sort by learning order: Prerequisites \u2192 Core Concepts \u2192 Advanced\n2. Add a one-line description per item\n3. Gather user feedback: allow adding, removing, or reordering items\n\n## Phase 3: Save\n\n1. Save to `./til/{category}/backlog.md` (auto-create folder)\n2. If `backlog.md` already exists, merge:\n - Preserve `[x]` completed items\n - Keep check state for matching items\n - Preserve existing sources, only add new items\n3. Add backlog link to TIL MOC\n4. Commit all changes: `\u{1F4CB} research: {topic} learning backlog - {category}` (do not push)\n\n## Backlog Template\n\nRead `references/templates.md` for the exact backlog template and field descriptions.\n\n## Arguments\n\n- First: research topic (required)\n- Second: category (optional, automatically detected if omitted)\n\n## Rules\n\n- One-line description per item, split into multiple files if over 20 items (long backlogs hurt readability and cause scroll fatigue)\n- Links: `[display name](til/{category}/{slug}.md)`\n';
48013
48013
 
48014
48014
  // skills/save/SKILL.md
48015
- var SKILL_default4 = '---\nname: save\ndescription: "Save learning content as a TIL file and batch-update Daily notes, MOC, and backlog"\nargument-hint: "[topic] [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\nLearning conversation \u2192 Save TIL file \u2192 Update Daily/MOC/backlog \u2192 Review document \u2192 Commit.\n\n## MCP Tools\n\n- `til_get_context`: Find related TILs and backlog items\n- `til_list`: Check for duplicate existing TILs\n- `til_save_note`: Save TIL note (server guarantees frontmatter/path rules, auto_check_backlog auto-checks backlog)\n- `vault_get_active_file`: User file context\n\n## Step 1: Check Context\n\n1. Identify topic and category. Ask the user if unclear.\n2. Use `Read` to check if `til/{category}/{slug}.md` exists.\n\n## Step 2: Identify Link Candidates\n\n1. Use `til_get_context` or MOC/backlog to find existing TILs and backlog items\n2. Existing TIL/backlog items \u2192 use markdown links in the body\n3. Concepts that don\'t exist \u2192 confirm with user, then add only to related notes\n\n## Step 3: Save TIL File\n\nPath: `./til/{category}/{topic-slug}.md` (slug: lowercase English with hyphens)\n\n**Save new file**: Save using the `til_save_note` MCP tool. The server guarantees frontmatter (title, date, category, tags, aliases) and path rules.\n\n```\ntil_save_note(category, slug, title, content, tags, date, fmCategory, aliases, auto_check_backlog: true)\n```\n\n- `date`: Get local time via `date +%Y-%m-%dT%H:%M:%S` command and pass it\n- `tags`: Must include "til"\n- `aliases`: ["Korean title", "English title"]\n- `content`: Body markdown excluding frontmatter\n\n**When a file with the same slug exists** (detected by `Read` in Step 1):\n- Auto-merge only when continuing a `/til` follow-up session (preserve existing content + reinforce, add `updated`)\n- Otherwise: ask user to confirm merge or overwrite\n- For merge: use Read\u2192Edit directly on existing content instead of `til_save_note`\n\n### TIL Body Template\n\n```markdown\n# Title\n\n> [!tldr] One-line summary\n\n## Key Concepts\n## Examples\n## References\n- [Title](URL)\n## Related Notes\n- [TIL](til/{category}/{slug}.md)\n```\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]`\n\n## Step 4: Update Related Files\n\nUpdate the following 3 files **directly** in sequence (no subagents):\n\n1. Daily note (`./Daily/YYYY-MM-DD.md`): Add TIL link by category (create if not exists)\n2. TIL MOC (`./til/TIL MOC.md`): Add item to category section (create if not exists)\n3. Backlog: Already handled by `til_save_note`\'s `auto_check_backlog: true` (no separate call needed)\n\nDaily/MOC: Read \u2192 find position \u2192 Edit. Create file if not exists.\n\n## Step 5: Document Review\n\nDisplay full saved TIL content \u2192 use `AskUserQuestion` to confirm ("Looks good" / "Needs revision").\n\n## Step 6: Register for Review\n\nAsk via `AskUserQuestion`: "Would you like to add this TIL to spaced repetition review?"\nIf user agrees, call `til_review_update` (action: "review", grade: 4) to create SRS metadata.\n\n## Step 7: git commit\n\n`\u{1F4DD} til: {English title}({Korean title}) - {category}` (no push)\n\n## Rules\n\n- frontmatter required: date, category, tags, aliases (fill in any missing fields before saving)\n- tags must include "til" (used to filter TILs on the static site)\n- No `[[wiki links]]` \u2014 use `[display name](path)` format only\n- Always update Daily/MOC/backlog after saving the TIL\n- Use callouts: `> [!tldr]`, `> [!example]`, `> [!warning]`, `> [!tip]`\n- Visualize complex concepts with Mermaid diagrams (max 1 per TIL)\n- Use placeholder values for sensitive information\n';
48015
+ var SKILL_default4 = '---\nname: save\ndescription: "Save learning content as a TIL file and batch-update Daily notes, 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."\nargument-hint: "[topic] [category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Save Skill\n\nLearning conversation \u2192 Save TIL file \u2192 Update Daily/MOC/backlog \u2192 Review document \u2192 Commit.\n\n## MCP Tools\n\n- `til_get_context`: Find related TILs and backlog items\n- `til_list`: Check for duplicate existing TILs\n- `til_save_note`: Save TIL note (server guarantees frontmatter/path rules, auto_check_backlog auto-checks backlog)\n- `vault_get_active_file`: User file context\n\n## Step 1: Check Context\n\n1. Identify topic and category. Ask the user if unclear.\n2. Use `Read` to check if `til/{category}/{slug}.md` exists.\n\n## Step 2: Identify Link Candidates\n\n1. Use `til_get_context` or MOC/backlog to find existing TILs and backlog items\n2. Existing TIL/backlog items \u2192 use markdown links in the body\n3. Concepts that don\'t exist \u2192 confirm with user, then add only to related notes\n\n## Step 3: Save TIL File\n\nPath: `./til/{category}/{topic-slug}.md` (slug: lowercase English with hyphens)\n\n**Save new file**: Save using the `til_save_note` MCP tool. The server guarantees frontmatter (title, date, category, tags, aliases) and path rules.\n\n```\ntil_save_note(category, slug, title, content, tags, date, fmCategory, aliases, auto_check_backlog: true)\n```\n\n- `date`: Get local time via `date +%Y-%m-%dT%H:%M:%S` command and pass it\n- `tags`: Must include "til"\n- `aliases`: ["Korean title", "English title"]\n- `content`: Body markdown excluding frontmatter\n\n**When a file with the same slug exists** (detected by `Read` in Step 1):\n- Auto-merge only when continuing a `/til` follow-up session (preserve existing content + reinforce, add `updated`)\n- Otherwise: ask user to confirm merge or overwrite\n- For merge: use Read\u2192Edit directly on existing content instead of `til_save_note`\n\n### TIL Body Template\n\nRead `references/templates.md` for the exact TIL body, Daily note, and MOC templates.\n\n- Links: `[display name](til/{category}/{slug}.md)` \u2014 no `[[wiki links]]`\n\n## Step 4: Update Related Files\n\nUpdate the following 3 files **directly** in sequence (no subagents \u2014 parallel edits can race and corrupt shared files like MOC):\n\n1. Daily note (`./Daily/YYYY-MM-DD.md`): Add TIL link by category (create if not exists)\n2. TIL MOC (`./til/TIL MOC.md`): Add item to category section (create if not exists)\n3. Backlog: Already handled by `til_save_note`\'s `auto_check_backlog: true` (no separate call needed)\n\nDaily/MOC: Read \u2192 find position \u2192 Edit. Create file if not exists.\n\n## Step 5: Document Review\n\nDisplay full saved TIL content \u2192 use `AskUserQuestion` to confirm ("Looks good" / "Needs revision").\n\n## Step 6: Register for Review\n\nAsk via `AskUserQuestion`: "Would you like to add this TIL to spaced repetition review?"\nIf user agrees, call `til_review_update` (action: "review", grade: 4) to create SRS metadata.\n\n## Step 7: git commit\n\n`\u{1F4DD} til: {English title}({Korean title}) - {category}` (no push)\n\n## Rules\n\n- frontmatter required: date, category, tags, aliases (fill in any missing fields before saving)\n- tags must include "til" (used to filter TILs on the static site)\n- No `[[wiki links]]` \u2014 use `[display name](path)` format only (links must work in static sites and non-Obsidian editors)\n- Always update Daily/MOC/backlog after saving the TIL\n- Use callouts: `> [!tldr]`, `> [!example]`, `> [!warning]`, `> [!tip]`\n- Visualize complex concepts with Mermaid diagrams (max 1 per TIL)\n- Use placeholder values for sensitive information (avoid leaking real credentials)\n';
48016
48016
 
48017
48017
  // skills/dashboard/SKILL.md
48018
- var SKILL_default5 = '---\nname: dashboard\ndescription: "Learning dashboard \u2014 stats, activity heatmap, categories, backlog progress"\ndisable-model-invocation: true\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Dashboard Skill\n\nRetrieve learning stats via the `til_dashboard` MCP tool and display in terminal.\n\n## MCP Tools\n\n- `til_dashboard`: Returns summary/heatmap/categories/backlog/trends as JSON\n\n## Output Format\n\n### 1. Summary Cards\nTotal TILs, categories, this week, streak \u2014 as table.\n\n### 2. Activity Trend\nSum heatmap cells by week \u2192 sparkline (`\u2581\u2582\u2583\u2585\u2587`).\n\n### 3. Category Status\nCategory (link), count, last modified date \u2014 sorted by file count descending.\n\n### 4. Backlog Progress\nSorted by progress descending, 10-slot progress bar (`\u2588`/`\u2591`).\n\n## Fallback (MCP Unavailable)\n\nIf `til_dashboard` is unavailable, combine `til_list` + `til_backlog_status` + `til_recent_context`.\n\n## Rules\n\n- Output as markdown links (no raw paths)\n- If no data: show "No TILs yet. Run /til to get started!"\n';
48018
+ var SKILL_default5 = "---\nname: dashboard\ndescription: \"Learning dashboard \u2014 stats, activity heatmap, categories, backlog progress. Use when the user asks 'my stats', 'how much have I learned', 'show my streak', 'learning summary', or wants an overview of their TIL activity.\"\ndisable-model-invocation: true\nplugin-version: \"__PLUGIN_VERSION__\"\n---\n\n# Dashboard Skill\n\nRetrieve learning stats via the `til_dashboard` MCP tool and display in terminal.\n\n## MCP Tools\n\n- `til_dashboard`: Returns summary/heatmap/categories/backlog/trends as JSON\n\n## Output Format\n\n### 1. Summary Cards\nTotal TILs, categories, this week, streak \u2014 as table.\n\n### 2. Activity Trend\nSum heatmap cells by week \u2192 sparkline (`\u2581\u2582\u2583\u2585\u2587`).\n\n### 3. Category Status\nCategory (link), count, last modified date \u2014 sorted by file count descending.\n\n### 4. Backlog Progress\nSorted by progress descending, 10-slot progress bar (`\u2588`/`\u2591`).\n\n## Fallback (MCP Unavailable)\n\nIf `til_dashboard` is unavailable, combine `til_list` + `til_backlog_status` + `til_recent_context`.\n\n## Rules\n\n- Output as markdown links (no raw paths)\n- If no data: show \"No TILs yet. Run /til to get started!\"\n";
48019
48019
 
48020
48020
  // skills/omt-setup/SKILL.md
48021
48021
  var SKILL_default6 = '---\nname: omt-setup\ndescription: "oh-my-til unified setup \u2014 deployment configuration"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# OMT Setup Skill\n\nManage oh-my-til configuration in one place. Operates via subcommands.\n\n## Subcommands\n\n### `/omt-setup` (no arguments)\n\nRead `oh-my-til.json`, display current configuration + subcommand guide:\n- `deploy` \u2014 GitHub Pages deployment configuration\n\n### `/omt-setup deploy`\n\nConfigure GitHub Pages deployment:\n1. Check for `.git/` (if not found, notify and exit)\n2. Check `.github/workflows/deploy-til.yml` (if exists, ask whether modification is needed)\n3. Configure deploy section in `oh-my-til.json` (title, subtitle, GitHub URL)\n4. Generate workflow YAML\n5. Show completion guide (Settings \u2192 Pages \u2192 select GitHub Actions, commit & push commands)\n\n## Rules\n\n- Preserve existing settings in `oh-my-til.json`, only add/modify the relevant section\n- Do not commit (only show the user the commands)\n';
48022
48022
 
48023
48023
  // skills/til-review/SKILL.md
48024
- var SKILL_default7 = '---\nname: til-review\ndescription: "SRS-based TIL review session (spaced repetition)"\nargument-hint: "[category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS (spaced repetition) based TIL review session. Manages review schedule with the SM-2 algorithm.\n\n## MCP Tools\n\n- `til_review_list`: List of cards due for review today + stats (load note content with `include_content: true`)\n- `til_review_update`: Record review result (grade 0-5) or remove from review\n\n## Step 1: Load Review Cards\n\nCall `til_review_list` (`include_content: true`, pass category argument if provided).\n\n- 0 cards \u2192 Show "No reviews today" + suggest registering untracked TILs (go to Step 5)\n- Cards found \u2192 Display list + proceed to Step 2\n\n## Step 2: Select Evaluation Mode\n\nSelect via `AskUserQuestion`:\n- "Simple mode (Again / Good)"\n- "Detailed mode (Again / Hard / Good / Easy)"\n\n## Step 3: Per-Card Review Loop\n\nFor each card:\n\n1. Display title, category, review info (repetition count, EF, days overdue)\n2. Use `content` already loaded in Step 1 (no additional MCP calls needed)\n3. Present key content as questions (generate 1-2 questions based on content)\n4. Wait for user answer\n5. Provide feedback (correct answer / supplementary explanation)\n6. Input evaluation via `AskUserQuestion`:\n - Simple mode: "Good (Remembered)" / "Again (Forgot)" / "Skip" / "Stop Review"\n - Detailed mode: "Again (Failed)" / "Hard (Struggled)" / "Good (Normal)" / "Easy (Perfect)"\n - Grade mapping: Again=1, Hard=3, Good=4, Easy=5\n - "Skip": do not evaluate this card, move to next\n - "Stop Review": move to Step 4\n - Skip/Stop in detailed mode: select "Other" then type "Skip" or "Stop Review"\n7. If not skipped, call `til_review_update` (action: "review", grade)\n8. Display result summary (next review date, interval)\n\n## Step 4: Completion Stats\n\nAfter all cards are done:\n- Number of cards reviewed, average grade\n- If remaining > 0, show "N more remaining, continue tomorrow"\n- Re-call `til_review_list` to display latest stats\n\n## Step 5: Register TILs (Optional)\n\nWhen no cards exist or user requests:\n- Display full TIL list via `til_list`\n- User selects files to add to review\n- Call `til_review_update` (action: "review", grade: 4) for each selected file\n\n## Rules\n\n- Max 20 cards per session (prevent overload)\n- Prioritize overdue cards (most urgent first)\n- Remove from review: if user says "remove this card", call `til_review_update` (action: "remove")\n';
48024
+ var SKILL_default7 = '---\nname: til-review\ndescription: "SRS-based TIL review session (spaced repetition). Use when the user says \'quiz me\', \'review what I learned\', \'flashcard session\', \'test my knowledge\', or wants to do spaced repetition review of their TIL notes."\nargument-hint: "[category]"\nplugin-version: "__PLUGIN_VERSION__"\n---\n\n# Review Skill\n\nSRS (spaced repetition) based TIL review session. Manages review schedule with the SM-2 algorithm.\n\n## MCP Tools\n\n- `til_review_list`: List of cards due for review today + stats (load note content with `include_content: true`)\n- `til_review_update`: Record review result (grade 0-5) or remove from review\n\n## Step 1: Load Review Cards\n\nCall `til_review_list` (`include_content: true`, pass category argument if provided).\n\n- 0 cards \u2192 Show "No reviews today" + suggest registering untracked TILs (go to Step 5)\n- Cards found \u2192 Display list + proceed to Step 2\n\n## Step 2: Select Evaluation Mode\n\nSelect via `AskUserQuestion`:\n- "Simple mode (Again / Good)"\n- "Detailed mode (Again / Hard / Good / Easy)"\n\n## Step 3: Per-Card Review Loop\n\nFor each card:\n\n1. Display title, category, review info (repetition count, EF, days overdue)\n2. Use `content` already loaded in Step 1 (no additional MCP calls needed)\n3. Present key content as questions (generate 1-2 questions based on content)\n4. Wait for user answer\n5. Provide feedback (correct answer / supplementary explanation)\n6. Input evaluation via `AskUserQuestion`:\n - Simple mode: "Good (Remembered)" / "Again (Forgot)" / "Skip" / "Stop Review"\n - Detailed mode: "Again (Failed)" / "Hard (Struggled)" / "Good (Normal)" / "Easy (Perfect)"\n - Grade mapping: Again=1, Hard=3, Good=4, Easy=5\n - "Skip": do not evaluate this card, move to next\n - "Stop Review": move to Step 4\n - Skip/Stop in detailed mode: select "Other" then type "Skip" or "Stop Review"\n7. If not skipped, call `til_review_update` (action: "review", grade)\n8. Display result summary (next review date, interval)\n\n## Step 4: Completion Stats\n\nAfter all cards are done:\n- Number of cards reviewed, average grade\n- If remaining > 0, show "N more remaining, continue tomorrow"\n- Re-call `til_review_list` to display latest stats\n\n## Step 5: Register TILs (Optional)\n\nWhen no cards exist or user requests:\n- Display full TIL list via `til_list`\n- User selects files to add to review\n- Call `til_review_update` (action: "review", grade: 4) for each selected file\n\n## Rules\n\n- Max 20 cards per session (prevent overload)\n- Prioritize overdue cards (most urgent first)\n- Remove from review: if user says "remove this card", call `til_review_update` (action: "remove")\n';
48025
48025
 
48026
48026
  // vault-assets/claude-md-section.md
48027
48027
  var claude_md_section_default = "## Learning Workflow\n\n1. `/research <topic>` \u2014 Research \u2192 Generate backlog\n2. `/backlog [category]` \u2014 Check backlog progress\n3. `/til <topic>` \u2014 Research \u2192 Interactive learning \u2192 Save\n4. `/save` \u2014 Save TIL (auto-update Daily/MOC/backlog)\n5. `/til-review [category]` \u2014 SRS-based spaced repetition review\n\n## MCP Tools\n\n**Learning Context:**\n- `til_get_context` \u2014 Find existing TILs related to a topic (searches file paths, content, backlinks, and unresolved links)\n- `til_recent_context` \u2014 Recent learning activity (newest first)\n- `vault_get_active_file` \u2014 Currently open file\n\n**TIL Management:**\n- `til_list` \u2014 TIL list + category grouping (search filter)\n- `til_save_note` \u2014 Save TIL (ensures valid frontmatter; set auto_check_backlog to auto-mark backlog items)\n\n**Backlog:**\n- `til_backlog_status` \u2014 Backlog progress\n- `til_backlog_check` \u2014 Mark backlog item as completed (standalone use)\n\n**Review (SRS):**\n- `til_review_list` \u2014 Review card list + stats (include_content)\n- `til_review_update` \u2014 Record review result\n\n**Stats:**\n- `til_dashboard` \u2014 Learning dashboard stats\n\n### Connection\n\n```bash\n# HTTP (when using Obsidian plugin or oh-my-til serve)\nclaude mcp add --transport http oh-my-til http://localhost:22360/mcp\n\n# stdio (standalone without Obsidian, Claude Desktop scheduled task, etc.)\nclaude mcp add oh-my-til -- npx oh-my-til mcp /path/to/vault\n```\n";
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "oh-my-til",
3
3
  "name": "Oh My TIL",
4
- "version": "1.0.0",
4
+ "version": "1.1.0",
5
5
  "minAppVersion": "1.5.0",
6
6
  "description": "Embedded Claude Code terminal for TIL learning workflows",
7
7
  "author": "SongYunSeop",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-til",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Oh My TIL — Claude Code plugin for TIL learning workflow, with Obsidian integration",
5
5
  "main": "main.js",
6
6
  "bin": {