notion-lifeos

install
source · Clone the upstream repo
git clone https://github.com/jiahao-shao1/notion-lifeos-skill
Claude Code · Install into ~/.claude/skills/
git clone --depth=1 https://github.com/jiahao-shao1/notion-lifeos-skill ~/.claude/skills/jiahao-shao1-notion-lifeos-skill-notion-lifeos
manifest: SKILL.md
source content

Notion LifeOS Skill

A Notion life management system based on the PARA method and Make Time framework.

When NOT to Use This Skill

  • Notion product questions — pricing, features, API documentation, workspace admin
  • Generic productivity advice — "how should I organize my life" without intent to store/retrieve data
  • Other note-taking apps — unless user wants to migrate data INTO Notion LifeOS
  • Database schema modification — creating new databases, adding/removing properties

Core Principles

  • Capture first, organize later — Never let processing block input
  • Proactive information surfacing — Use Relations to automatically surface information where it's needed

See JEFF_SU_SUMMARY.md for detailed design philosophy.

Reference Files

Read these as needed — do NOT load them all upfront:

FileWhen to read
references/schema.mdBefore creating/updating any entry (get field names & types)
references/mcp-guide.mdWhen using MCP tools (Claude Code / Claude.ai)
references/api-guide.mdWhen using REST API (OpenClaw / Codex / other agents)
references/query-guide.mdWhen querying/filtering data (tasks by date, done status, etc.)
references/advanced.mdFor composite intents or error handling

Operation Guide

  • With Notion MCP tools → See references/mcp-guide.md
  • With Notion API access → See 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.

Intent Recognition & Database Mapping

User IntentTarget DBMethod
"Take a note about XXX"NotesMCP / API
"Add a task: XXX"Task
scripts/create-task.sh
/ MCP / API
"The best thing today was..."Make TimeMCP / API (check dedup first)
"Create project XXX"ProjectsMCP / API
"Today's tasks"Task
scripts/query-tasks.sh --date today
"Any unfinished tasks?"Task
scripts/query-tasks.sh --undone
"Today's unfinished tasks"Task
scripts/query-tasks.sh --date today --undone
"Search notes about XX"NotesMCP
notion-search
"Add a resource/reference"ResourcesMCP / API

For Note Type selection and Make Time journal extraction logic, see references/query-guide.md. For composite intents (multiple actions in one message), see references/advanced.md.

Business Rules

  1. 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.
  2. Schema-first: Fetch database schema before first write in a session — confirm property names and allowed select values.
  3. Make Time dedup: Always check if today's entry exists before creating (
    scripts/check_today_journal.sh
    ). Update if exists.
  4. Date format: ISO-8601 only (e.g.,
    2026-03-08
    ).
  5. Relations: Require target page ID — search for it first.
  6. Post-op confirmation: Always confirm results to the user.

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

  • database_id vs data_source_id: REST API uses
    database_id
    , MCP uses
    data_source_id
    — 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