agent-tool-builder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited agent-tool-builder (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Tools are how AI agents interact with the world. A well-designed tool is the difference between an agent that works and one that hallucinates, fails silently, or wastes tokens.
This skill covers tool design from schema to error handling. JSON Schema best practices, description writing that actually helps the LLM, validation, and the emerging MCP standard that's becoming the lingua franca for AI tools.
Descriptions guide selection, but implementations enforce correctness, authorization and safety. Both require testing; the model may also inspect exposed code/results.
Read the detailed guide before executing this skill. It retains the complete procedure and reference material. Treat its safety, prerequisites, and validation requirements as mandatory. For focused work, load the relevant sections; for end-to-end work, read the guide completely.
Mock only: fixed weather is synthetic, not a current forecast. Pin/verify SDK beta API and an account-accessible model before any billed call. Tools need bounded execution/approval policies; the runner does not authorize external effects.
import json
import anthropic
from anthropic import beta_tool
client = anthropic.Anthropic()
@beta_tool
def get_weather(location: str, unit: str = "fahrenheit") -> str:
'''Get the current weather in a given location.
Args:
location: The city and state, e.g. San Francisco, CA
unit: Temperature unit, either 'celsius' or 'fahrenheit'
'''
# Implementation
return json.dumps({"temperature": "72°F", "conditions": "Sunny"})
@beta_tool
def search_web(query: str) -> str:
'''Search the web for information.
Args:
query: The search query
'''
# Implementation
return json.dumps({"results": [], "mock": True})
# Tool runner handles the loop
runner = client.beta.messages.tool_runner(
model="claude-sonnet-4-5",
max_tokens=1024,
tools=[get_weather, search_web],
messages=[
{"role": "user", "content": "What's the weather in Paris?"}
]
)
# Process each message
for message in runner:
for block in message.content:
if getattr(block, "type", None) == "text":
print(block.text)
# Or just get final result
final = runner.until_done()~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.