Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 09:08:33 +08:00
commit 7c14f9f4f2
11 changed files with 879 additions and 0 deletions

181
commands/bulk-auto-tag.md Normal file
View File

@@ -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

164
commands/capture.md Normal file
View File

@@ -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"`

54
commands/idea.md Normal file
View File

@@ -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`

147
commands/publish.md Normal file
View File

@@ -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)

View File

@@ -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 .
```

105
commands/setup.md Normal file
View File

@@ -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.

66
commands/study-guide.md Normal file
View File

@@ -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`

49
commands/youtube-note.md Normal file
View File

@@ -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