commit 7c14f9f4f2f84f2e550d7895557d9be1db1db96d Author: Zhongwei Li Date: Sun Nov 30 09:08:33 2025 +0800 Initial commit diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..1af4384 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,12 @@ +{ + "name": "obsidian-vault-manager", + "description": "Manage Obsidian knowledge base with smart capture, AI-powered tagging, and publishing workflows", + "version": "0.0.0-2025.11.28", + "author": { + "name": "Zorro Cheng", + "email": "zorrocheng.mc@gmail.com" + }, + "commands": [ + "./commands" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..f8d2c7e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# obsidian-vault-manager + +Manage Obsidian knowledge base with smart capture, AI-powered tagging, and publishing workflows diff --git a/commands/bulk-auto-tag.md b/commands/bulk-auto-tag.md new file mode 100644 index 0000000..e3f3ed9 --- /dev/null +++ b/commands/bulk-auto-tag.md @@ -0,0 +1,181 @@ +--- +description: Bulk AI-powered tagging for existing notes to enable Bases filtering +argument-hint: [folder-path or file-pattern] +allowed-tools: + - Read(*) + - Edit(*) + - Glob(*) + - Bash(*) +--- + +## Context + +- **Today's Date:** !`date "+%Y-%m-%d"` +- **Target:** `$ARGUMENTS` (defaults to all .md files if not specified) + +## Tag Taxonomy Reference + +Use the same taxonomy as `/capture`: + +**Content Types:** idea, video, article, study-guide, repository, reference, project +**Topics:** AI, Claude, Gemini, product, marketing, projects, workflow, architecture, design, UI-UX, coding, productivity, knowledge-management, development, learning, research, writing, tools, business, automation, data-science, web-development, personal-growth, finance +**Status:** inbox, processing, evergreen, published, archived, needs-review +**Metadata:** high-priority, quick-read, deep-dive, technical, conceptual, actionable, tutorial, inspiration + +## Your Task + +### Step 1: Discover Files to Tag + +```bash +# If user provided pattern: +find . -name "$ARGUMENTS" -type f + +# If no arguments (tag everything): +find . -name "*.md" -type f -not -path "./.obsidian/*" -not -path "./.claude/*" +``` + +### Step 2: Process Each File + +For each discovered file: + +1. **Read the file content** +2. **Analyze existing frontmatter**: + - Check if `tags:` field exists + - Check if tags are already comprehensive (5+ tags from taxonomy) + +3. **Skip if already well-tagged** (has 5+ taxonomy-compliant tags) + +4. **Analyze content** to determine: + - Content type (from filename, existing tags, content) + - Main topics (2-4 from content analysis) + - Status (infer from content or default to `evergreen` for old notes) + - Metadata characteristics + +5. **Generate enhanced tag array**: + ```yaml + tags: [{content-type}, {topic1}, {topic2}, {topic3}, {status}, {metadata}] + ``` + +6. **Update frontmatter** while preserving existing data: + ```yaml + --- + title: "{existing or generated}" + tags: [{enhanced-tag-array}] + date: "{existing or file creation date}" + type: "{content-type}" + status: "{status}" + # preserve any other existing fields + --- + ``` + +### Step 3: Report Progress + +After processing each batch of 5-10 files, report: +``` +✅ Tagged 10 files: + - 3 ideas tagged with [idea, productivity, ...] + - 2 videos tagged with [video, AI, learning, ...] + - 5 articles tagged with [article, development, ...] + +📊 Progress: 10/47 files processed +🏷️ Total tags added: 73 tags +``` + +### Step 4: Summary Report + +After all files processed: + +```markdown +# Bulk Tagging Report + +## Summary +- **Files processed:** 47 +- **Files updated:** 43 +- **Files skipped:** 4 (already well-tagged) +- **Total tags added:** 312 +- **Average tags per note:** 7.3 + +## Tag Distribution + +### By Content Type +- idea: 15 notes +- video: 8 notes +- article: 12 notes +- study-guide: 6 notes +- repository: 2 notes + +### By Topic +- AI: 23 notes +- productivity: 18 notes +- knowledge-management: 15 notes +- development: 12 notes +- learning: 10 notes + +### By Status +- inbox: 12 notes +- evergreen: 28 notes +- published: 7 notes + +## Bases Filtering Suggestions + +You can now create Bases views like: +1. **AI Learning Pipeline**: `type = video AND topic = AI AND status = inbox` +2. **Quick Wins**: `metadata = quick-read AND priority = high-priority` +3. **Technical Deep Dives**: `metadata = technical AND metadata = deep-dive` +4. **Actionable Items**: `metadata = actionable AND status != archived` + +## Next Steps +1. Review auto-tagged notes in Obsidian +2. Create Bases views using these tags +3. Refine tags manually if needed +4. Run `/bulk-auto-tag` periodically for new notes +``` + +## Important Rules + +1. **Preserve existing data**: Never delete user-added tags or properties +2. **Merge intelligently**: Combine AI tags with existing tags (deduplicate) +3. **Be conservative**: If uncertain about content type, default to `reference` +4. **Handle errors gracefully**: Skip files with invalid frontmatter, report errors +5. **Respect user intent**: If a file has explicit tags, enhance rather than replace + +## Example Transformations + +### Before (minimal tags): +```yaml +--- +tags: [idea] +date: 2025-09-15 +--- + +# AI-powered tagging +Use Claude to auto-tag notes for better organization +``` + +### After (enhanced tags): +```yaml +--- +title: "AI-powered tagging" +tags: [idea, AI, knowledge-management, tools, evergreen, actionable, technical] +date: 2025-09-15 +type: idea +status: evergreen +priority: medium +--- + +# AI-powered tagging +Use Claude to auto-tag notes for better organization +``` + +## Performance Considerations + +- Process files in batches of 10 +- Show progress every batch +- Allow user to cancel with Ctrl+C +- Estimate time for large vaults: ~2-3 seconds per file + +## Safety Features + +1. **Dry run mode** (optional): Show what would be changed without modifying files +2. **Backup reminder**: Remind user to commit to git before bulk operations +3. **Undo support**: Provide git commands to rollback if needed diff --git a/commands/capture.md b/commands/capture.md new file mode 100644 index 0000000..d5e605b --- /dev/null +++ b/commands/capture.md @@ -0,0 +1,164 @@ +--- +description: Smart capture with AI-powered auto-tagging for Bases filtering +argument-hint: [content to capture] +allowed-tools: + - Skill(obsidian-vault-manager) + - SlashCommand(/gitingest) + - Bash(*) + - mcp__fetch__fetch + - mcp__MCP_DOCKER__get_file_contents + - mcp__MCP_DOCKER__list_commits + - mcp__MCP_DOCKER__get_video_info + - mcp__MCP_DOCKER__get_transcript + - mcp__obsidian-mcp-tools__create_vault_file +--- + +## Task + +Execute the `obsidian-vault-manager` skill for universal content capture. + +**Input**: `$ARGUMENTS` (YouTube URL, GitHub URL, web article, or plain text) +**Operation**: Intelligent routing with AI-powered tagging + +## Process + +The skill will: +1. **Analyze content type** from input + - YouTube URL → Video capture workflow + - **GitHub URL → Delegate to `/gitingest` command** + - HTTP/HTTPS URL → Article capture workflow + - Plain text → Idea capture workflow + +2. **Apply AI-powered tagging** from predefined taxonomy + - Content type tags (video, idea, article, repository) + - Topic tags (2-4 relevant topics: AI, productivity, development, etc.) + - Status tags (inbox for new captures) + - Metadata tags (actionable, technical, tutorial, etc.) + +3. **Create properly formatted note** using bundled templates + - Smart filename generation + - Comprehensive frontmatter + - Structured content sections + - Tag analysis and Bases filtering suggestions + +## GitHub Repository Handling (IMPORTANT) + +**When a GitHub URL is detected:** + +1. **Extract GitHub URL** from `$ARGUMENTS` +2. **Call `/gitingest` command** using `SlashCommand` tool: + ``` + SlashCommand("/gitingest https://github.com/owner/repo") + ``` +3. **The `/gitingest` command will:** + - Use MCP Docker GitHub tools (`get_file_contents`, `list_commits`) + - Analyze repository structure and contents + - Generate comprehensive markdown with proper tagging + - Auto-save to `/Users/zorro/Documents/Obsidian/Claudecode/` +4. **Return success** - `/gitingest` handles the complete workflow + +**DO NOT:** +- ❌ Manually call `mcp__gitingest__*` tools (deprecated) +- ❌ Try to analyze GitHub repos yourself +- ❌ Use the obsidian-vault-manager skill for GitHub URLs + +**Example Flow:** +``` +User: /capture https://github.com/anthropics/claude-code + +→ Detect: GitHub URL +→ Execute: SlashCommand("/gitingest https://github.com/anthropics/claude-code") +→ Result: Complete repository analysis saved to Obsidian +``` + +## Content Routing + +The skill automatically routes based on input: + +**YouTube Videos:** +- Pattern: `youtube.com/watch?v=` or `youtu.be/` +- Fetches transcript and metadata +- Template: `templates/youtube-note-template.md` +- Tags: `[video, {topics}, inbox, {metadata}]` + +**GitHub Repositories:** +- Pattern: `github.com/owner/repo` +- Uses `/gitingest` command (MCP Docker GitHub tools) +- Creates comprehensive repository analysis +- Tags: `[repository, {language}, {topics}, inbox, technical]` + +**Web Articles:** +- Pattern: HTTP/HTTPS URLs (not YouTube/GitHub) +- Fetches and summarizes content +- Extracts key takeaways +- Tags: `[article, {topics}, inbox, quick-read]` + +**Ideas & Thoughts:** +- Pattern: Plain text without URL +- Template: `templates/idea-template.md` +- Smart filename from content +- Tags: `[idea, {topics}, inbox, {metadata}]` + +## Tag Taxonomy + +All tags come from the predefined taxonomy in the skill: + +### Content Type (1 tag) +video, idea, article, study-guide, repository, reference, project + +### Topics (2-4 tags) +AI, Claude, Gemini, product, marketing, projects, workflow, architecture, +design, UI-UX, coding, productivity, knowledge-management, development, +learning, research, writing, tools, business, automation, data-science, +web-development, personal-growth, finance + +### Status (1 tag) +inbox, processing, evergreen, published, archived, needs-review + +### Metadata (0-2 tags) +high-priority, quick-read, deep-dive, technical, conceptual, +actionable, tutorial, inspiration + +## Expected Output + +After successful capture: +- ✅ Content analyzed and type detected +- ✅ Smart tags applied (6-8 total) +- ✅ Note created with proper filename +- ✅ Template populated with content +- ✅ Tag analysis section added +- ✅ Bases filtering suggestions included + +## Examples + +**YouTube video:** +``` +/capture https://youtube.com/watch?v=abc123 +``` +→ Creates video note with transcript, learning objectives, curriculum + +**GitHub repo:** +``` +/capture https://github.com/anthropics/claude-code +``` +→ Creates repository analysis with architecture overview + +**Article:** +``` +/capture https://medium.com/article-about-ai +``` +→ Creates article summary with key takeaways + +**Quick idea:** +``` +/capture Use AI to automatically categorize notes +``` +→ Creates idea note with smart filename and tags + +## Integration with Bases + +Tags enable powerful Bases filtering: +- `type = video AND tags contains "AI"` +- `tags contains "inbox" AND tags contains "high-priority"` +- `tags contains "actionable" AND status = "processing"` +- `type = repository AND tags contains "development"` diff --git a/commands/idea.md b/commands/idea.md new file mode 100644 index 0000000..ac061fe --- /dev/null +++ b/commands/idea.md @@ -0,0 +1,54 @@ +--- +description: Create an idea file with AI-powered smart tagging for Bases filtering +argument-hint: [idea-text] (Your idea or concept to capture) +allowed-tools: + - Skill(obsidian-vault-manager) + - Bash(*) + - mcp__obsidian-mcp-tools__create_vault_file +--- + +## Task + +Execute the `obsidian-vault-manager` skill for idea capture. + +**Input**: `$ARGUMENTS` (Plain text idea or concept) +**Operation**: Idea note creation +**Today's Date**: Run `date "+%Y-%m-%d"` to get current date + +## Process + +The skill will: +1. Analyze idea content and determine main concepts +2. Apply bundled template: `templates/idea-template.md` +3. Analyze content and apply AI-powered smart tagging (using tag taxonomy) +4. Generate smart filename: `{date}-{3-5-word-idea-name}.md` +5. Substitute all template variables with analyzed data +6. Create note in vault using MCP Obsidian tools + +## Tag Taxonomy Reference + +**Topics:** AI, productivity, knowledge-management, development, learning, research, writing, tools, business, design, automation, data-science, web-development, personal-growth, finance +**Status:** inbox (default for new ideas) +**Metadata:** actionable, conceptual, inspiration, high-priority + +## Expected Output + +A comprehensive idea note with: +- Proper frontmatter (title, tags, date, type, status, priority) +- Core idea explanation +- Why it matters section +- Related concepts +- Next steps (if actionable) +- Tags analysis and filtering suggestions +- Semantic search suggestions + +**File naming format**: `[date]-[3-5-word-idea-name].md` +**Tag count**: 5-8 tags total + +## Examples + +**Input**: "Use AI to automatically categorize notes" +→ `2025-10-23-ai-note-categorization.md` + +**Input**: "Knowledge compounds when connected properly" +→ `2025-10-23-knowledge-compound-connections.md` diff --git a/commands/publish.md b/commands/publish.md new file mode 100644 index 0000000..c533eb4 --- /dev/null +++ b/commands/publish.md @@ -0,0 +1,147 @@ +--- +description: Publish note to GitHub Pages (sharehub) with proper image handling +argument-hint: [filename] (note to publish, e.g., my-article.md) +allowed-tools: + - Bash(*) + - mcp__fetch__fetch + - mcp__github__* +--- + +## Task + +Publish note to GitHub Pages using the bundled publish script. + +**Input**: `$ARGUMENTS` (filename with or without .md extension) +**Operation**: Publish to GitHub Pages with image handling + +## Implementation + +Run the bundled publish script directly: + +```bash +SKILL_DIR="$HOME/.claude/skills/obsidian-vault-manager" +"$SKILL_DIR/scripts/core/publish.sh" "$ARGUMENTS" +``` + +The script will: +1. Validate note exists in vault +2. Find all image references in note +3. Copy images from vault to sharehub repository +4. Convert image paths (./images/ → /sharehub/images/) +5. Copy note with converted paths to sharehub/documents/ +6. Git commit and push to GitHub +7. Output the published URL + +## After Script Completes + +1. Wait for GitHub Pages deployment (~60 seconds): + ```bash + sleep 60 + ``` + +2. Verify published page using `mcp__fetch__fetch` + +## Publishing Configuration + +- **Vault Path**: `/Users/zorro/Documents/Obsidian/Claudecode` +- **Sharehub Path**: `/Users/zorro/Dev/sharehub` +- **Repository**: `ZorroCheng-MC/sharehub` +- **GitHub Pages URL**: `https://zorrocheng-mc.github.io/sharehub` + +## Image Path Conversion + +The script automatically converts: +- `./images/file.jpg` → `/sharehub/images/file.jpg` +- `images/file.jpg` → `/sharehub/images/file.jpg` +- External URLs (https://...) remain unchanged + +## Expected Output + +After successful publish: +- ✅ Images copied to sharehub repository +- ✅ Note copied with converted paths +- ✅ Git commit created with proper message +- ✅ Pushed to GitHub +- ✅ GitHub Pages deployment triggered +- ✅ Published URL: `https://zorrocheng-mc.github.io/sharehub/documents/{filename}.html` + +## Examples + +**Publish with extension:** +``` +/publish my-article.md +``` + +**Publish without extension (auto-adds .md):** +``` +/publish my-article +``` + +## Password Protection (Sharehub Feature) + +**Sharehub supports password-protected documents via frontmatter!** + +### To Make a Document Private: + +Add `access: private` to the frontmatter: + +```yaml +--- +title: "Confidential Document" +access: private +--- +``` + +**How it works:** +- Documents **without** `access: private` → Publicly accessible +- Documents **with** `access: private` → Password-protected +- **Password**: "maco" (shared password for all private documents) +- **Session**: Password remembered until browser closed + +### Example: Publishing Private Document + +**Frontmatter:** +```yaml +--- +title: "Claude Dev Users: Multi-User Docker Environment" +tags: + - repository + - docker + - infrastructure +access: private +--- +``` + +**Result:** +- Document published to sharehub +- Requires password "maco" to view +- Listed in index with 🔒 lock icon (after login) + +### Index Page Behavior + +- **Before login**: Shows only public documents +- **After login**: Shows all documents (public + private) with 🔒 icons + +### Publishing Workflow + +1. **Add `access: private` to frontmatter** (if needed) +2. **Run `/publish filename.md`** +3. **Script publishes** to sharehub/documents/ +4. **GitHub Pages builds** (~60 seconds) +5. **Document accessible** with password protection + +### Important Notes + +- **Default**: Documents are public unless `access: private` is specified +- **Password**: All private documents use "maco" +- **No folder restrictions**: Protection is tag-based, not folder-based +- **Session storage**: Login persists until browser closed + +## Quality Checklist + +Before publishing, verify: +- [ ] Note has proper frontmatter (title, tags, date) +- [ ] Add `access: private` if document contains sensitive information +- [ ] Images exist in vault at specified paths +- [ ] Image paths are relative (./images/ or images/) +- [ ] Note is ready for viewing (public or password-protected) diff --git a/commands/semantic-search.md b/commands/semantic-search.md new file mode 100644 index 0000000..b281000 --- /dev/null +++ b/commands/semantic-search.md @@ -0,0 +1,25 @@ +--- +description: Perform semantic search in Obsidian vault using Smart Connections via Local REST API +allowed-tools: + - Bash(curl:*) +--- + +## Context + +- **Search Query:** `$ARGUMENTS` +- **API Configuration:** Local REST API running on https://127.0.0.1:27124/ +- **Smart Connections Endpoint:** `/search/smart` + +## Your task + +Execute a semantic search in the Obsidian vault using the Smart Connections plugin via curl. + +Run this single command to perform the search: + +```bash +curl -k -X POST \ + https://127.0.0.1:27124/search/smart \ + -H "Authorization: Bearer $(grep LOCAL_REST_API_KEY .env | cut -d'=' -f2)" \ + -H "Content-Type: text/plain" \ + -d "{\"query\": \"$ARGUMENTS\", \"filter\": {\"limit\": 5}}" | jq . +``` \ No newline at end of file diff --git a/commands/setup.md b/commands/setup.md new file mode 100644 index 0000000..adad710 --- /dev/null +++ b/commands/setup.md @@ -0,0 +1,105 @@ +--- +description: Interactive setup wizard for Obsidian Vault Manager +allowed-tools: + - Bash(*) + - Read(*) + - Write(*) +--- + +## Context + +- **Current Directory:** `$PWD` +- **Plugin Location:** `~/.claude/plugins/marketplaces/obsidian-vault-manager-plugin/` + +## Task + +Run the interactive setup wizard to configure Obsidian Vault Manager for this vault. + +**Important:** You must run Claude Code from your Obsidian vault directory for this setup to work correctly. + +## Implementation + +Execute the setup script from the plugin directory: + +```bash +# Locate the plugin installation +PLUGIN_DIR="$HOME/.claude/plugins/marketplaces/obsidian-vault-manager-plugin" + +# Check if plugin is installed +if [[ ! -d "$PLUGIN_DIR" ]]; then + echo "❌ Plugin not found. Please install it first:" + echo " claude plugin add obsidian-vault-manager" + exit 1 +fi + +# Run setup script +SETUP_SCRIPT="$PLUGIN_DIR/scripts/setup.sh" + +if [[ -f "$SETUP_SCRIPT" ]]; then + chmod +x "$SETUP_SCRIPT" + bash "$SETUP_SCRIPT" +else + echo "❌ Setup script not found at: $SETUP_SCRIPT" + echo "Plugin may be corrupted. Try reinstalling:" + echo " claude plugin remove obsidian-vault-manager" + echo " claude plugin add obsidian-vault-manager" + exit 1 +fi +``` + +## What This Does + +The setup wizard will: + +1. **Detect Your Vault** + - Verifies you're in an Obsidian vault (checks for `.obsidian/` folder) + - Confirms the vault path + +2. **Check Dependencies** + - uv/uvx (for YouTube transcripts) + - jq (for JSON processing) + - python3 (for image path conversion) + - git (for publishing) + +3. **Configure GitHub Pages** (optional) + - GitHub Pages repository path + - GitHub Pages URL + - Repository name + +4. **Create Configuration Files** + - `.claude/settings.local.json` (vault-specific settings) + - `.claude/config.sh` (for bash scripts) + - `.claude/.gitignore` (prevents committing personal paths) + +## After Setup + +Your vault will have: + +``` +your-vault/ +└── .claude/ + ├── settings.local.json (vault-specific configuration) + ├── config.sh (script configuration) + └── .gitignore (prevents committing personal paths) +``` + +## Troubleshooting + +**"Not in vault directory"** +- Make sure you `cd` to your vault first +- Check that `.obsidian/` folder exists + +**"Plugin not found"** +- Install plugin: `claude plugin add obsidian-vault-manager` + +**"Missing dependencies"** +- Install with: `brew install uv jq git` + +## Re-running Setup + +You can run `/setup` again to: +- Update paths +- Reconfigure GitHub Pages +- Fix broken configuration + +Existing configuration will be overwritten. diff --git a/commands/study-guide.md b/commands/study-guide.md new file mode 100644 index 0000000..bebbb8b --- /dev/null +++ b/commands/study-guide.md @@ -0,0 +1,66 @@ +--- +description: Generate comprehensive study guide with AI-powered smart tagging from any content source +argument-hint: [content-source] (file path, URL, or direct text to create study guide from) +allowed-tools: + - Skill(obsidian-vault-manager) + - Bash(*) + - Read(*) + - mcp__fetch__fetch + - mcp__obsidian-mcp-tools__create_vault_file + - mcp__obsidian-mcp-tools__get_vault_file +--- + +## Task + +Execute the `obsidian-vault-manager` skill for study guide creation. + +**Input**: `$ARGUMENTS` (file path, URL, or direct text) +**Operation**: Study guide creation +**Today's Date**: Run `date "+%Y-%m-%d"` to get current date + +## Process + +The skill will: +1. Fetch content from URL, file, or direct text +2. Apply bundled template: `templates/study-guide-template.md` +3. Analyze content complexity, topics, and learning requirements +4. Apply AI-powered smart tagging (using tag taxonomy) +5. Generate structured learning plan with objectives and assessments +6. Substitute all template variables with analyzed data +7. Create note in vault using MCP Obsidian tools + +## Tag Taxonomy Reference + +**Topics:** AI, productivity, knowledge-management, development, learning, research, writing, tools, business, design, automation, data-science, web-development, personal-growth, finance +**Status:** processing (default for study guides - active learning) +**Metadata:** deep-dive, technical, conceptual, actionable, tutorial + +## Expected Output + +A comprehensive study guide with: +- Proper frontmatter (title, tags, source, date, type, status, difficulty, estimated-time, priority) +- Overview with subject and generated date +- Learning objectives (specific, measurable, checkboxed) +- Study plan with time estimates and difficulty level +- Structured content breakdown (weekly/modular) +- Study strategies (material-specific and active learning techniques) +- Self-assessment questions (intermediate and final) +- Progress tracking section +- Related notes and connections +- Tags analysis with filtering suggestions +- Semantic search suggestions + +**File naming format**: `[date]-[topic-name]-study-guide.md` +**Tag count**: 6-8 tags total +**Status**: Always `processing` (active study material) + +## Examples + +**Input (URL)**: "https://example.com/machine-learning-course" +→ `2025-10-28-machine-learning-study-guide.md` + +**Input (File)**: "react-advanced-patterns.md" +→ `2025-10-28-react-advanced-study-guide.md` + +**Input (Text)**: "Deep dive into distributed systems architecture" +→ `2025-10-28-distributed-systems-study-guide.md` diff --git a/commands/youtube-note.md b/commands/youtube-note.md new file mode 100644 index 0000000..51aa9ee --- /dev/null +++ b/commands/youtube-note.md @@ -0,0 +1,49 @@ +--- +description: Fetch YouTube video transcript and create comprehensive material entry with AI-powered smart tagging +argument-hint: [youtube-url-or-video-id] (YouTube URL or video ID to process) +allowed-tools: + - Skill(obsidian-vault-manager) + - Bash(*) + - mcp__obsidian-mcp-tools__create_vault_file + - mcp__fetch__fetch +--- + +## Task + +Execute the `obsidian-vault-manager` skill for YouTube note capture. + +**Input**: `$ARGUMENTS` (YouTube URL or video ID) +**Operation**: YouTube video note creation +**Today's Date**: Run `date "+%Y-%m-%d"` to get current date + +## Process + +The skill will: +1. Extract video ID from URL/argument +2. Use bundled script: `scripts/core/fetch-youtube-transcript.sh` to fetch transcript +3. Fetch video metadata from YouTube page +4. Apply bundled template: `templates/youtube-note-template.md` +5. Analyze content and apply AI-powered smart tagging (using tag taxonomy) +6. Substitute all template variables with analyzed data +7. Create note in vault using MCP Obsidian tools + +## Tag Taxonomy Reference + +**Topics:** AI, productivity, knowledge-management, development, learning, research, writing, tools, business, design, automation, data-science, web-development, personal-growth, finance +**Status:** inbox (default for new videos) +**Metadata:** tutorial, deep-dive, quick-read, technical, conceptual, actionable, inspiration + +## Expected Output + +A comprehensive video note with: +- Proper frontmatter (title, tags, url, cover, date, type, status, priority, duration, channel) +- Clickable YouTube thumbnail +- Description and learning objectives +- Structured curriculum with timestamps +- Key takeaways and insights +- Rating section +- Tags analysis and filtering suggestions +- Related topics + +**File naming format**: `[date]-[creator-name]-[descriptive-title].md` +**Tag count**: 6-8 tags total diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..9929d32 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,73 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:ZorroCheng-MC/obsidian-vault-manager-plugin:", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "bac2f32e7fbbfd71a6e73845bda5286e3a95c3e6", + "treeHash": "4a7751003ab5351e816e51d1be19e470124a4cc20a3dbf62acbf4d6bbf27daa1", + "generatedAt": "2025-11-28T10:13:00.009507Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "obsidian-vault-manager", + "description": "Manage Obsidian knowledge base with smart capture, AI-powered tagging, and publishing workflows", + "version": null + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "7a6c201e1a83cd09fc6fd150897247be650eaadb25bd6e069f86c654d721674b" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "bd46fbe299eb990159296520f80e9820b09d38fb499328e650bad51e7e27c84b" + }, + { + "path": "commands/study-guide.md", + "sha256": "566caf92a77ea0e7cb2fe4d2ac91b1148260082f85616b2a36b1a7edcf696c0a" + }, + { + "path": "commands/youtube-note.md", + "sha256": "b7134beeba6a272bd7db8922b765a8efebc9925d5fba1e5ffb68c9ee0f380164" + }, + { + "path": "commands/capture.md", + "sha256": "19c0a2422bf27696fa6132167136e228b88136d449da67f1619d9421268fa57b" + }, + { + "path": "commands/setup.md", + "sha256": "16569758cdb2e3e993cf9f487f92fac02aa43b634dfe44763d4f7bb573ebe6c9" + }, + { + "path": "commands/publish.md", + "sha256": "014af1a559e2d8f8165623ce73a67bebc557b7f5384982ae7b4705f01d957ee9" + }, + { + "path": "commands/idea.md", + "sha256": "c74b654ad4e9119ec992d13064c8e4acbc098e3e6435aceb2cae41017f47452c" + }, + { + "path": "commands/semantic-search.md", + "sha256": "d67b4500865291e9ebb5e1b3eca0d02cf556793e6ccf36515c54a1d4569dc39a" + }, + { + "path": "commands/bulk-auto-tag.md", + "sha256": "d5f15eddb68cb3b3294ef72e6218fc9779ac6a819fb7f17cba54c39f13db06ec" + } + ], + "dirSha256": "4a7751003ab5351e816e51d1be19e470124a4cc20a3dbf62acbf4d6bbf27daa1" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file