Skip to main content
ClaudeWave
Skill2.5k estrellas del repoactualizado 2mo ago

download-attachment

This Claude Code skill downloads files from provided URLs into an Obsidian vault's attachments folder, validates HTTP/HTTPS URLs for security, and organizes downloaded files with descriptive names. Use it when users request saving web content as attachments, downloading multiple files from URLs, or adding web resources to their Obsidian vault.

Instalar en Claude Code
Copiar
git clone --depth 1 https://github.com/heyitsnoah/claudesidian /tmp/download-attachment && cp -r /tmp/download-attachment/.agents/skills/download-attachment ~/.claude/skills/download-attachment
Después abre una sesión nueva de Claude Code; el skill carga automáticamente.

SKILL.md

# download-attachment

Download files from URLs to attachments folder and organize them with
descriptive names.

## Usage

```
/download-attachment <url1> [url2] [url3...]
```

## Examples

```
/download-attachment https://example.com/document.pdf
/download-attachment https://site.com/image.png https://site.com/report.pdf
```

## Implementation

You are tasked with downloading files from URLs and organizing them in the
Obsidian vault attachments folder.

### Step 1: Parse and Validate URLs

Extract the URL(s) from the user's input. Handle multiple URLs if provided.

- **Validate URL scheme**: Only allow http:// or https:// URLs
- **Reject invalid URLs**: file://, ftp://, or malformed URLs
- **Example validation**:

```bash
if [[ ! "$url" =~ ^https?:// ]]; then
  echo "Error: Only HTTP/HTTPS URLs are allowed"
  exit 1
fi
```

### Step 2: Download Files

For each URL:

```bash
# Sanitize filename to prevent path traversal
# Remove ../ and other dangerous characters
filename=$(basename "$url" | sed 's/[^a-zA-Z0-9._-]/_/g')

# Use wget or curl to download with timeout
wget --timeout=30 -O "05_Attachments/$filename" "$url"
# or
curl --max-time 30 -L "$url" -o "05_Attachments/$filename"
```

### Step 3: Verify Downloads

Check that files were downloaded successfully:

```bash
ls -la "05_Attachments/"
```

### Step 4: Organize Files

After downloading, run the organize-attachments command to rename files with
descriptive names:

For PDFs:

- Extract text with `pdftotext`
- Analyze content for meaningful title

For Images:

- Use `mcp__gemini-vision__analyze_image` or
  `mcp__gemini-vision__analyze_multiple`
- Generate descriptive filename based on content

### Step 5: Move to Organized

Move renamed files to `05_Attachments/Organized/` with descriptive names

### Step 6: Update Index

Add entries to `05_Attachments/00_Index.md`

### Step 7: Commit Changes

```bash
git add -A
git commit -m "Download and organize attachments from URLs"
git push
```

## Important Notes

1. **File Naming**:
   - Initial download: Use URL filename or generate from URL
   - After analysis: Rename with descriptive title

2. **Supported Types**:
   - Images: .png, .jpg, .jpeg, .gif, .webp
   - Documents: .pdf, .doc, .docx
   - Text: .txt, .md
   - Data: .csv, .xlsx

3. **Error Handling**:
   - Check if URL is accessible
   - Verify file downloaded correctly
   - Handle download failures gracefully

4. **Organization**:
   - Downloaded files go to `05_Attachments/`
   - After renaming, move to `05_Attachments/Organized/`
   - Update links across vault if needed

## Workflow

1. Download file(s) from provided URL(s)
2. Identify file type and analyze content
3. Generate descriptive filename
4. Move to Organized folder
5. Update index and references
6. Commit and push changes

## Tips

- For multiple URLs, process them in batch for efficiency
- Use Gemini Vision for batch image analysis (up to 3 at once)
- Extract meaningful context from PDFs before renaming
- Preserve original file extensions
- Keep filenames concise but descriptive (max 60 chars)
add-frontmatterSkill

Add or update YAML frontmatter properties to enhance Obsidian note organization. Use when the user asks to add, fix, normalize, or improve frontmatter, properties, metadata, tags, or YAML on a note or folder of notes.

daily-reviewSkill

Conduct an end-of-day review to capture progress and set up tomorrow. Use when the user asks for a daily review, end of day wrap-up, EOD note, what they did today, or wants to reflect on the day and plan tomorrow.

de-ai-ifySkill

Remove AI-generated jargon and restore human voice to text. Use when the user asks to de-AI-ify, humanize, remove AI tone, or make text sound less machine-generated.

git-worktreesSkill

Work with git worktrees for isolated parallel development. Use when starting feature work in isolation, when need separate workspace without branch switching, or when cleaning up worktrees after PR merge.

inbox-processorSkill

Help organize and process items in the 00_Inbox folder according to the PARA method. Use when the user asks to process, clear, sort, triage, or organize their inbox.

init-bootstrapSkill

Interactive setup wizard that helps new users create a personalized CLAUDE.md file based on their Obsidian workflow preferences. Use when the user wants to set up claudesidian, onboard a new vault, or run the bootstrap/init/setup wizard.

install-claudesidian-commandSkill

Install claudesidian shell command to launch Claude Code from anywhere. Use when the user wants to install a shell alias/launcher for their vault, or asks to set up the claudesidian command.

json-canvasSkill

Create and edit JSON Canvas files (.canvas) with nodes, edges, groups, and connections. Use when working with .canvas files, creating visual canvases, mind maps, flowcharts, or when the user mentions Canvas files in Obsidian.