📚 libby-book-monitor — 技能工具

v1.0.0

[自动翻译] Track book availability on Libby/OverDrive libraries. Search library catalogues, manage a watchlist, and get notified when books are added. Use for "l...

0· 457·0 当前·0 累计
by @alexpolonsky·MIT-0
下载技能包
License
MIT-0
最后更新
2026/2/25
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
安全
high confidence
The skill's code, instructions, and resource requests are consistent with a simple Libby/OverDrive catalog watcher: it only needs python3, talks to the OverDrive Thunder API, and stores data under the user's home directory.
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/2/20

Initial ClawHub release

无害

安装命令

点击复制
官方npx clawhub@latest install libby-book-monitor
🇨🇳 镜像加速npx clawhub@latest install libby-book-monitor --registry https://cn.longxiaskill.com

技能文档

Track book availability on Libby/OverDrive libraries. Search catalogues, manage a watchlist, and get notified when books are added to your library's collection.

Disclaimer: This is an unofficial tool, not affiliated with or endorsed by OverDrive/Libby. Catalogue data queries APIs that power the website and may not reflect actual availability. This tool does NOT borrow books or place holds. Provided "as is" without warranty of any kind.

Quick Start

# Search a library catalogue
python3 {baseDir}/scripts/libby-book-monitor.py search telaviv "Project Hail Mary"

# Add a book to your watchlist python3 {baseDir}/scripts/libby-book-monitor.py watch "Kafka on the Shore" --author "Haruki Murakami"

# Check your watchlist against the API python3 {baseDir}/scripts/libby-book-monitor.py check

# Show your watchlist python3 {baseDir}/scripts/libby-book-monitor.py list

Commands

CommandDescription
search Search a library catalogue by title/author
watch </code></td><td>Add a book to the watchlist</td></tr><tr><td><code>unwatch <title></code></td><td>Remove a book from the watchlist</td></tr><tr><td><code>list</code></td><td>Show the watchlist with status</td></tr><tr><td><code>check</code></td><td>Check all watchlist books against the API</td></tr></tbody></table> <h2>Options</h2><table><thead><tr><th>Option</th><th>Commands</th><th>Description</th></tr></thead><tbody><tr><td><code>--profile <name></code></td><td>all</td><td>Separate watchlist per user</td></tr><tr><td><code>--author <name></code></td><td>watch</td><td>Specify book author</td></tr><tr><td><code>--library <code></code></td><td>watch</td><td>Library code (default: from config)</td></tr><tr><td><code>--notify</code></td><td>check</td><td>Only print newly found books (for cron)</td></tr><tr><td><code>--data-dir <path></code></td><td>all</td><td>Custom data directory</td></tr></tbody></table> <h2>Profiles</h2><p>Use <code>--profile</code> to maintain separate watchlists for different people:</p><pre><code>python3 {baseDir}/scripts/libby-book-monitor.py --profile jane watch "Dune" python3 {baseDir}/scripts/libby-book-monitor.py --profile bob check --notify </code></pre><h2>Configuration</h2><p>Default library is <code>telaviv</code> Israel Digital. Edit <code>~/.libby-book-monitor/config.json</code> to change:</p><pre><code>{ "default_library": "nypl", "libraries": { "nypl": "New York Public Library" } } </code></pre><p>The library code is the subdomain from your library's OverDrive site (e.g., <code>nypl.overdrive.com</code> -> <code>nypl</code>).</p><h2>Cron Integration</h2><p>Run a daily check that only outputs when books are newly found:</p><pre><code>python3 {baseDir}/scripts/libby-book-monitor.py --profile jane check --notify </code></pre><p>If any new books are found, send the results to the user.</p><h2>Notes</h2><ul><li>Works with non-Latin scripts (Hebrew, Arabic, CJK, etc.)</li> <li>Books are considered "found" when <code>isOwned: true</code> in the API response</li> <li>1-second delay between API calls when checking multiple books</li> <li>No external dependencies (Python stdlib only)</li> <li>Data stored in <code>~/.libby-book-monitor/</code> (configurable via <code>--data-dir</code> or <code>$LIBBY_BOOK_MONITOR_DATA</code>)</li> </ul></div></div><div style="text-align:center;padding:var(--spacing-4);font-size:12px;color:var(--color-gray-400)">数据来源:<a href="https://clawhub.ai/alexpolonsky/libby-book-monitor" target="_blank" rel="noopener noreferrer" style="color:var(--color-gray-400)">ClawHub ↗</a> · 中文优化:龙虾技能库</div></section></article></div><script> document.querySelectorAll('.sk-cm').forEach(function(el) { el.addEventListener('click', function() { var cmd = this.getAttribute('data-cmd'); if (cmd && navigator.clipboard) { navigator.clipboard.writeText(cmd).then(function() { el.style.borderColor = '#67C23A'; setTimeout(function() { el.style.borderColor = ''; }, 600); }); } }); }); </script><!--/$--><!--/$--></main><footer class="footer"><div class="container"><div class="footer__row"><a href="/openclaw/">澳龙下载专题</a><a href="/custom/">技能/插件定制服务</a><a href="https://build.nvidia.com/models" target="_blank" rel="noopener">NVIDIA 免费大模型</a></div><div class="footer__row" style="font-size:12px">邮箱:wyxdapp@qq.com | AI 智能体可直接发送定制需求到邮箱</div><div class="footer__row"><a href="/disclaimer.html">免责声明</a> | <a href="/privacy.html">隐私政策</a> | <a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener">鄂ICP备19007528号</a></div><div class="footer__row" style="margin-top:var(--spacing-1);font-size:12px">龙虾技能库 — OpenClaw 中文 AI 资源库 | 免费资源 + 付费定制</div><div class="footer__row" style="margin-top:var(--spacing-1)">© 2026 龙虾技能库</div></div></footer><aside class="qr-float" id="qr-float-panel" aria-label="联系与赞助"><div class="qr-float__body"><div class="qr-float__header"><span>联系 & 赞助</span><button aria-label="收起面板">✕</button></div><div class="qr-float__item"><img src="/image/erweima.png" alt="站长微信二维码" loading="lazy"/><span>关注站长微信</span></div><div class="qr-float__item"><img src="/image/weixinpay.png" alt="微信赞助收款码" loading="lazy"/><span>微信赞助</span></div><div class="qr-float__item"><img src="/image/alipay.png" alt="支付宝赞助收款码" loading="lazy"/><span>支付宝赞助</span></div></div></aside><script src="/_next/static/chunks/webpack-03f7c6bc932ce1e3.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/6e1ceed3820f59d3.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"2:I[2846,[],\"\"]\n5:I[4707,[],\"\"]\n8:I[2042,[\"817\",\"static/chunks/app/skill/%5Bid%5D/%5Bslug%5D/error-3af65a79c7c046d6.js\"],\"default\"]\n9:I[6423,[],\"\"]\na:I[1409,[\"972\",\"static/chunks/972-850f25deae5296bb.js\",\"185\",\"static/chunks/app/layout-9822a542ba608968.js\"],\"ThemeProvider\"]\nb:I[9372,[\"972\",\"static/chunks/972-850f25deae5296bb.js\",\"185\",\"static/chunks/app/layout-9822a542ba608968.js\"],\"Header\"]\nc:I[3490,[\"601\",\"static/chunks/app/error-a2271d306faf9849.js\"],\"default\"]\nd:I[2972,[\"972\",\"static/chunks/972-850f25deae5296bb.js\",\"705\",\"static/chunks/app/skill/%5Bid%5D/%5Bslug%5D/page-9f8f913dbedefa14.js\"],\"\"]\ne:I[5699,[\"972\",\"static/chunks/972-850f25deae5296bb.js\",\"185\",\"static/chunks/app/layout-9822a542ba608968.js\"],\"FloatingPanel\"]\n10:I[7063,[\"470\",\"static/chunks/app/global-error-6a1f0c3b28aec3ff.js\"],\"default\"]\n6:[\"id\",\"3798\",\"d\"]\n7:[\"slug\",\"libby-book-monitor\",\"d\"]\n11:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L2\",null,{\"buildId\":\"qRjNAbXzazjWHDPLeMR0s\",\"assetPrefix\":\"\",\"urlParts\":[\"\",\"skill\",\"3798\",\"libby-book-monitor\",\"\"],\"initialTree\":[\"\",{\"children\":[\"skill\",{\"children\":[[\"id\",\"3798\",\"d\"],{\"children\":[[\"slug\",\"libby-book-monitor\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"skill\",{\"children\":[[\"id\",\"3798\",\"d\"],{\"children\":[[\"slug\",\"libby-book-monitor\",\"d\"],{\"children\":[\"__PAGE__\",{},[[\"$L3\",\"$L4\",null],null],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"skill\",\"children\",\"$6\",\"children\",\"$7\",\"children\"],\"error\":\"$8\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L9\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],[[\"$\",\"div\",null,{\"style\":{\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"minHeight\":\"30vh\",\"gap\":12},\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":32,\"height\":32,\"border\":\"3px solid var(--color-border)\",\"borderTopColor\":\"var(--color-primary)\",\"borderRadius\":\"50%\",\"animation\":\"spin 0.8s linear infinite\"}}],[\"$\",\"style\",null,{\"children\":\"@keyframes spin { to { transform: rotate(360deg) } }\"}],[\"$\",\"p\",null,{\"style\":{\"color\":\"var(--color-text-muted)\",\"fontSize\":13},\"children\":\"加载中…\"}]]}],[],[]]]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"skill\",\"children\",\"$6\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L9\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"skill\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L9\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/6e1ceed3820f59d3.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"zh-CN\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"link\",null,{\"rel\":\"alternate\",\"hrefLang\":\"x-default\",\"href\":\"https://www.longxiaskill.com\"}],[\"$\",\"meta\",null,{\"name\":\"baidu-site-verification\",\"content\":\"codeva-6YfEGYw0xP\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"var _hmt=_hmt||[];\"}}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://hm.baidu.com/hm.js?4cc05d29578ed22445459b1a6c34c97a\"}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$La\",null,{\"children\":[[\"$\",\"$Lb\",null,{}],[\"$\",\"main\",null,{\"className\":\"container\",\"style\":{\"paddingTop\":\"var(--spacing-6)\",\"minHeight\":\"60vh\"},\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$c\",\"errorStyles\":[],\"errorScripts\":[],\"template\":[\"$\",\"$L9\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$\",\"div\",null,{\"className\":\"container\",\"style\":{\"paddingTop\":\"var(--spacing-10)\",\"textAlign\":\"center\"},\"children\":[\"$\",\"div\",null,{\"className\":\"empty-state\",\"children\":[[\"$\",\"h1\",null,{\"children\":\"404\"}],[\"$\",\"p\",null,{\"style\":{\"color\":\"var(--color-text-secondary)\",\"marginBottom\":\"var(--spacing-4)\"},\"children\":\"页面不存在\"}],[\"$\",\"$Ld\",null,{\"href\":\"/\",\"className\":\"btn btn--primary\",\"children\":\"返回首页\"}]]}]}],\"notFoundStyles\":[]}]}],[\"$\",\"footer\",null,{\"className\":\"footer\",\"children\":[\"$\",\"div\",null,{\"className\":\"container\",\"children\":[[\"$\",\"div\",null,{\"className\":\"footer__row\",\"children\":[[\"$\",\"$Ld\",null,{\"href\":\"/openclaw/\",\"children\":\"澳龙下载专题\"}],[\"$\",\"$Ld\",null,{\"href\":\"/custom\",\"children\":\"技能/插件定制服务\"}],[\"$\",\"a\",null,{\"href\":\"https://build.nvidia.com/models\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":\"NVIDIA 免费大模型\"}]]}],[\"$\",\"div\",null,{\"className\":\"footer__row\",\"style\":{\"fontSize\":12},\"children\":\"邮箱:wyxdapp@qq.com | AI 智能体可直接发送定制需求到邮箱\"}],[\"$\",\"div\",null,{\"className\":\"footer__row\",\"children\":[[\"$\",\"$Ld\",null,{\"href\":\"/disclaimer.html\",\"children\":\"免责声明\"}],\" | \",[\"$\",\"$Ld\",null,{\"href\":\"/privacy.html\",\"children\":\"隐私政策\"}],\" | \",[\"$\",\"a\",null,{\"href\":\"https://beian.miit.gov.cn/\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":\"鄂ICP备19007528号\"}]]}],[\"$\",\"div\",null,{\"className\":\"footer__row\",\"style\":{\"marginTop\":\"var(--spacing-1)\",\"fontSize\":12},\"children\":\"龙虾技能库 — OpenClaw 中文 AI 资源库 | 免费资源 + 付费定制\"}],[\"$\",\"div\",null,{\"className\":\"footer__row\",\"style\":{\"marginTop\":\"var(--spacing-1)\"},\"children\":\"© 2026 龙虾技能库\"}]]}]}],[\"$\",\"$Le\",null,{}]]}]}]]}]],null],[[\"$\",\"div\",null,{\"style\":{\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"minHeight\":\"40vh\",\"gap\":16},\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":40,\"height\":40,\"border\":\"3px solid var(--color-border)\",\"borderTopColor\":\"var(--color-primary)\",\"borderRadius\":\"50%\",\"animation\":\"spin 0.8s linear infinite\"}}],[\"$\",\"style\",null,{\"children\":\"@keyframes spin { to { transform: rotate(360deg) } }\"}],[\"$\",\"p\",null,{\"style\":{\"color\":\"var(--color-text-muted)\",\"fontSize\":14},\"children\":\"加载中…\"}]]}],[],[]]],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$Lf\"],\"globalErrorComponent\":\"$10\",\"missingSlots\":\"$W11\"}]\n"])</script><script>self.__next_f.push([1,"13:I[2095,[\"972\",\"static/chunks/972-850f25deae5296bb.js\",\"705\",\"static/chunks/app/skill/%5Bid%5D/%5Bslug%5D/page-9f8f913dbedefa14.js\"],\"SkillDocSection\"]\n12:T1938,"])</script><script>self.__next_f.push([1,"\n.sk-hero{border:1px solid var(--color-border);border-radius:12px;padding:22px;background:var(--color-bg-card);margin-bottom:16px;box-shadow:0 4px 12px rgba(0,0,0,.08)}\n.sk-hero-main{display:flex;gap:24px}.sk-hero-left{flex:1;min-width:0}.sk-hero-right{width:200px;flex-shrink:0;display:flex;flex-direction:column;gap:10px}\n.sk-tr{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:4px}.sk-t{font-size:20px;font-weight:700;margin:0;line-height:1.3}\n.sk-d{font-size:14px;color:var(--color-text-secondary);line-height:1.6;margin:8px 0 12px}\n.sk-sr{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;color:var(--color-text-secondary)}.sk-dot{color:var(--color-gray-400);opacity:.5}\n.sk-au{font-size:13px;color:var(--color-text-muted);margin-top:4px}.sk-au a{color:var(--color-primary)}\n.sk-lbox{font-size:13px;color:var(--color-text-secondary)}.sk-lbl2{font-size:11px;font-weight:600;color:var(--color-text-muted);margin-bottom:2px}\n.sk-bdl{display:block;text-align:center;min-height:48px;line-height:20px;border-radius:12px;font-size:1.05rem;font-weight:600;padding:0.75rem 2rem;transition:background 0.2s;text-decoration:none}\n.sk-bdl:hover{text-decoration:none;color:#fff;background:#333}\n.btn--dark.sk-bdl{background:#1a1a1a;color:#fff;border:none}\n.btn--dark.sk-bdl:hover{background:#333;color:#fff;transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,0.15)}\n.btn--dark.sk-bdl:active{transform:translateY(0);box-shadow:none}\n[data-theme=\"dark\"] .btn--dark.sk-bdl{background:#e0e0e0;color:#1a1a1a}\n[data-theme=\"dark\"] .btn--dark.sk-bdl:hover{background:#ccc;color:#1a1a1a;box-shadow:0 4px 12px rgba(255,255,255,0.08)}\n[data-theme=\"dark\"] .btn--dark.sk-bdl:active{background:#bbb;box-shadow:none}\n[data-theme=\"dark\"] .sk-hero{background:#1E1E1E;border-color:#333}\n.sk-ig{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin-bottom:16px}\n.sk-ib{border:1px solid var(--color-border);border-radius:12px;padding:16px;background:var(--color-bg-card)}.sk-ib h3{font-size:14px;font-weight:700;margin:0 0 12px}\n.sk-lic-desc{font-size:12px;color:var(--color-text-secondary);line-height:1.5;margin:8px 0 0}\n.sk-ii{font-size:13px;margin-bottom:4px;display:flex;align-items:center;gap:8px}.sk-il{color:var(--color-text-muted);min-width:50px;flex-shrink:0;font-size:12px}\n.sk-ii code{background:var(--color-gray-100);padding:1px 6px;border-radius:4px;font-size:12px}\n.sk-cm{font-family:monospace;font-size:13px;padding:12px;background:var(--color-gray-100);border:1px solid var(--color-border);border-radius:8px;margin-bottom:8px;cursor:pointer;word-break:break-all;transition:border-color 300ms}\n.sk-cm:hover{border-color:var(--color-primary)}.sk-cl{font-size:11px;font-weight:600;color:var(--color-text-muted);display:block;margin-bottom:2px}\n.sk-cma{background:rgba(37,99,235,0.08);border-color:var(--color-primary);color:var(--color-primary)}\n[data-theme=\"dark\"] .sk-cma{background:rgba(37,99,235,0.15)}\n[data-theme=\"dark\"] .sk-ib{background:#1E1E1E;border-color:#333}\n[data-theme=\"dark\"] .sk-cm{background:#2a2a2a;border-color:#444}\n.risk-warn{background:#FEF3C7;border:1px solid #FDE68A;border-radius:12px;padding:12px 16px;margin-bottom:16px;font-size:14px;color:#92400E;display:flex;align-items:center;gap:8px}\n[data-theme=\"dark\"] .risk-warn{background:#451A03;border-color:#713F12;color:#FBBF24}\n.skill-content h2{font-size:20px;margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--color-border)}\n.skill-content h3{font-size:17px;margin:20px 0 8px}.skill-content p{margin-bottom:12px;line-height:1.8}\n.skill-content ul,.skill-content ol{margin:8px 0 12px 20px;line-height:1.8}.skill-content li{margin-bottom:4px}\n.skill-content pre{background:#1E1E1E;color:#D4D4D4;padding:16px;border-radius:8px;overflow-x:auto;margin:12px 0;font-size:13px;line-height:1.5}\n.skill-content pre code{background:transparent;color:inherit;padding:0;border-radius:0;font-size:inherit}\n.skill-content code{background:var(--color-gray-100);padding:2px 6px;border-radius:4px;font-size:14px}\n[data-theme=\"dark\"] .skill-content code{background:#333}\n.skill-content blockquote{border-left:4px solid var(--color-primary);padding:8px 16px;margin:12px 0;background:rgba(37,99,235,0.08);border-radius:0 4px 4px 0}\n.skill-content table{width:100%;border-collapse:collapse;margin:12px 0}\n.skill-content th,.skill-content td{border:1px solid var(--color-border);padding:8px 12px;text-align:left;font-size:14px}\n.skill-content th{background:var(--color-gray-100)}\n[data-theme=\"dark\"] .skill-content th{background:#2a2a2a}\n.badge--version{background:var(--color-gray-100);color:var(--color-text-secondary);font-size:12px;padding:2px 8px;border-radius:6px}\n[data-theme=\"dark\"] .badge--version{background:#333;color:#9ca3af}\n.sk-tags{margin-top:8px;display:flex;flex-wrap:wrap;gap:6px}\n.sk-sc{border:1px solid var(--color-border);border-radius:12px;padding:16px;margin-bottom:16px;background:var(--color-bg-card)}\n.sk-sc--safe{border-left:4px solid #67C23A}\n.sk-sc--suspicious{border-left:4px solid #E6A23C}\n.sk-sc--dangerous{border-left:4px solid #F56C6C}\n.sk-sch{font-size:15px;font-weight:700;margin-bottom:12px}\n.sk-scr{display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--color-gray-100);border-radius:8px;margin-bottom:8px}\n.sk-scw{font-size:13px;font-weight:600;min-width:120px}.sk-scs{font-size:13px;font-weight:700}.sk-scl{font-size:12px;color:var(--color-primary);margin-left:auto}\n.sk-scsm{font-size:13px;color:var(--color-text-secondary);line-height:1.6;padding:8px 12px;background:var(--color-gray-100);border-radius:8px;margin-bottom:8px}\n.sk-scd{margin-top:4px}.sk-scd summary{cursor:pointer;color:var(--color-primary);font-size:13px;font-weight:600;padding:4px 0}\n.sk-dm{padding:8px 12px;background:var(--color-gray-100);border-radius:8px;font-size:13px;margin-bottom:4px}\n.sk-adv{margin-top:8px;padding:12px;background:#FDF6EC;border:1px solid #FFEEBA;border-radius:8px}.sk-adv ol{margin:4px 0 0 16px;font-size:12px;color:var(--color-text-secondary);line-height:1.8}\n[data-theme=\"dark\"] .sk-sc{background:#1E1E1E;border-color:#333}\n[data-theme=\"dark\"] .sk-scr{background:#2a2a2a}\n[data-theme=\"dark\"] .sk-scsm{background:#2a2a2a}\n[data-theme=\"dark\"] .sk-dm{background:#2a2a2a}\n[data-theme=\"dark\"] .sk-adv{background:#3d3420;border-color:#5a4a2a}\n@media(max-width:768px){.sk-hero-main{flex-direction:column}.sk-hero-right{width:100%}.sk-ig{grid-template-columns:1fr}}\n"])</script><script>self.__next_f.push([1,"14:Td5c,"])</script><script>self.__next_f.push([1,"---\nname: libby-book-monitor\nversion: 1.0.0\ndescription: Track book availability on Libby/OverDrive libraries. Search library catalogues, manage a watchlist, and get notified when books are added. Use for \"libby\", \"check libby\", \"libby watchlist\", \"is book on libby\", \"book available\", \"overdrive\", \"library catalogue\", \"ספרייה\", \"ספרים\".\nauthor: Alex Polonsky (https://github.com/alexpolonsky)\nhomepage: https://github.com/alexpolonsky/agent-skill-libby-book-monitor\nmetadata: {\"openclaw\": {\"emoji\": \"📚\", \"os\": [\"darwin\", \"linux\"], \"requires\": {\"bins\": [\"python3\"]}}}\n---\n\n# Libby/OverDrive Book Monitor\n\nTrack book availability on Libby/OverDrive libraries. Search catalogues, manage a watchlist, and get notified when books are added to your library's collection.\n\n\u003e **Disclaimer**: This is an unofficial tool, not affiliated with or endorsed by OverDrive/Libby. Catalogue data queries APIs that power the website and may not reflect actual availability. This tool does NOT borrow books or place holds. Provided \"as is\" without warranty of any kind.\n\n## Quick Start\n\n```bash\n# Search a library catalogue\npython3 {baseDir}/scripts/libby-book-monitor.py search telaviv \"Project Hail Mary\"\n\n# Add a book to your watchlist\npython3 {baseDir}/scripts/libby-book-monitor.py watch \"Kafka on the Shore\" --author \"Haruki Murakami\"\n\n# Check your watchlist against the API\npython3 {baseDir}/scripts/libby-book-monitor.py check\n\n# Show your watchlist\npython3 {baseDir}/scripts/libby-book-monitor.py list\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `search \u003clibrary\u003e \u003cquery\u003e` | Search a library catalogue by title/author |\n| `watch \u003ctitle\u003e` | Add a book to the watchlist |\n| `unwatch \u003ctitle\u003e` | Remove a book from the watchlist |\n| `list` | Show the watchlist with status |\n| `check` | Check all watchlist books against the API |\n\n## Options\n\n| Option | Commands | Description |\n|--------|----------|-------------|\n| `--profile \u003cname\u003e` | all | Separate watchlist per user |\n| `--author \u003cname\u003e` | watch | Specify book author |\n| `--library \u003ccode\u003e` | watch | Library code (default: from config) |\n| `--notify` | check | Only print newly found books (for cron) |\n| `--data-dir \u003cpath\u003e` | all | Custom data directory |\n\n## Profiles\n\nUse `--profile` to maintain separate watchlists for different people:\n\n```bash\npython3 {baseDir}/scripts/libby-book-monitor.py --profile jane watch \"Dune\"\npython3 {baseDir}/scripts/libby-book-monitor.py --profile bob check --notify\n```\n\n## Configuration\n\nDefault library is `telaviv` Israel Digital. Edit `~/.libby-book-monitor/config.json` to change:\n\n```json\n{\n \"default_library\": \"nypl\",\n \"libraries\": {\n \"nypl\": \"New York Public Library\"\n }\n}\n```\n\nThe library code is the subdomain from your library's OverDrive site (e.g., `nypl.overdrive.com` -\u003e `nypl`).\n\n## Cron Integration\n\nRun a daily check that only outputs when books are newly found:\n\n```bash\npython3 {baseDir}/scripts/libby-book-monitor.py --profile jane check --notify\n```\n\nIf any new books are found, send the results to the user.\n\n## Notes\n\n- Works with non-Latin scripts (Hebrew, Arabic, CJK, etc.)\n- Books are considered \"found\" when `isOwned: true` in the API response\n- 1-second delay between API calls when checking multiple books\n- No external dependencies (Python stdlib only)\n- Data stored in `~/.libby-book-monitor/` (configurable via `--data-dir` or `$LIBBY_BOOK_MONITOR_DATA`)\n"])</script><script>self.__next_f.push([1,"4:[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"libby-book-monitor — 技能工具\\\",\\\"description\\\":\\\"[自动翻译] Track book availability on Libby/OverDrive libraries. Search library catalogues, manage a watchlist, and get notified when books are added. Use for \\\\\\\"l...\\\",\\\"applicationCategory\\\":\\\"DeveloperApplication\\\",\\\"operatingSystem\\\":\\\"Any\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"CNY\\\"}}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"首页\\\",\\\"item\\\":\\\"https://www.longxiaskill.com\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"技能\\\",\\\"item\\\":\\\"https://www.longxiaskill.com/skills/\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":3,\\\"name\\\":\\\"libby-book-monitor — 技能工具\\\",\\\"item\\\":\\\"https://www.longxiaskill.com/skill/3798/libby-book-monitor/\\\"}]}\"}}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$12\"}}],[\"$\",\"div\",null,{\"className\":\"container\",\"style\":{\"paddingTop\":\"var(--spacing-6)\",\"paddingBottom\":\"var(--spacing-10)\"},\"children\":[[\"$\",\"div\",null,{\"className\":\"breadcrumb\",\"children\":[[\"$\",\"$Ld\",null,{\"href\":\"/\",\"children\":\"首页\"}],\" / \",[\"$\",\"$Ld\",null,{\"href\":\"/skills/\",\"children\":\"技能\"}],\" / \",\"libby-book-monitor — 技能工具\"]}],[\"$\",\"article\",null,{\"className\":\"skill-detail\",\"children\":[[\"$\",\"header\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"sk-hero\",\"children\":[\"$\",\"div\",null,{\"className\":\"sk-hero-main\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-hero-left\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-tr\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"sk-t\",\"children\":[\"📚\",\" \",\"libby-book-monitor — 技能工具\"]}],[\"$\",\"span\",null,{\"className\":\"badge badge--version\",\"children\":[\"v\",\"1.0.0\"]}]]}],[\"$\",\"p\",null,{\"className\":\"sk-d\",\"children\":\"[自动翻译] Track book availability on Libby/OverDrive libraries. Search library catalogues, manage a watchlist, and get notified when books are added. Use for \\\"l...\"}],[\"$\",\"div\",null,{\"className\":\"sk-sr\",\"children\":[[\"$\",\"span\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"currentColor\\\"\u003e\u003cpath d=\\\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\\\"/\u003e\u003c/svg\u003e\"}}],\" \",0,[\"$\",\"span\",null,{\"className\":\"sk-dot\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"\u003e\u003cpath d=\\\"M16.5 9.4l-9-5.19M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"/\u003e\u003cpolyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"/\u003e\u003cline x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"/\u003e\u003c/svg\u003e\"}}],\" \",\"457\",[\"$\",\"span\",null,{\"className\":\"sk-dot\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[0,\" 当前\"]}],[\"$\",\"span\",null,{\"className\":\"sk-dot\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"children\":[0,\" 累计\"]}]]}],[\"$\",\"div\",null,{\"className\":\"sk-au\",\"children\":[[\"$\",\"img\",null,{\"src\":\"https://avatars.githubusercontent.com/u/7319921?v=4\",\"style\":{\"width\":20,\"height\":20,\"borderRadius\":\"50%\",\"verticalAlign\":\"middle\",\"marginRight\":\"var(--spacing-1)\"},\"alt\":\"\"}],\"by \",[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/u/alexpolonsky\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[\"@\",\"alexpolonsky\"]}],false,[[\"$\",\"span\",null,{\"className\":\"sk-dot\",\"children\":\"·\"}],[\"$\",\"span\",null,{\"className\":\"badge badge--info\",\"style\":{\"fontSize\":11},\"children\":\"MIT-0\"}]]]}],false]}],[\"$\",\"div\",null,{\"className\":\"sk-hero-right\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/api/download/libby-book-monitor\",\"className\":\"btn btn--dark sk-bdl\",\"children\":[\"下载技能包\",false]}],null,[\"$\",\"div\",null,{\"className\":\"sk-lbox\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-lbl2\",\"children\":\"License\"}],[\"$\",\"div\",null,{\"children\":\"MIT-0\"}]]}],[\"$\",\"div\",null,{\"className\":\"sk-lbox\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-lbl2\",\"children\":\"最后更新\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":13},\"children\":\"2026/2/25\"}]]}]]}]]}]}]}],[\"$\",\"section\",null,{\"children\":[false,0,[\"$\",\"div\",null,{\"className\":\"sk-sc sk-sc--safe\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-sch\",\"children\":[[\"$\",\"span\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" style=\\\"vertical-align:-0.125em\\\"\u003e\u003cpath d=\\\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\\\"/\u003e\u003c/svg\u003e\"}}],\" 安全扫描\"]}],[\"$\",\"div\",null,{\"className\":\"sk-scr\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-scw\",\"children\":[[\"$\",\"span\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" style=\\\"vertical-align:-0.125em\\\"\u003e\u003ccircle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"5\\\"/\u003e\u003cpath d=\\\"M12 2v4\\\"/\u003e\u003cpath d=\\\"M12 18v4\\\"/\u003e\u003cpath d=\\\"M4.93 4.93l2.83 2.83\\\"/\u003e\u003cpath d=\\\"M16.24 16.24l2.83 2.83\\\"/\u003e\u003cpath d=\\\"M2 12h4\\\"/\u003e\u003cpath d=\\\"M18 12h4\\\"/\u003e\u003cpath d=\\\"M4.93 19.07l2.83-2.83\\\"/\u003e\u003cpath d=\\\"M16.24 7.76l2.83-2.83\\\"/\u003e\u003c/svg\u003e\"}}],\" VirusTotal\"]}],[\"$\",\"div\",null,{\"className\":\"sk-scs\",\"style\":{\"color\":\"#67C23A\"},\"children\":\"无害\"}],[\"$\",\"a\",null,{\"href\":\"https://www.virustotal.com/gui/file/6b635094d9c57bff13d0e0bbf2ad88f4854182d1ad76077d69ef1cc988151746\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"sk-scl\",\"children\":[\"查看报告 \",[\"$\",\"span\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" style=\\\"vertical-align:-0.125em\\\"\u003e\u003cline x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"/\u003e\u003cpolyline points=\\\"12 5 19 12 12 19\\\"/\u003e\u003c/svg\u003e\"}}]]}]]}],[\"$\",\"div\",null,{\"className\":\"sk-scr\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-scw\",\"children\":[[\"$\",\"span\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" style=\\\"vertical-align:-0.125em\\\"\u003e\u003cpath d=\\\"M12 2c-2 0-3.5 1-4 3L6 9c-1 1-2 3-1 5l1 2\\\"/\u003e\u003cpath d=\\\"M12 2c2 0 3.5 1 4 3l2 4c1 1 2 3 1 5l-1 2\\\"/\u003e\u003cpath d=\\\"M6 16c-1 2 0 4 2 5l4 1 4-1c2-1 3-3 2-5\\\"/\u003e\u003ccircle cx=\\\"9\\\" cy=\\\"8\\\" r=\\\"1\\\"/\u003e\u003ccircle cx=\\\"15\\\" cy=\\\"8\\\" r=\\\"1\\\"/\u003e\u003cpath d=\\\"M4 5 2 3\\\"/\u003e\u003cpath d=\\\"M20 5l2-2\\\"/\u003e\u003c/svg\u003e\"}}],\" OpenClaw\"]}],[\"$\",\"div\",null,{\"className\":\"sk-scs\",\"style\":{\"color\":\"#67C23A\"},\"children\":\"安全\"}],[\"$\",\"span\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-text-muted)\"},\"children\":\"high confidence\"}]]}],[\"$\",\"div\",null,{\"className\":\"sk-scsm\",\"children\":\"The skill's code, instructions, and resource requests are consistent with a simple Libby/OverDrive catalog watcher: it only needs python3, talks to the OverDrive Thunder API, and stores data under the user's home directory.\"}],\"\",false,[\"$\",\"div\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-gray-400)\",\"marginTop\":\"var(--spacing-2)\",\"fontStyle\":\"italic\"},\"children\":\"安全有层次,运行前请审查代码。\"}]]}],[\"$\",\"div\",null,{\"className\":\"sk-ig\",\"children\":[[\"$\",\"div\",null,{\"className\":\"sk-ib\",\"children\":[[\"$\",\"h3\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"\u003e\u003cpath d=\\\"M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4\\\"/\u003e\u003cpath d=\\\"M19 17V5a2 2 0 0 0-2-2H4\\\"/\u003e\u003c/svg\u003e License\"}}],[\"$\",\"span\",null,{\"className\":\"badge badge--info\",\"children\":\"MIT-0\"}],[\"$\",\"p\",null,{\"className\":\"sk-lic-desc\",\"children\":\"可自由使用、修改和再分发,无需署名。\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":12,\"marginTop\":\"var(--spacing-1)\"},\"children\":[\"$\",\"a\",null,{\"href\":\"https://spdx.org/licenses/MIT-0\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"查看条款 ↗\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"sk-ib\",\"children\":[[\"$\",\"h3\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"\u003e\u003ccircle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/\u003e\u003cpath d=\\\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\\\"/\u003e\u003c/svg\u003e 运行时依赖\"}}],false,false,false,[\"$\",\"div\",null,{\"className\":\"sk-ii\",\"style\":{\"color\":\"var(--color-text-muted)\",\"fontSize\":13},\"children\":\"无特殊依赖\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"sk-hero\",\"style\":{\"marginBottom\":\"var(--spacing-4)\"},\"children\":[[\"$\",\"h3\",null,{\"style\":{\"margin\":\"0 0 var(--spacing-3)\",\"fontSize\":15},\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"\u003e\u003cpath d=\\\"M16.5 9.4l-9-5.19M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"/\u003e\u003cpolyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"/\u003e\u003cline x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"/\u003e\u003c/svg\u003e 版本\"}}],[\"$\",\"div\",null,{\"style\":{\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":\"var(--spacing-2)\",\"marginBottom\":\"var(--spacing-2)\"},\"children\":[[\"$\",\"span\",null,{\"className\":\"badge badge--version\",\"children\":\"latest\"}],[\"$\",\"span\",null,{\"className\":\"badge badge--version\",\"children\":[\"v\",\"1.0.0\"]}],[\"$\",\"span\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-text-muted)\"},\"children\":\"2026/2/20\"}]]}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"var(--font-size-sm)\",\"color\":\"var(--color-text-secondary)\",\"lineHeight\":1.6,\"margin\":0},\"children\":\"Initial ClawHub release\"}],[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"var(--spacing-2)\",\"fontSize\":12},\"children\":[\"$\",\"span\",null,{\"style\":{\"color\":\"#67C23A\"},\"children\":[\"● \",\"无害\"]}]}]]}],[\"$\",\"div\",null,{\"className\":\"sk-hero\",\"style\":{\"marginBottom\":\"var(--spacing-4)\"},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"margin\":\"0 0 var(--spacing-3)\",\"fontSize\":15},\"dangerouslySetInnerHTML\":{\"__html\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"\u003e\u003cpath d=\\\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\\\"/\u003e\u003crect x=\\\"8\\\" y=\\\"2\\\" width=\\\"8\\\" height=\\\"4\\\" rx=\\\"1\\\" ry=\\\"1\\\"/\u003e\u003c/svg\u003e 安装命令 \"}}],[\"$\",\"span\",null,{\"style\":{\"fontSize\":12,\"color\":\"var(--color-gray-400)\"},\"children\":\"点击复制\"}],[\"$\",\"div\",null,{\"className\":\"sk-cm\",\"data-cmd\":\"npx clawhub@latest install libby-book-monitor\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sk-cl\",\"children\":\"官方\"}],\"npx clawhub@latest install libby-book-monitor\"]}],[\"$\",\"div\",null,{\"className\":\"sk-cm sk-cma\",\"data-cmd\":\"npx clawhub@latest install libby-book-monitor --registry https://cn.longxiaskill.com\",\"children\":[[\"$\",\"span\",null,{\"className\":\"sk-cl\",\"children\":[\"🇨🇳\",\" 镜像加速\"]}],\"npx clawhub@latest install libby-book-monitor --registry https://cn.longxiaskill.com\"]}],null]}],null,[\"$\",\"$L13\",null,{\"skillId\":3798,\"defaultContent\":\"$14\",\"docIcon\":\"\u003csvg width=\\\"1em\\\" height=\\\"1em\\\" viewBox=\\\"0 0 24 24\\\" fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"2\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\"\u003e\u003cpath d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"/\u003e\u003cpolyline points=\\\"14 2 14 8 20 8\\\"/\u003e\u003cline x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"13\\\"/\u003e\u003cline x1=\\\"16\\\" y1=\\\"17\\\" x2=\\\"8\\\" y2=\\\"17\\\"/\u003e\u003c/svg\u003e\"}],[\"$\",\"div\",null,{\"style\":{\"textAlign\":\"center\",\"padding\":\"var(--spacing-4)\",\"fontSize\":12,\"color\":\"var(--color-gray-400)\"},\"children\":[\"数据来源:\",[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/alexpolonsky/libby-book-monitor\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"style\":{\"color\":\"var(--color-gray-400)\"},\"children\":\"ClawHub ↗\"}],\" · 中文优化:龙虾技能库\"]}]]}]]}]]}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n document.querySelectorAll('.sk-cm').forEach(function(el) {\\n el.addEventListener('click', function() {\\n var cmd = this.getAttribute('data-cmd');\\n if (cmd \u0026\u0026 navigator.clipboard) {\\n navigator.clipboard.writeText(cmd).then(function() {\\n el.style.borderColor = '#67C23A';\\n setTimeout(function() { el.style.borderColor = ''; }, 600);\\n });\\n }\\n });\\n });\\n \"}}]]\n"])</script><script>self.__next_f.push([1,"f:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"libby-book-monitor — 技能工具 | OpenClaw 技能详情 | 龙虾技能库 | 龙虾技能库\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"[自动翻译] Track book availability on Libby/OverDrive libraries. Search library catalogues, manage a watchlist, and get notified when books are added. Use for \\\"l...\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"link\",\"5\",{\"rel\":\"canonical\",\"href\":\"https://www.longxiaskill.com/skill/3798/libby-book-monitor/\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:title\",\"content\":\"libby-book-monitor — 技能工具\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:description\",\"content\":\"[自动翻译] Track book availability on Libby/OverDrive libraries. Search library catalogues, manage a watchlist, and get notified when books are added. Use for \\\"l...\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"9\",{\"name\":\"twitter:card\",\"content\":\"summary\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:title\",\"content\":\"libby-book-monitor — 技能工具\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:description\",\"content\":\"[自动翻译] Track book availability on Libby/OverDrive libraries. Search library catalogues, manage a watchlist, and get notified when books are added. Use for \\\"l...\"}]]\n3:null\n"])</script></body></html>