Clinkding - Linkding Bookmark Integration

v1.0.0

Manage linkding bookmarks - save URLs, search, tag, organize, and retrieve your personal bookmark collection. Use when the user wants to save links, search bookmarks, manage tags, or organize their reading list.

1· 2k·0 current·0 all-time
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
high confidence
Purpose & Capability
Name, description, required binary (clinkding), and install methods (Homebrew / Go) align with a CLI wrapper for the linkding bookmark service. The homepage points to a matching GitHub repo, and the commands in SKILL.md are consistent with a bookmark-management CLI.
Instruction Scope
SKILL.md stays within the expected scope of managing bookmarks (create/list/update/delete tags, bundles, assets, etc.). It does instruct the agent to read/write the clinkding config (~/.config/clinkding/config.yaml), honor LINKDING_URL/LINKDING_TOKEN env vars, and to upload local files as assets — all expected for this tool, but worth noting because the agent may read local files or send conversation text as bookmark descriptions.
Install Mechanism
Install methods are Homebrew formula and Go module (building a Go binary). Both are standard and proportionate for a Go-based CLI; no arbitrary download URLs or extraction steps are present.
!
Credentials
Metadata declares no required environment variables or primary credential, but the SKILL.md explicitly documents LINKDING_URL and LINKDING_TOKEN and a config file containing a token. The skill will need an API token to contact a linkding instance; that credential is not declared in the registry metadata, which is an inconsistency users should verify before granting access.
Persistence & Privilege
Skill is not always-included and does not request elevated platform-wide privileges. The install creates a single CLI binary (expected). The skill does instruct writing/reading its own config file in the user's home (~/.config/clinkding), which is normal for a CLI but means the agent may store credentials there.
What to consider before installing
This skill is a CLI wrapper for the clinkding tool and is generally coherent with that purpose, but review these points before installing: - The SKILL.md expects LINKDING_URL and LINKDING_TOKEN (or a config file at ~/.config/clinkding/config.yaml) even though the registry metadata lists no required env vars — confirm you will supply a token and understand where it will be stored. - The agent may be instructed to upload local files (assets). Only allow the skill/agent to access files you are comfortable sending to your linkding instance. - Verify the Homebrew formula / Go module source (the provided homepage repo) is the legitimate project you expect. - Consider using a least-privilege API token for linkding (limited scope or a dedicated account) rather than a broad personal token. If you prefer, ask the skill provider to update the registry metadata to declare LINKDING_TOKEN (and LINKDING_URL) so the credential requirements are explicit.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

🔖 Clawdis
Binsclinkding

Install

Install clinkding (Homebrew)
Bins: clinkding
brew install daveonkels/tap/clinkding
Install clinkding (Go)
Bins: clinkding
go install github.com/daveonkels/clinkding@latest
latestvk979hb5435m3v4vte7f6h9h4gh7yqpj7
2kdownloads
1stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

clinkding - Linkding Bookmark Manager CLI

A modern Go-based CLI for managing bookmarks in linkding, a self-hosted bookmark manager.

What This Does

Linkding is a self-hosted bookmark manager (like Pocket, Instapaper). clinkding is the CLI that lets you manage your bookmarks from the terminal or via AI agents.

Think of it as:

  • Save for later - Capture URLs you want to read
  • Searchable library - Full-text search across titles, descriptions, tags
  • Organized collections - Tag and bundle related bookmarks
  • Personal archive - Keep important links with notes and metadata

Quick Start

Initial Setup

# Interactive configuration
clinkding config init

# Or manually configure
clinkding config set url https://your-linkding-instance.com
clinkding config set token YOUR_API_TOKEN

# Test connection
clinkding config test

Configuration File

Location: ~/.config/clinkding/config.yaml

url: https://linkding.example.com
token: your-api-token-here

defaults:
  bookmark_limit: 100
  output_format: auto

Environment Variables

export LINKDING_URL="https://linkding.example.com"
export LINKDING_TOKEN="your-api-token-here"

Core Commands

Bookmarks

List & Search

# List recent bookmarks
clinkding bookmarks list

# Search by keyword
clinkding bookmarks list --query "golang tutorial"

# Filter by tag
clinkding bookmarks list --query "tag:programming"

# Recent bookmarks (last 7 days)
clinkding bookmarks list --added-since "7d"

# Unread bookmarks
clinkding bookmarks list --query "unread:yes"

# JSON output for scripting
clinkding bookmarks list --json

# Plain text (tab-separated)
clinkding bookmarks list --plain

Create Bookmarks

# Simple bookmark
clinkding bookmarks create https://go.dev

# With metadata
clinkding bookmarks create https://go.dev \
  --title "Go Programming Language" \
  --tags "golang,programming,reference" \
  --description "Official Go website" \
  --unread

# Check if URL already exists before creating
clinkding bookmarks check https://go.dev

Update Bookmarks

# Update title
clinkding bookmarks update 42 --title "New Title"

# Add tags
clinkding bookmarks update 42 --add-tags "important,work"

# Remove tags
clinkding bookmarks update 42 --remove-tags "old-tag"

# Mark as read
clinkding bookmarks update 42 --read

# Update description
clinkding bookmarks update 42 --description "Updated notes"

Get Bookmark Details

# Full details
clinkding bookmarks get 42

# JSON output
clinkding bookmarks get 42 --json

Archive & Delete

# Archive (hide from main list)
clinkding bookmarks archive 42

# Unarchive
clinkding bookmarks unarchive 42

# Delete permanently
clinkding bookmarks delete 42

Tags

# List all tags
clinkding tags list

# Create a tag
clinkding tags create "golang"

# Get tag details
clinkding tags get 1

# Plain text output
clinkding tags list --plain

Bundles

Bundles are collections of related bookmarks.

# List bundles
clinkding bundles list

# Create a bundle
clinkding bundles create "Go Resources" \
  --description "Everything related to Go programming"

# Update a bundle
clinkding bundles update 1 --name "Go Lang Resources"

# Get bundle details
clinkding bundles get 1

# Delete a bundle
clinkding bundles delete 1

Assets

Upload and manage file attachments for bookmarks.

# List assets for a bookmark
clinkding assets list 42

# Upload a file
clinkding assets upload 42 ~/Documents/screenshot.png

# Download an asset
clinkding assets download 42 1 -o ./downloaded-file.png

# Delete an asset
clinkding assets delete 42 1

User Profile

# Get user profile info
clinkding user profile

Agent Usage Patterns

Save URL from Conversation

# User: "Save this for later: https://example.com"
clinkding bookmarks create https://example.com \
  --title "Article Title" \
  --description "Context from conversation" \
  --tags "topic,context"

Search Bookmarks

# User: "Find my golang bookmarks"
clinkding bookmarks list --query "golang"

# User: "Show me unread programming articles"
clinkding bookmarks list --query "tag:programming unread:yes"

# User: "What did I save last week?"
clinkding bookmarks list --added-since "7d"

Organize & Tag

# User: "Tag bookmark 42 as important"
clinkding bookmarks update 42 --add-tags "important"

# User: "Create a bundle for my AI research links"
clinkding bundles create "AI Research" \
  --description "Machine learning and AI papers"

Retrieve for Reading

# User: "Give me something to read"
clinkding bookmarks list --query "unread:yes" --limit 5

# User: "Show me my golang tutorials"
clinkding bookmarks list --query "tag:golang tag:tutorial"

Output Formats

Auto (Default)

Human-friendly tables and colors for terminal display.

JSON

clinkding bookmarks list --json

Machine-readable for scripting and agent parsing.

Plain Text

clinkding bookmarks list --plain

Tab-separated values for pipe-friendly parsing.

Relative Date Filtering

Supports human-friendly time ranges:

# Last 24 hours
clinkding bookmarks list --added-since "24h"

# Last 7 days
clinkding bookmarks list --added-since "7d"

# Last 6 months
clinkding bookmarks list --modified-since "180d"

Supported units: h (hours), d (days), y (years)

Common Workflows

Morning Reading Routine

# Check unread bookmarks
clinkding bookmarks list --query "unread:yes"

# Get top 5 most recent
clinkding bookmarks list --limit 5

Save from Clipboard

# macOS
pbpaste | xargs -I {} clinkding bookmarks create {}

# Linux
xclip -o | xargs -I {} clinkding bookmarks create {}

Batch Operations

# Tag multiple bookmarks
for id in 42 43 44; do
  clinkding bookmarks update $id --add-tags "important"
done

# Archive old unread bookmarks
clinkding bookmarks list --query "unread:yes" --added-since "30d" --plain | \
  while read id _; do
    clinkding bookmarks archive "$id"
  done

Backup Bookmarks

# Export all bookmarks as JSON
clinkding bookmarks list --json > bookmarks-backup-$(date +%Y%m%d).json

# Export specific tag
clinkding bookmarks list --query "tag:important" --json > important.json

Global Flags

Available on all commands:

FlagDescription
-c, --config <file>Config file path
-u, --url <url>Linkding instance URL
-t, --token <token>API token
--jsonOutput as JSON
--plainOutput as plain text
--no-colorDisable colors
-q, --quietMinimal output
-v, --verboseVerbose output

Exit Codes

CodeMeaning
0Success
1General error (API/network)
2Invalid usage (bad flags/args)
3Authentication error
4Not found
130Interrupted (Ctrl-C)

Troubleshooting

Test Configuration

# Verify settings
clinkding config show

# Test connection
clinkding config test

Common Issues

Authentication Error:

  • Verify API token in linkding web interface
  • Check URL includes protocol (https://)
  • Remove trailing slashes from URL

Command-Specific Help:

clinkding bookmarks --help
clinkding bookmarks create --help

Links

Installation

Homebrew (macOS/Linux)

brew install daveonkels/tap/clinkding

Go Install

go install github.com/daveonkels/clinkding@latest

Binary Download

Download from releases for your platform.

Shell Completion

# Bash
clinkding completion bash > /etc/bash_completion.d/clinkding

# Zsh
clinkding completion zsh > "${fpath[1]}/_clinkding"

# Fish
clinkding completion fish > ~/.config/fish/completions/clinkding.fish

Built by: @daveonkels
License: MIT

Agent Workflows for Smart Bookmark Creation

Adding URLs with Automatic Metadata

When a user says "Add this to linkding" or "Save this URL", follow this workflow:

1. Extract metadata from the URL

Use the summarize skill to get title and description:

# Get page metadata
summarize url https://example.com --format json

This returns structured data with:

  • Title
  • Description/summary
  • Main content

2. Infer appropriate tags from content

Map the content to existing canonical tags only. Do NOT create new tags.

Use this canonical tag list (263 tags total):

  • Tech: webdev, design, programming, ai, cloud, devops, docker, linux, networking, security, privacy
  • Content: content, media, photography, video, audio, books, podcasting
  • Business: business, marketing, ecommerce, finance, career, productivity
  • Home: smart-home, home-assistant, esphome, iot, home-improvement
  • Tools: tools, cli, git, github, editor, reference, documentation
  • Data: data, analytics, mysql, nosql
  • Communication: communication, email, messaging, slack
  • Education: education, guide, howto, research, testing
  • Locations: texas, seattle, dallas (use sparingly)

Tag Selection Rules:

  • Use 2-5 tags maximum
  • Choose the most specific applicable tags
  • If unsure, default to broader categories (e.g., tools over generator)
  • Check existing tags first: clinkding tags list --plain | grep -i <keyword>
  • Never create tags like: awesome, cool, interesting, resources, tips

3. Create the bookmark with metadata

clinkding bookmarks create "https://example.com" \
  --title "Title from summarize" \
  --description "Summary from summarize (1-2 sentences)" \
  --tags "webdev,tools,reference"

Example Workflow

User: "Save this to linkding: https://github.com/awesome/project"

Agent Actions:

# 1. Check if already bookmarked
clinkding bookmarks check https://github.com/awesome/project

# 2. Get metadata (use summarize skill)
summarize url https://github.com/awesome/project --format json

# 3. Analyze content and infer tags
# From summary: "A CLI tool for Docker container management"
# Canonical tags: docker, devops, cli, tools

# 4. Create bookmark
clinkding bookmarks create https://github.com/awesome/project \
  --title "Awesome Project - Docker Container CLI" \
  --description "Command-line tool for managing Docker containers with enhanced features" \
  --tags "docker,devops,cli"

Tag Mapping Heuristics

Use these rules to map content → canonical tags:

Content TypeCanonical Tags
Web development, HTML, CSS, JavaScriptwebdev, css, javascript
React, frameworks, frontendwebdev, react
Design, UI/UX, mockupsdesign
Python, Go, Ruby codeprogramming, python/ruby
Docker, K8s, DevOpsdocker, devops, cloud
Home automation, ESP32, sensorssmart-home, esphome, iot
AI, ML, LLMsai, llm
Productivity tools, workflowsproductivity, tools
Finance, investing, cryptofinance
Marketing, SEO, adsmarketing
Shopping, deals, storesecommerce
Tutorials, guides, docsguide, howto, documentation
Security, privacy, encryptionsecurity, privacy
Local (DFW/Seattle)texas, seattle

Validation Before Creating

Always run these checks:

# 1. Does URL already exist?
clinkding bookmarks check <url>

# 2. Do the tags exist?
clinkding tags list --plain | grep -iE "^(tag1|tag2|tag3)$"

# 3. Are we using canonical tags?
# Cross-reference against the 263 canonical tags
# Never create new tags without explicit user request

User Requests to Save Multiple Links

If user provides multiple URLs:

# Process each URL separately with metadata extraction
for url in url1 url2 url3; do
  # Get metadata
  # Infer tags
  # Create bookmark
done

Updating Existing Bookmarks

If user says "Update that bookmark" or "Add tags to my last save":

# Get most recent bookmark
recent_id=$(clinkding bookmarks list --limit 1 --plain | cut -f1)

# Add tags (don't remove existing ones unless asked)
clinkding bookmarks update $recent_id --add-tags "new-tag"

# Update description
clinkding bookmarks update $recent_id --description "Updated notes"

Key Principles

  1. Always fetch metadata - Use summarize to get good titles/descriptions
  2. Use existing tags - Never create new tags without checking canonical list
  3. Be selective - 2-5 tags max, choose the most specific applicable
  4. Validate first - Check for duplicates before creating
  5. Provide context - Include brief description explaining why it's useful

Current Canonical Tag Structure

Dave's linkding instance has 263 canonical tags after consolidation from 17,189 duplicates.

Top categories (by bookmark count):

  • pinboard (4,987) - Legacy import tag
  • ifttt (2,639) - Legacy import tag
  • webdev (1,679) - Web development
  • design (561) - Design/UI/UX
  • content (416) - Content/writing
  • cloud (383) - Cloud/hosting/SaaS
  • business (364) - Business/strategy
  • ecommerce (308) - Shopping/marketplace
  • smart-home (295) - Home automation
  • productivity (291) - Productivity tools

Golden Rule: When in doubt, use broader existing tags rather than creating new specific ones.

Comments

Loading comments...