К основному содержанию
скилл CX Codex

setup-python-tools — скилл для Claude Code: Pyodide в чате

Ставит клиентское выполнение Python-инструментов через Pyodide в приложение с уже готовым useAtlasChat. Нужен, когда агент отдаёт код инструмента, а считать он должен в браузере.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add cognitedata/builder-skills --skill setup-python-tools -a claude-code
Открыть на GitHub

Что делает setup-python-tools

Скилл проводит по шагам: читает package.json и компонент с useAtlasChat, ставит [email protected], подключает хук usePyodideRuntime и передаёт pythonRuntime в useAtlasChat. Отдельные записи PythonToolConfig не нужны — инструменты runPythonCode приходят из конфига агента в CDF как toolConfirmation и clientTool, библиотека сама забирает код, когда он понадобится.

Версия Pyodide должна совпадать с артефактами на CDN. Поставите другую — получите ошибки при загрузке. Первая загрузка тянет около 30MB и занимает 30-60 секунд, дальше браузер отдаёт из кеша меньше чем за 2 секунды. Пока идёт инициализация, скилл советует гасить всё поле ввода, а не только кнопку отправки, и показывать компактный индикатор над полем — со стадией и процентом.

Перед началом нужны src/atlas-agent/ из скилла integrate-atlas-chat и пакет @sinclair/typebox; файлы python.ts, pyodide.ts, pyodide-react.ts, pyodide-runtime.ts копируются из integrate-atlas-chat/code/. Если приложение ходит через боковую панель Atlas / EOS, этот скилл пропускается — там Python-инструменты работают из конфига агента.

Какие задачи решает

  • выполнить Python-код инструмента прямо в браузере
  • подключить Pyodide к существующему чату на useAtlasChat
  • показать прогресс загрузки рантайма над полем ввода
  • заблокировать отправку сообщений, пока Python не готов
  • сверить версию pyodide с артефактами на CDN

Примеры запросов агенту

  • настрой python-инструменты для агента my-agent
  • подключи usePyodideRuntime к компоненту с useAtlasChat
  • добавь индикатор загрузки Pyodide над полем ввода

Как установить setup-python-tools

1Через Skills CLI (Vercel)

npx skills add cognitedata/builder-skills --skill setup-python-tools -a claude-code

2Вручную: положить файлы

~/.claude/skills/setup-python-tools/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/setup-python-tools/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора12

use-topbar Скилл ставит в приложение Flows/Fusion единый топбар из @aura/topbar: хлебные крошки, переключатель темы, кнопка Atlas. CX Codex +1 1 900установок pull-changes-resolve-conflicts Скилл ведёт агента через слияние веток: сначала показывает конфликты и спрашивает, потом правит. Пригодится, когда в проекте несколько контрибьюторов. CX Codex +1 1 900установок graph-viewer Скилл помогает встроить интерактивный граф модели данных CDF в приложение на Flows: узлы, связи и обратные связи. CX Codex +1 1 900установок dm-limits-and-best-practices Справочный скилл про лимиты CDF Data Modeling: конкурентность и 429, пагинация, батчи, QueuedTaskRunner. Пригодится, когда код сыпет ошибками на нагрузке. CX Codex +1 1 900установок security Проходит по приложению Flows шаг за шагом: находит утечки секретов, опасный DOM, дыры в авторизации — и сразу правит их. CX Codex +1 1 900установок integrate-atlas-chat Скилл для встраивания чата Atlas прямо в интерфейс приложения Cognite. Нужен, когда сайдбар Fusion/EOS недоступен. CX Codex +1 1 900установок integrate-todo-list Добавляет в приложение инструмент TodoWrite и панель, где видно, как агент Atlas выполняет многошаговую работу. CX Codex +1 1 900установок reveal-3d Встраивает интерактивный 3D-вьюер Cognite Reveal в приложение Flows: CAD-модели, облака точек, панорамы 360° и сцены CDF. CX Codex +1 1 900установок

Похожие

mongodb-mcp-setup mongodb Скилл по шагам ведёт настройку MongoDB MCP-сервера для ИИ-агентов. Пригодится, когда сервер уже установлен, но переменные окружения и доступы к базе ещё не заданы. CX Codex +1 4 000установок setup-python-env reflex-dev Создаёт виртуальное окружение Python и ставит Reflex. Пригодится, когда в проекте нет .venv или импорты падают из-за отсутствующих пакетов. CX Codex +1 663установок aws-cdk-python-setup официальный github Скилл помогает подготовить окружение для AWS CDK на Python, создать проект и выполнить деплой в AWS. Подойдёт для старта нового CDK-приложения. 1 600установок hf-cloud-python-env-setup huggingface Скилл разворачивает изолированное окружение Python для работы с AWS и SageMaker. Он помогает избежать сбоев из-за несовместимых версий Python и устаревшего SDK boto3. CX Codex +1 548установок wasm-compatibility marimo-team Проверяет, запустится ли блокнот marimo в браузере через WebAssembly, и объясняет, что именно сломается. CX Codex +1 3 000установок python-github-setup-cursorrules-prompt-file PatrickJS Задаёт Cursor единый стиль Python-кода, тесты, ревью через GitHub Pull Requests и CI на GitHub Actions. Пригодится, когда в команде нет общего свода правил. ★ 41 011звёзд репо

Рядом в теме «Настройка агента: память, контекст, субагенты»

Все скиллы по теме «Настройка агента: память, контекст, субагенты» →

Вопросы о setup-python-tools

Как установить setup-python-tools в Claude?

Выполните npx skills add cognitedata/builder-skills --skill setup-python-tools -a claude-code. Скилл появится в ~/.claude/skills/setup-python-tools/SKILL.md.

Что делает setup-python-tools?

Добавляет клиентское выполнение Python-инструментов через Pyodide в приложение с useAtlasChat: ставит [email protected], подключает usePyodideRuntime и передаёт рантайм в чат.

Какая версия Pyodide нужна?

Ровно [email protected]. Она должна совпадать с артефактами, которые грузятся с CDN, иначе загрузка падает с ошибками.

Исходный текст

SKILL.md · Apache-2.0
---
name: setup-python-tools
description: "Pyodide Python tools for an already-approved in-app useAtlasChat UI. EOS sidebar Python tools run from agent CDF config — do not vendor Pyodide. Triggers: Pyodide, pythonRuntime, usePyodideRuntime, runPythonCode."
allowed-tools: Read, Glob, Grep, Edit, Write, Bash
metadata:
  argument-hint: "[tool-names or agent-external-id]"
---

# Set Up Python Tool Execution

Add client-side Pyodide execution for **$ARGUMENTS**. Skip this if the app uses the Atlas / EOS sidebar (`integrate-fusion-agent`).

**Prerequisite:** `src/atlas-agent/` from `integrate-atlas-chat`, plus `@sinclair/typebox`. Copy `python.ts`, `pyodide.ts`, `pyodide-react.ts`, `pyodide-runtime.ts` from `integrate-atlas-chat/code/` into `src/atlas-agent/`.

CDF `runPythonCode` tools arrive as `toolConfirmation` + `clientTool`. Wire `usePyodideRuntime` and pass `pythonRuntime` to `useAtlasChat` — no `PythonToolConfig` entries. Pyodide is ~30MB, cached after first load.

---

## Step 1 — Understand the app

Read these files before touching anything:

- `package.json` — detect package manager and existing deps
- The component that calls `useAtlasChat` — understand current tools/config

---

## Step 2 — Install Pyodide

Install **exactly** `[email protected]` using the app's package manager.
This version must match the CDN artifacts loaded at runtime — installing a different version will cause errors.

- pnpm → `pnpm add [email protected]`
- npm  → `npm install [email protected]`
- yarn → `yarn add [email protected]`

> `@sinclair/typebox` should already be installed from `integrate-atlas-chat`. Add it if missing.

---

## Step 3 — Set up usePyodideRuntime

In the component that calls `useAtlasChat`, add the Pyodide runtime hook:

```tsx
import { loadPyodide } from "pyodide";
import { usePyodideRuntime } from "./atlas-agent/pyodide-react";
import { useAtlasChat } from "./atlas-agent/react";

function MyChat() {
  const { sdk, isLoading } = useDune();

  // Initialize Python runtime (loads Pyodide, installs packages, sets up Cognite SDK)
  const {
    runtime: pythonRuntime,
    loading: pythonLoading,
    progress: pythonProgress,
    error: pythonError,
    isReady: pythonReady,
  } = usePyodideRuntime({
    loadPyodide,
    client: isLoading ? null : sdk,
    requirements: ["pandas", "numpy"],    // optional — additional packages
  });

  // ... useAtlasChat below
}
```

### Hook API reference

| Return field | Type | Description |
|---|---|---|
| `runtime` | `PythonRuntime \| undefined` | The initialized runtime, or undefined if not ready |
| `loading` | `boolean` | True while Pyodide is loading / initializing |
| `error` | `string \| null` | Error message if initialization failed |
| `progress` | `{ stage: string; percent: number }` | Current init progress for UI display |
| `isReady` | `boolean` | Convenience: `!loading && !error && runtime !== undefined` |

### Loading state UI

Place the loading indicator **above the chat input**, not in the message list.
Keep it compact — a pill/badge showing stage text and percent. Show an error badge separately.
First load is ~30-60s (downloads ~30MB); subsequent loads are <2s from browser cache.

```tsx
{/* Loading — shown above the input while Pyodide initializes */}
{pythonLoading && (
  <div className="flex items-center gap-2 rounded-lg border bg-muted/50 px-3 py-2 text-sm text-muted-foreground">
    {/* Optional: <IconBrandPython /> from @tabler/icons-react */}
    <span>{pythonProgress.stage || "Initializing Python..."}</span>
    {pythonProgress.percent > 0 && pythonProgress.percent < 100 && (
      <span className="text-xs opacity-70">({pythonProgress.percent}%)</span>
    )}
  </div>
)}

{/* Error — shown if init fails (after loading finishes) */}
{pythonError && !pythonLoading && (
  <div className="flex items-center gap-2 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive">
    <span>Python runtime failed to load</span>
  </div>
)}
```

---

## Step 4 — Wire into useAtlasChat

Pass the runtime to `useAtlasChat`. That's all — no tool configs needed:

```tsx
const { messages, send, isStreaming, progress, error, reset, abort } = useAtlasChat({
  client: isLoading ? null : sdk,
  agentExternalId: "my-agent",
  tools: [renderTimeSeries],   // regular client tools (declared to agent), if any
  pythonRuntime,               // from usePyodideRuntime — enables Python tool execution
});
```

**Note**: Python tools are NOT declared to the agent via `tools`. The agent already knows
about them from its CDF config. The library fetches the code automatically when needed.

---

## Step 5 — Disable input while Python loads

The user shouldn't send messages before the runtime is ready. Disable the **entire input area**
(not just the send button) so the state is unambiguous:

```tsx
<ChatInput
  onSend={handleSend}
  disabled={isStreaming || pythonLoading}
  // ...
/>
```

If you have a home page with suggestion chips, disable those too:

```tsx
<ChatHomePage
  onSuggestionClick={handleSuggestionClick}
  disabled={pythonLoading}
/>
```

---

## Done

The app can now execute Python tools client-side via Pyodide. When the agent calls a Python
tool, the library automatically fetches its code from the agent config, runs it in the
browser, and returns the result to the agent.

© cognitedata · Apache-2.0 · cognitedata/builder-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой