Memory System for Human — A scalable self-awareness system that captures your thoughts, decisions, and growth over decades.
Independent implementation of a Notion-based LifeOS system for OpenClaw agents, based on the PARA method and Make Time framework.
Inspiration: This implementation is inspired by Jeff Su's Notion Command Center YouTube videos. Built from scratch with AI automation features unique to this project.
Design Philosophy
1. Frontend-Backend Separation
- Frontend: Notion (user interface for capture and review)
- Backend: OpenClaw AI agents (automation, processing, insights)
- This separation allows you to switch tools without losing your data structure
2. Database Separation (DP Principle)
- Write: Instant, frictionless capture via natural language
- Process: Deferred, AI-powered organization through Relations
- Philosophy: Capture first, organize later. Never let processing block input.
3. Scalable Self-Awareness
- Every note, task, and decision becomes a data point
- Over time, patterns emerge: how you think, what you value, how you grow
- Ultimate goal: An AI that thinks like you, trained on your actual thought process
See JEFF_SU_SUMMARY.md for detailed design principles.
PARA Method
This system implements the PARA method by Tiago Forte:
- Projects — Short-term goals with deadlines (e.g., "Launch Course", "Run Marathon")
- Areas — Ongoing responsibilities (e.g., Health, Career, Finance)
- Resources — Reference materials and knowledge bases
- Archives — Completed or paused projects
All databases are interconnected through Notion Relations, allowing information to surface automatically where you need it.
What This Skill Does
Enables your OpenClaw AI agent to:
- Create and query tasks, notes, projects, areas, resources
- Manage your PARA system via natural language
- Add daily Make Time journal entries
- Link related items across databases
Setup
1. Get Notion API Key
- Visit Notion Integrations
- Create a new Integration and get the API Key
- Save the API Key to
~/.config/notion/api_key
mkdir -p ~/.config/notion
echo "your_notion_api_key_here" > ~/.config/notion/api_key
chmod 600 ~/.config/notion/api_key
2. Configure Database ID
⚠️ Important: Database IDs are private information, do not commit to Git!
Option A: Use a private config file (recommended)
- Copy the template file:
cp CONFIG.private.md.example CONFIG.private.md
-
Edit
CONFIG.private.md, fill in your real database ID -
OpenClaw will preferentially read the ID from
CONFIG.private.md(this file is already in.gitignore)
Option B: Edit SKILL.md directly
In the "Database ID Mapping" table below, replace the placeholders with your real IDs.
⚠️ Note: If you edit SKILL.md directly, do not commit to Git!
# 读取 API Key
NOTION_KEY=$(cat ~/.config/notion/api_key)
API version:2025-09-03(in this version, databases queries go through the /v1/data_sources/ endpoint)
Database ID Mapping
OpenClaw read order:
- Preferentially read
CONFIG.private.md(if it exists) - Otherwise use the IDs in SKILL.md below
You need to replace the following placeholders with your own database IDs:
| Database | database_id (for creating pages) | data_source_id (for querying) |
|---|---|---|
| Task | YOUR_TASK_DATABASE_ID |
YOUR_TASK_DATA_SOURCE_ID |
| Notes | YOUR_NOTES_DATABASE_ID |
YOUR_NOTES_DATA_SOURCE_ID |
| Areas | YOUR_AREAS_DATABASE_ID |
YOUR_AREAS_DATA_SOURCE_ID |
| Resources | YOUR_RESOURCES_DATABASE_ID |
YOUR_RESOURCES_DATA_SOURCE_ID |
| Projects | YOUR_PROJECTS_DATABASE_ID |
YOUR_PROJECTS_DATA_SOURCE_ID |
| Make Time | YOUR_MAKETIME_DATABASE_ID |
YOUR_MAKETIME_DATA_SOURCE_ID |
LifeOS root page:YOUR_LIFEOS_ROOT_PAGE_ID
How to get database_id and data_source_id?
-
database_id: Open the Notion database page, the ID part in the URL (remove hyphens)
- For example:
https://notion.so/25b119f193ef804a96fec277cc6b45fa→25b119f1-93ef-804a-96fe-c277cc6b45fa
- For example:
-
data_source_id: Obtain by querying database information via the API
curl -X GET "https://api.notion.com/v1/databases/YOUR_DATABASE_ID" \ -H "Authorization: Bearer $NOTION_KEY" \ -H "Notion-Version: 2025-09-03"
Field Structure
Task Database
| Field | Type | Description |
|---|---|---|
| Name | title | Task name |
| Done | checkbox | Whether completed |
| Due Date | date | Due date |
| Related to Projects | relation | Related project |
| Related to Notes | relation | Related note |
Notes Database
| Field | Type | Description |
|---|---|---|
| Note | title | Note title |
| Note Type | select | Note type |
| Status | select | Status |
| Tags | multi_select | Tags |
| folder | rich_text | Folder |
| Date | date | Date |
| URL | url | Link |
| Files & media | files | Attachment |
| Related to Projects | relation | Related project |
| Related to Areas | relation | Related area |
| Related Resources | relation | Related resource |
| Created time | created_time | Created time |
| Last edited time | last_edited_time | Last edited |
Areas Database
| Field | Type | Description |
|---|---|---|
| Blog name | title | Area name |
| type | multi_select | Type tag |
| Related Notes | relation | Related note |
| Related Resources | relation | Related resource |
| created time | created_time | Created time |
| last edited | last_edited_time | Last edited |
Resources Database
| Field | Type | Description |
|---|---|---|
| Note | title | Resource name |
| Resources Type | select | Resource type |
| URL | url | Link |
| Date | date | Date |
| Files & media | files | Attachment |
| Related to Areas | relation | Related area |
| Related to Projects | relation | Related project |
| Related Notes | relation | Related note |
| Created time | created_time | Created time |
| Last edited time | last_edited_time | Last edited |
Projects Database
| Field | Type | Description |
|---|---|---|
| Log name | title | Project Name |
| Status | select | Status |
| End Date | date | End Date |
| Project Folder | rich_text | Project Folder |
| Related Areas | relation | Related Area |
| Related Resources | relation | Related Resources |
| Related Notes | relation | Related Notes |
| Created time | created_time | Created Time |
| Last edited time | last_edited_time | Last Edited |
Make Time Database
| Field | Type | Description |
|---|---|---|
| Name | title | Date Name |
| Date | date | Date |
| Highlight | rich_text | Today's Highlights |
| Grateful | rich_text | Things to Be Grateful For |
| Let Go | rich_text | Things to Let Go |
| Day of the Week | formula | Day of the Week (auto-calculated) |
API Usage Patterns
Create a Page (using database_id)
curl -X POST "https://api.notion.com/v1/pages" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2025-09-03" \
-H "Content-Type: application/json" \
-d '{
"parent": {"database_id": "<database_id>"},
"properties": { ... }
}'
Query Data (using data_source_id)
curl -X POST "https://api.notion.com/v1/data_sources/<data_source_id>/query" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2025-09-03" \
-H "Content-Type: application/json" \
-d '{
"filter": { ... },
"sorts": [{"property": "Created time", "direction": "descending"}],
"page_size": 10
}'
Common Operation Examples
Create a Task
curl -X POST "https://api.notion.com/v1/pages" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2025-09-03" \
-H "Content-Type: application/json" \
-d '{
"parent": {"database_id": "YOUR_TASK_DATABASE_ID"},
"properties": {
"Name": {"title": [{"text": {"content": "任务名称"}}]},
"Due Date": {"date": {"start": "2026-02-25"}},
"Done": {"checkbox": false}
}
}'
Create a Note
curl -X POST "https://api.notion.com/v1/pages" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2025-09-03" \
-H "Content-Type: application/json" \
-d '{
"parent": {"database_id": "YOUR_NOTES_DATABASE_ID"},
"properties": {
"Note": {"title": [{"text": {"content": "笔记标题"}}]},
"Note Type": {"select": {"name": "类型"}},
"Tags": {"multi_select": [{"name": "标签1"}]}
}
}'
Query Incomplete Tasks
curl -X POST "https://api.notion.com/v1/data_sources/YOUR_TASK_DATA_SOURCE_ID/query" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2025-09-03" \
-H "Content-Type: application/json" \
-d '{
"filter": {"property": "Done", "checkbox": {"equals": false}},
"sorts": [{"property": "Due Date", "direction": "ascending"}]
}'
Query Recent Notes
curl -X POST "https://api.notion.com/v1/data_sources/YOUR_NOTES_DATA_SOURCE_ID/query" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2025-09-03" \
-H "Content-Type: application/json" \
-d '{
"sorts": [{"property": "Created time", "direction": "descending"}],
"page_size": 10
}'
Notes
- Use
database_idto create pages, usedata_source_idto query, don't mix them up - Rate limit: ~3 req/s
- Relation fields require the target page's page_id
- A button block's automation configuration is lost when created via the API (the data source reference breaks); instead of button functionality, set the Relation field directly via the API
- Page content (body) is added via the blocks API:
PATCH /v1/blocks/{page_id}/children
License
MIT License
Author
Created by Jiahao Shao
- Website: https://jiahao-shao1.github.io/
- Twitter: @jiahaoshao1
- Email: jhshao1027@gmail.com
Acknowledgments
- Built for OpenClaw
- Inspired by Jeff Su's Notion Command Center YouTube videos
- Based on the PARA method by Tiago Forte
- Incorporates Make Time framework by Jake Knapp and John Zeratsky
Disclaimer: This is an independent implementation created by studying publicly available content. It is not affiliated with or endorsed by any paid courses. The AI integration features are unique to this project.