Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.orinadus.com/llms.txt

Use this file to discover all available pages before exploring further.

Schema

{
  "name": "urchin_search",
  "inputSchema": {
    "type": "object",
    "required": ["query"],
    "properties": {
      "query": { "type": "string" },
      "hours": { "type": "number" },
      "limit": { "type": "number" }
    },
    "additionalProperties": false
  }
}

Arguments

query
string
required
Substring to search for. Case-insensitive. Matched against the content field of each event. Must not be blank.
hours
number
default:"168"
Look back this many hours. Default is 168 (1 week). Events older than the window are excluded.
limit
number
default:"20"
Maximum number of results to return. Applied after time and content filtering.

Behaviour

  1. Reads all events from the journal.
  2. Filters to events within the hours window.
  3. Filters to events where content contains query (case-insensitive).
  4. Returns the most recent limit matching events, newest first.
The search is a simple str::to_lowercase().contains() — no tokenisation, no stemming, no relevance ranking. For semantic/conceptual search, use urchin_semantic_search instead.

Success response

One line per matching event:
[2026-05-04T20:00:00Z] claude — Use file-backed ephemeral flag for cross-process suppression
[2026-05-03T14:20:00Z] copilot — ephemeral mode: suppress writes during sensitive session
Returns an empty string if no events match.

Example calls

{
  "name": "urchin_search",
  "arguments": {
    "query": "ephemeral"
  }
}

Error response

{
  "content": [{"type": "text", "text": "query must not be empty"}],
  "isError": true
}
Also returns isError: true if the journal cannot be read. urchin_search is a literal substring match — exact and fast. Use it when you know the specific word or phrase. urchin_semantic_search uses token-cosine similarity (or vector embeddings if URCHIN_EMBEDDER_URL is set). Use it for conceptual queries like “decisions about authentication” where the exact words may not appear in the content.