modules/programs/agents/shared/skills/booklore/SKILL.md
Inspect my self-hosted BookLore library (books, audiobooks, libraries, shelves). Use when the user asks about BookLore, mentions their book/audiobook library, asks what books they have, looks up a title, lists libraries or shelves, or checks the BookLore instance status.
npx skillsauth add MichaelVessia/nixos-config bookloreInstall 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.
Read-only wrapper for my self-hosted BookLore instance: inspect version, user, libraries, shelves, and books.
Credentials are exported into the shell by sops-nix (see
modules/programs/shell.nix):
BOOKLORE_URL — base URL (no trailing slash), e.g. http://192.168.1.7:8080BOOKLORE_USERNAME — login userBOOKLORE_PASSWORD — login passwordThe wrapper script asserts all three are set and aborts cleanly otherwise.
BookLore has no API-key auth. The flow is:
POST /api/v1/auth/login with {"username": "...", "password": "..."}{"accessToken": "...", "refreshToken": "...", "isDefaultPassword": false}Authorization: Bearer <accessToken>scripts/booklore.sh caches the access token in a per-user/per-URL
tempfile ($TMPDIR/booklore-<uid>/<hash>.token) and decodes the JWT's
exp claim to decide whether to reuse or re-login. The login helper
inside the script returns a valid token on stdout; every other
sub-command calls it once at the top.
This is also a workaround for a server-side bug in the deployed
development build: two logins in the same wall-clock second produce
identical refresh tokens and trip a UNIQUE constraint on
refresh_token, returning HTTP 400. The cache means we log in roughly
once per JWT lifetime instead of once per call.
scripts/booklore.sh exposes simple sub-commands. All output is JSON or
pre-formatted text.
bash scripts/booklore.sh status # /api/v1/version
bash scripts/booklore.sh version # alias for status
bash scripts/booklore.sh me # /api/v1/users/me
bash scripts/booklore.sh libraries # /api/v1/libraries
bash scripts/booklore.sh books [n] # /api/v1/books (default 50)
bash scripts/booklore.sh book-info <id> # /api/v1/books/<id>
bash scripts/booklore.sh search <query> # client-side title filter on /api/v1/books
bash scripts/booklore.sh shelves # /api/v1/shelves
bash scripts/booklore.sh help
For anything not covered, call the API directly with $BOOKLORE_URL after
logging in — see references/api-endpoints.md and
references/quick-reference.md.
bash scripts/booklore.sh search "<title>" — client-side filter.bash scripts/booklore.sh book-info <id> — full record for the match.Use status, me, libraries, shelves for sanity checks. Drop to raw
curl (after login) for anything else.
This wrapper is intentionally read-only. The deployed BookLore version is
development and its mutation surface (uploads, edits, deletes) has not
been verified here. Before issuing any POST/PUT/DELETE, confirm with the
user and verify the endpoint exists on the running instance (see the
controller-inspection recipe in references/troubleshooting.md).
references/api-endpoints.md — verified endpoints on this deployment,
plus notes on upstream-main divergencereferences/quick-reference.md — copy-paste curl recipes (login, list
books, refresh token, etc.)references/troubleshooting.md — auth, connection, 404 (older
deployment), and how to inspect installed controllersv1. Singular paths (/library, /shelf) and /healthcheck
return 404 — do NOT use those./api/v1/books returns a flat array, not a paginated envelope./api/v1/auth/refresh,
/api/v1/books/{id}/cover, downloads) may not exist on this deployed
instance, which reports version: "development". Verify before relying.exp and re-logins automatically.refresh_token table; the token cache avoids it.192.168.1.7:8080). If BOOKLORE_URL is
unreachable, surface that rather than guessing.development
Restate the last message in plain human language, with no jargon.
testing
Fan out a batch of work items into one PR each via isolated worktree agents, review every PR before it opens, then babysit all PRs through green CI and review feedback. Use when the user wants to fan out PRs, dispatch parallel PR agents over a list of items, or run a batch of independent changes as separate PRs.
development
Dispatch user-visible coding or research agents through Herdr with Codex-Desktop-like thread ergonomics. Use when the user asks to use Herdr to spawn, dispatch, fan out, inspect, follow up with, or monitor agent workspaces/threads.
development
Generate self-contained HTML visualizations with Plannotator theming. Use for implementation plans, PR explainers, architecture diagrams, data tables, slide decks, and any visual explanation of technical concepts. Plans and PR explainers follow Plannotator's prescriptive approach; all other visual content delegates to nicobailon/visual-explainer.