Install
openclaw skills install runaSave, search, list, update, and delete bookmarks and text notes in Runa. Use when the user wants to bookmark a URL, save text/thoughts/snippets, find a saved...
openclaw skills install runaInteract with the Runa bookmarking API at https://api.onruna.com.
Read the API key from ~/.openclaw/secrets/runa.json (field: api_key) or fall back to the RUNA_API_KEY environment variable. Authenticate all requests with:
Authorization: Bearer <api_key>
curl -s -X POST https://api.onruna.com/v1/links \
-H "Authorization: Bearer $RUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "<URL>"}'
Optionally pass "source": "manual" | "x-bookmark" | "email" | "feed".
curl -s -X POST https://api.onruna.com/v1/links \
-H "Authorization: Bearer $RUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Some text content to save"}'
All embedded URLs are automatically enriched (metadata, OG images, page content extracted). Use for thoughts, snippets, quotes, or any text with or without links.
curl -s -X POST https://api.onruna.com/v1/links/search \
-H "Authorization: Bearer $RUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"filter": "status = \"inbox\"", "sort": ["createdAt:desc"], "limit": 20}'
Status: inbox (default), archived, trash.
curl -s -X POST https://api.onruna.com/v1/links/search \
-H "Authorization: Bearer $RUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "<query>", "limit": 20}'
The search endpoint (POST /v1/links/search) supports full Meilisearch query capabilities:
q (string, optional): Search query. Empty for filter/sort-only browse.filter (string, optional): Meilisearch filter expression. Operators: =, !=, >, >=, <, <=, TO, IN, EXISTS, NOT EXISTS, AND, OR, NOT, parentheses.sort (array, optional): e.g. ["createdAt:desc"]limit (number, optional): 1-100, default 20offset (number, optional): for pagination, default 0Filterable attributes: status, itemType (article|tweet|reddit|youtube|github|pdf|image|text), isNsfw, source (manual|x-bookmark|email|feed|browser-import), createdAt (unix ms), tags.
Filter examples:
status = "inbox" — inbox onlyitemType = "tweet" AND status != "trash" — tweets not in trashtags = "typescript" — tagged with typescriptcreatedAt > 1711900800000 — after a specific datestatus IN ["inbox", "archived"] — inbox or archivedcurl -s "https://api.onruna.com/v1/links/<id>" \
-H "Authorization: Bearer $RUNA_API_KEY"
curl -s -X PATCH "https://api.onruna.com/v1/links/<id>" \
-H "Authorization: Bearer $RUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "archived"}'
Updatable fields: title, description, status, isNsfw.
curl -s -X DELETE "https://api.onruna.com/v1/links/<id>" \
-H "Authorization: Bearer $RUNA_API_KEY"
curl -s -X POST https://api.onruna.com/v1/enrich \
-H "Authorization: Bearer $RUNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "<URL>"}'
curl -s -X POST https://api.onruna.com/v1/files \
-H "Authorization: Bearer $RUNA_API_KEY" \
-F "file=@/path/to/file.pdf"
Accepted types: PDF, JPEG, PNG, WebP, GIF, HEIC. Max 50MB.
references/api.md.