integrate-atlas-chat
Integrate Atlas Agent Chat
Add a streaming Atlas Agent chat UI to this Flows app.
Agent external ID: $ARGUMENTS
Dependencies
The atlas-agent library files (copied in Step 2) require these npm packages:
| Package | Version |
|---|---|
@sinclair/typebox |
^0.33.0 |
ajv |
^8.17.1 |
ajv-formats |
^2.1.1 |
@cognite/sdk is assumed to already be present in Flows apps.
Your job
Complete these steps in order. Read each file before modifying it.
Step 1 — Understand the app
Read these files before touching anything:
package.json— detect package manager (packageManagerfield or lock file) and existing depssrc/App.tsx(or equivalent entry component) — understand current structure
Step 2 — Copy the atlas-agent source files
The atlas-agent library lives in the code/ directory next to this skill file. Read and copy
the following files into src/atlas-agent/ inside the app:
code/types.tscode/validation.tscode/client.tscode/session.tscode/react.ts
The Python-related files (
python.ts,pyodide.ts,pyodide-react.ts,pyodide-runtime.ts) are only needed if the agent uses Python tools. Thesetup-python-toolsskill copies those.
Step 3 — Install dependencies
Install the required peer packages (see Dependencies above) using the app's package manager:
- pnpm →
pnpm add @sinclair/typebox@^0.33.0 ajv@^8.17.1 ajv-formats@^2.1.1 - npm →
npm install @sinclair/typebox@^0.33.0 ajv@^8.17.1 ajv-formats@^2.1.1 - yarn →
yarn add @sinclair/typebox@^0.33.0 ajv@^8.17.1 ajv-formats@^2.1.1
Step 4 — Build the chat component
Replace (or create) the main App.tsx with a full chat UI. The component must:
- Import
useAtlasChatandChatMessagefrom./atlas-agent/react(relative to the component) - Get the SDK via
useDune()from@cognite/dune - Pass
nullwhile loading —client: isLoading ? null : sdk - Show streaming text in real time using
msg.isStreamingwith a blinking cursor - Show tool call events — when
progress.startsWith("Executing:"), render it distinctly (e.g. a ⚙ icon + monospace tool name) so tool calls are clearly visible - Show tool calls — each assistant
message.toolCalls(after streaming completes) should appear as expandable cards beneath the message - Abort button — show a "Stop" button while
isStreaming, wired toabort() - Reset button — "New chat" button wired to
reset() - Auto-scroll — scroll to bottom on new messages and progress updates
- Auto-resize textarea — expand up to ~120px, submit on Enter, newline on Shift+Enter
Key hook API
import { useAtlasChat } from "./atlas-agent/react";
import type { ChatMessage } from "./atlas-agent/react";
const { messages, send, isStreaming, progress, error, reset, abort } = useAtlasChat({
client: isLoading ? null : sdk, // null-safe — hook waits for a real client
agentExternalId: "...",
tools?: AtlasTool[], // optional client-side tools
});
// messages[n].role — "user" | "assistant"
// messages[n].text — full text (streams chunk-by-chunk via isStreaming)
// messages[n].isStreaming — true while this message is being written
// messages[n].toolCalls — ToolCall[] once response is complete (client + server-side, in call order)
// progress — e.g. "Agent thinking" or "Executing: get_timeseries"
// isStreaming — true for the entire duration of a response
Tool call display pattern
// During streaming — show as a distinct "tool call" bubble above the message
{isStreaming && progress?.startsWith("Executing:") && (
<div>⚙ {progress}</div>
)}
// After response — show tool calls on the assistant message
{msg.toolCalls?.map((tc, i) => (
<ToolResult key={i} name={tc.name} output={tc.output} details={tc.details} />
))}
Step 5 — Python tools (optional)
If the agent has Python tools (type runPythonCode in its CDF config), run the
setup-python-tools skill to add Pyodide-based client-side execution:
/setup-python-tools $ARGUMENTS
That skill copies the Python-related source files from @skills/integrate-atlas-chat/code,
installs pyodide, sets up usePyodideRuntime, and wires the runtime into
useAtlasChat via pythonRuntime. The library fetches Python tool code from the agent
config automatically — no PythonToolConfig entries needed.
You don't need this if the agent only uses built-in or regular client tools.
Done
Start the app and you should see a streaming chat UI connected to Atlas Agent $ARGUMENTS.
More from cognitedata/builder-skills
use-topbar
>-
45code-quality
MUST be used whenever reviewing a Flows app for code quality, maintainability, or clean code issues — before a PR review, after a feature is complete, or when the user asks for a code review. Do NOT skip linting steps. Triggers: code quality, code review, clean code, refactor, maintainability, technical debt, any type, naming, dead code, duplication, DRY, single responsibility, component size, lint, linting, TypeScript strict, dependency injection, file structure.
45skill-creator
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch for Claude Code or Cursor, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
45integrate-todo-list
MUST be used whenever adding a task/todo list feature to a Flows app with Atlas chat. Do NOT manually create todo state management or tool definitions — this skill handles the full module (context, provider, tool, hooks, UI components) and all integration wiring. Prerequisite: integrate-atlas-chat must already be set up. Triggers: todo list, task list, task tracking, TodoWrite, todo panel, task panel, progress tracking, add todos, add tasks.
45correctness-and-error-handling
MUST be used whenever fixing correctness and error handling issues in a Flows app. This skill finds AND fixes bugs, missing error states, unhandled rejections, and edge-case failures — it does not just report them. Triggers: correctness, error handling, bug fix, edge case, crash, unhandled, null, undefined, empty state, loading state, error boundary, try catch, async error, useEffect cleanup, type guard, runtime error, robustness.
45security
MUST be used whenever fixing security issues in a Flows app, or before shipping any feature that handles credentials, user input, or external data. This skill finds AND fixes security problems — it does not just report them. Do NOT skip this when the user asks for a security fix, security hardening, or vulnerability remediation — run every step in order. Triggers: security, security fix, security hardening, vulnerability, XSS, injection, credentials, secrets, auth, authentication, authorization, token, sensitive data, input validation, CORS, CSP, dependency audit.
44