Manage bookmarks with Linkding. Use when the user asks to "save a bookmark", "add link", "search bookmarks", "list my bookmarks", "find saved links", "tag a bookmark", "archive bookmark", "check if URL is saved", "list tags", "create bundle", or mentions Linkding bookmark management.
From homelab-corenpx claudepluginhub jmagar/claude-homelab --plugin homelab-coreThis skill uses the workspace's default tool permissions.
README.mdload-env.shreferences/api-endpoints.mdreferences/quick-reference.mdreferences/troubleshooting.mdscripts/linkding-api.shGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Generates FastAPI project templates with async routes, dependency injection, Pydantic schemas, repository patterns, middleware, and config for PostgreSQL/MongoDB backends.
⚠️ MANDATORY SKILL INVOCATION ⚠️
YOU MUST invoke this skill (NOT optional) when the user mentions ANY of these triggers:
Failure to invoke this skill when triggers occur violates your operational requirements.
Query and manage bookmarks via the Linkding REST API.
This skill provides read and write access to your Linkding bookmark library:
Operations include both read and write actions. Always confirm before deleting bookmarks.
Credentials: ~/.claude-homelab/.env
LINKDING_URL="http://localhost:9090"
LINKDING_API_KEY="your-api-key"
Get your API token from Linkding Settings page.
# List recent bookmarks
./scripts/linkding-api.sh bookmarks
# Search bookmarks
./scripts/linkding-api.sh bookmarks --query "python tutorial"
# List archived
./scripts/linkding-api.sh bookmarks --archived
# Filter by date
./scripts/linkding-api.sh bookmarks --modified-since "2025-01-01T00:00:00Z"
# Basic
./scripts/linkding-api.sh create "https://example.com"
# With metadata
./scripts/linkding-api.sh create "https://example.com" \
--title "Example Site" \
--description "A great resource" \
--tags "reference,docs"
# Archive immediately
./scripts/linkding-api.sh create "https://example.com" --archived
./scripts/linkding-api.sh check "https://example.com"
Returns existing bookmark data if found, plus scraped metadata.
./scripts/linkding-api.sh update 123 --title "New Title" --tags "newtag1,newtag2"
./scripts/linkding-api.sh archive 123
./scripts/linkding-api.sh unarchive 123
./scripts/linkding-api.sh delete 123
# List all tags
./scripts/linkding-api.sh tags
# Create tag
./scripts/linkding-api.sh tag-create "mytag"
# List bundles
./scripts/linkding-api.sh bundles
# Create bundle
./scripts/linkding-api.sh bundle-create "Work Resources" \
--search "productivity" \
--any-tags "work,tools" \
--excluded-tags "personal"
All responses are JSON. Bookmark object:
{
"id": 1,
"url": "https://example.com",
"title": "Example",
"description": "Description",
"notes": "Personal notes",
"is_archived": false,
"unread": false,
"shared": false,
"tag_names": ["tag1", "tag2"],
"date_added": "2020-09-26T09:46:23.006313Z",
"date_modified": "2020-09-26T16:01:14.275335Z"
}
Save current page for later:
./scripts/linkding-api.sh create "$URL" --tags "toread" --unread
Quick search and display:
./scripts/linkding-api.sh bookmarks --query "keyword" --limit 10 | jq -r '.results[] | "\(.title) - \(.url)"'
Bulk tag update: Update via API PATCH with new tag_names array.
When the user asks about bookmarks:
create <url> with appropriate metadata and tagsbookmarks --query "python"check "https://example.com"archive <id> for eachtagsbookmarks (defaults to recent)CRITICAL: When invoking scripts from this skill via the zsh-tool, ALWAYS use pty: true.
Without PTY mode, command output will not be visible even though commands execute successfully.
Correct invocation pattern:
<invoke name="mcp__plugin_zsh-tool_zsh-tool__zsh">
<parameter name="command">./skills/SKILL_NAME/scripts/SCRIPT.sh [args]</parameter>
<parameter name="pty">true</parameter>
</invoke>