skills/bookmark/SKILL.md
Use when the user wants to save a bookmark, bookmark a link, or save multiple URLs to Raindrop.io. Triggers on "bookmark this", "save this link", "add to raindrop", or when given one or more URLs to save.
npx skillsauth add goofansu/pi-stuff bookmarkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Save one or multiple bookmarks to Raindrop.io via its REST API.
RAINDROP_TOKEN environment variable must be set (a Raindrop.io API token — get one from raindrop.io/settings/integrations).link, titletags — array of strings; infer relevant tags from context if the user doesn't provide themIf the user doesn't provide a title, infer one from context (the page title if known, the URL path, or a short description from the conversation).
If the user doesn't provide tags, infer 1–3 short lowercase tags from the URL, title, or conversation context (e.g. "api", "docs", "javascript").
If RAINDROP_TOKEN is not set, tell the user and stop.
curl -s -X POST \
-H "Authorization: Bearer $RAINDROP_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"link": "https://example.com",
"title": "Example Title",
"tags": ["tag1", "tag2"],
"pleaseParse": {}
}' \
"https://api.raindrop.io/rest/v1/raindrop"
# pleaseParse: {} asks Raindrop to auto-fetch metadata (favicon, description, etc.) for the link
Use the bulk endpoint when saving 2+ bookmarks in one shot (max 100 per request):
curl -s -X POST \
-H "Authorization: Bearer $RAINDROP_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": [
{"link": "https://example.com/a", "title": "Title A", "tags": ["tag1"], "pleaseParse": {}},
{"link": "https://example.com/b", "title": "Title B", "tags": ["tag2"], "pleaseParse": {}}
]
}' \
"https://api.raindrop.io/rest/v1/raindrops"
| Count | Endpoint | Method |
|-------|----------|--------|
| 1 | /rest/v1/raindrop | POST |
| 2+ | /rest/v1/raindrops | POST |
Use when the user wants to edit an existing bookmark (e.g. change title, add tags, update note). Requires the raindrop id.
curl -s -X PUT \
-H "Authorization: Bearer $RAINDROP_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "New Title",
"tags": ["tag1", "tag2"],
"important": true
}' \
"https://api.raindrop.io/rest/v1/raindrop/{id}"
All fields from Create are valid (except link is optional). Use pleaseParse: {} to re-parse link metadata.
Moves the raindrop to Trash. Deleting again from Trash removes it permanently.
curl -s -X DELETE \
-H "Authorization: Bearer $RAINDROP_TOKEN" \
"https://api.raindrop.io/rest/v1/raindrop/{id}"
Response: { "result": true }
| Action | Endpoint | Method |
|--------|----------|--------|
| Update | /rest/v1/raindrop/{id} | PUT |
| Delete | /rest/v1/raindrop/{id} | DELETE |
link, title). Infer tags if not provided.id from the user or from a prior save response.curl. Pipe through jq if available for readable output."result": true means success. Report the saved title(s) and link(s) to the user. On failure, show the error field.Success returns "result": true plus the created item(s):
// Single
{ "result": true, "item": { "_id": 123456789, "title": "...", "link": "..." } }
// Bulk
{ "result": true, "items": [{ "_id": 123456789, "title": "...", "link": "..." }, ...] }
Failure returns "result": false with an error field — show it to the user.
data-ai
Use when the user asks to hand off the current session to a fresh agent.
development
Use when the user asks to research a topic online, find current information, compare options, or produce a research report.
content-media
Use when the user asks to transcribe audio files to text.
testing
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.