
Create Client Tool
- 1.9k installs
- 5 repo stars
- Updated August 4, 2026
- cognitedata/builder-skills
create-client-tool is an agent skill that MUST be used whenever creating an AtlasTool (client-side tool) for an Atlas agent. Do NOT manually write AtlasTool defin.
About
Scaffold a new AtlasTool named ARGUMENTS and wire it into the app integrate atlas chat must already be complete the app should vend the atlas agent sources under src atlas agent including react ts and have sinclair typebox installed as in that skill Client tools let the Atlas Agent invoke logic that runs in the browser rendering charts querying local state showing UI panels triggering navigation etc The agent decides when to call the tool the app executes it and returns a result The flow is 1 Agent responds with a clientTool action 2 The library validates the arguments against the TypeBox schema 3 execute runs in the browser and returns output details 4 output string is sent back to the agent as the tool result 5 details any shape is available on message toolCalls for the UI to render The file where useAtlasChat is called often src App tsx or a chat hook to find where tools is passed imports are typically from atlas agent react after integrate atlas
- description: "MUST be used whenever creating an AtlasTool (client-side tool) for an Atlas agent. Do NOT manually write A
- allowed-tools: Read, Glob, Grep, Edit, Write
- argument-hint: "[tool-name] [brief description of what it does]"
- Follow create-client-tool SKILL.md steps and documented constraints.
- Follow create-client-tool SKILL.md steps and documented constraints.
Create Client Tool by the numbers
- 1,868 all-time installs (skills.sh)
- +2 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #686 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
create-client-tool capabilities & compatibility
- Capabilities
- description: "must be used whenever creating an · allowed tools: read, glob, grep, edit, write · argument hint: "[tool name] [brief description o · follow create client tool skill.md steps and doc
- Use cases
- orchestration
What create-client-tool says it does
description: "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 Typ
allowed-tools: Read, Glob, Grep, Edit, Write
argument-hint: "[tool-name] [brief description of what it does]"
npx skills add https://github.com/cognitedata/builder-skills --skill create-client-toolAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.9k |
|---|---|
| repo stars | ★ 5 |
| Security audit | 3 / 3 scanners passed |
| Last updated | August 4, 2026 |
| Repository | cognitedata/builder-skills ↗ |
When should an agent use create-client-tool and what problem does it solve?
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, e
Who is it for?
Developers invoking create-client-tool as documented in the skill source.
Skip if: Skip when requirements fall outside create-client-tool documented scope.
When should I use this skill?
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, e
What you get
Outputs aligned with the create-client-tool SKILL.md workflow and stated deliverables.
- AtlasTool module
- TypeBox schema
- Hook wiring
By the numbers
- Prerequisite: integrate-atlas-chat with TypeBox and AJV dependencies
- Allowed tools: Read, Glob, Grep, Edit, Write
Files
Create a Client Tool
Scaffold a new AtlasTool named $ARGUMENTS and wire it into the app.
Prerequisite
`integrate-atlas-chat` must already be complete: the app should vend the atlas-agent sources under src/atlas-agent/ (including react.ts) and have @sinclair/typebox installed as in that skill.
Background
Client tools let the Atlas Agent invoke logic that runs in the browser — rendering charts, querying local state, showing UI panels, triggering navigation, etc. The agent decides when to call the tool; the app executes it and returns a result.
The flow is: 1. Agent responds with a clientTool action 2. The library validates the arguments against the TypeBox schema 3. execute() runs in the browser and returns { output, details } 4. output (string) is sent back to the agent as the tool result 5. details (any shape) is available on message.toolCalls for the UI to render
---
Step 1 — Understand the codebase
Before writing anything, read:
- The file where
useAtlasChatis called (oftensrc/App.tsxor a chat hook) to find wheretoolsis passed — imports are typically from./atlas-agent/reactafter `integrate-atlas-chat` - Any existing tool definitions to match the file/naming conventions
---
Step 2 — Define the tool
Create the tool as a typed constant. Use Type from @sinclair/typebox to define the parameters schema — this gives both compile-time types and runtime validation (same stack as the vendored atlas-agent from `integrate-atlas-chat`).
import { Type } from "@sinclair/typebox";
import type { AtlasTool } from "./atlas-agent/types";
export const myTool: AtlasTool = {
name: "my_tool", // snake_case — this is what the agent uses to invoke it
description:
"One sentence describing what this tool does and when the agent should call it.",
parameters: Type.Object({
exampleParam: Type.String({ description: "What this param is for" }),
optionalNum: Type.Optional(Type.Number({ description: "..." })),
}),
execute: async (args) => {
// args is fully typed from the schema above
// Do the work here — call APIs, update state, render UI, etc.
return {
output: "Plain text summary sent back to the agent",
details: {
// Any structured data you want available in the UI via message.toolCalls
},
};
},
};Adjust the ./atlas-agent/... path if the tool file is not directly under src/ next to the atlas-agent folder (for example ../atlas-agent/types from src/tools/).
TypeBox quick reference
| Schema | Usage |
|---|---|
Type.String() | string |
Type.Number() | number |
Type.Boolean() | boolean |
Type.Literal("foo") | exact value |
Type.Union([Type.Literal("a"), Type.Literal("b")]) | enum |
Type.Array(Type.String()) | string[] |
Type.Object({ ... }) | object |
Type.Optional(...) | mark any field optional |
Always add a description to each field — the agent uses these to understand what to pass.
---
Step 3 — Wire into useAtlasChat
Find the useAtlasChat call and add the tool to the tools array:
const { messages, send, ... } = useAtlasChat({
client: isLoading ? null : sdk,
agentExternalId: AGENT_EXTERNAL_ID,
tools: [myTool], // add here
});---
Step 4 — Render tool results (if needed)
If the tool returns structured details, render them in the message list. message.toolCalls is a ToolCall[] — one entry per tool call (client-side and server-side) in call order.
{msg.toolCalls?.map((tc, i) => (
// tc.name — tool name
// tc.output — the string sent back to the agent
// tc.details — your structured data (cast to your known shape)
<MyToolOutput key={i} data={tc.details as MyToolDetails} />
))}---
Done
The agent can now invoke $ARGUMENTS. Describe what it does clearly in the description field — the agent relies on that string to decide when and how to call the tool.
Related skills
FAQ
What is 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 t
When should I use 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 t
Is create-client-tool safe to install?
Review the Security Audits panel on this page before production use.