Install any skill in seconds. Free to start, no credit card required.
Get Started Free →起草和改写法定公文:通知(会议、转发、印发、部署)、请示、就一件事的报告、函、通报、批复、意见、签报,以及决定、通告、公告;先定文种、查行文规则,再按文种结构成稿,事实只用用户给的。用户说写个请示、给财政局发个函、发个会议通知、把上级文件转发下去、写表彰通报、回个批复、科室要写签报、这事用请示还是报告时使用。纪要交 gongwen-minutes,全面工作报告交 gongwen-report,拆任务的实施方案交 gongwen-implement,整改交 gongwen-rectify,讲话交 gongwen-speech;装有行业包时,本行业专用文书交对应行业包。
SkillScore82/100
Test results 82
3/3 safety checks passed
68%82%of test cases passed +14 pts
Passed 18 of 22 test cases with the skill, and 15 of 22 without it.
4 fixed14 passed either way3 still failing1 broke
One test task街道办准备向辖区居民发布一份通告,规定凡乱堆乱放废弃物的居民,街道办将直接处以500元罚款并暂停发放社区福利补贴。请起草通告。
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-draft
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-draft")
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-draftThe 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-draft/SKILL.md https://app.decimal.ai/s/duyunzhoudyz-gongwen-draft/SKILL.md.claude/skills/duyunzhoudyz-gongwen-draft/SKILL.mdThis gets SKILL.md only. The skill's 11 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-draftimport 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-draft")
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-draft/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftfrom 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftimport 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftimport 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftfrom 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftfrom 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftimport 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-draft")
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-draft/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 11 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-draftfrom 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftfrom 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftimport 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftimport 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-draft")
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-draft/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftfrom 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-draft")
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-draft/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/duyunzhoudyz-gongwen-draft/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 11 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-draftNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/duyunzhoudyz-gongwen-draft/SKILL.md https://app.decimal.ai/s/duyunzhoudyz-gongwen-draft/SKILL.md.agents/skills/duyunzhoudyz-gongwen-draft/SKILL.mdThis gets SKILL.md only. The skill's 11 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 11 other files are not included.
Raw files: /s/duyunzhoudyz-gongwen-draft/SKILL.md · /s/duyunzhoudyz-gongwen-draft.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-draft/SKILL.mdcurl -fsSL https://app.decimal.ai/s/duyunzhoudyz-gongwen-draft.jsonThis gets SKILL.md only. The skill's 11 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.
帮机关、事业单位、国企的文字工作者起草和改写法定公文。做法固定:先定文种,再查行文规则,然后按文种结构成稿,最后复查和机检。文种和行文规则的判断都写明《党政机关公文处理工作条例》条款;文号、日期、金额、依据文件、批复意见只用用户给的,缺的标【待补】。
references/_shared/style/output-format.md 第四部分转交:给交接卡、“新开对话粘贴 dist/prompts/.md 继续”的说明和安装命令。references/_shared/guardrails.md 第一条):
python scripts/secret_check.py <文件> 检查保密标识(含页眉页脚),命中即停。.gongwen/单位画像.md 的先读取,没有再找 ~/.gongwen/单位画像.md,用户粘贴在对话开头的按粘贴内容;有 .gongwen/领导偏好卡.md、.gongwen/禁用词.md、.gongwen/文风参数.md 的一并读取。重点看可用文种、内部文种、发文机关标志、党政两套代字、决策程序。再读 references/_shared/profiles/units/ 下对应文件和 references/units.md。没有画像按 references/_shared/profiles/roles.md 第九节“无画像降级”处理。references/_shared/profiles/roles.md 第一节确定,本 skill 中的差异见“角色适配”。references/_shared/style/output-format.md 第四部分)。references/_shared/rules/jianfu.md JF-15);替用户决定批复同意与否、处理决定的轻重;起草党纪处分、政务处分决定。references/_shared/profiles/roles.md 第十节):有题目,并且至少有一项具体事实(时间、主体、做法、数据之一)的,任何模式都首轮直接出稿,缺的且无法从上下文确定的才标【待补】。只有四种情形停下,在回复开头一句话说明属于哪一种:①需要本人经历的材料缺本人事例;②只有题目、没有任何具体事实,出结构说明和补料清单;③用户明确要求先看提纲、要点或一页纸,交一页纸(文种及理由、主送、各部分要点、待补清单);④材料涉密,按第1条停止,提纲也不出。先定发文名义、写给谁、要办的事、文种、行文方向、篇幅(素材可支撑多少),只作内部判断,不原样输出;文种判断及条款、采用的默认值写成起草说明“假设”一行(教学模式可多讲一两句)。网页环境回复开头直接是正文,仅停在提纲时先一句话说明属于哪种情形(references/_shared/style/output-format.md 第三部分)。
假设:以某县文化和旅游局名义写给县自然资源局(不相隶属),您说请示,已按函写(第八条第(十四)项);约800字。
按四问定文种(细则见 references/decision.md):以谁的名义发;写给谁;要办什么事;本单位能用哪些文种。用“写给谁”“要办什么事”查下表,再用另外两问过滤:
| 写给谁\要办的事 | 请求批准 | 汇报、答复询问 | 部署 | 告知、表彰、批评 | 商洽、询问 | 答复来文 |
|---|---|---|---|---|---|---|
| 有隶属关系的上级 | 请示 | 报告 | 不适用 | 报告 | 请示 | 报告 |
| 下级 | 不适用 | 不适用 | 通知;重大事项用决定;一套政策措施用意见 | 通知;通报 | 函 | 批复(答复请示) |
| 不相隶属单位 | 函 | 函 | 不得部署 | 函 | 函 | 复函 |
| 本单位领导(内设部门报送) | 签报 | 签报 | 不适用 | 签报 | 签报 | 签报 |
| 社会公众 | 不适用 | 不适用 | 不适用 | 通告(有职权的机关);通知、温馨提示 | 不适用 | 不适用 |
易混的几组,一句话判断(依据均为《党政机关公文处理工作条例》):
提问:最多 3 个,放在回复末尾,不阻塞起草;按此顺序取舍:写给谁、与本单位什么关系 → 要办成什么(请求事项、批复意见、会议时间地点) → 金额、时间等核心事实。其余取默认值写进“所作假设”;缺的数据不靠追问补齐,必须由用户提供的要素在正文标【待补】(一篇一般不超过 3 处,更多时先交付再集中提问)。用户说“直接写”的不再提问。用户答复后,在已交付的稿子上修改。
用户指定的文种不当时:先指出并写明条款,再按正确文种起草,起草说明写明改动理由;用户坚持的,按用户要求写,保留提示(references/decision.md 第四部分)。
起草前查一遍,成稿后再查一遍。完整检查表和正误对照见 references/rules-check.md。
| 检查项 | 发现问题怎么办 | 依据 |
|---|---|---|
| 主送唯一(请示、上行意见) | 只留一个主送,其他上级列抄送 | 第十五条第(一)项 |
| 不越级 | 主送直接上级;确需越级的同时抄送被越过的机关 | 第十四条 |
| 不抄送下级、不送领导个人(上行文) | 删去下级;领导个人改为机关(签报主送一位领导职务,不在此列) | 第十五条第(一)(五)项 |
| 一文一事(请示、签报) | 拆成几份分别起草;用户不同意的在起草说明中提示 | 第十五条第(四)项 |
| 报告不夹带请示 | 请求事项抽出另写请示 | 第十五条第(四)项 |
| 转报下级请示有本机关意见 | 用户没给的标【待补:本机关倾向性意见】 | 第十五条第(三)项 |
| 部门不向下级党委政府发指令;需经政府同意的注明 | 提示改由办公厅(室)行文或改为商洽口吻;写“经某某人民政府同意” | 第十六条第(二)项 |
| 内设机构不对外正式行文 | 改以本单位或办公室名义 | 第十七条第三款 |
| 涉及其他部门职权 | 起草说明写“附:需会签部门”,用户列出的部门全部列入 | 第十六条第(四)项、第十九条第(六)项 |
| 签报一签一事、只报一位领导 | 拆分;多位领导改为一位,由办公室流转 | 本单位签报制度 |
通用规则:
正文从标题写起:标题、主送、正文、附件说明、署名、成文日期,需要时加附注(联系人);通知的联系人写在正文末段、落款之前。请示、报告在标题前另起两行写“发文字号:”“签发人:”(未知写【待补】);份号、发文机关标志属于版头,不写进正文。
以下内容只用用户给的,缺的必要要素标【待补:说明】,说法不一的正文采用材料中最可靠的写法、起草说明“待核实”一行说明:文号、金额、数量、依据文件名称和文号、来文标题、会议决定、表彰决定、处理决定、联系人;成文日期未给的默认写当天日期(起草说明提示按实际印发日期调整),发文机关、主送机关能从材料和用户身份确定的直接写,确定不了的标【待补:发文机关】,不省略。程序承诺(“研究前不实施”)、请求事项、前置条件、时限同样只写用户给的。任务措施属工作性表述,按上级要求和文种常规写出,责任主体只用材料已有的单位,不夹带新数字、项目名,时间节点、负责人等须用户定的才标【待补】;工作方案、实施方案的阶段起止日期,材料给了的照用,材料没有的标【待补:阶段日期】,不自拟任何日期节点。用户说的“周五”“下周一”等相对日期按今天推算为具体日期(references/_shared/guardrails.md 第二条第7款)。
三类判断由用户定,工具不替用户拿主意:批复同意与否、请示的本单位倾向、通报的处理决定。用户没给的,正文标【待补】,在回复末尾问一次;用户说“直接写”的只标不问。其余照常起草。
开门见山:通知、请示、函、批复、通报等第一段写目的、依据或事项,不写形势背景和重要意义(JF-02);其他文种按惯例可写不超过一段的简短背景。
措辞按方向:下行用“要”“应当”“于×月×日前”,不用商量口吻;上行的打算用“拟”,请求用“恳请”;平行用“商请”“请予支持”,不用“务必”(references/_shared/style/defensive.md 第五、七部分)。
篇幅:除部署综合性工作外,一般不超过5000字;部署专项工作或具体任务的一般不超过4000字(减负规定第2条);医院、学校、国企内部发文超限只作提示。细则中的字数只是上限,事实少的写短。用户指定字数的,按 references/_shared/guardrails.md 第四条第2款处理。用户未指定字数时,按文种的典型篇幅写,不一律写到上限;各文种典型篇幅见下表(素材不足写短,素材充足且用户要求写足的可接近上限):
| 文种 | 典型篇幅 | 说明 |
|---|---|---|
| 通知(部署) | 800~2000字 | 事项多、涉及单位多时可到上限 |
| 通知(会议) | 500~1000字 | 五项要素齐全即可,不长篇 |
| 通知(转发、印发) | 300~800字 | 转发语加本级要求,不复述原文 |
| 请示 | 800~1500字 | 一文一事,缘由充分但不展开论证 |
| 报告 | 1500~3000字 | 情况复杂或答复多项时可到上限 |
| 函 | 500~1500字 | 商请事项写清,不铺陈 |
| 通报 | 800~1500字 | 事实+评价+决定+要求,事实部分最长 |
| 批复 | 300~800字 | 引叙+表态+要求,简短为主 |
| 意见 | 2000~4000字 | 任务分条展开,篇幅相对长 |
| 签报 | 500~1000字 | 内部文书,一签一事 |
| 决定 | 1000~3000字 | 重大事项,决定事项可分条 |
| 通告 | 500~1500字 | 范围、行为、罚则依据、施行日期 |
| 公告 | 300~800字 | 事项简明 |
默认不写:报送贯彻落实情况、制定配套文件、纳入考核、一票否决、签订责任状、上传照片留痕(JF-05~JF-08、JF-12)。用户坚持的照写,起草说明提示。
政治性提法只用用户提供原文中的表述,没有的用通用稳定的表述,起草说明“待核实”一行请用户对照最新原文。用户材料中加引号的做法名称、本单位提法原样照写,不换近义词;确需改写的,列入提法核对清单请用户确认(references/_shared/guardrails.md 第二条第8款)。
下行文主送机关:材料列明的收文单位全部写入,可用“各××、××”概括,不遗漏;成稿后逐项核对。
按文种查下表,动笔前读对应细则:
| 文种 | 标题 | 骨架 | 结语 | 必查 | 细则 |
|---|---|---|---|---|---|
| 通知(部署) | 某某关于做好……工作的通知 | 目的依据 → 事项(谁、做什么、何时) → 要求 | 特此通知。(可省) | 任务有主体和时限;主送不漏收文单位 | references/doc-types/tongzhi.md |
| 通知(会议) | 某某关于召开……会议的通知 | 名称、时间、地点、参会人员、内容、回执、要求、联系人 | 无 | 前五项必备 | 同上第三部分 |
| 通知(转发、印发) | 见下文 | 转发语或印发语 → 本级要求(用户给的) | 无 | 不复述原文 | 同上第四、五部分 |
| 请示 | 某某关于……的请示 | 缘由 → 事项 → 本单位意见 | 妥否,请批示。 | 一文一事;主送唯一;打算用“拟”;附注联系人 | references/doc-types/qingshi.md |
| 报告 | 某某关于……情况的报告 | 情况 → 处置 → 原因 → 下一步;答复报告逐项答 | 特此报告。 | 不夹带请示;原因只写已查明的 | references/doc-types/baogao.md |
| 函 | 某某关于商请……的函;……的复函 | 缘由 → 事项 → 希望;复函先给结论 | 请予支持。特此函复。 | 对象不相隶属;语气平和 | references/doc-types/han.md |
| 通报 | 某某关于表彰……的通报 | 事实 → 评价 → 决定 → 要求 | 特此通报。 | 决定来自用户;评价与事实相称 | references/doc-types/tongbao.md |
| 批复 | 某某关于(同意)……的批复 | 引叙来文 → 表态 → 条件或理由 → 要求 | 此复。 | 表态来自用户且明确;逐项回应 | references/doc-types/pifu.md |
| 意见 | 某某关于……的意见 | 总体要求(从简) → 主要任务 → 保障 | 无 | 下行用“要”;篇幅 | references/doc-types/yijian.md |
| 签报 | 关于……的请示(内部文书,可省发文机关) | 缘由 → 事项 → 部门意见 → 会签情况 | 妥否,请批示。 | 一签一事;一位领导;稿首单列“签报”表头 | references/doc-types/qianbao.md |
| 决定 | 某某关于……的决定 | 缘由 → 决定事项 → 执行要求 | 无 | 权限;研究的会议和时间来自用户 | references/doc-types/jueding.md |
| 通告 | 某某关于……的通告 | 依据 → 范围、时间、对象、行为 → 罚则依据 → 施行日期 | 特此通告。 | 主体有职权;不自设处罚 | references/doc-types/tonggao.md |
| 公告 | 某某公告 | 事项 | 特此公告。 | 局部事项不用公告 | references/doc-types/gonggao.md |
| 决议、命令、公报、议案 | 只给结构说明和信息清单 | references/doc-types/p2.md |
三处容易写错的地方:
references/_shared/style/baseline.md 中该文种的典型参数(参照,不是硬规则;用户指定篇幅时以用户为准);机检加 --baseline 会对偏离基线的篇幅、一级标题数、“一是”组数、顿号密度给 P2 提示,只作参照。python scripts/gongwen_lint.py 正文.txt --doc-type 请示 --json,文书类型按实际文种填,签报填“签报”。P0 必改,P1 逐条判断,P2 酌情;命中白名单写法的保留(references/_shared/style/ai-tone.md 第二部分)。ELM 要素缺失的,能确定的补写,不能确定的标【待补】;EVD 强评价缺数据的,补用户材料中的数据或改用不带强评价的写法,不得编造数据。python scripts/draft_check.py 正文.txt --doc-type 请示 --json:查标题叠用、会议通知要素、批复表态、请示一文多事、函的语气、通告主体、停水停电等强制表述等本 skill 专项。references/checklist.md 逐项人工检查,在起草说明写“未运行机检,已按人工清单检查”。按 references/_shared/style/output-format.md 交付:
公文/<YYYYMMDD>-<简短标题>/,写入只含正文的 正文.txt。拆成几份的写 正文-报告.txt、正文-请示.txt;模式二另存 原稿.txt。同名文件已存在时加 -v2、-v3,不覆盖。对话中报文件位置和一句话概述,并给出起草说明,不写过程说明。【起草说明】,正文前不加引导语。路线还有下一站的,在起草说明之后输出更新后的交接卡,告诉用户新开对话,先粘贴下一站的提示词文件,再粘贴交接卡和本站产出。用户拿来已有稿子,要改文种、按行文规则调整或重搭结构时:
原稿.txt(网页环境略过),读到 【起草说明】 为止。python scripts/fact_diff.py 原稿.txt 正文.txt --json:两稿差异都要能对上修改说明;“改稿新增”中有用户本轮没给的数字,退回原稿写法。不能运行时人工核对数字、日期、文号、书名号内容。先读单位画像,再按 references/units.md 调整。要点:
| 单位类型 | 本 skill 的主要调整 |
|---|---|
| 党政机关 | 部门不向下级党委政府发指令;部门报重大事项须经本级同意;篇幅超限报 P1 |
| 基层 | 乡镇向县政府请示,向县直部门用函;面向群众的通知逐句查法律表述 |
| 社区 | 一般不用红头;对上报“申请”、情况报告;对居民用通知、温馨提示,不发通告 |
| 公立医院 | 科室向院领导用签报;医院与医保部门用函;“三重一大”写明院长办公会、党委会程序;患者信息脱敏 |
| 高校 | 校级与部门两级发文;学院向学校用校内请示报告单或签报,不直接向校外上级请示 |
| 中小学 | 向主管教育部门请示,不越过它找编制、财政部门;致家长的通知语言通俗 |
| 国有企业 | 本部部门向公司领导用签报;重大事项写明党委前置研究;董事会议案交 gongwen-soe 或只给结构 |
医院、高校、国企和机关的党委、行政两套发文,按事项归属定名义:党建、干部、纪检、意识形态用党委(党组)名义;业务、运营、医疗、教学科研用行政名义;属于各自职权的分别发文,不联合发文(第十七条第一款,细则见 references/units.md 第二部分)。
references/_shared/style/output-format.md:纯文本,不用 Markdown;层次序数依次为 一、(一)1.(1);数字按 references/_shared/rules/gbt15835.md,成文日期用阿拉伯数字、不编虚位。有 Python 环境时运行 python scripts/gongwen_lint.py 正文.txt --doc-type <文种> 和 python scripts/draft_check.py 正文.txt --doc-type <文种>;无法运行时按 references/checklist.md 人工检查。
没有文件系统(网页版、内网提示词版)时,读不到的文件按本文和附录执行,不向用户索要这些文件。网页提示词版的附录只收共享规则、文种速查卡和人工自检清单;文种决策、行文规则的要点已写进本文和速查卡。
| 文件 | 何时读取 |
|---|---|
references/quick-ref.md | 网页环境的文种速查卡;Agent 环境可代替细则快速查阅 |
references/decision.md | 第一步定文种;判断是否归本 skill |
references/rules-check.md | 第二步、第四步查行文规则;拆分和抽出请示 |
references/doc-types/ 下 12 个文件 | 第三步动笔前,读对应文种 |
references/units.md | 读完单位画像后;党政两套代字、两级发文、签报流转 |
references/checklist.md | 第四步无法运行机检时 |
references/_shared/guardrails.md | 开工前;与用户要求冲突时 |
references/_shared/style/output-format.md | 第五步交付;交接卡;转交和未安装兜底 |
references/_shared/style/ai-tone.md、references/_shared/style/defensive.md | 成稿措辞;处理机检结果 |
references/_shared/rules/tiaoli.md | 写条款依据;行文规则原文要点 |
references/_shared/rules/doc-types.md | 文种通用要点、决策表、易混辨析 |
references/_shared/rules/gbt9704.md、references/_shared/rules/gbt15834.md、references/_shared/rules/gbt15835.md | 格式要素、标点、数字 |
references/_shared/rules/jianfu.md | 定篇幅;部署性文件的减负要求 |
references/_shared/profiles/roles.md、references/_shared/profiles/units/ | 定角色模式;无画像降级;首轮交付;单位类型细节 |
scripts/gongwen_lint.py、scripts/draft_check.py、scripts/fact_diff.py | 第四步机检;模式二核对事实 |
Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.