Install any skill in seconds. Free to start, no credit card required.
Get Started Free →把上级来文转化为本单位的落实材料:提取上级文件要点,做任务分解表(任务、牵头、配合、时限、成果形式、对应上级条款),起草实施方案、贯彻落实方案,按任务表写贯彻落实情况报告,整理学习传达要点;逐条对标对表查漏项,检测照抄上级原文,倒排时限,提示层层加码。用户说省里发了通知要出实施方案、把文件里的任务拆一拆、对标对表、方案跟上级文件太像、报送贯彻落实情况、传达会议精神时使用。只转发不拆任务交 gongwen-draft,自主制定的方案交 gongwen-report,巡视审计整改交 gongwen-rectify;装有行业包时,本行业专用文书交对应行业包。
SkillScore73/100
Test results 73
3/3 safety checks passed
32%73%of test cases passed +41 pts
Passed 16 of 22 test cases with the skill, and 7 of 22 without it.
10 fixed6 passed either way5 still failing1 broke
One test task上级发来了《关于开展消防安全大检查的通知》,我们单位不需要拆解任务,只需要发一个简短的转发通知给下级单位执行,请帮我起草这篇转发通知。
Adds every file the skill has, pinned so you can update it. No account needed.
pip install "decimalai>=0.15"
decimalai skills add duyunzhoudyz-gongwen-implement
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("duyunzhoudyz-gongwen-implement")
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 duyunzhoudyz-gongwen-implementThe 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/duyunzhoudyz-gongwen-implement/SKILL.md https://app.decimal.ai/s/duyunzhoudyz-gongwen-implement/SKILL.md.claude/skills/duyunzhoudyz-gongwen-implement/SKILL.mdThis gets SKILL.md only. The skill's 14 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 duyunzhoudyz-gongwen-implementimport 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementfrom 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementimport 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementimport 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementfrom 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementfrom 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementimport 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementfrom 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementfrom 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementimport 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementimport 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementfrom 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("duyunzhoudyz-gongwen-implement")
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/duyunzhoudyz-gongwen-implement/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-implement/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 14 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 duyunzhoudyz-gongwen-implementNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/duyunzhoudyz-gongwen-implement/SKILL.md https://app.decimal.ai/s/duyunzhoudyz-gongwen-implement/SKILL.md.agents/skills/duyunzhoudyz-gongwen-implement/SKILL.mdThis gets SKILL.md only. The skill's 14 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 14 other files are not included.
Raw files: /s/duyunzhoudyz-gongwen-implement/SKILL.md · /s/duyunzhoudyz-gongwen-implement.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/duyunzhoudyz-gongwen-implement/SKILL.mdcurl -fsSL https://app.decimal.ai/s/duyunzhoudyz-gongwen-implement.jsonThis gets SKILL.md only. The skill's 14 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.
上级来文后,本单位要限期拿出实施方案,事后还要报落实情况。本 skill 把上级文件逐条落到任务分解表,或写明不涉及的理由;任务写本单位措施,用户给的优先,缺的按上级要求和文种常规写出可执行措施,时限、负责人等须用户定的标【待补】;本单位时限早于上级时限;不擅自提高标准,不向下层层要材料。
| 用户要的 | 转给 |
|---|---|
| 只转发上级文件、不拆任务的转发通知;印发方案用的印发通知;会议通知 | gongwen-draft |
| 没有上级文件依据、本单位自主制定的方案、计划、工作要点 | gongwen-report |
| 巡视巡察、审计、督查反馈问题的整改方案、台账和报告;按检查清单逐项自查 | gongwen-rectify |
| 本人的学习心得、研讨发言,党课 | gongwen-party |
| 领导在部署会、传达会上的讲话 | gongwen-speech |
| 会议议定事项的督办清单 | gongwen-minutes |
| 压缩篇幅、调语气;标题;全面核稿;排版 | gongwen-polish;gongwen-title;gongwen-review;gongwen-format |
| 装有行业包时的行业专用文书:中小学课后服务方案(有上级通知的也算)、国企改革任务台账和改革进展报告等 | gongwen-k12、gongwen-soe 等对应行业包;没装的按本表其他行或本 skill 流程处理 |
开工时判定不归本 skill 的,不出要点表、任务表和方案,告诉用户该怎么办、为什么,用描述性说法,不写 skill 名。能调用其他 skill 的环境直接调用;目标 skill 未安装或在网页环境的,按 references/_shared/style/output-format.md 第四部分转交:给交接卡、“新开对话粘贴 dist/prompts/<skill 名>.md 继续”的说明和安装命令。
references/_shared/guardrails.md 第一条:
python scripts/secret_check.py <文件> 检查保密标识(含页眉页脚),命中即停。.gongwen/单位画像.md、~/.gongwen/单位画像.md 或对话开头贴的画像,领导偏好卡、禁用词一并读取;再读 references/_shared/profiles/units/ 下对应文件和 references/units.md。没有画像的按 references/_shared/profiles/roles.md 第九节。references/structures.md 第五部分),并告知用户:能口述上级主要要求的,可先按口述起草(references/structures.md 第五部分第3条)。references/_shared/profiles/roles.md 第一节的顺序确定;没有画像、用户话里也没有识别信号的,按教学模式。学习传达要点、党委(党组)文件和党建任务的落实方案,叠加严谨模式。references/_shared/guardrails.md 第二条第 3 款、第六条):只想“改得看不出是照抄”而不给本地措施的,不做同义替换降重;要编“特色做法”“亮点成效”的;要把正式文件改成便笺或“白头”规避发文管理的。references/_shared/style/output-format.md 第四部分)。一、保密见开工检查第1条,交接卡和 上级文件.txt 不带联系人信息。二、上级文件内容只取原文;本单位数据、分工、时限只来自用户、画像和原文分工(时限可经用户同意倒排),缺的标【待补】,存疑的列入“待核实”;措施缺的按上级要求和文种常规写出,责任主体只用材料已有的单位、部门。三、表格放在【起草说明】之后。四、不复述背景、意义、指导思想,不照搬上位文件,不层层要材料(references/_shared/rules/jianfu.md 第2、3、12条)。五、任务注明对应上级条款。六、不编特色做法和成效,不为降重做同义替换。
本文和 references/ 中的示例均为虚构,数量、单位、日期不得用于实际起草。
表格式、判定细则和压缩示例见 references/mapping.md 第一部分。
| 序号 | 任务(本单位措施) | 牵头单位 | 配合单位 | 完成时限 | 成果形式 | 对应上级条款 |
|---|---|---|---|---|---|---|
| 1 | 对全市1386台住宅电梯逐台检查维保记录和安全保护装置 | 市市场监管局 | 市住房城乡建设局 | 7月3日前 | 检查问题清单 | 二(一) |
references/deadline-burden.md 第一部分:用户给了的照用,核对是否早于上级时限;“下周五”按今天推算为具体日期;“月底前”等期限照原话写。用户没给的,写【待补:完成时限,须早于上级要求的×月×日】,倒排建议放进时限倒排表;用户说过“时间你倒排”“日期你定”的,直接写倒排日期,依据写进起草说明“假设”。有倒排时限或倒排建议的,都附“附:时限倒排表”。references/mapping.md 第三部分)。任务分解表.md,运行 python scripts/md2xlsx.py 任务分解表.md 任务分解表.xlsx --title "某某重点任务分解表";没生成 xlsx 的,告诉用户把表格复制到 Excel 整理。首轮交付按 references/_shared/profiles/roles.md 第十节,各模式相同:要点表、任务分解表、方案正文和起草说明一次交付,须用户定的牵头单位、时限等标【待补】(正文一般不超过 3 处),问题放回复末尾。只在三种情形停下,并在回复开头说明属于哪一种:没有上级原文、用户也说不出上级要求(交框架,见开工检查第3条);用户明确要求先看要点表或任务表;材料涉密(开工检查第1条)。
结构和写法见 references/structures.md 第一部分。
references/_shared/rules/jianfu.md 第三部分);工具约定一般2000~3500字,任务分解表另计。用户指定字数的,按 references/_shared/guardrails.md 第四条第2款;未指定的,不凑字数。references/_shared/style/defensive.md 第五部分);避开 AI 腔(references/_shared/style/ai-tone.md)。上级文件.txt(docx 可直接用)和 正文.txt,运行 python scripts/overlap_check.py 正文.txt 上级文件.txt --json(字段见 references/localize.md 第四部分):
references/localize.md 第一部分)。references/localize.md 第三部分人工比对,说明写“未运行重合检测,已人工逐段比对”。references/deadline-burden.md 第二部分。python scripts/gongwen_lint.py 正文.txt --doc-type 实施方案 --json。工作方案传“实施方案”,贯彻落实方案传“贯彻落实方案”,落实情况报告传“报告”,学习传达要点传“其他”。P0 必改,P1 逐条判断;【待补】报的 P2 保留。ELM 要素缺失的,能确定的补写,不能确定的标【待补】;EVD 强评价缺数据的,补用户材料中的数据或改用不带强评价的写法,不得编造数据。无法运行时按 references/checklist.md 人工检查(读不到的按本文自检清单),起草说明写“未运行机检,已按人工清单检查”。references/_shared/style/baseline.md 中该文种的典型参数(非硬规则;用户指定篇幅时以用户为准)。references/_shared/style/output-format.md 第三部分建 公文/<YYYYMMDD>-<简短标题>/(第四步已建的沿用),写入 上级文件.txt、要点表.md、任务分解表.md(和 xlsx)、正文.txt(只含正文)。上级文件.txt 写入前删去联系人和手机号所在的行,多份写成 上级文件-甲.txt、上级文件-乙.txt;一次出几份的,写成 正文-实施方案.txt、正文-落实情况报告.txt 等。对话中报文件位置、一段话概述、重合率,再给【起草说明】和附表,不贴全文。【起草说明】、附表;开头直接交付正文,不加引导语。附表名称前加“附:”,按产品取用,顺序为任务分解表、对标对表核对表、上级要求差异表、时限倒排表、加码风险提示、重合检测结果、任务进展对账表、提法核对清单、本地措施来源、上级文件要点表;方案必附任务分解表、对标对表核对表、重合检测结果和要点表。references/_shared/style/output-format.md 第二部分:不超过 5 行,每行一句,待补、待核实各汇总一行并注明正文位置;教学模式的写作要点另列“附:写作要点”,附表不计入 5 行。references/_shared/style/output-format.md 第四部分),不抄上级文件原文。用户拿来照抄上级的初稿要改成本单位方案的,各模式都按以下顺序做(审稿模式用户说“帮我改一版”的,本次按高效模式出改后稿):
原稿.txt、上级文件存为 上级文件.txt,运行 python scripts/overlap_check.py 原稿.txt 上级文件.txt --json,作为第一次结果;不能运行的按 references/localize.md 第三部分人工比对。python scripts/fact_diff.py 原稿.txt 正文.txt,确认改动的数字、日期都对得上修改说明。两次结果写进“附:重合检测结果”,修改说明写清删了哪些照抄段落、换成了什么。references/structures.md 第三部分)。前两部分只取原文,关键表述引号照录,不自造新提法;第三部分来自用户,没有的按上级要求和常规写出可执行安排,须用户定的标【待补】。按审稿模式处理,不重写全文。问题清单列为:序号|级别|位置|原文|问题|依据|建议。格式、标点、提法的全面核稿可继续让我核稿。
已写好的方案(另附上级文件):
已写好的落实情况报告(另附任务分解表或进展材料):
references/_shared/style/output-format.md:纯文本公文体,不用 Markdown,正文中的提示只有【待补:说明】一种,不写【待核实】;数字按 references/_shared/rules/gbt15835.md。| 单位类型 | 任务拆到哪一级 | 程序提示 | 特别注意 |
|---|---|---|---|
| 党政机关 | 部门、处室 | 涉及其他部门职权的会签;部门对下级政府不提指令性要求(《条例》第十六条第(二)项) | 政府办印发的,牵头写到部门 |
| 基层(县乡、街道) | 站所、村(社区)、网格 | 重大事项经党委会议集体讨论 | 不向村(社区)转嫁责任,不要求签责任状、制度上墙(减负规定第16条) |
| 社区 | 网格、楼栋、志愿队伍 | 村级重大事项按“四议两公开” | 准入清单外的事项提示报批;面向居民的告知书交 gongwen-draft,装有 gongwen-grassroots 的交它 |
| 公立医院 | 职能科室、临床科室 | “三重一大”事项经党委会议研究 | 患者隐私;指标口径与上级考核一致 |
| 高校 | 职能部门、学院 | 党委常委会、校长办公会;涉及教职工切身利益的提交教代会,学术事项先经学术委员会 | 学院方案与学校方案逐条对应 |
| 中小学 | 处室、年级组、教研组 | 党组织会议、校长办公会议 | 不给教师摊派与教育教学无关的任务;进校园活动看白名单 |
| 国有企业 | 部门、子公司 | 党委前置研究后再由董事会或经理层决策 | 商业秘密;子公司任务写到法人单位 |
医院、学校、国企内部发文不直接受减负规定约束,加码提示依据写“参照”(references/deadline-burden.md 第二部分)。细则和示例任务行见 references/units.md;行业专用文书见“适用范围”表。
网页版、内网提示词版读不到下表文件的,按本文和附录执行,不向用户索要。
| 文件 | 何时读取 |
|---|---|
references/mapping.md | 第一、二步:要点表、任务分解表、核对表 |
references/localize.md | 第三、四步:照抄判断、本地化改写、读检测结果 |
references/deadline-burden.md | 第二、四步:时限倒排、加码检查 |
references/structures.md | 各类产出的结构;没有上级原文时 |
references/units.md、checklist.md、example.md | 单位类型的调整;人工自检;完整示例 |
Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.