Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Provides guidelines to standardize agent behaviors, avoid common mistakes, and prevent unnecessary actions during task execution.
SkillScore95/100
Test results 95
3/3 safety checks passed
77%95%of test cases passed +18 pts
Passed 21 of 22 test cases with the skill, and 17 of 22 without it.
4 fixed17 passed either way1 still failing0 broke
One test taskI need to scan the codebase for leftover debugging flags. Specifically, I want to find occurrences of 'DEBUG_MODE', 'LOG_VERBOSE', and 'TRACE_ENABLED'. How should the search tool calls be structured?
Adds every file the skill has, pinned so you can update it. No account needed.
pip install "decimalai>=0.15"
decimalai skills add bluelovers-agent-behavior-standardization-guide
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("bluelovers-agent-behavior-standardization-guide")
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 bluelovers-agent-behavior-standardization-guideThe 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/bluelovers-agent-behavior-standardization-guide/SKILL.md https://app.decimal.ai/s/bluelovers-agent-behavior-standardization-guide/SKILL.md.claude/skills/bluelovers-agent-behavior-standardization-guide/SKILL.mdThis gets SKILL.md only. The skill's 1 other file is 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 bluelovers-agent-behavior-standardization-guideimport 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdimport asyncio
from pathlib import Path
from claude_agent_sdk import ClaudeAgentOptions, query
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guidefrom 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from agents import Agent, Runner
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guideimport 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from openai import OpenAI
client = OpenAI()
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guideimport 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
import anthropic
client = anthropic.Anthropic()
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guidefrom 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from google import genai
from google.genai import types
client = genai.Client()
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guidefrom 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from langchain.agents import create_agent
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guideimport 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guidefrom 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from google.adk.agents import LlmAgent
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guidefrom 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from pydantic_ai import Agent
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is not included.
Deep Agents' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" deepagents
decimalai skills add bluelovers-agent-behavior-standardization-guideimport 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from deepagents import create_deep_agent
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is not included.
Its own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" agent-framework
decimalai skills add bluelovers-agent-behavior-standardization-guideimport 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdimport asyncio
from pathlib import Path
from agent_framework import Agent
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is not included.
Strands' own skill loader reads the installed folder. No DecimalAI account needed.
pip install "decimalai>=0.16" strands-agents
decimalai skills add bluelovers-agent-behavior-standardization-guidefrom 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("bluelovers-agent-behavior-standardization-guide")
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/bluelovers-agent-behavior-standardization-guide/SKILL.mdfrom pathlib import Path
from strands import Agent
skill = Path(".agents/skills/bluelovers-agent-behavior-standardization-guide/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 1 other file is 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 bluelovers-agent-behavior-standardization-guideNo Python or account. Cursor, Copilot, Cline and Warp read this folder by themselves.
curl -fsSL --create-dirs -o .agents/skills/bluelovers-agent-behavior-standardization-guide/SKILL.md https://app.decimal.ai/s/bluelovers-agent-behavior-standardization-guide/SKILL.md.agents/skills/bluelovers-agent-behavior-standardization-guide/SKILL.mdThis gets SKILL.md only. The skill's 1 other file is not included.
Give its text to your model as instructions. No account or package needed.
This gets SKILL.md only. The skill's 1 other file is not included.
Raw files: /s/bluelovers-agent-behavior-standardization-guide/SKILL.md · /s/bluelovers-agent-behavior-standardization-guide.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/bluelovers-agent-behavior-standardization-guide/SKILL.mdcurl -fsSL https://app.decimal.ai/s/bluelovers-agent-behavior-standardization-guide.jsonThis gets SKILL.md only. The skill's 1 other file is 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.
本技能旨在建立 Agent 在執行任務時的標準化行為準則,避免各 Agent 犯下常見錯誤或進行不必要的行為,提升任務執行效率與成功率。
Agent 在讀寫檔案或目錄時,應優先使用具備的技能或內建環境工具,而不是自行構建 CLI 指令。(註:不同 Agent 環境下的工具名稱可能有所不同,請依據當下環境實際提供的對應工具進行操作)。
原因 / Reason: 自行構建指令容易出現各種狀況,例如:
大多數的寫入檔案工具都具有自動建立路徑的設計,不需要手動提前建立路徑(例如避免預先執行建立資料夾的指令)。
編輯檔案時,不應為了確認狀態而預先讀取整個檔案,以減少非必要的讀取行為。絕對不應該假設檔案沒有被更改過而直接覆蓋。 應先依既有上下文執行最小範圍編輯;只有工具因檔案內容與預期不符而失敗時,才重新讀取檔案並確認實際內容。
如果確認後發現檔案內容與先前記憶不符,不要立即強制覆蓋或復原,應分析以下情況:
請勿無差別地強制覆蓋檔案內容來復原狀態,以免刪除其他人的有效修改或造成資料遺失。
對於非英文的環境或專案,請特別留意編碼問題。特別是在 CJK(中日韓語系)環境下,不論是檔案讀寫或終端機的輸入、輸出,還是顯示的錯誤訊息,都非常容易遭遇編碼衝突(例如 UTF-8 與 Big5 之間的轉換錯誤)。當終端機顯示亂碼時,應優先考慮是否為編碼問題所致,而非盲目猜測指令邏輯錯誤或指令存在。在處理這類環境的檔案或指令時,請確保使用正確的編碼格式,以免造成資料損壞或無法正確解析。
所有邏輯設計與文件撰寫,都應基於「單一事實來源 (Single Source of Truth)」的概念,避免各自維護相同內容。
原因 / Reason:
涉及具體的代碼重構、設計模式、單元職責劃分與 TypeScript 專屬型別抽象時,請參閱對應的專屬重構技能:
使用 grep、glob 等搜尋工具時,應在每次指令內同時搜尋相關內容,而非多次執行指令分別搜尋。
原因:
// ❌ 錯誤:多次獨立搜尋
grep({ pattern: "TODO" })
grep({ pattern: "FIXME" }) // 第二次搜尋
grep({ pattern: "HACK" }) // 第三次搜尋
// ✅ 正確:一次搜尋所有相關內容
/**
* 一次搜尋所有待辦 / 問題標記
* Search all TODO/FIXME/HACK markers in one call
*/
grep({ pattern: "TODO|FIXME|HACK" })
// ✅ 正確:結合搜尋主題與過濾條件
/**
* 搜尋特定主題,同時過濾檔案類型
* Search specific topic with file type filter
*/
grep({ pattern: "function|class|interface", include: "*.ts" })
// ❌ 錯誤:多次獨立搜尋
glob({ pattern: "src/**/*.ts" })
glob({ pattern: "test/**/*.ts" }) // 第二次搜尋
glob({ pattern: "lib/**/*.ts" }) // 第三次搜尋
// ✅ 正確:一次搜尋多個目錄與副檔名
/**
* 一次搜尋多個目錄下的 TypeScript 檔案
* Search TypeScript files across multiple directories in one call
*/
glob({ pattern: "{src,test,lib}/**/*.{ts,tsx}" })
// ✅ 正確:搭配排除模式
/**
* 搜尋所有 TypeScript 檔案,排除測試檔案
* Search all TypeScript files, excluding test files
*/
glob({ pattern: "src/**/*.ts", path: "D:/project/src" })
| 情境 | 錯誤做法 | 正確做法 |
|---|---|---|
| 多個關鍵字搜尋 | 多次 grep 呼叫 | 使用 ` |
| 多個目錄搜尋 | 多次 glob 呼叫 | 使用大括號擴展:glob({ pattern: "{dir1,dir2}/**/*.ts" }) |
| 關聯檔案搜尋 | 分別搜尋各類型 | 批次縮小範圍:glob({ pattern: "**/*.{ts,tsx,json}" }) |
當工具呼叫失敗時,必須嚴謹檢查工具參數、工作區根目錄(root/workspace root)與相對路徑的關係,不可僅依據失敗結果直接推論檔案不存在、路徑不存在、操作無法完成,或宣稱任務已完成。
在已知工作區根目錄的情況下,工具呼叫應優先使用工作區相對路徑,而不是自行將工作區根目錄與相對路徑組合成完整路徑。
例如目前工作區為:
path/root
目標檔案為:
src/index.ts
優先做法:
edit({ path: "src/index.ts", ... })
而不是自行組合:
path/root/src/index.ts
尤其不得在根目錄資訊已由工具或工作環境提供的情況下,再自行重複加入根目錄。
假設實際工作區為:
path/root
但 Agent 錯誤地將工具參數組合為:
path/bad-root/src/index.ts
此時工具回報找不到檔案,不能據此認定 src/index.ts 不存在。
應先檢查:
path/bad-root 是否為 Agent 自行錯誤組合出的路徑。src/index.ts 再次呼叫工具。禁止以下錯誤推理:
錯誤路徑 → 工具回報找不到 → 因此檔案不存在
正確流程應為:
工具失敗
↓
檢查工具參數
↓
確認 root / workspace root
↓
確認相對路徑與完整路徑的語意
↓
修正錯誤參數
↓
重新執行工具
↓
根據修正後的實際結果判定狀態
工具呼叫本身失敗時,不得把「工具參數錯誤」誤報為「目標不存在」,也不得在未成功驗證的情況下宣稱「已完成」。
遇到路徑相關工具錯誤時,應依以下優先順序處理:
src/index.ts。如果某個完整路徑已被確認為工具參數錯誤,例如:
path/bad-root/src/index.ts
不得在沒有新證據的情況下持續使用該路徑,也不得根據該路徑的失敗結果反覆做出相同結論。
應回到:
workspace root
+
relative path
重新驗證,並優先嘗試:
src/index.ts
Agent 的最終報告必須建立在成功驗證的工具結果上。
| 情況 | 不正確做法 | 正確做法 |
|---|---|---|
| 錯誤 root 導致找不到檔案 | 直接判定檔案不存在 | 修正 root 或改用相對路徑後重新驗證 |
| 工具參數組合錯誤 | 持續使用錯誤完整路徑 | 回到工作區相對路徑 |
| 工具呼叫失敗 | 宣稱修改已完成 | 先修正參數並確認成功 |
| 尚未驗證檔案狀態 | 假設檔案不存在 | 明確區分「尚未驗證」與「不存在」 |
| 失敗結果來自錯誤路徑 | 將失敗結果視為檔案系統事實 | 僅視為該次工具呼叫的結果 |
核心原則:工具錯誤不是檔案不存在的證據;錯誤參數造成的失敗,更不能被轉換成虛假的任務狀態。
目的:標準化 Agent 在「重構 / 結構分析 / 註解」等以原始檔案為事實來源的工作中的思考方式,避免將純程式任務擴張成「倉庫狀態與測試行為調查」。
git diff 只能說明 working tree 與 HEAD 的差異;git log 回答「這段 code 如何演變而來」。git log,也無法從結果中得出任何有意義的訊息:log 列出的提交紀錄不能表示其內容與被指定的檔案有任何關聯。因此 git log 既無助於判斷重複事實,也無法佐證「為什麼兩份 code 不同」。| 動作 | 判定 | 說明 |
|---|---|---|
| 閱讀指定 source code | 必要 | 只讀完成指定修改所需的內容 |
| 預先探索無關檔案、目錄、依賴或 API | 不應該 | 既有代碼就是使用指南;實際遇錯或必要資訊不足時才做最小查詢 |
| 跳轉追查外部函式或依賴內部實作 | 嚴禁 | 依賴黑盒原則(Call-depth = 0);型別簽章即為最高合約 |
| 比較兩個 implementation | 必要 | 找出重複事實 |
| 設計 shared abstraction | 必要 | 抽離共同 domain fact |
| 保留 intentional divergence | 必要 | 在 caller / 配置層保留刻意差異 |
git diff | 非必要 | 只描述 working tree 與 HEAD 差異 |
git log | 非必要 | 回答「如何演變」,不改變當下 SSoT 重複的事實 |
| 為猜 user 意圖而查 Git | 不應該 | 自行擴張問題定義 |
| refactor 前先查 tests | 通常非必要 | 除非使用者明確要求「確保測試通過」 |
| refactor 後跑 test 驗證 | 合理 | 整體成果驗證 |
Shared 80% → 單一來源;Different 20% → 各自保留)。1. 閱讀指定檔案
2. 識別重複概念(型別 / 計算流程 / helper / 執行流)
3. 對每個重複部分,判斷是否代表相同 domain fact
4. 抽出共用事實為單一實作
5. 在 caller / 配置層保留刻意差異
6. 更新兩檔使用共用實作,且依賴方向不產生循環依賴
7. 僅在重構完成後、若有驗證需求,才執行相關 test / build
注意最後才是 test,而非「先查 test → 因為 test 可能告訴我能不能 refactor」。
本節定義思考與範圍紀律(WHY / HOW);具體禁止事項(WHAT)收錄於 agent-operation-restrictions 的「避免非必要行為」「禁止濫用或頻繁執行測試」等規則。兩者互補:行為準則解釋「為什麼」,操作限制列出「禁止什麼」。
參照:agent-operation-restrictions 細化參照(非必要查詢行為的負面案例、執行路徑 / 依賴 / 框架 API / 測試設定與 snapshot 等,以及「行為時機」章節):avoid-unnecessary-queries.md
實作 SSoT 抽離與重構時,除了遵循本節的範圍紀律外,應進一步參考專門的重構技能,以確保重構的安全、可回溯與類型安全:
skills/code-refactoring-expert:通用安全重構指引(設計模式、回溯相容、增量變更)。skills/code-refactoring-expert-typescript:TypeScript / Node.js 專屬重構與設計指引(型別安全、精確型別、Single Source of Truth、非同步流程優化)。備註:上述兩個重構技能提供「如何正確重構」的具體方法;本節(第 8 節)則負責約束「重構時不該做的多餘探索」,兩者相輔相成。
目的:為第 8 節的探索紀律補上終止條件(stopping criterion)。第 8 節回答「不該探索什麼」,本節回答「探索到什麼程度必須停止」,避免 Agent 在無決定性結果時持續消耗輪次與 Token。
當思考或探索滿足下列任一條件時,即應判定為過度思考(overthinking):
核心原則:輪次數是訊號,不是目標。 遠早於門檻得到決定性結論時應立即行動;接近門檻仍無結論時,必須停止而非提高嘗試頻率。
當Agent 陷入無法下決定的迴圈時,應停止探索並向使用者報告目前遭遇的問題,而不是無限地繼續進行探索。
探索 / 思考一輪
↓
得到新事實?
├─ 是 → 是否足以改變決策或達成結論?
│ ├─ 是 → 行動,結束該問題
│ └─ 否 → 記錄並繼續(輪次 +1)
└─ 否 → 屬於雜訊,丟棄,不延伸推理(輪次 +1)
↓
已達 5~10 輪門檻仍無決定性結果?
├─ 否 → 回到流程開頭
└─ 是 → 停止探索 → 報告使用者(附 9.3 所列內容)
與第 8 節相同,本節定義思考與停止紀律(WHY / HOW);agent-operation-restrictions「避免非必要行為」條目下的對應規則(WHAT)為其執行面。兩者互補:本節解釋「為什麼必須停」,操作限制列出「不該繼續做什麼」。
參照:agent-operation-restrictions
目的:約束「預先探索」行為的觸發條件。無根據的預先探索會取得不必要雜訊,甚至被既有錯誤所汙染,進而污染後續推理。
當使用者要求或提供某個路徑 / 檔案時,該路徑本身就是探索邊界;不得預先探索其所屬目錄下還有什麼檔案。
src/utils/format.ts,任務就始於 format.ts 的內容;不先列舉 src/utils/ 的其他檔案、不 glob 上層目錄。探索行為必須基於明確性的需求——即「缺少這項資訊就無法完成目前任務」——而不是在沒有任何根據的情況下預先探索。
| 觸發來源 | 是否構成明確性需求 |
|---|---|
| 實際操作中出現錯誤,需定位原因 | ✅ 是 |
| 指定內容缺少完成任務的必要資訊 | ✅ 是 |
| 使用者明確要求調查某範圍 | ✅ 是 |
| 「先了解專案結構」「看看還有什麼」 | ❌ 否(無根據) |
| 「習慣上動手前先掃一遍目錄」 | ❌ 否(無根據) |
核心原則:探索是手段,不是前置儀式。 只有明確需求才能觸發探索;無根據的預先探索,成本(雜訊、錯誤污染、輪次浪費)必然高於其收益。
非必要行為與雜訊息息相關:每一個非必要行為都會產生雜訊,而雜訊又會模糊思考範圍,進而誘發更多非必要行為,形成正反饋迴路。
典型例子——查詢 git:
任務與 git 無關
↓
執行 git status / git log「順便看一下」(非必要行為)
↓
產生雜訊:提交紀錄、分支狀態、diff 進入上下文
↓
思考範圍被模糊:開始推測「這些變更是不是與任務相關」
↓
誘發更多非必要行為:git diff、讀更多提交、檢查工作區…
↓
雜訊進一步累積 → 迴路加劇(最終逼近過度思考,見第 9 節)
破除迴路的要點:
核心原則:非必要行為不是「多做一點」,而是思考污染的起點。 保持上下文乾淨(只有完成任務確實需要的資訊),是避免連鎖非必要行為最有效的方式。
參照:agent-operation-restrictions — 具體禁止行為見其「避免非必要行為」章節及 avoid-unnecessary-queries.md
為確保行為的準確性與安全性,可使用以下技能來協助任務執行:
skills/agent-detect-shell: 可使用此技能來了解該如何取得環境資訊。skills/agent-script-execution: 可使用此技能來了解如何防止指令構建錯誤。skills/agent-operation-restrictions: 可使用此技能來了解 Agent 在執行任務時必須遵守的嚴格操作限制。skills/factual-accuracy-guard: 可使用此技能來了解如何確保事實準確性,避免過度依賴假設。skills/code-refactoring-expert: 可使用此技能了解安全重構的通用原則(設計模式、回溯相容、增量變更)。skills/code-refactoring-expert-typescript: 可使用此技能了解 TypeScript / Node.js 專屬重構與設計指引(型別安全、精確型別、SSoT、非同步流程優化)。Skills that do similar work, with their headline benchmark lift.
From the same source and nearby in the catalogue.