Automates command execution before and after web searches, fetches, and file reads.
/plugin marketplace add https://www.claudepluginhub.com/api/plugins/telvokdev-librarian-2/marketplace.json/plugin install telvokdev-librarian-2@cpd-telvokdev-librarian-2Defined in hooks/hooks.json
{
"PreToolUse": [
{
"hooks": [
{
"type": "command",
"command": "printf '\\n⚠️ PUBLISHING ATTESTATION REQUIRED\\n\\nBefore publishing, you MUST confirm with the user:\\n ✓ This is original work (or they have rights to publish)\\n ✓ No secrets, credentials, or sensitive data included\\n ✓ Terms of service accepted\\n\\nDo NOT auto-confirm. Ask the user explicitly.\\n'"
}
],
"matcher": "mcp__plugin_librarian_librarian__library_publish"
}
],
"PostToolUse": [
{
"hooks": [
{
"type": "command",
"command": "printf 'New entry recorded. The semantic index will include it on next rebuild_index() call.'"
}
],
"matcher": "mcp__plugin_librarian_librarian__record"
},
{
"hooks": [
{
"type": "command",
"command": "printf 'Sync complete. Run rebuild_index() if you want new content to appear in semantic search.'"
}
],
"matcher": "mcp__plugin_librarian_librarian__sync"
},
{
"hooks": [
{
"type": "command",
"command": "printf 'Import complete. Run rebuild_index() to make imported entries searchable via semantic search.'"
}
],
"matcher": "mcp__plugin_librarian_librarian__import_memories"
},
{
"hooks": [
{
"type": "command",
"command": "printf 'Entry deleted. Run rebuild_index() to remove stale embeddings from the search index.'"
}
],
"matcher": "mcp__plugin_librarian_librarian__delete"
},
{
"hooks": [
{
"type": "command",
"command": "printf 'Purchase initiated. After completing payment, run sync() to download the content.'"
}
],
"matcher": "mcp__plugin_librarian_librarian__library_buy"
},
{
"hooks": [
{
"type": "command",
"command": "printf 'Auth action complete. Run auth({ action: \"status\" }) to verify your connection.'"
}
],
"matcher": "mcp__plugin_librarian_librarian__auth"
},
{
"hooks": [
{
"type": "command",
"command": "printf 'Book published! Share the link or check seller_analytics() to track performance.'"
}
],
"matcher": "mcp__plugin_librarian_librarian__library_publish"
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "printf 'Librarian active.\n\nBRIEF: Before thinking through a problem, making decisions, or planning - check what we already know. Also use when an issue comes up again or feels like something we solved before. Call brief to search past knowledge. Use brief without a query for recent entries.\n\nRECORD: Call when we:\n- Solve a problem before moving to the next thing\n- Make a decision and need to capture the reasoning NOW\n- Hit a gotcha or mistake that WILL come up again\n- Learn something non-obvious since context dies fast\nDo not wait to be asked. Do not batch insights - one insight = one record call. Multiple recordings in one response is ok. Quality bar: I wish we knew this yesterday\n\nMARK_HIT: When an entry from brief actually helps, call mark_hit with the path. Entries with more hits rank higher in future searches.'"
}
],
"matcher": "*"
}
]
}{
"riskFlags": {
"touchesBash": false,
"matchAllTools": false,
"touchesFileWrites": false
},
"typeStats": {
"command": 9
},
"eventStats": {
"PreToolUse": 1,
"PostToolUse": 7,
"UserPromptSubmit": 1
},
"originCounts": {
"absolutePaths": 0,
"pluginScripts": 0,
"projectScripts": 0
},
"timeoutStats": {
"commandsWithoutTimeout": 9
}
}