Install any skill in seconds. Free to start, no credit card required.
Get Started Free →通过即时通讯(IM)向 Notion 添加内容。支持闪念速记、待办清单、多级标题、引用、分割线、有序/无序列表、多级下拉列表(Toggle)、标签分类、项目归类等。当用户消息以 'flash:'、'待办:'、'todo:'、'搜:'、'摘抄'、'日报'、'周报' 等关键词开头,或包含 Notion 记录相关意图时触发。只追加不删除,安全可靠。
SkillScore65/100
Test results 65
3/3 safety checks passed
13%65%of test cases passed +52 pts
Passed 15 of 23 test cases with the skill, and 3 of 23 without it.
12 fixed3 passed either way8 still failing0 broke
One test task请帮我整理这份周会讨论提纲并追加写入 Notion 页面末尾:顶层是一个标题‘第三周产品例会’,下面带一个下拉展开列表‘议题清单’,列表内部包含两个一级项目‘需求评审’与‘进度排期’,且在‘进度排期’下面再嵌套两个二级子项目‘前端开发’和‘接口对接’。处理完请确认记录成功。
Adds every file the skill has, pinned so you can update it. No account needed.
pip install "decimalai>=0.15"
decimalai skills add leoyeai-notion-im-helper
claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"The same install from Python, for a notebook or a setup script.
pip install "decimalai>=0.15"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
print("Added. Start Claude Code with the command below.")claude --plugin-dir "$(git rev-parse --show-toplevel 2>/dev/null || pwd)/.agents"Type these in a Claude Code session. No account or API key. It writes the skill and any files it bundles, and asks first when its safety rating isn't Passed.
/plugin marketplace add decimal-labs/decimalai-claude-plugins
/plugin install decimalai@decimalai/decimalai:install leoyeai-notion-im-helperThe plugin needs python3 and curl on your machine.
No Python or account. Claude Code picks it up in its next session.
curl -fsSL --create-dirs -o .claude/skills/leoyeai-notion-im-helper/SKILL.md https://app.decimal.ai/s/leoyeai-notion-im-helper/SKILL.md.claude/skills/leoyeai-notion-im-helper/SKILL.mdThis gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"
decimalai skills add leoyeai-notion-im-helperimport asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[claude-agent-sdk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from claude_agent_sdk import ClaudeAgentOptions
from decimalai.claude_agent_sdk import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
async def main():
question = "Hello!"
async with support.run(question) as run: # one user message, one run
async for message in run.query(options=ClaudeAgentOptions(max_turns=6)):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())Prefer its own loader? ClaudeAgentOptions(plugins=[skills_plugin()], skills="all") reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
options = ClaudeAgentOptions(system_prompt=f"You are a helpful agent.\n\n{skill}", max_turns=6)
async def main():
async for message in query(prompt="Hello!", options=options):
print(message)
# In a notebook or async code: await main()
asyncio.run(main())This gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"
decimalai skills add leoyeai-notion-im-helperfrom agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai-agents]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
from agents import Agent, Runner
from decimalai.openai_agents import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
name=support.name,
instructions=support.instructions, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")Using SandboxAgent? capabilities=[Shell(), decimalai.openai_agents.sandbox_skills()] points its own loader at the same folder.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
agent = Agent(name="support", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await Runner.run(agent, "Hello!")
result = Runner.run_sync(agent, "Hello!")This gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"
decimalai skills add leoyeai-notion-im-helperimport json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[openai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
import json
from openai import OpenAI
from decimalai.openai import agent_config
client = OpenAI()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your tools, as Chat Completions takes them, and what answers each.
TOOLS = [{"type": "function", "function": {
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
# run.system is your prompt, then the skill list.
messages = [{"role": "system", "content": run.system}, run.message]
while True:
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=messages,
tools=[*TOOLS, *run.tools], # your tools, then load_skill
).choices[0].message
messages.append(reply)
if not reply.tool_calls:
break
for call in reply.tool_calls:
# load_skill is answered by the run; your own tools by FUNCTIONS.
function = FUNCTIONS.get(call.function.name)
messages.append(run.tool_result(call) or {
"role": "tool", "tool_call_id": call.id,
"content": function(**json.loads(call.function.arguments)) if function
else f"There is no tool named {call.function.name!r}.",
})
print(reply.content)
# The Responses API takes run.response_tools instead of run.tools.No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
reply = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[
{"role": "system", "content": f"You are a helpful agent.\n\n{skill}"},
{"role": "user", "content": "Hello!"},
],
).choices[0].messageThis gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"
decimalai skills add leoyeai-notion-im-helperimport anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[anthropic]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
import anthropic
from decimalai.anthropic import agent_config
client = anthropic.Anthropic()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
question = "Hello!"
with support.run(question) as run: # one user message, one run
answer = client.beta.messages.tool_runner(
model="claude-haiku-5-5",
max_tokens=4096,
system=run.system, # your prompt, then the skill list
tools=[*run.tools], # your tools, then load_skill
messages=[{"role": "user", "content": question}],
).until_done()No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
reply = client.messages.create(
model="claude-haiku-5-5",
max_tokens=4096,
system=f"You are a helpful agent.\n\n{skill}",
messages=[{"role": "user", "content": "Hello!"}],
)This gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"
decimalai skills add leoyeai-notion-im-helperfrom google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[google-genai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
from google import genai
from google.genai import types
from decimalai.google_genai import agent_config
client = genai.Client()
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
def lookup_order(order_id: str) -> str:
return f"Order {order_id} shipped yesterday."
# Your functions, as declarations for the model, and what answers each.
TOOLS = [{"function_declarations": [{
"name": "lookup_order",
"description": "Look up the status of an order.",
"parameters_json_schema": {"type": "object", "properties": {"order_id": {"type": "string"}},
"required": ["order_id"]},
}]}]
FUNCTIONS = {"lookup_order": lookup_order}
question = "Where is order A1001?"
with support.run(question) as run: # one user message, one run
config = types.GenerateContentConfig(
system_instruction=run.system, # your prompt, then the skill list
tools=[*TOOLS, *run.tool_params], # your functions, then load_skill
)
contents = [{"role": "user", "parts": [{"text": run.message}]}]
while True:
response = client.models.generate_content(
model="gemini-3.5-flash", contents=contents, config=config,
)
if not response.function_calls:
break
contents.append(response.candidates[0].content)
parts = []
for call in response.function_calls:
# load_skill is answered by the run; your own functions by FUNCTIONS.
# A loop of your own rather than automatic function calling, which
# raises KeyError when the model asks for a function you did not pass.
function = FUNCTIONS.get(call.name)
parts.append(run.tool_result(call) or {"function_response": {
"name": call.name, "id": call.id,
"response": {"result": function(**(call.args or {})) if function
else f"There is no function named {call.name!r}."},
}})
contents.append({"role": "user", "parts": parts})
print(response.text)No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
response = client.models.generate_content(
model="gemini-3.5-flash",
contents="Hello!",
config=types.GenerateContentConfig(system_instruction=f"You are a helpful agent.\n\n{skill}"),
)This gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openai
decimalai skills add leoyeai-notion-im-helperfrom langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[langchain]" langchain-openaifrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
from langchain.agents import create_agent
from decimalai.langchain import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = create_agent(
"openai:gpt-5.4-mini",
tools=[], # your tools; the middleware adds load_skill
middleware=[support.middleware], # your prompt, the skill list and load_skill
)
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
agent = create_agent("openai:gpt-5.4-mini", tools=[], system_prompt=f"You are a helpful agent.\n\n{skill}")
result = agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 13 other files are not included.
CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"
decimalai skills add leoyeai-notion-im-helperimport decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()The same install from Python, for a notebook or a setup script. CrewAI's own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" "crewai>=1.15.27"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.crewai
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=decimalai.crewai.skills(), # the installed folder
tools=decimalai.crewai.skill_tools(), # reads a skill's files, runs its scripts
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()No DecimalAI package. CrewAI's own loader reads the folder, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from crewai import Agent, Crew, Task
agent = Agent(
role="Support", goal="Help the customer", backstory="A support agent.",
llm=llm, # your own CrewAI LLM
skills=[Path(".agents/skills")],
)
task = Task(description="Hello!", expected_output="an answer", agent=agent)
Crew(agents=[agent], tasks=[task]).kickoff()This gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"
decimalai skills add leoyeai-notion-im-helperfrom decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[adk]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.adk import DecimalAIPlugin, agent_config
from google.adk.agents import LlmAgent
from google.adk.apps import App
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = LlmAgent(
name="support", # ADK needs a Python identifier
model="gemini-3.5-flash",
instruction=support.instruction, # your prompt, then the skill list
tools=[*support.tools], # your tools, then load_skill
)
# DecimalAIPlugin makes each invocation of runners built from this App one trace.
app = App(name="support", root_agent=agent, plugins=[DecimalAIPlugin()])Prefer ADK's own loader? SkillToolset(skills=decimalai.adk.skills(), ...) reads the same folder. Use one or the other: a skill delivered both ways reaches the prompt twice.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
agent = LlmAgent(
name="support",
model="gemini-3.5-flash",
instruction=lambda context: f"You are a helpful agent.\n\n{skill}",
)This gets SKILL.md only. The skill's 13 other files are not included.
agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"
decimalai skills add leoyeai-notion-im-helperfrom pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
The same install from Python, for a notebook or a setup script. agent_config() hands your agent the skill. With no DecimalAI key it reads your project's files and sends nothing. Needs SDK 0.27 or newer.
pip install "decimalai[pydantic-ai]"from decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
from pydantic_ai import Agent
from decimalai.pydantic_ai import agent_config
# With no DECIMAL_API_KEY this reads the skills your project lists, from disk.
support = agent_config("support", fallback="You are a helpful agent.")
agent = Agent(
"openai:gpt-4o-mini",
name=support.name,
tools=[], # your tools; the capability adds load_skill
capabilities=[support], # your prompt, the skill list and load_skill
)
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")On the Pydantic AI harness, decimalai.pydantic_ai_harness.skills(project) uses its own loader instead.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
agent = Agent("openai:gpt-4o-mini", instructions=f"You are a helpful agent.\n\n{skill}")
# In a notebook or async code: result = await agent.run("Hello!")
result = agent.run_sync("Hello!")This gets SKILL.md only. The skill's 13 other files are not included.
Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagents
decimalai skills add leoyeai-notion-im-helperimport decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
The same install from Python, for a notebook or a setup script. Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
import decimalai.deepagents
from deepagents import create_deep_agent
agent = create_deep_agent(model=model, **decimalai.deepagents.skills())
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})The default backend reads files but has no shell. To run a skill's scripts, pass skills(backend=LocalShellBackend(...)).
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
agent = create_deep_agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent.invoke({"messages": [{"role": "user", "content": "Hello!"}]})This gets SKILL.md only. The skill's 13 other files are not included.
Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-framework
decimalai skills add leoyeai-notion-im-helperimport asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
The same install from Python, for a notebook or a setup script. Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-frameworkfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
import asyncio
from agent_framework import Agent
from decimalai.agent_framework import skills
agent = Agent(client=client, instructions="You are a helpful agent.", context_providers=[skills()])
asyncio.run(agent.run("Hello!"))It caches skills by default, so restart the process after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
agent = Agent(client=client, instructions=f"You are a helpful agent.\n\n{skill}")
asyncio.run(agent.run("Hello!"))This gets SKILL.md only. The skill's 13 other files are not included.
Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agents
decimalai skills add leoyeai-notion-im-helperfrom decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
The same install from Python, for a notebook or a setup script. Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agentsfrom decimalai import skillpkg
# Writes .agents/skills and .decimal/skills.toml. Safe to run twice.
result = skillpkg.add("leoyeai-notion-im-helper")
if result.exit_code:
raise SystemExit(result.problems)
from decimalai.strands import skills
from strands import Agent
from strands.vended_tools import file_editor, shell
agent = Agent(
model=model, # always pass one: the default is Amazon Bedrock
system_prompt="You are a helpful agent.",
tools=[file_editor, shell],
plugins=[skills()],
)
agent("Hello!")Strands loads an agent's skills once, so build the agent again after decimalai skills update.
No DecimalAI package. The whole skill goes in every prompt, and nothing pins or updates it.
.agents/skills/leoyeai-notion-im-helper/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/leoyeai-notion-im-helper/SKILL.md").read_text()
agent = Agent(model=model, system_prompt=f"You are a helpful agent.\n\n{skill}")
agent("Hello!")This gets SKILL.md only. The skill's 13 other files are not included.
Adds every file the skill has, pinned so you can update it. Cursor, Copilot, Cline and Warp read this folder by themselves.
pip install "decimalai>=0.15"
decimalai skills add leoyeai-notion-im-helperNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/leoyeai-notion-im-helper/SKILL.md https://app.decimal.ai/s/leoyeai-notion-im-helper/SKILL.md.agents/skills/leoyeai-notion-im-helper/SKILL.mdThis gets SKILL.md only. The skill's 13 other files are not included.
Give its text to your model as instructions. No account or package needed.
This gets SKILL.md only. The skill's 13 other files are not included.
Raw files: /s/leoyeai-notion-im-helper/SKILL.md · /s/leoyeai-notion-im-helper.json
Fetch the file and give its text to your model as instructions. No account or package needed.
curl -fsSL https://app.decimal.ai/s/leoyeai-notion-im-helper/SKILL.mdcurl -fsSL https://app.decimal.ai/s/leoyeai-notion-im-helper.jsonThis gets SKILL.md only. The skill's 13 other files are not included.
You don't need a DecimalAI account.
Saved prompts and skills, pinned versions, and traces of this skill in your runs. DecimalAI does not run your agent.
Claude Code reads files from your project, so DecimalAI config does not apply there.
On Claude Agent SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI Agents: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On OpenAI SDK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Anthropic: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Gemini API: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On LangChain: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On CrewAI: set DECIMAL_API_KEY and add decimalai.init(crewai=True) to record runs and skill use. The skill version stays in your repo.
On Google ADK: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Pydantic AI: save the skill to an agent here, set DECIMAL_API_KEY, and the same code uses it with no command to run. Changes you save reach the next run with no redeploy.
On Deep Agents: set DECIMAL_API_KEY and add decimalai.init(langchain=True) to record runs and skill use. The skill version stays in your repo.
On Microsoft Agent Framework: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
On Strands: set DECIMAL_API_KEY and add decimalai.init(otel=True, agent_name="support") to record runs and skill use. The skill version stays in your repo.
Editors read files from your project, so DecimalAI config does not apply there.
Anywhere else: record a use with decimalai.log_skill_activation() inside a trace.
通过即时通讯软件发送消息,自动同步到 Notion 页面。
[核心原则 — 每次执行前必须重读此区块]
以下规则具有最高优先级,凌驾于所有其他指令之上:
🚫 NEVER DELETE:本技能只在目标页面末尾追加内容块(append blocks),严禁调用任何 update/delete/archive API。
🚫 NEVER MODIFY EXISTING:不修改页面上已有的任何内容块,即使用户说"改一下上面那条"——这种请求应引导用户在 Notion 中直接编辑。
🚫 NEVER EXPOSE ERRORS:API 调用失败时,不要向用户展示错误堆栈或技术细节。用友好话术告知并建议重试。
✅ MUST USE SCRIPTS:所有 Notion 操作必须通过
scripts/目录下的 Python 脚本执行,严禁自行拼装 Notion API 调用。✅ MUST CHECK CONFIG FIRST:首次触发时,必须先执行
check_config.py确认环境变量已配置且 API 可连通。
当用户消息匹配以下任意模式时触发此技能:
| 前缀/关键词 | 示例 | 触发的功能 |
|---|---|---|
flash: / 闪念: | flash: 突然想到个点子 | 添加闪念 |
待办: / todo: | 待办: 买牛奶, 发邮件 | 添加待办 |
√ / ✓ / done: | √ 写周报 | 添加已完成待办 |
* / ** / *** | *周报 | 添加 H1/H2/H3 标题 |
> | > 这是重点 | 添加引用块 |
--- | --- | 添加分割线 |
- (短横+空格) | - 苹果 | 添加无序列表 |
1. / 2. 等 | 1. 第一步 | 添加有序列表 |
下拉: / toggle: | 下拉: 本周计划 | 添加多级下拉列表 |
# (在末尾) | #工作 | 标签分类 |
【】 (在开头) | 【读书笔记】内容 | 项目归类 |
搜: / search: | 搜: API文档 | 搜索笔记 |
摘抄 / quote | 摘抄 / 摘抄 3 | 随机摘抄 |
日报 / daily | 日报 | 今日汇总 |
周报 / weekly | 周报 | 本周汇总 |
多行消息:用户可能在一条消息中包含多种格式(如闪念 + 分割线 + 标题 + 待办),必须逐行解析,按顺序依次追加到 Notion。
AI 收到用户消息后,必须逐行解析,按以下规则判断每行内容的类型并调用对应脚本。
匹配规则:以 flash: 或 闪念: 开头(不区分大小写,冒号后可有可无空格)
Notion 输出(时间和内容分两行显示):
⚡ {时间戳} 📌{Claw名} #{标签} 【{项目}】(灰色时间 + 蓝色斜体元数据)脚本调用:
python3 {SKILL_DIR}/scripts/add_flash.py "突然想到个点子"
python3 {SKILL_DIR}/scripts/add_flash.py "突然想到个点子" --claw "微信Claw"
匹配规则:以 待办: 或 todo: 开头
解析细节:
, , 、 分隔,每个片段创建一个待办checked: false脚本调用:
python3 {SKILL_DIR}/scripts/add_todo.py "买牛奶" "发邮件" "开会"
匹配规则:以 √ 或 ✓ 或 done: 开头
与普通待办区别:checked: true
脚本调用:
python3 {SKILL_DIR}/scripts/add_todo.py --done "写周报"
匹配规则:
*文字 → H1(heading_1)**文字 → H2(heading_2)***文字 → H3(heading_3)注意:* 后直接跟文字,中间无空格亦可;* 数量严格对应级别。
脚本调用:
python3 {SKILL_DIR}/scripts/add_heading.py 1 "周报"
python3 {SKILL_DIR}/scripts/add_heading.py 2 "工作总结"
python3 {SKILL_DIR}/scripts/add_heading.py 3 "代码优化"
匹配规则:以 > 开头(> 后跟空格)
脚本调用:
python3 {SKILL_DIR}/scripts/add_quote.py "这是重点"
匹配规则:整行为 ---(前后可有空白)
脚本调用:
python3 {SKILL_DIR}/scripts/add_divider.py
匹配规则:以 - (短横+空格)开头
脚本调用:
python3 {SKILL_DIR}/scripts/add_list.py bullet "苹果" "香蕉" "橘子"
匹配规则:以 数字. (如 1. )开头
脚本调用:
python3 {SKILL_DIR}/scripts/add_list.py number "第一步" "第二步" "第三步"
匹配规则:以 下拉: 或 toggle: 开头,后续行用 - 缩进表示层级
层级规则:
- 内容 → 第一级子项-- 内容 → 第二级子项--- 内容 → 第三级子项示例输入:
下拉: 本周计划
- 写代码
- 开会
-- 需求评审
-- 技术评审
脚本调用(传入 JSON 结构):
echo '{"title":"本周计划","children":[{"text":"写代码"},{"text":"开会","children":[{"text":"需求评审"},{"text":"技术评审"}]}]}' | python3 {SKILL_DIR}/scripts/add_toggle.py
匹配规则:消息中包含 #关键词(# 后紧跟文字,无空格)
处理方式:标签不单独创建内容块,而是作为元数据附加到同一消息中的其他内容块。如果消息中只有标签,则创建一个段落块显示标签。
脚本行为:标签信息通过 --tag 参数传递给其他脚本:
python3 {SKILL_DIR}/scripts/add_flash.py "3月19日进度" --tag "工作" --claw "微信Claw"
匹配规则:以 【项目名】 开头
处理方式:同标签,作为元数据。通过 --project 参数传递:
python3 {SKILL_DIR}/scripts/add_flash.py "3月19日进度" --project "项目A" --claw "微信Claw"
匹配规则:以 搜: 或 search: 开头
脚本调用:
python3 {SKILL_DIR}/scripts/search_notes.py "API文档"
输出协议:脚本输出 JSON 数组,每个元素包含 title、url、snippet。AI 将结果格式化后发送给用户。
匹配规则:用户发送 日报 或 daily
脚本调用:
python3 {SKILL_DIR}/scripts/daily_summary.py
输出协议:脚本输出今日所有记录的 JSON 列表,AI 整理成格式化的日报发回。
匹配规则:用户发送 周报 或 weekly
脚本调用:
python3 {SKILL_DIR}/scripts/weekly_report.py
前提:需配置 NOTION_QUOTES_PAGE_ID 环境变量。
匹配规则:
摘抄 → 随机 1 条摘抄 3 → 随机 3 条摘抄 原子习惯 → 搜索指定书名的摘抄脚本调用:
python3 {SKILL_DIR}/scripts/daily_quote.py # 随机 1 条
python3 {SKILL_DIR}/scripts/daily_quote.py --count 3 # 随机 3 条
python3 {SKILL_DIR}/scripts/daily_quote.py --book "原子习惯" # 按书名搜
未配置时的话术:
"摘抄功能需要先配置摘抄本页面~ 你可以在 Notion 新建一个页面,然后把页面 ID 配置到
NOTION_QUOTES_PAGE_ID环境变量就好啦 📖"
所有脚本统一遵循以下输出约定,AI 根据输出前缀判断结果:
| 输出前缀 | 含义 | AI 行为 |
|---|---|---|
OK| | 操作成功 | 向用户展示成功结果(如 `OK |
ERROR|CONFIG | 环境变量未配置 | 引导用户配置,参考"首次使用配置"章节 |
ERROR|AUTH | API 密钥无效或页面未授权 | 引导用户检查密钥和页面授权 |
ERROR|RATE_LIMIT | 触发 Notion API 速率限制 | 告知用户"记录太快了,稍等几秒再发~ 🐢" |
ERROR|NETWORK | 网络连接失败 | 告知用户"网络好像不太通畅,稍后再试~ 📡" |
ERROR|* | 其他错误 | 不暴露细节,告知用户"记录时遇到了点问题,稍后再试~" |
⚠️ 输出到 stderr 的内容为调试日志,不要展示给用户。
当触发此技能且 check_config.py 返回 ERROR|CONFIG 时,执行以下引导流程:
📝 首次使用 Notion 助手,需要 2 分钟做个配置~
1️⃣ 创建 Notion Integration
→ 打开 https://www.notion.so/my-integrations
→ 点击 "Create new integration"
→ 填写名称(如 "notion-im-helper"),选择你的工作空间
→ 提交后复制 Internal Integration Token(以 ntn_ 或 secret_ 开头)
2️⃣ 获取页面 ID
→ 打开你要写入的 Notion 页面
→ 从 URL 中复制最后的 32 位字符:
https://www.notion.so/你的页面标题-1a2b3c4d5e6f...
└── 这一段就是页面 ID
3️⃣ 配置到 OpenClaw
openclaw config set env.NOTION_API_KEY "你的密钥"
openclaw config set env.NOTION_PARENT_PAGE_ID "你的页面ID"
openclaw gateway restart
4️⃣ 授权 Integration 访问页面
→ 打开你的 Notion 页面 → 点右上角 ··· → Connect to → 选择你的 Integration
配置好了发条消息试试:flash: 测试一下 ✨
关键:引导话术一次性发完,不要分步骤等用户确认。用户配置完会自己来测试。
当用户发送包含多种格式的消息时,AI 必须按以下流程处理:
第一步:按换行符拆分消息为多行
第二步:提取全局元数据(#标签、【项目】),从行列表中移除
第三步:逐行匹配类型(闪念/待办/标题/引用/分割线/列表/下拉)
第四步:识别下拉列表的连续行块(下拉: 开头 + 后续 - 行)
第五步:按顺序依次调用对应脚本,每次调用传入全局元数据(--tag / --project / --claw)
第六步:全部成功后,向用户发送一条汇总确认
Claw 标签来源:
--claw参数标识消息来自哪个 Claw。如果未显式传递--claw,脚本会自动读取OPENCLAW_CLAW_NAME环境变量。建议每个 Claw 实例都配置此环境变量以便区分来源。
汇总确认话术示例:
"已记录到 Notion ✅ 包含:1 条闪念 + 1 个标题 + 3 条待办 + 1 个引用 + 1 个下拉列表"
部分失败时的话术:
"大部分内容已记录 ✅ 有 1 条没成功,稍后帮你重试~ 已记录:闪念 + 3 条待办"
scripts/
├── notion_client.py # Notion API 公共模块(封装认证和请求)
├── check_config.py # 配置检查(验证环境变量和 API 连通性)
├── add_flash.py # 添加闪念笔记
├── add_todo.py # 添加待办事项(支持 --done 标记已完成)
├── add_heading.py # 添加标题(H1/H2/H3)
├── add_quote.py # 添加引用块
├── add_toggle.py # 添加多级下拉列表(stdin 接收 JSON)
├── add_list.py # 添加无序/有序列表
├── add_divider.py # 添加分割线
├── search_notes.py # 搜索笔记(只读)
├── daily_summary.py # 每日汇总(只读)
├── daily_quote.py # 随机摘抄(只读,需 NOTION_QUOTES_PAGE_ID)
└── weekly_report.py # 周报生成(只读)
所有脚本依赖
notion_client.py公共模块,其中封装了:
- 环境变量读取(
NOTION_API_KEY、NOTION_PARENT_PAGE_ID等)- Notion Client 初始化
- 统一的错误处理和输出格式化(
OK|.../ERROR|...)- 速率限制自动重试(最多 2 次,间隔 1 秒)
与"让 AI 自动生成 Python 代码调用 API"相比,本技能采用预置脚本的架构设计具有显著优势:
| 对比维度 | 让 AI 自己写脚本调用 API | 预写脚本到 scripts/ | 优势 |
|---|---|---|---|
| Token 消耗 | 每次都要生成完整 API 调用代码 | 只需调用预置脚本 | ✅ 省 90% 以上 |
| 执行速度 | AI 生成代码 → 执行 → 调试 | 直接执行 | ✅ 毫秒级响应 |
| 稳定性 | 可能出错、格式不一致(每次生成的代码可能不同) | 固定的经过严格测试的稳定代码 | ✅ 可靠 |
| 调试难度 | 每次都可能踩坑(尤其是复杂的富文本嵌套结构) | 调试一次永远可用 | ✅ 省心 |
pip install notion-client
仅依赖官方
notion-client包(Python SDK),无其他第三方依赖。
append_block_children API,永远不调用 delete/updaterequests 库直接请求ERROR|AUTH下拉: 行之后的连续 - / -- / --- 行都属于同一个 Toggle 块,直到遇到非 - 开头的行为止chcp 65001 >nul && python3 {SKILL_DIR}/scripts/...NOTION_QUOTES_PAGE_ID 是可选配置,未配置时摘抄相关功能应友好提示而非报错OPENCLAW_CLAW_NAME 环境变量或 --claw 参数标识消息来源。多 Claw 环境下每个实例应配置不同的名称(如 微信Claw、TelegramClaw),以便在 Notion 中区分记录来源以下是用户可能遇到的问题及对应话术,AI 应直接使用这些话术回复:
"配置了还是返回未配置"
"可能需要重启一下才能生效~ 试试执行
openclaw gateway restart,然后再发一条消息试试 🔄"
"怎么切换到另一个 Notion 页面?"
"重新配置一下页面 ID 就行~ 执行:
openclaw config set env.NOTION_PARENT_PAGE_ID '新的页面ID',然后openclaw gateway restart🔄"
"摘抄本怎么建?"
"在 Notion 新建一个页面,把每条摘录用 Toggle(下拉列表)存进去就行~ 比如: ▶ 《原子习惯》- 习惯需要环境和系统 📖 原文:习惯不是改变,而是替代… 💭 我的想法:这句话让我想到… 建好后把页面 ID 配置到
NOTION_QUOTES_PAGE_ID就能用啦 📖"
"支持 Telegram / 飞书 / 钉钉吗?"
"支持!本技能不依赖具体 IM,只要 OpenClaw 能收到消息就能用~ 📱"
用户发送:
flash: 下午3点产品评审会
---
*会议准备
待办: 准备PPT, 发邀请, 预定会议室
> 重点讨论新功能优先级
---
下拉: 项目计划
- 第一阶段
-- 需求分析
-- 原型设计
- 第二阶段
-- 开发
--- 前端
--- 后端
-- 测试
#工作
【项目A】3月19日进度
AI 解析流程:
tag=工作,project=项目A,claw=OPENCLAW_CLAW_NAME 环境变量值flash: 下午3点产品评审会 → 调用 add_flash.py "下午3点产品评审会" --tag 工作 --project 项目A(Claw 标签由环境变量自动注入)--- → 调用 add_divider.py*会议准备 → 调用 add_heading.py 1 "会议准备"待办: 准备PPT, 发邀请, 预定会议室 → 调用 add_todo.py "准备PPT" "发邀件" "预定会议室"> 重点讨论新功能优先级 → 调用 add_quote.py "重点讨论新功能优先级"--- → 调用 add_divider.py下拉: 项目计划 + 后续 - 行 → 组装 JSON,调用 add_toggle.py【项目A】3月19日进度 → 调用 add_flash.py "3月19日进度" --project 项目A --tag 工作⚡ 2026-03-20 09:15 📌微信Claw #工作 【项目A】 ← 灰色时间 + 蓝色元数据
下午3点产品评审会 ← 正文内容
────────────────────────────────── ← 分割线
"已记录到 Notion ✅ 包含:1 条闪念 + 2 条分割线 + 1 个标题 + 3 条待办 + 1 个引用 + 1 个下拉列表 + 1 条项目记录"
以下功能列在路线图中但尚未实现,用户问起时如实告知:
话术:
"这个功能还在开发中~ 后续更新会支持,敬请期待 🚀"
Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.