Install
openclaw skills install @xinthink/readwise-readerInteract with Readwise Reader library to list, create, update, and delete documents. Use when the user wants to manage their saved articles, reading lists, or retrieve document content. Triggers on mentions of "Readwise Reader", "Reader API", or requests to save/read/archive web articles.
openclaw skills install @xinthink/readwise-readerInteract with Readwise Reader library using executable scripts.
All Reader operations are available as scripts in the scripts/ subdirectory:
| Script | Purpose | Input |
|---|---|---|
list_documents.py | Query documents | CLI flags |
create_document.py | Save URL/content | JSON payload |
update_document.py | Modify document | JSON payload |
bulk_update_documents.py | Batch modify (max 50) | JSON payload |
delete_document.py | Remove documents | JSON payload |
list_tags.py | List all tags | CLI flags |
Set the READWISE_ACCESS_TOKEN environment variable using one of these methods:
.env fileCreate a .env file in the project directory:
READWISE_ACCESS_TOKEN=your-token-here
The scripts automatically load environment variables from .env using python-dotenv.
Export in shell:
export READWISE_ACCESS_TOKEN=your-token-here
Or inline for a single command:
READWISE_ACCESS_TOKEN=your-token-here python scripts/list_documents.py
Get your token from: https://readwise.io/access_token
Install the required dependencies before using the scripts:
pip install -r scripts/requirements.txt
python scripts/list_documents.py --location later --limit 10
echo '{"url": "https://example.com/article", "tags": ["important"]}' | python scripts/create_document.py
echo '{"id": "doc-id", "location": "archive"}' | python scripts/update_document.py
echo '{"updates": [{"id": "doc1", "location": "archive"}, {"id": "doc2", "location": "archive"}]}' | python scripts/bulk_update_documents.py
| Exit Code | Meaning | Action |
|---|---|---|
| 0 | Success | Parse stdout |
| 1 | API error | Check stderr for details |
| 2 | Auth error | Verify READWISE_ACCESS_TOKEN |
| 3 | Rate limit | Wait and retry |
| 4 | Invalid input | Fix payload/flags |
Errors are written to stderr in JSON format:
{"error": {"type": "...", "message": "...", "hint": "..."}}
Scripts automatically handle retries for rate limits (429) and server errors (5xx). No action needed unless exit code 3.