skills/o9k-session-start/SKILL.md
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.
npx skillsauth add Bumblebiber/hmem o9k-session-startInstall 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.
Run at the beginning of any session, after /clear, and after any load_project call.
All stable context is PRE-INJECTED by the o9k-startup.sh hook:
Do NOT call read_memory(mode='essentials') — it's redundant and slow.
If the user's message names a specific project (e.g. "lade Projekt hmem", "P0048"): call load_project(id: "P00XX").
If the user did NOT name a project: list the 5 entries from the --- Recent projects --- block as bullet points, ask which one. Once picked, call load_project(id: "P00XX").
load_project returns the project brief, recent O-Entry summaries, rules, lessons. load_project is the only activation action — no separate read_memory.
Sessions resume after days or weeks — pending work rots if nobody surfaces it.
Look in load_project output for a filesystem path (.1.4 Environment / .2 Codebase). If no .git, skip.
git status --porcelain
git stash list
git worktree list
git for-each-ref --format='%(refname:short) %(committerdate:relative)' refs/heads/ | grep -v '^main\b\|^master\b'
git branch --no-merged main 2>/dev/null || git branch --no-merged master
Cross-reference: branch in for-each-ref AND --no-merged = real unmerged commits.
Only when something is pending. German format:
⚠ Offene Arbeit im Repo:
Worktrees:
.worktrees/<name> — Branch <branch>, letzter Commit <relative date>
Stashes:
stash@{0}: <message> (<relative date>)
Unmerged Branches:
<branch> — <N> Commits voraus, letzter Commit <relative date>
Uncommitted auf <current branch>:
<file>, <file>, ...
Weiter dran arbeiten oder aufräumen?
Never auto-delete/commit/merge.
Read the "Next Steps" node from load_project output:
read_memory(id: "P00XX.8.YY") ← Node titled "Next Steps"
Compare with T-entries under Links:. Report ones NOT in Next Steps.
📋 Next Steps:
• Item 1
📌 Offene Tasks (nicht in Next Steps):
T0033: ...
No interpretation — just display.
After load_project, scan for:
o9k-curateupdate_memory(id, { irrelevant: true })[-] prefix sections → update_memory(id, { irrelevant: true })Batch 3+ items: update_many(ids=[...], irrelevant=true). Fix immediately.
H0003 (IT Skills, pre-injected). Scale 1–9:
H-entries are pre-injected by the hook. Each H-entry appears as a title line (e.g. H0008 Identität — Name, Anrede, ...) followed by •-prefixed L2 children when they exist.
A pre-injected H-entry is empty (stub) when it shows only the title line with NO • children below it. Example of an empty entry:
H0006 User Kontext: Solo-Entwickler, Gründer, 6 Geräte
Example of a filled entry:
H0008 Identität — Name, Anrede, Sprachen, Begrüßungen
• Sprache bevorzugt: Deutsch
• Anrede: "Benni"
| Slot | Entry | What to ask if empty | |---|---|---| | Identität (MANDATORY) | H0008 | Name, preferred language, acceptable greetings, banned greetings | | Online-ID | H0002 | GitHub username, email | | IT-Skills | H0003 | Skill areas with 1-9 ratings | | Business-Skills | H0004 | Skill areas with 1-9 ratings | | Arbeitsstil | H0005 | Communication style, language preference, pet peeves | | Lebenskontext | H0006 | Role, devices, company, work hours | | Präferenzen | H0007 | Likes, dislikes, preferred interaction patterns |
--- Human context (H-entries) --- block in the pre-injected context.•-prefixed L2 children are present.write_memory(prefix="H", title="...", body="...", pinned=true, ...).Every load_project changes O-entry routing. If you loaded another project during this session, exchanges were misrouted.
Check: read_memory(id: "O00XX") — same seq as P00XX. If exchanges are missing, find them in the other project's O-entry and fix:
move_nodes(node_ids: ["O00YY.Z"], target_o_id: "O00XX")
Rule: Never load_project a secondary project without re-calling on your working project.
Two-line format:
<sync-status-line>
<greeting> <name> — <action>. ← project named
<greeting> <name>. <list-intro>: ← no project named
• Pxxxx — <title>
...
Values from pre-injected H-entries:
--- hmem-sync --- block:
✓ Linked … → 🟢 hmem-sync verbunden.⚠ … → 🟡 hmem-sync: <status>.✗ Not linked → 🔴 hmem-sync nicht verbunden.✗ Not configured → 🔴 hmem-sync nicht konfiguriert.No [CORTEX READY] block. Two lines IS the ready signal.
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.
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.
testing
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".