Install
openclaw skills install calibre-metadata-applyPrimary skill for Calibre metadata edits (write operations) over a running Content server. Use ONLY when the user explicitly requests changing/editing/fixing title/authors/series/series_index/tags/publisher/pubdate/languages. Never use for read-only lookups, even if an ID is mentioned.
openclaw skills install calibre-metadata-applyA skill for updating metadata of existing Calibre books.
ID1011 タイトル修正, ID1011 のタイトルを直して), this skill is mandatory.ID1021 を確認して, ID1021 の詳細), do NOT use this skill — route to calibre-catalog-read.calibre-catalog-read must not be used for those edit intents.Use this skill when the user asks any of:
title/authors/series/series_index/tags/publisher/pubdate/languages updatesDo NOT use this skill for:
calibre-catalog-readcalibredb must be available on PATH in the runtime environmentsubagent-spawn-command-builder installed (for spawn payload generation)pdffonts is optional/recommended for PDF evidence checkshttp://HOST:PORT/#LIBRARY_IDLIBRARY_ID is unknown, use #- once to list available IDs on the server.--with-library can be omitted only when one of these is configured:
CALIBRE_WITH_LIBRARY or CALIBRE_LIBRARY_URL or CALIBRE_CONTENT_SERVER_URLCALIBRE_LIBRARY_ID--with-library URL.CALIBRE_SERVER_HOSTS=host1,host2,...nameserver from /etc/resolv.conf./home/altair/.openclaw/.env:
CALIBRE_USERNAME=<user>CALIBRE_PASSWORD=<password>--auth-mode / --auth-scheme.--password-env CALIBRE_PASSWORD (username auto-loads from env)--username <user>.set_metadata --field)titletitle_sortauthors (string with & or array)author_sortseriesseries_indextags (string or array)publisherpubdate (YYYY-MM-DD)languagescommentscomments_html (OC marker block upsert)analysis (auto-generates analysis HTML for comments)analysis_tags (adds tags)tags_merge (default true)tags_remove (remove specific tags after merge)id,title,authors,series,series_indexcandidate, source, confidence (high|medium|low)title_sort_candidate, author_sort_candidateapprove allapprove only: <fields>reject: <fields>edit: <field>=<value>--apply only after explicit user approvalsubagent-spawn-command-builder to generate sessions_spawn payload for heavy candidate generation
task is required.calibredb set_metadata commands from JSONL.state/runs.json).sessions_spawn via subagent-spawn-command-builder.calibredb set_metadata updates metadata on the target Calibre Content server.Security rules:
--password-env CALIBRE_PASSWORD) over inline --password.calibredb directly for edit operations.
node skills/calibre-metadata-apply/scripts/calibredb_apply.mjs.calibre-server from this skill.
--with-library first.--with-library.
.env and resolve CALIBRE_WITH_LIBRARY / CALIBRE_CONTENT_SERVER_URL.missing --with-libraryunable to resolve usable --with-libraryFor library-wide heavy processing, always use turn-split execution.
Batch sizing rule:
Light pass (metadata-only)
On user request: page-1 pass
If still uncertain: deep pass
Approval gate
pending-review tag for unresolved/hold items.pending-review and keep for follow-up investigation.Return full results (not samples):
id + key before/after fieldsid + reasonid + error summaryhigh|medium|lowstate/runs.jsonsubagent-spawn-command-builder (profile example: calibre-meta), then calls sessions_spawnrun_id/session_key/task via scripts/run_state.mjs upsertscripts/handle_completion.mjs --run-id ... --result-json ...Run state file:
state/runs.jsonebook-convert firstpdftotextreading_script for Japanese/non-Latin sort fields
katakana / hiragana / latinreading_script value; pass it as a CLI argument when needed.Dry-run:
cat changes.jsonl | node skills/calibre-metadata-apply/scripts/calibredb_apply.mjs \
--with-library "http://127.0.0.1:8080/#MyLibrary" \
--password-env CALIBRE_PASSWORD \
--lang ja
Dry-run (when default library is preconfigured via env/config):
cat changes.jsonl | node skills/calibre-metadata-apply/scripts/calibredb_apply.mjs \
--password-env CALIBRE_PASSWORD \
--lang ja
Apply:
cat changes.jsonl | node skills/calibre-metadata-apply/scripts/calibredb_apply.mjs \
--with-library "http://127.0.0.1:8080/#MyLibrary" \
--password-env CALIBRE_PASSWORD \
--apply
--apply using ambiguous title matches only~/Calibre Library