User's personal Notion LifeOS (PARA: tasks, notes, projects, Make Time journals) with pre-configured DB IDs + API access — required for any LifeOS interaction. Use for adding tasks, taking notes, journaling, querying todos, searching notes, creating projects, reflection. Triggers: 'add task', 'take a note', 'what do I need to do', 'search my notes', '加个任务', '查笔记', '?
User's personal Notion LifeOS (PARA: tasks, notes, projects, Make Time journals) with pre-configured DB IDs + API access — required for any LifeOS interaction.
Use for adding tasks, taking notes, journaling, querying todos, searching notes, creating projects, reflection.
Triggers: 'add task', 'take a note', 'what do I need to do', 'search my notes', '加个任务', '查笔记', '??
Stronger alternatives
This repository is archived — consider an actively maintained alternative.
With Notion MCP tools → See [references/mcp-guide.md](./references/mcp-guide.md)
With Notion API access → See [references/api-guide.md](./references/api-guide.md)
For structured queries (filter by date, checkbox, select) → Always use scripts or REST API. MCP notion-search is semantic only and CANNOT filter by property values.
scripts/query-notes.sh + CC analysis (see Reflection Commands)
"/emerge"
Notes
scripts/query-notes.sh + CC analysis (see Reflection Commands)
"/drift"
Projects + Task + Git
scripts/collect-drift-data.sh + CC analysis (see Reflection Commands)
For Note Type selection and Make Time journal extraction logic, see [references/query-guide.md](./references/query-guide.md). For composite intents (multiple actions in one message), see [references/advanced.md](./references/advanced.md).
Business Rules
Database IDs: Read ~/.config/notion-lifeos/CONFIG.private.md for IDs (fallback: CONFIG.private.md in skill dir). If missing, search for "LifeOS" root page (NOT "LifeOS Template"). Last resort: guide user to [references/setup.md](./references/setup.md).
Schema-first: Fetch database schema before first write in a session — confirm property names and allowed select values.
Make Time dedup: Always check if today's entry exists before creating (scripts/checktodayjournal.sh). Update if exists.
Date format: ISO-8601 only (e.g., 2026-03-08).
Relations: Require target page ID — search for it first.
Post-op confirmation: Always confirm results to the user.
Reflection Commands
These commands use Notion data + Git history as input, with CC performing the analysis. Output is terminal only — never write to Notion.
/challenge \<topic\>
Stress-test a current belief against past writing.
Run scripts/query-notes.sh --type Thoughts --days 90 --limit 50
Scan the returned titles for relevance to the topic
Use MCP notion-fetch to read the top 15-20 most relevant notes (do NOT fetch all 50 — context budget)
Analyze: identify contradictions, weak assumptions, and evidence gaps
Output in Chinese: "当前信念 → 矛盾证据 → 更强的替代假设"
/emerge
Surface recurring themes and hidden patterns in recent thinking.
Run scripts/query-notes.sh --type Thoughts --days 30 --limit 50
Scan titles first — select top 15 most interesting/diverse
Use MCP notion-fetch to read those 15 notes
Identify: recurring themes, emotional patterns, unasked questions, connections the user hasn't made explicit
Output in Chinese, grouped by theme, quoting original notes
/drift \[N days\]
Detect gaps between stated goals and actual activity.
Run scripts/collect-drift-data.sh --days N (default 30)
Read ~/.claude/rules/personal-context.md for project↔repo mapping hints
Perform semantic matching (project names like "Thinking with Image" ≠ repo names like "agentic_umm" — match by meaning, not string)
Analyze:
- Per-project: git commit count + completed task count - 幽灵项目: active in Notion but zero git/task activity - 隐性工作: heavy git activity in repos not mapped to any active project - Time allocation distribution
Output in Chinese: "项目活跃度矩阵" + "幽灵项目" + "隐性工作" + "建议"
Gotchas (Common Pitfalls)
MCP-Specific
Checkbox: YES / NO, NOT true/false
URL property: Prefix with userDefined: (e.g., userDefined:URL)
Date property: Split into date:PropName:start, date:PropName:end, date:PropName:is_datetime
multi_select: Comma-separated string, NOT array
notion-search: Cannot filter by property values — use scripts/REST API
REST API-Specific
databaseid vs datasourceid: REST API uses databaseid, MCP uses datasourceid — they differ
Date filter: ISO-8601 only, never natural language
General
Select values change: NEVER hardcode — always fetch schema first
Duplicate DB names: Always use databases under the LifeOS root page