integrate-fusion-agent

MUST be used when adding AI, Atlas, an agent, a chat UI, or LLM features to a Flows/Fusion app. Use the Atlas/EOS sidebar via @cognite/app-sdk — not useAtlasChat, vendored atlas-agent, or per-row chat completions. Triggers: atlas, EOS, PAIA, agent chat, chat UI, sendAgentMessage, sendAgentLayoutMode

By cognitedata · 1,660 installs

npx skills add cognitedata/builder-skills --skill integrate-fusion-agent

Source repository · Upstream listing

Integrate Atlas / EOS Sidebar Default AI path: the platform Atlas sidebar (EOS / Fusion PAIA) via @cognite/app sdk . Do not embed useAtlasChat , vendor atlas agent , or call third party LLM APIs. integrate atlas chat only if the user explicitly requires in app chat and connectToHostApp cannot provide the sidebar (standalone app; always rejects). There is no manifest field for this. Implement only what is needed: 1. Open — Topbar Atlas button; sendAgentLayoutMode for in app triggers 2. Message — sendAgentMessage to inject context 3. Server — resources (app state) and actions (tools) Step 0 — Read the app package.json — package manager, @cognite/app sdk src/App.tsx — structure, existing SDK usage Ask which of the three capabilities are needed. Do not offer an in app chat unless they already insisted. Step 1 — Install pnpm add @cognite/app sdk (or npm/yarn). Minimum 0.3.1 . Step 2 — Connect to the host connectToHostApp rejects outside Fusion (standalone vite dev ). Catch that; hide agent triggers when api is null. Comlink proxies are callable — setApi(proxy) makes React treat the proxy as an updater and stores a Promise. Always setApi(() = resolvedApi) . Call at the root; pass api down or via context. typeof proxy.method === 'function' is always true — do not feature detect with typeof ; use try/catch. Step 3 — Open the sidebar Primary launcher: Aura Topbar Atlas ( systemActions.atlas.visible: true , see use topbar ). No second "Open Assistant" control. sendAgentLayoutMode is for contextual triggers only ( sidebar fullscreen closed ): Step 4 — Send a message Pair with sendAgentLayoutMode . newSession: true for a new task from an item; omit to continue the thread. Put names/IDs/state in the message — one sidebar turn, not N completions over query rows. Step 5 — Agent server Register on mount, unregister on unmount. Factories take services as args so they can be unit tested without React: Resource read() returns { type: 'json', data } (preferred) or { type: 'text', text } . Write description like a docstring. Actions: snake case names, Zod params, .describe() on every field. The agent does not confirm before calling — mutating actions must say so in description and require prior user approval. Step 6 — Wire together Test factories directly: Hard gate — LLM calls over query results Do not map chat completions (Atlas agents/chat , OpenAI/Anthropic, useAtlasChat().send ) over DMS/SDK rows. Prefer one sendAgentMessage or a resource the sidebar agent can read. If per item completions are an explicit product requirement (default: no): Rule Limit Default 5 completions per user initiated action Ceiling 50 — never generate code that can exceed this Cache space:externalId:lastUpdatedTime ; hits do not spend budget Batch One prompt covering N items, not N calls Trigger User initiated only — never on render, poll, or an unbounded list UX Say when the cap truncated the set Forbidden: items.map((row) = complete(row)) , Promise.all of completions over a query page. Checklist [ ] Topbar Atlas launcher ( use topbar ); no in app chat widget [ ] @cognite/app sdk@0.3.1+ ; setApi(() = resolvedApi) ; catch outside Fusion rejection [ ] Triggers hidden when api is null; server registered/unregistered with .catch() [ ] Resource descriptions say what/when; action names snake case ; mutating actions require prior approval [ ] Factories take services as args; LLM over rows capped (5 / max 50) and cached if present