- Add required configSchema to openclaw.plugin.json for OpenClaw plugin discovery - Add search command to CLI with --limit, --dir, --from-date, --to-date, --tags filters - Fix get_stats() to properly count unique docs (was returning 0 for non-null values) - Remove hardcoded max_results default of 5; search now returns all results by default - Update INSTALL.md and design docs with correct OpenClaw extension path instructions
218 lines
6.3 KiB
JSON
218 lines
6.3 KiB
JSON
{
|
|
"schema_version": "1.0",
|
|
"id": "obsidian-rag",
|
|
"name": "obsidian-rag",
|
|
"version": "0.1.0",
|
|
"description": "Semantic search through Obsidian vault notes using RAG. Powers natural language queries like 'How was my mental health in 2024?' across journal entries, financial records, health data, and more.",
|
|
"author": "Santhosh Janardhanan",
|
|
"openclaw": "^2026.4.9",
|
|
"main": "dist/index.js",
|
|
"configSchema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"vault_path": {
|
|
"type": "string",
|
|
"description": "Path to Obsidian vault"
|
|
},
|
|
"embedding": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"provider": {
|
|
"type": "string",
|
|
"enum": ["ollama"]
|
|
},
|
|
"model": {
|
|
"type": "string"
|
|
},
|
|
"base_url": {
|
|
"type": "string",
|
|
"format": "uri"
|
|
},
|
|
"dimensions": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"batch_size": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
}
|
|
}
|
|
},
|
|
"vector_store": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": ["lancedb"]
|
|
},
|
|
"path": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"indexing": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"chunk_size": {
|
|
"type": "integer",
|
|
"minimum": 1
|
|
},
|
|
"chunk_overlap": {
|
|
"type": "integer",
|
|
"minimum": 0
|
|
},
|
|
"file_patterns": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"deny_dirs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"allow_dirs": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"security": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"require_confirmation_for": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"sensitive_sections": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"local_only": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"memory": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"auto_suggest": {
|
|
"type": "boolean"
|
|
},
|
|
"patterns": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tools": [
|
|
{
|
|
"name": "obsidian_rag_search",
|
|
"description": "Primary semantic search tool. Given a natural language query, searches the Obsidian vault index and returns the most relevant note chunks ranked by semantic similarity. Supports filtering by directory, date range, and tags.",
|
|
"parameter_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"query": {
|
|
"type": "string",
|
|
"description": "Natural language question or topic to search for"
|
|
},
|
|
"max_results": {
|
|
"type": "integer",
|
|
"description": "Maximum number of chunks to return (default: unlimited)",
|
|
"minimum": 1,
|
|
"maximum": 10000
|
|
},
|
|
"directory_filter": {
|
|
"type": "array",
|
|
"description": "Limit search to specific vault subdirectories (e.g. ['Journal', 'Finance'])",
|
|
"items": { "type": "string" }
|
|
},
|
|
"date_range": {
|
|
"type": "object",
|
|
"description": "Filter by date range",
|
|
"properties": {
|
|
"from": { "type": "string", "description": "Start date (YYYY-MM-DD)" },
|
|
"to": { "type": "string", "description": "End date (YYYY-MM-DD)" }
|
|
}
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"description": "Filter by hashtags found in notes (e.g. ['#mentalhealth', '#therapy'])",
|
|
"items": { "type": "string" }
|
|
}
|
|
},
|
|
"required": ["query"]
|
|
},
|
|
"required_permissions": []
|
|
},
|
|
{
|
|
"name": "obsidian_rag_index",
|
|
"description": "Trigger indexing of the Obsidian vault. Use 'full' for first-time setup, 'sync' for incremental updates, 'reindex' to force a clean rebuild.",
|
|
"parameter_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"mode": {
|
|
"type": "string",
|
|
"description": "Indexing mode",
|
|
"enum": ["full", "sync", "reindex"]
|
|
}
|
|
},
|
|
"required": ["mode"]
|
|
},
|
|
"required_permissions": []
|
|
},
|
|
{
|
|
"name": "obsidian_rag_status",
|
|
"description": "Check the health of the Obsidian RAG plugin — index statistics, last sync time, unindexed files, and Ollama status. Call this first when unsure if the index is ready.",
|
|
"parameter_schema": {
|
|
"type": "object",
|
|
"properties": {}
|
|
},
|
|
"required_permissions": []
|
|
},
|
|
{
|
|
"name": "obsidian_rag_memory_store",
|
|
"description": "Commit an important fact from search results to OpenClaw's memory for faster future retrieval. Use after finding significant information (e.g. 'I owe Sreenivas $50') that should be remembered.",
|
|
"parameter_schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"key": {
|
|
"type": "string",
|
|
"description": "Identifier for the fact (e.g. 'debt_to_sreenivas')"
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"description": "The fact to remember"
|
|
},
|
|
"source": {
|
|
"type": "string",
|
|
"description": "Source file path in the vault (e.g. 'Journal/2025-03-15.md')"
|
|
}
|
|
},
|
|
"required": ["key", "value", "source"]
|
|
},
|
|
"required_permissions": []
|
|
}
|
|
]
|
|
} |