.claude/skills/juliaz-tool-builder/SKILL.md
Expert guidance for designing and implementing tools for Julia's agents. Trigger when adding a new tool to the orchestrator, frontend, or any agent. Also trigger for: 'add tool', 'new tool', 'tool schema', 'tool not working', 'agent can't use tool', 'function calling', or any tool design question.
npx skillsauth add abzhaw/juliaz_agents juliaz-tool-builderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Tools are how Julia's agents interact with the world. A well-designed tool is the difference between an agent that works and one that hallucinates. Adapted from
agent-tool-builder.
The LLM never sees your code. It only sees the schema and description. A perfectly implemented tool with a vague description will fail. A simple tool with crystal-clear documentation will succeed.
julia/orchestrator/src/tools.ts)julia/frontend/server.ts chatTools)Every tool description MUST answer these 5 questions for the LLM:
{
name: 'send_email',
description: [
'Send an email from [email protected] via SMTP.',
'Use this when the user asks Julia to send, write, or draft-and-send an email.',
'If the recipient, subject, and body are all clear from context, call this immediately.',
'If any detail is missing, ask one concise question first.',
].join(' '),
input_schema: {
properties: {
to: { type: 'string', description: 'Recipient email address (or comma-separated list).' },
subject: { type: 'string', description: 'Email subject line.' },
body: { type: 'string', description: 'Plain-text body of the email.' },
},
required: ['to', 'subject', 'body'],
},
}
{
name: 'send_email',
description: 'Sends an email.', // Too vague — when? to whom? what format?
input_schema: {
properties: {
data: { type: 'string', description: 'Email data.' }, // What format?
},
},
}
The #1 cause of tool misuse. If the description doesn't tell the LLM exactly when to use it, it will guess wrong.
Tools that return empty strings or generic "error" on failure. Always return a clear error message that helps the LLM recover.
More tools = more confusion for the LLM. Keep the tool set focused. In juliaz: orchestrator has 2-4 tools, frontend has 3-5 tools.
Two tools with similar descriptions → agent picks randomly. Make descriptions mutually exclusive.
julia/orchestrator/src/tools.ts)Tools are defined in two formats (Anthropic + OpenAI) from a single source:
// Define once in Anthropic format
export const TOOLS: Tool[] = [{ name, description, input_schema }];
// Auto-convert to OpenAI format
export const OPENAI_TOOLS = TOOLS.map(tool => ({
type: 'function',
function: { name: tool.name, description: tool.description, parameters: tool.input_schema },
}));
// Single dispatcher for both paths
export async function executeTool(name: string, rawArgs: string): Promise<string> {
const args = JSON.parse(rawArgs);
switch (name) {
case 'tool_name': return await toolImpl(args);
default: return `Error: unknown tool "${name}"`;
}
}
julia/frontend/server.ts)Uses Vercel AI SDK tool() helper with Zod schemas:
const chatTools = {
tool_name: tool({
description: '...',
inputSchema: z.object({ ... }),
execute: async (args) => { ... },
}),
};
Always return a string (never throw) — the LLM needs to see the error:
try {
// ... tool logic
return `Success: did the thing.`;
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
return `Error: ${message}`;
}
| Location | Format | Used by |
|----------|--------|---------|
| julia/orchestrator/src/tools.ts | Anthropic Tool[] + OpenAI auto-convert | Claude Haiku + GPT-4o fallback |
| julia/frontend/server.ts | Vercel AI SDK tool() + Zod | GPT-4o / Claude Sonnet |
| julia/bridge/src/index.ts | MCP server.tool() | MCP clients (orchestrator, OpenClaw) |
| julia/cowork-mcp/src/index.ts | MCP server.tool() | Claude delegation |
development
Fortschrittsverfolgung der Masterarbeit. Wortanzahl pro Kapitel, Fertigstellungsgrad, fehlende Elemente, Deadlines. Haelt den Ueberblick.
development
Kapitelarchitektur und Gliederung der Masterarbeit. Verwaltet die Struktur, schlaegt vor wo Inhalte hingehoeren, validiert den logischen Fluss zwischen Kapiteln.
tools
Konvertiert Protokolleinträge und Session-Logs in thesis-fähiges deutsches Narrativ. Transformiert Entwicklungsdokumentation in akademische Prosa.
research
Sucht und analysiert akademische Literatur. Findet relevante Papers, erstellt strukturierte Zusammenfassungen. Zitiert NIEMALS — schlaegt nur vor.