skills/o9k-search-workspace/skill-snapshot/SKILL.md
Search hmem memory for things referenced without an ID. Trigger when user refers to past conversations ("letzte Woche", "gestern", "remember when", "we talked about"), mentions proper names unknown this session, uses definite articles assuming shared context ("der Bug mit X", "the issue we had"), or seems to assume you know something. If you think "the user assumes I know this" — search first, ask second. Combines full-text search with time window from phrasing. Trigger on casual/vague references. Do NOT trigger 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, convert their prompt into a targeted read_memory query.
Extract two things from the prompt:
after / before range using the current date as anchor. Be deliberate, not mechanical: "gestern" is narrow (−1 to 0 days), "letzte Woche" medium (−10 to −3 days), "neulich" / "vor kurzem" / "vor ein paar Tagen" is vague — prefer a generous window (e.g. −21 days) and let ranking surface the hit. For old projects or "damals", expand further. No time hint at all → skip the range entirely.Search:
read_memory({ search: "<keywords>", after: "<ISO>", before: "<ISO>" })
Keywords go as a single space-separated string — FTS5 handles it. Use ISO dates (2026-04-11), not relative forms.
Fallbacks, in order, if results are empty or clearly off-topic:
read_memory({ search: "<keywords>" }). Time hints from humans are fuzzy; the memory may sit just outside the window.personal; if the user works on a work-related topic and personal turned up nothing, try store: "company".Present the hits:
ID · date · one-line summary.read_memory({ id: "..." })) rather than dumping everything.The user's hmem holds months of O-entries, L-entries, decisions, bug histories. They genuinely cannot remember IDs. If you skip this skill and answer from session context alone, you'll confabulate — the conversation they're referring to is from a prior session and isn't in your current context. Searching is the only correct move.
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, pull the distinctive noun(s) as keywords and search without a time filter (the user gave none). Confirm what you found before answering the substantive question — otherwise you risk answering about the wrong thing.
"neulich" → 14d). Context shifts the right window: a just-started project's "neulich" is a few days; an old project's "neulich" might be two months. Judge each case.personal when the context is clearly work. Ask or try both.read_memory output to the user. Summarize what was found.search_memory (if available) — dedicated FTS5 endpoint, but read_memory({search}) covers the same ground and returns structured nodes.find_related(id) — after locating one hit, use this to surface linked entries.read_memory({ time_around: "<ID>" }) — once you've found an anchor entry, this returns entries created around the same time, useful when the user's memory clusters a few conversations together.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.