← WOTTCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to WOTT
Snapshot Sep 30, 2026 · 23:08 UTC · version 1.0.1
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"name": "search-project",
"description": "Search notebooks within an wott project to find relevant project information and knowledge. Use when the user wants to find information inside a specific wott project.",
"included_files": [
{
"relative_path": "agents/openai.yaml",
"size_in_bytes": 244
},
{
"relative_path": "assets/wott-small.png",
"size_in_bytes": 52883
},
{
"relative_path": "assets/wott.png",
"size_in_bytes": 490946
},
{
"relative_path": "evaluations/README.md",
"size_in_bytes": 3149
},
{
"relative_path": "evaluations/ambiguous-search.json",
"size_in_bytes": 2400
},
{
"relative_path": "evaluations/search-notebook.json",
"size_in_bytes": 1583
},
{
"relative_path": "evaluations/search-project-context.json",
"size_in_bytes": 1624
},
{
"relative_path": "evaluations/search-topic.json",
"size_in_bytes": 1520
},
{
"relative_path": "examples/search-notebook.md",
"size_in_bytes": 976
},
{
"relative_path": "examples/search-project-context.md",
"size_in_bytes": 1063
},
{
"relative_path": "examples/search-specific-topic.md",
"size_in_bytes": 971
},
{
"relative_path": "reference/search-tool-reference.md",
"size_in_bytes": 9491
},
{
"relative_path": "reference/search-workflows.md",
"size_in_bytes": 6789
}
],
"skill_md_contents": "---\nname: search-project\ndescription: Search notebooks within an wott project to find relevant project information and knowledge. Use when the user wants to find information inside a specific wott project.\nmetadata:\n short-description: Search notebooks in wott projects\n---\n\n# Search Project\n\nSearch project knowledge using the `search_project` MCP tool.\n\nThis skill helps users find relevant information across their project notebooks without modifying project or notebook data.\n\n---\n\n## When to use this skill\n\nUse this skill when the user wants to:\n\n* Find information in a project\n* Search project notebooks\n* Find notes about a topic\n* Find a notebook containing specific information\n* Locate previous research or documentation\n* Find project context from existing notebook content\n* Search for a technical term, person, technology, decision, or concept within a project\n* Find relevant notebooks before performing another notebook operation\n\nTypical requests include:\n\n* \"Search my AI project for humanoid robotics.\"\n* \"Find notes about PostgreSQL in this project.\"\n* \"Where did I write about deployment?\"\n* \"Search the project for information about the MCP server.\"\n* \"Find notebooks discussing robotics simulation.\"\n\n---\n\n# Core behavior\n\nThe search skill should:\n\n1. Identify the relevant project.\n2. Obtain the actual `project_id` when it is not already known.\n3. Use `search_project` to search the project.\n4. Interpret the returned ranked results.\n5. Present the most relevant results clearly.\n6. Retrieve a specific notebook with `get_notebook` when the user needs its full content.\n7. Never modify project or notebook data during a search-only request.\n\n---\n\n# Available MCP tool\n\nThe primary tool for this skill is:\n\n```text\nsearch_project\n```\n\nIt performs hybrid search over project notebook knowledge.\n\nThe search combines:\n\n* BM25\n* TF-IDF\n* index-based retrieval\n* weighted reciprocal rank fusion\n* notebook block-to-document resolution\n* notebook result enrichment\n\nThe current implementation searches notebook knowledge.\n\nIt does not currently provide file-source search.\n\n---\n\n# Project identification\n\n`search_project` requires:\n\n```text\nproject_id\n```\n\nThe model must use an actual project ID.\n\nNever invent a project ID.\n\nIf the user provides a project ID, use it directly.\n\nIf the user provides only a project name, use the available project-management capability to identify the project before searching.\n\nIf multiple projects are plausible matches, ask the user to clarify.\n\nExample:\n\n```text\nUser:\nSearch my AI Research project for humanoid robotics.\n\nModel:\n1. Find the \"AI Research\" project.\n2. Get its project_id.\n3. Call search_project with that project_id.\n```\n\nDo not assume that a project name is its ID.\n\n---\n\n# Search query construction\n\nUse the user's actual information need as the search query.\n\nGood search queries preserve important terms.\n\nFor example:\n\n```text\nhumanoid robotics simulation\n```\n\nis better than:\n\n```text\ninformation\n```\n\nFor a technical request:\n\n```text\nMCP OAuth Cloud Run deployment\n```\n\nis better than:\n\n```text\ndeployment stuff\n```\n\nDo not unnecessarily rewrite a precise technical query into generic terms.\n\nThe search engine performs its own tokenization, normalization, stop-word filtering, and retrieval.\n\n---\n\n# Search limits\n\nThe `limit` parameter controls the maximum number of notebook results returned.\n\nDefault:\n\n```text\n20\n```\n\nMaximum:\n\n```text\n50\n```\n\nUse the default unless the user requests a different number or a larger result set is useful.\n\nFor a simple question, a small number of highly relevant results is usually preferable.\n\nFor exploratory requests, a larger limit can be useful.\n\n---\n\n# Understanding search results\n\nThe search response has this general structure:\n\n```json\n{\n \"success\": true,\n \"result_count\": 2,\n \"items\": [\n {\n \"markdown_item_id\": \"notebook_123\",\n \"block_ids\": [\n \"block_1\",\n \"block_2\"\n ],\n \"score\": 0.12,\n \"rank\": 1,\n \"sources\": [\n \"bm25\",\n \"tfidf\",\n \"index\"\n ],\n \"item\": {}\n }\n ],\n \"timestamp\": \"2026-09-03T10:00:00.000Z\"\n}\n```\n\nImportant fields:\n\n### `markdown_item_id`\n\nThe ID of the notebook item that matched the search.\n\nUse this ID with `get_notebook` when the user needs the actual notebook.\n\n### `block_ids`\n\nThe blocks that contributed to the result.\n\nThese are internal retrieval references.\n\nDo not normally expose them to the user unless they are useful for debugging.\n\n### `score`\n\nThe fused relevance score.\n\nHigher scores indicate stronger ranking within the returned search results.\n\nDo not present the score as a percentage or confidence value.\n\n### `rank`\n\nThe final search result ranking.\n\nRank `1` is the highest-ranked result.\n\n### `sources`\n\nThe retrieval methods that contributed to the result.\n\nPossible values:\n\n```text\nbm25\ntfidf\nindex\n```\n\nThese are retrieval mechanisms, not document sources.\n\n### `item`\n\nThe enriched notebook information.\n\nUse the notebook metadata to help explain why a result is relevant.\n\n---\n\n# Search versus notebook retrieval\n\nUse `search_project` to discover relevant notebooks.\n\nUse `get_notebook` to retrieve a specific notebook or its full Markdown content.\n\nTypical workflow:\n\n```text\nUser request\n ↓\nIdentify project\n ↓\nsearch_project\n ↓\nRelevant notebook results\n ↓\nSelect notebook\n ↓\nget_notebook\n ↓\nFull Markdown content\n```\n\nDo not use search as a replacement for reading the complete notebook when the user explicitly asks to read or summarize a notebook.\n\n---\n\n# Search-only requests\n\nIf the user only asks:\n\n> \"Find notes about robotics.\"\n\nSearch the project and return relevant notebook results.\n\nDo not automatically modify or create anything.\n\nIf useful, offer to open or summarize the most relevant notebook.\n\n---\n\n# Search followed by another operation\n\nSearch can be used to discover a notebook before another operation.\n\nFor example:\n\n```text\nUser:\nFind my deployment notebook and update it with this new information.\n```\n\nThe workflow is:\n\n```text\nsearch_project\n ↓\nidentify notebook\n ↓\nget_notebook if needed\n ↓\nupdate_notebook\n```\n\nDo not update a notebook until the target is sufficiently identified.\n\n---\n\n# Ambiguous results\n\nIf several notebooks are similarly relevant and the user's request requires a mutation, do not guess.\n\nFor example:\n\n```text\nDeployment.md\nDeployment Guide.md\nProduction Deployment.md\n```\n\nIf the user says:\n\n> \"Update the deployment notebook.\"\n\nSearch first.\n\nIf multiple results remain plausible, ask which notebook they mean.\n\nFor a read-only search request, multiple relevant results can simply be returned as a ranked list.\n\n---\n\n# Empty results\n\nIf `search_project` returns:\n\n```json\n{\n \"result_count\": 0,\n \"items\": []\n}\n```\n\nDo not claim that the information does not exist anywhere in the project.\n\nInstead explain that no matching notebook results were found for the query.\n\nUseful next steps include:\n\n* trying different search terms\n* searching a related concept\n* checking a specific notebook\n* checking another project\n\n---\n\n# Security and authorization\n\nSearch is always performed for the authenticated MCP user.\n\nThe model must never provide:\n\n```text\nuser_id\n```\n\nto `search_project`.\n\nThe authenticated user identity is supplied by the MCP server.\n\nThe service layer performs project access validation before searching.\n\nThe model must never:\n\n* search an arbitrary project without authorization\n* request OAuth tokens\n* expose authentication information\n* expose Firebase credentials\n* expose server secrets\n* bypass project access controls\n\n---\n\n# Current search scope\n\nThe current implementation supports:\n\n```text\nProject\n└── Notebook knowledge\n ├── notebook blocks\n ├── BM25 retrieval\n ├── TF-IDF retrieval\n └── index retrieval\n```\n\nThe current MCP contract should not claim that file search is supported.\n\nFile search can be added later when file indexing and source resolution are implemented.\n\n---\n\n# Tool selection rules\n\nUse:\n\n```text\nsearch_project\n```\n\nwhen the user wants semantic or keyword discovery across project knowledge.\n\nUse:\n\n```text\nget_projects\n```\n\nwhen the project is unknown and must be identified.\n\nUse:\n\n```text\nget_notebook\n```\n\nwhen the user wants to retrieve a specific notebook, its content, search notebook filesystem items, or inspect a notebook after discovery.\n\nUse:\n\n```text\ncreate_notebook\n```\n\nonly when the user explicitly wants a new notebook or folder.\n\nUse:\n\n```text\nupdate_notebook\n```\n\nonly when the user explicitly wants existing notebook data changed.\n\nUse:\n\n```text\ndelete_notebook\n```\n\nonly when the user explicitly wants an existing notebook item deleted.\n\n---\n\n# Response guidelines\n\nSearch responses should be concise and useful.\n\nPrefer:\n\n```text\nI found 3 relevant notebooks:\n\n1. Humanoid Robotics.md\n Most relevant result. Contains notes on locomotion simulation.\n\n2. Robotics Simulation.md\n Contains simulation experiments.\n\n3. Robotics Research.md\n Contains broader robotics research.\n\nI can open the first one if you want.\n```\n\nDo not expose internal retrieval details unless useful.\n\nDo not describe the BM25, TF-IDF, or index score as model confidence.\n\n---\n\n# Reference documentation\n\nFor detailed tool behavior, read:\n\n```text\nreference/search-tool-reference.md\n```\n\nFor common workflows, read:\n\n```text\nreference/search-workflows.md\n```\n\nExamples are available in:\n\n```text\nexamples/\n```\n\nUse the reference documentation when the user's request requires detailed search behavior or a multi-step workflow.\n"
}SHA-256: 3530a62ea5a129c616100a530f3f2c5bf47da93f9d004f771036d0588727b24e