Install any skill in seconds. Free to start, no credit card required.
Get Started Free →起草和改写信息宣传稿件,包括政务信息(含紧急信息)、工作简报、新闻稿、新闻发布会发布词和答问口径、官方公众号推文,从长材料提炼经验做法信息,评估信息和新闻稿能不能报、能不能被采用。先建素材台账、选准角度,开头即结论,数据和原话只用用户材料,对外稿核对授权和敏感信息。用户说写信息、报个政务信息、编一期简报、写篇新闻稿、写发布词、发公众号、把材料压成800字信息、这篇信息能不能被采用时使用。长篇经验材料交 gongwen-report,只压缩不换文体交 gongwen-polish,逐字核稿交 gongwen-review;装有行业包时,本行业专用文书交对应行业包。
SkillScore90/100
Test results 90
3/3 safety checks passed
48%90%of test cases passed +43 pts
Passed 19 of 21 test cases with the skill, and 10 of 21 without it.
9 fixed10 passed either way2 still failing0 broke1 errored
One test task今天是2023年10月16日(周一)。材料记录:‘上周五下午,区应急管理局对辖区3家危化品仓库开展双随机抽查,发现隐患6处并当场下发整改通知书’。请起草报区委办的信息,注意规范日期处理。
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-brief
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-brief")
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-briefThe 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-brief/SKILL.md https://app.decimal.ai/s/duyunzhoudyz-gongwen-brief/SKILL.md.claude/skills/duyunzhoudyz-gongwen-brief/SKILL.mdThis gets SKILL.md only. The skill's 12 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-briefimport 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-brief")
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-brief/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-brieffrom 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-briefimport 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-briefimport 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-brieffrom 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-brieffrom 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-briefimport 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-brief")
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-brief/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 12 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-brieffrom 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-brieffrom 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-briefimport 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-briefimport 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-brief")
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-brief/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-brieffrom 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-brief")
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-brief/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-brief/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 12 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-briefNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/duyunzhoudyz-gongwen-brief/SKILL.md https://app.decimal.ai/s/duyunzhoudyz-gongwen-brief/SKILL.md.agents/skills/duyunzhoudyz-gongwen-brief/SKILL.mdThis gets SKILL.md only. The skill's 12 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 12 other files are not included.
Raw files: /s/duyunzhoudyz-gongwen-brief/SKILL.md · /s/duyunzhoudyz-gongwen-brief.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-brief/SKILL.mdcurl -fsSL https://app.decimal.ai/s/duyunzhoudyz-gongwen-brief.jsonThis gets SKILL.md only. The skill's 12 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.
帮信息员、宣传干事、兼职写稿人写政务信息、简报、新闻稿、发布词和官方公众号推文。先建台账,按“新、特、实”选一个角度,标题点睛、开头即结论;数据和原话只用用户给的,不编数据和引语;对外稿逐项核对授权和敏感信息。是否报送、发布由用户所在单位决定。
| 用户要的 | 转给 |
|---|---|
| 1500 字以上的经验材料和书面经验交流材料,工作总结、汇报材料,宣传活动方案 | gongwen-report |
| 只缩短篇幅、文体不变(如把报告从 8000 字压到 3000 字) | gongwen-polish |
| 通知、通报,就一件事向上级报告的报告(含突发事件情况报告) | gongwen-draft |
| 会议纪要、会议记录 | gongwen-minutes |
| 领导讲话稿、致辞、主持词,会上口头交流发言 | gongwen-speech |
装有行业包 gongwen-grassroots 时:乡镇(街道)、村(社区)报上级党委、政府信息部门的政务信息。没装的由本 skill 照写;这类单位的紧急信息、简报、新闻稿、推文和县(区)直部门本部门的信息,仍由本 skill 写(references/units.md 第三部分) | gongwen-grassroots |
| 只要标题方案,不动正文 | gongwen-title |
| 已有稿子只改 AI 腔 | gongwen-humanize |
| 逐字核稿:标点、格式、提法按八关审 | gongwen-review |
| 排成 Word | gongwen-format |
| 报表合并、算同比环比 | gongwen-data |
| 说不清要写什么 | gongwen |
能调用其他 skill 的环境直接调用;目标 skill 未安装或在网页环境的,按 references/_shared/style/output-format.md 第四部分转交,同时给交接卡、“新开对话粘贴 dist/prompts/<skill 名>.md 继续”的说明和安装命令。gongwen-grassroots 没装时不转交,本 skill 照写。用户同意的,可先建好素材台账随交接卡带过去;交接卡不抄录原始材料和敏感信息。回复和起草说明中不写 skill 名,用描述性说法。
references/_shared/guardrails.md 第一条):
python scripts/secret_check.py <文件> 查保密标识(含页眉页脚),命中即停。.gongwen/单位画像.md,没有再找 ~/.gongwen/单位画像.md,用户贴在对话开头的按粘贴内容;有 .gongwen/禁用词.md、领导偏好卡.md、文风参数.md 的一并读。再按单位类型读 references/_shared/profiles/units/ 下对应文件和 references/units.md 对应小节。没有画像时按 references/_shared/profiles/roles.md 第九节推断和取默认值。references/_shared/profiles/roles.md 第一节定,对外稿一律叠加严谨模式,差异见“角色适配”。references/_shared/guardrails.md 第二条、第六条),以下要求说明原因、不照做,其余照常:
references/_shared/style/output-format.md 第四部分)。| 类型 | 写给谁 | 默认结构 | 默认篇幅(工具约定) | 特别注意 | 详细写法 |
|---|---|---|---|---|---|
| 政务信息 | 上级办公室、信息部门 | 标题;导语即结论;做法或进展 2~3 条;成效 | 500~800 字 | 一稿一个点,不写成总结;问题建议类写问题、范围、原因、建议 | references/types/xinxi.md |
| 紧急信息 | 上级值班、应急部门 | 时间地点、事件、伤亡损失、已采取措施 | 越短越好 | 只写已核实的;不推测原因;时限按应急预案 | references/types/xinxi.md 第六部分 |
| 工作简报 | 报上级、送平级、发下级 | 报头;各篇(标题加正文);报尾 | 每篇 500~800 字,每期不超过 3000 字 | 期号连续;各篇数据口径分开 | references/types/jianbao.md |
| 新闻稿 | 公众、媒体 | 标题;导语;主体按重要性递减;背景 | 500~1000 字 | 六要素齐全;不写内部问题 | references/types/xinwengao.md |
| 发布词 | 媒体、公众 | 开场说发布什么;事实和数据按重要性排;结束语 | 约 200 字/分钟 | 政策只转述原文;答问口径不代拟 | references/types/xinwengao.md 第十一部分 |
| 公众号推文 | 公众、服务对象 | 标题;第一屏;短段正文;结尾 | 800~1500 字 | 通俗,不写成自媒体腔;配图授权 | references/types/gongzhonghao.md |
| 经验做法信息 | 同政务信息 | 同经验类信息 | 500~800 字 | 从长材料挑一个点,只删不改,数字不变 | references/condense.md |
用户、画像或上级信息部门指定了字数、时长的,按指定,以±10%为目标,素材撑不起时按第五步第9条处理;“不超过/以内N字”是上限,素材只够写短的不算差距,不触发第五步第9条,一句话写明;没有指定的按速查表,素材少可写短。
先填任务卡,与稿件同轮交付,不等确认(高效模式不单独展示,只写进起草说明):
任务卡
稿件类型:政务信息(经验类)
写给谁:区委办信息科
发布渠道:内部报送
篇幅:600 字以内
事件时间:10月12日
单位画像:党政机关(区城管局,无画像,按用户所述)
角色模式:转译模式
references/_shared/profiles/roles.md 第十节:有题目且至少有一项具体事实(时间、主体、做法、数据之一)的,首轮就成稿。只有四种情形停下,并在开头说明属于哪种:缺本人事例;素材为零或只有题目;用户明确要求先看提纲或角度;材料涉密(提纲也不出)。把材料拆成一条一条,整理成 素材台账.md,格式和规则见 references/ledger.md:
| 序号 | 类别 | 内容 | 来源 | 状态 |
|---|---|---|---|---|
| 1 | 数据 | 7—9月12个试点小区分类准确率由62%提高到85% | 《垃圾分类工作总结》第二部分 | 已确认 |
references/types/xinxi.md 第二部分)。references/condense.md 五步法挑点、删减。references/ledger.md 第四部分)。references/_shared/rules/data-expression.md)。用户说“上周五”等相对日期的,已知当天日期的推算为具体日期;“月底”等期限原样保留。references/ledger.md 第三部分)。用户材料中加引号的做法名称、本单位提法原样写。references/_shared/style/ai-tone.md 第三部分“信息(简报)”、references/_shared/style/defensive.md)。references/_shared/guardrails.md 第四条第2款:素材不足时用工作性表述补足做法、意义等常规部分(回顾性文书不补下一步),不新增数字、事例、原话等事实,起草说明一句话说明哪几部分是常规表述,可附不超过 3 条补料建议(前后对比数据、具体事例、原话等);必须由用户提供的缺项写【待补:该补什么】,不注水,【待补】不计入字数。超了按“铺垫、复述、空泛表态、重复举例”的顺序删。references/types/ 下文件的,按 references/type-cards.md 写。紧急信息只写已核实的,材料写明正在调查的才写“原因正在调查”,没写的不写原因和责任认定。按 references/external-check.md 第二部分 11 项逐项核对,结果写成起草说明之后的“附:对外发布核对清单”;有配图的另附图片清单,正文不留配图占位。起草说明“保密提示”一行写明“本稿须按本单位规定履行审核程序后发布”。
python scripts/fact_diff.py 素材台账.md 正文.txt --ledger,“正文中有、台账中没有”的逐条补出处或删去。python scripts/brief_check.py 正文.txt --type 信息 --source <材料文件>。--type 取信息、简报、新闻稿、公众号、紧急信息、社区信息;对外的信息、简报加 --external,医院稿加 --unit 公立医院,另定篇幅的加 --min、--max,只说“不超过N字”的只加 --max;口述材料先存成文本再传 --source。P0 必改,P1 逐条改,P2 判断后处理。BRF-003(引语、说话人、荣誉称号)逐条对照材料,核对无误的保留并注明出处;BRF-008 报 P2 的“根治欠薪”一类工作提法,确属材料原文的保留。python scripts/gongwen_lint.py 正文.txt --doc-type 信息。--doc-type 用信息、简报、新闻稿、公众号推文。命中公文白名单写法的保留;【待补】每处报 P2,保留并汇总进起草说明。ELM 要素缺失的,能确定的补写,不能确定的标【待补】;EVD 强评价缺数据的,补用户材料中的数据或改用不带强评价的写法,不得编造数据。references/checklist.md 第一部分人工检查,起草说明写“未运行机检,已按人工清单检查”。按 references/_shared/style/output-format.md 交付。
公文/<YYYYMMDD>-<简短标题>/ 下的 正文.txt、素材台账.md;多版输出时正文命名为 正文-信息.txt、正文-新闻稿.txt、正文-推文.txt;同名文件加 -v2、-v3,不覆盖。对话中给出文件位置、一段概述和起草说明。【起草说明】,素材台账放在起草说明最后(“附:素材台账”)。正文前只放停下的情形说明,不加引导语;提问放回复末尾。还有下一站的,起草说明之后输出更新后的交接卡,“已确认”只写模式、体裁、篇幅等任务信息,标题、数据、待核实事项随正文和起草说明带走(误:写入标题和“10月起扩大到农贸市场”;正:按经验类写;不超过600字)。同一件事既报信息又发新闻稿和推文时,台账只建一份,各版从中取材:
| 版本 | 读者 | 写法差异 |
|---|---|---|
| 政务信息 | 上级 | 公文语言,做法分条,可以写问题和建议 |
| 新闻稿 | 公众、媒体 | 倒金字塔,六要素,只写可以公开的事实 |
| 公众号推文 | 公众、服务对象 | 第一屏写清和读者的关系,通俗,短段,配图 |
同一数据各版数值和口径一致;只能内部报送的内容(问题、内部数据、未定事项)只进信息版;新闻稿和推文都做第六步核对;起草说明一份,各版差异并入对应行。
用户拿来写好的信息、新闻稿、推文,问“能不能报”“能不能被采用”“帮我看看”的,不重写全文,按 references/checklist.md 第二部分输出一页纸,关键句改法最多 3 处,改法中的事实只来自原稿。有 Python 环境时先把稿件存成文本,运行 scripts/brief_check.py(有原始材料的加 --source)和 scripts/gongwen_lint.py,结果并入问题清单。要逐字核标点、格式、提法的,建议用户另行核稿;用户说“那你改一版”的,按高效模式出改后稿,用 scripts/fact_diff.py 比对原稿,确认无新增事实。
references/_shared/style/output-format.md:纯文本,不用 Markdown 和 emoji;数字用法按 references/_shared/rules/gbt15835.md;只允许【待补:说明】一种提示,限必须由用户提供的要素,全篇一般不超过 3 处,其余缺项进起草说明“待补”一行;配图位置不在正文标注。机检命令见第七步;无法运行时按 references/checklist.md 第一部分人工检查。
| 单位类型 | 本 skill 的调整(详见 references/units.md) |
|---|---|
| 党政机关 | 选题贴上级关注点(依据来自用户);领导活动稿的姓名、职务、排序由用户确认 |
| 基层 | 政务信息的转交见适用范围表;紧急信息、简报、新闻稿、推文由本 skill 写;拍照留痕不算成效;同一事项不重复报送 |
| 社区 | 信息稿一般 300~500 字(工具约定),话平实;居民姓名和照片须本人同意;不写超出职权的承诺 |
| 公立医院 | 不写疗效保证;“首例”写明范围并有依据;患者隐私 |
| 高校 | 学院供稿按新闻中心要求;学生信息不对外;科研成果表述照材料 |
| 中小学 | 不宣传升学率和“状元”;学生照片须监护人同意 |
| 国有企业 | 未公开经营数据、未披露重大信息不进对外稿;不写无依据的“行业第一” |
没有文件系统(网页版、内网提示词版)时,读不到的文件按本文和附录执行,不向用户索要。各步骤已注明何时读哪份文件,另有:
| 文件 | 何时读取 |
|---|---|
references/types/jianbao.md、references/types/xinwengao.md、references/types/gongzhonghao.md | 编简报;写新闻稿、发布词;写推文 |
references/units.md | 读完单位画像后,查本 skill 在该单位类型下的调整 |
references/_shared/rules/jianfu.md | 篇幅、重复报送、拍照留痕 |
references/_shared/rules/doc-types.md | 判断是否属于本 skill;信息的文种要点(4.10) |
references/_shared/profiles/calendar.md | 用户问“最近有什么宣传节点”时 |
Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.