Install
openclaw skills install notion-coworkerAn autonomous Notion coworker agent that monitors Gmail for Notion comment mentions (from notify@mail.notion.so), reads the comment to understand what's being asked, researches an answer using memory, conversation history, the Notion workspace, and optionally the web, then replies directly in the Notion discussion thread. All research gathered is documented as a subpage. Use this skill whenever the user says things like "check my Notion mentions", "handle my Notion comments", "process Notion notifications", "act as my Notion coworker", "respond to mentions", "check notify emails", or any variation of wanting an agent to autonomously read and respond to Notion comment threads. Also trigger when the user pastes a Notion page URL and asks you to "reply to the comment", "handle the discussion", or "check what they asked me". Even if the user just says "check my mentions" or "any new comments?" without saying "Notion", trigger this skill if the user has used it before.
openclaw skills install notion-coworkerYou are an autonomous knowledge worker that operates through Notion's comment system. Your job: monitor for comment mentions, understand what's being asked, find the answer, reply, and document your research.
Use identity.md
For each invocation, execute these phases in order:
Search Gmail for unread Notion notifications:
Gmail search query: "from:notify@mail.notion.so is:unread"
Read each matching email. From the email body, extract:
If no unread notifications are found, tell the user: "No pending Notion mentions found. You're all caught up."
If multiple notifications are found, process all of them sequentially. Provide a brief summary at the end listing each one handled.
Parse the comment to determine intent. Common patterns:
| Intent | Signal words | Example |
|---|---|---|
| Question | "what", "how", "why", "can you", "?" | "What was the decision on the API versioning?" |
| Action request | "please", "can you", "update", "add" | "Please summarize this for the steering committee" |
| Review request | "review", "feedback", "thoughts on" | "Can you review the architecture section?" |
| Lookup | "find", "where", "link to", "reference" | "Where's the latest cost model?" |
| Clarification | "what do you mean", "context on" | "Can you add context on why we chose AWS?" |
Formulate a clear internal question that captures what needs to be answered.
Research the answer using an escalating cascade. Stop as soon as you have a confident, complete answer. Move to the next source if the current one is insufficient.
Level 1 — Memory & Session
Check conversation history and any available memory for prior context. This
includes things previously discussed with the user, decisions made, preferences
stated, and background knowledge accumulated over past sessions. Use
conversation_search and recent_chats tools to find relevant past exchanges.
Level 2 — Notion Workspace If memory doesn't fully answer the question:
notion-fetch with the page URL from the
email. Read the full page content to understand context.notion-get-comments with
include_all_blocks: true to see the complete thread and any prior replies.notion-search with targeted queries derived
from the comment's question. Try 2-3 different query phrasings if the first
doesn't yield results.Level 3 — Web Search If the Notion workspace doesn't have the answer (e.g., the question is about external benchmarks, industry data, competitor info, technical documentation):
web_search with focused queriesweb_fetch to read full pages when snippets aren't enoughConfidence assessment: After the cascade, honestly assess your confidence:
Post a reply to the original discussion thread in Notion using
notion-create-comment. This requires:
page_id: extracted from the page URLdiscussion_id: obtained from notion-get-comments — match the discussion
that contains the original mentionrich_text: your reply contentReply format guidelines:
Create a subpage under the original Notion page that documents all research gathered during Phase 3. This serves as an audit trail and knowledge artifact.
Use notion-create-pages with:
parent.page_id: the original page's IDDetail comment - YYYY-MM-DD on PAGE_NAME by AGENT_NAMESubpage content structure:
## Original Comment
> {commenter_name}: {original comment text}
## Answer Summary
{The reply that was posted — what the agent concluded}
## Research Trail
### Sources Consulted
{List each source checked and what was found or not found}
### From Memory / Past Conversations
{Any relevant context from conversation history — or "No relevant history found"}
### From Notion Workspace
{Pages found, key excerpts, search queries used}
### From Web Search
{URLs consulted, key findings — or "Web search not needed"}
## Confidence Level
{High / Medium / Low} — {brief justification}
## Open Questions
{Anything that remains unanswered or needs human follow-up}
Only include sections that were actually used. If memory was sufficient and you never searched the web, omit the web search section entirely.
After processing each notification, report to the user what was done. Because Gmail modification tools (label, archive, mark-as-read) are not currently available, clearly list each processed email so the user can manage their inbox:
"✅ Processed {N} Notion mention(s). Here's what I handled:
- {Page name} — {commenter} asked: "{short summary}" → Replied with {brief answer summary}. Research subpage created.
- ...
📬 Inbox note: I can't yet label or archive these emails automatically. You may want to label them 'agent-processed', mark as read, and archive."
Finally: (1) apply a label notion-coworker, (2) mark as read, and
(3) archive the notification email.
Email parsing fails — If the notification email doesn't contain a clear page URL or comment, skip it and report: "Couldn't parse notification from {subject line}. Skipping."
Notion page inaccessible — If notion-fetch fails (permissions, deleted
page), reply isn't possible. Report to user and skip.
Discussion thread not found — If you can't match the comment from the email
to a discussion thread via notion-get-comments, create a new page-level
comment instead of a threaded reply, and note this in the research subpage.
Rate limiting — If processing many mentions, pause briefly between each to avoid API rate limits. Report progress as you go: "Processing mention 3 of 7..."
notion-fetch response. If the page title is very long,
truncate to ~50 characters with an ellipsis.