Analyze web clippings, create resource notes with Layer 1 content, and return lightweight proposals. Handles enrichment, analysis, note creation, and Layer 1 injection so content never flows through coordinator. Worker skill for triage orchestrator.
View on GitHubnathanvale/side-quest-marketplace
para-obsidian
February 4, 2026
Select agents to install to:
npx add-skill https://github.com/nathanvale/side-quest-marketplace/blob/main/plugins/para-obsidian/skills/analyze-web/SKILL.md -a claude-code --skill analyze-webInstallation paths:
.claude/skills/analyze-web/# Analyze Web Clipping
Analyze a single web clipping, **create the resource note with Layer 1 content**, and return a lightweight proposal.
**Key design:** This skill creates the resource note AND populates Layer 1 before returning. The full content stays in subagent context - only the proposal flows back to the coordinator.
## Input
You receive:
- `file`: Path to clipping in inbox (e.g., `00 Inbox/✂️ Article Title.md`)
- `areas`: Available areas in vault
- `projects`: Available projects in vault
## Output
Return a JSON proposal per @plugins/para-obsidian/skills/triage/references/proposal-schema.md.
**Key:** Use `area` (single wikilink), `project` (single wikilink or null), `resourceType` (camelCase). Include `file`, `type: "clipping"`, `created`, and `layer1_injected` alongside the standard proposal fields.
## Workflow
### Step 1: Read Clipping
```
para_read({ file: "[input file]", response_format: "json" })
```
Extract frontmatter fields (`source`, `domain`, `capture_reason`, pre-filled `areas`/`projects`) from the YAML header in the `para_read` response. Do NOT call `para_fm_get` separately — `para_read` returns the full file including frontmatter.
Also extract existing body content.
### Step 2: Fetch Full Content
**CRITICAL: Select tool based on domain.** Use `ToolSearch` to load deferred tools before calling them.
| Domain | Tool | ToolSearch Query |
|--------|------|-----------------|
| `youtube.com` / `youtu.be` | `get_transcript` (fallback: `get_video_info`) | `"youtube transcript"` |
| `x.com` / `twitter.com` | `x_get_tweet` (parse tweet_id from URL) | `"x-api tweet"` |
| `github.com` / other articles | `firecrawl_scrape` | `"firecrawl scrape"` |
**X/Twitter is MANDATORY enrichment** — Web Clipper captures only stubs. Always fetch via X-API regardless of clipping content.
See @plugins/para-obsidian/skills/triage/references/enrichment-strategies.md for the full routing table and constraints.
See @plugins/para-obsidian/references/content-sou