create-client-tool
MUST be used whenever creating an AtlasTool (client-side tool) for an Atlas agent. Do NOT manually write AtlasTool definitions or wire them into useAtlasChat — this skill handles the TypeBox schema, execute function, and hook wiring. Prerequisite: integrate-atlas-chat (vendored src/atlas-agent + TypeBox/AJV deps). This includes tools that fetch data, render UI, call APIs, show charts, query local state, or perform any browser-side action. Triggers: AtlasTool, client tool, add tool, create tool,
Security Assessment
About create-client-tool
A scaffolding skill for creating an AtlasTool, a client-side tool that an Atlas agent can invoke, and wiring it into the application. It is meant to be used whenever a new client tool is needed instead of hand-writing AtlasTool definitions or manually wiring them into useAtlasChat, and it handles the TypeBox schema, the execute function, and the hook wiring. It applies to tools that fetch data, render UI, call APIs, show charts, query local state, or perform any other browser-side action, and it triggers on phrases like AtlasTool, client tool, add tool, create tool, new tool, tool definition, and agent tool. The prerequisite is that the integrate-atlas-chat skill has already vendored the atlas-agent sources under src/atlas-agent/ and installed @sinclair/typebox.
Client tools let the Atlas Agent run logic in the browser while the agent decides when to call them. The documented flow is: the agent responds with a clientTool action, the library validates the arguments against the TypeBox schema, execute() runs in the browser and returns an object with output and details, the output string is sent back to the agent as the tool result, and the details (any shape) become available on message.toolCalls for the UI to render. The skill first reads the codebase to find where useAtlasChat is called and to match existing tool conventions.
The tool itself is defined as a typed AtlasTool constant whose parameters schema is built with Type from @sinclair/typebox, giving both compile-time types and runtime validation. A quick reference covers common TypeBox schemas including String, Number, Boolean, Literal, Union for enums, Array, Object, and Optional, and every field should carry a description because the agent relies on those to decide what to pass. The tool name is snake_case since that is what the agent uses to invoke it. After definition, the tool is added to the tools array of the useAtlasChat call, and if it returns structured details those can be rendered by mapping over message.toolCalls, where each ToolCall exposes name, output, and details. Clear description fields are emphasized throughout, since the agent depends on them to decide when and how to call the tool.
FAQ
What must be done before using this skill?
The integrate-atlas-chat skill must already be complete, so the app vends the atlas-agent sources under src/atlas-agent/ (including react.ts) and has @sinclair/typebox installed.
How are a tool's parameters defined?
As a TypeBox schema using Type from @sinclair/typebox, which provides both compile-time types and runtime validation. The quick reference covers String, Number, Boolean, Literal, Union for enums, Array, Object, and Optional.
What does the execute function return?
An object with output and details. The output string is sent back to the agent as the tool result, and details (any shape) is available on message.toolCalls so the UI can render it.
How is the tool connected to the chat?
By adding the tool constant to the tools array of the useAtlasChat call, for example tools: [myTool]. The skill first reads the file where useAtlasChat is called to find where tools is passed.
Why does each parameter need a description?
The agent uses each field's description to understand what to pass, and it relies on the tool's own description to decide when and how to call it, so clear descriptions are emphasized throughout.
Install create-client-tool
Quick Setup:
- Copy the skill folder to
.claude/skills/ - Claude will automatically detect and use the skill
Repository
cognitedata/builder-skills