skills/o9k-search/SKILL.md
Search hmem when the user references something without an ID — past conversations ('letzte Woche', 'remember when'), unknown proper names, definite articles assuming shared context ('the bug we had', 'das Schema von gestern'), or asks whether a schema/rule/decision is documented. Search first, ask second. Skip for explicit ID lookups like 'read P0048'.
npx skillsauth add Bumblebiber/hmem o9k-searchInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When the user references past context without pinning it to an ID, or when looking up definitions, schemas, or decisions stored in hmem — convert the intent into a targeted read_memory query.
Extract from the prompt:
after/before range using the current date as anchor. "gestern" → narrow (−1 to 0d), "letzte Woche" → medium (−10 to −3d), "neulich"/"vor kurzem" → generous (−21d). No time hint → skip the range.First search:
read_memory({ search: "<keywords>", after: "<ISO>", before: "<ISO>" })
Keywords as a single space-separated string. Use ISO dates (2026-04-11), not relative forms.
If results are empty or off-topic — work through this sequence immediately, without waiting:
a) Drop time filter, keep keywords Time hints from humans are fuzzy; the memory may sit just outside the window.
b) Try term variations — systematically, not just once The stored entry may use a different phrasing than what the user said. Try all that apply:
read_memory({ prefix: "R", search: "H" })Don't try one variation and stop. Run 2–3 variations before concluding nothing was found.
c) Switch store
Default is personal. If the topic is work-related and personal turned up nothing, try store: "company".
d) Broaden with find_related
If you found something related but not quite right, use find_related({ id: "<hit-ID>" }) to surface linked entries.
Only report "nothing found" after all of these have failed.
Present the hits:
ID · date · one-line summary.read_memory({ id: "..." }) rather than dumping everything.hmem entries are titled by whoever created them, not by a controlled vocabulary. "H-Standardschema" might be stored as "H-Entry Schema: Standard-Struktur für Human-Context-Einträge" (R0025). The search engine does substring/FTS matching, but only within what's actually stored. If the first search misses, the entry almost certainly exists under a different phrasing — not in a different location.
The failure mode to avoid: searching once, getting no results, and concluding the information doesn't exist. A null result is a signal to try harder, not a final answer.
The user often speaks as if you already know things you don't — because from their side, the conversation is continuous across sessions. Watch for:
der/das/die implies you should know which one.When this pattern shows up: search first, answer second.
"neulich" → 14d). Context shifts the right window.personal when the context is clearly work-related.read_memory output to the user. Summarize what was found.search_memory — dedicated FTS5 endpoint; read_memory({ search }) covers the same ground with structured output.find_related(id) — after locating a hit, surface linked entries.read_memory({ time_around: "<ID>" }) — once you have an anchor, find entries created around the same time.read_memory({ prefix: "R" }) — scan all Rules when looking for documented standards or constraints.tools
Update flow for its-over-9k (hmem). Runs `npm update -g`, syncs skills, applies migrations, verifies hooks, shows the changelog. Use when the user asks to update/upgrade hmem, o9k, o9k-mcp, or its-over-9k (any language), or when the startup version-check flags a new release. Runs the npm update itself — don't assume it's already done.
development
Mandatory entry point for every Cortex session — invoke at conversation start, after /clear, and after any load_project call. All stable context (H-entries, projects, device, sync) is pre-injected by the hook — no read_memory(mode='essentials') needed. Surfaces pending git work, Next Steps + open T-tasks, and runs the O-entry routing check.
tools
Curate an .hmem file (your own or foreign) — mark obsolete/irrelevant, fix titles, consolidate duplicates, repair broken links. **Requires the `hmem-curate` MCP server** (skill prompts the user to enable it on entry). Use whenever the user says 'aufräumen', 'memory aufräumen', 'Speicher aufräumen', 'hmem aufräumen', 'clean up memory', 'tidy up hmem', 'curate memory', 'consolidate duplicates', 'merge duplicate entries', 'fix broken links', 'kümmer dich um die Memory', or invokes /o9k-curate. Also trigger when `memory_health()` flags BLOCKER/WARNING issues, when a P-entry's load_project output exceeds 4k tokens (session-start noise check defers to this skill), or before any batch cleanup of L, E, D, P entries. Skipping this skill and editing memory directly bypasses health checks, severity triage, and obsolete-chain integrity — never curate without it.
testing
Add a new rule and place it correctly — decide between a cross-project R-entry and a project-specific subnode under the active project's Rules section. Use whenever the user says 'neue Regel', 'Regel hinzufügen', 'new rule', 'add a rule', or invokes /o9k-new-rule. Critical safeguard: project-specific rules placed as R-entries pollute the session-start Rules listing across every project — get the scope right BEFORE writing.