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

clickhouse-js-node-coding — скилл для Claude Code: код на Node.js

Помогает агенту писать код с пакетом @clickhouse/client: подключение, вставка строк, выборки, параметры запросов.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add ClickHouse/agent-skills --skill clickhouse-js-node-coding -a claude-code
Открыть на GitHub

Что делает clickhouse-js-node-coding

Скилл ведёт агента по справочным файлам репозитория. Сначала он сопоставляет задачу со строкой в Task Index и читает нужный файл, потом сверяется с чек-листом ответа. Импорт всегда из @clickhouse/client, клиент создаётся через createClient({ url }) и закрывается вызовом await client.close().

Для обычных вставок и выборок советует JSONEachRow, а сырые байты вроде CSV, TSV и Parquet оставляет для потоковой передачи. Пользовательские значения должны идти через query_params: подстановка их в SQL шаблонной строкой — риск SQL-инъекции, и агент обязан это назвать, даже если вопрос был только про синтаксис. Метод выбирается по задаче: insert() для записи, query() с .json(), .text() или .stream() для чтения, command() для DDL, ping() для проверки доступности.

Скилл только для Node.js: Next.js Node runtime, React Server Components, Server Actions и обычные процессы. Браузерные компоненты, Web Workers, Edge runtime Next.js, Cloudflare Workers и пакет @clickhouse/client-web вне его области — для них нужен другой пакет. В справочнике есть привязки к версиям: pathname требует клиента >= 1.0.0, BigInt в query_params — >= 1.15.0, типы Time и Time64 — сервера ClickHouse >= 25.6.

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

  • создать клиент ClickHouse и настроить его параметры
  • вставить строки в формате JSONEachRow
  • связать параметры запроса без подстановки в SQL
  • выбрать между insert, query и command
  • проверить доступность сервера через ping

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

  • Настрой клиент @clickhouse/client для подключения к ClickHouse и добавь проверку через ping()
  • Покажи, как вставить массив объектов в таблицу через JSONEachRow
  • Перепиши этот запрос так, чтобы значения передавались через query_params, а не подставлялись в строку

Как установить clickhouse-js-node-coding

1Через Skills CLI (Vercel)

npx skills add ClickHouse/agent-skills --skill clickhouse-js-node-coding -a claude-code

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

~/.claude/skills/clickhouse-js-node-coding/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/clickhouse-js-node-coding/

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

Вопросы о clickhouse-js-node-coding

Как установить clickhouse-js-node-coding в Claude?

Выполните npx skills add ClickHouse/agent-skills --skill clickhouse-js-node-coding -a claude-code. Файл скилла окажется по пути ~/.claude/skills/clickhouse-js-node-coding/SKILL.md.

Что делает clickhouse-js-node-coding?

Даёт агенту справочники по работе с пакетом @clickhouse/client: конфигурация клиента, форматы вставки, чтение результатов, параметры запросов, сессии и временные таблицы.

Подойдёт ли скилл для кода в браузере или на Edge runtime?

Нет. Он покрывает только Node.js runtime, включая Next.js Node runtime, React Server Components и Server Actions. Для браузера и edge-среды нужен пакет @clickhouse/client-web.

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

SKILL.md · Apache-2.0
---
name: clickhouse-js-node-coding
description: >
  Write idiomatic application code with the ClickHouse Node.js client
  (`@clickhouse/client`). Use this skill whenever a user is *building* against
  the Node.js client — configuring the client, pinging, inserting rows in JSON
  or raw formats, selecting and parsing results, binding query parameters,
  managing sessions and temporary tables, working with data types or
  customizing JSON parsing. Do NOT use for browser/Web client code.
---

# ClickHouse Node.js Client — Coding

Reference: https://clickhouse.com/docs/integrations/javascript

> **⚠️ Node.js runtime only.** This skill covers the `@clickhouse/client`
> package running in a **Node.js runtime** exclusively — including **Next.js
> Node runtime** API routes, React Server Components, Server Actions, and
> standard Node.js processes. Do **not** apply this skill to browser client
> components, Web Workers, **Next.js Edge runtime**, Cloudflare Workers, or
> any usage of `@clickhouse/client-web`. For browser/edge environments, the
> correct package is `@clickhouse/client-web`.

---

## How to Use This Skill

1. **Match the user's intent** to a row in the Task Index below and read the
   corresponding reference file before writing code. After reading it, scan any
   **Answer checklist** in that reference and make sure the final answer covers
   each relevant item; those checklists capture details users usually need but
   are easy to omit in short answers.
2. **Always import from `@clickhouse/client`** (never `@clickhouse/client-web`)
   and create a client with `createClient({ url })` or rely on
   supported defaults when appropriate. Close it with `await client.close()`
   preferably when it's no longer needed or during graceful shutdown for global resources.
3. **Prefer `JSONEachRow` for typical row inserts/selects** unless the user
   has already chosen another format or is streaming raw bytes (CSV / TSV /
   Parquet — see `examples/node/performance/`).
   **Note on `clickhouse_settings`:** settings passed to `createClient` are
   defaults for every request; they can be overridden per-call by passing
   `clickhouse_settings` directly to `insert()`, `query()`, or `command()`.
   Always mention this when the user configures settings at the client level.
4. **Always use `query_params` for user-supplied values** — never template-
   literal-interpolate them into SQL. See `reference/query-parameters.md`.
   **When answering a parameter-binding question, your response must
   explicitly name template-literal interpolation as a "SQL injection
   risk"** — even when the user only asked about syntax and did not raise
   security. The literal phrase "SQL injection" needs to appear; this is
   the most common mistake from PostgreSQL/MySQL users and the security
   framing is part of the correct answer, not an optional aside.
5. **Pick the right method for the job:**
   - `client.insert()` — write rows.
   - `client.query()` + `resultSet.json()` / `.text()` / `.stream()` — read
     rows that return data.
   - `client.command()` — DDL and other statements that don't return rows
     (`CREATE`, `DROP`, `TRUNCATE`, `ALTER`, `SET` in a session, etc.).
   - `client.exec()` — when you need the raw response stream of an arbitrary
     statement (rare in coding scenarios).
   - `client.ping()` — health check; returns `{ success, error? }`, never
     throws on connection failure.
6. **Note version constraints** when relevant. Examples:
   - `pathname` config option: client `>= 1.0.0`.
   - `BigInt` values in `query_params`: client `>= 1.15.0`.
   - `TupleParam` and JS `Map` in `query_params`: client `>= 1.9.0`.
   - Configurable `json.parse` / `json.stringify`: client `>= 1.14.0`.
   - `Time` / `Time64` data types: ClickHouse server `>= 25.6`.
   - `QBit` data type: ClickHouse server `>= 25.10` (GA on `26.x`).
   - `Dynamic` / `Variant` / new `JSON` types: ClickHouse server `>= 24.1` /
     `24.5` / `24.8` (no longer experimental since `25.3`).

---

## Task Index

Identify the user's task and read the matching reference file.

| Task                                                     | Triggers / symptoms                                                                                                                                                                                                             | Reference file                      |
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |
| **Configure / connect the client**                       | Building a `createClient` call, URL parameters, `clickhouse_settings`, default format, custom HTTP headers                                                                                                                      | `reference/client-configuration.md` |
| **Compress requests / responses**                        | `compression`, gzip vs `zstd`, `{ codec }` option shape, Node version requirements, web limitations                                                                                                                             | `reference/compression.md`          |
| **Ping the server**                                      | Health checks, readiness probes, "is ClickHouse up?"                                                                                                                                                                            | `reference/ping.md`                 |
| **Choose an insert format**                              | "Which format should I use to insert?", JSON vs raw, `JSONEachRow` vs `JSON` vs `JSONObjectEachRow`                                                                                                                             | `reference/insert-formats.md`       |
| **Insert into a subset of columns / different database** | `insert({ columns })`, excluding columns, ephemeral columns, cross-DB inserts                                                                                                                                                   | `reference/insert-columns.md`       |
| **Insert values, expressions, dates, decimals**          | `INSERT … VALUES` with SQL functions, `Date`/`DateTime` from JS, `Decimal` precision, `INSERT … SELECT`; inserting a UUID into a `UInt128` column is tricky — use when the user is writing code that stores a UUID as `UInt128` | `reference/insert-values.md`        |
| **Async inserts (server-side batching)**                 | `async_insert=1`, fire-and-forget vs wait-for-ack                                                                                                                                                                               | `reference/async-insert.md`         |
| **Select and parse results**                             | `JSONEachRow` reads, `JSON` with metadata, picking a select format                                                                                                                                                              | `reference/select-formats.md`       |
| **Parameterize queries**                                 | Binding values, special characters / escaping, "SQL injection?", `{name: Type}` syntax                                                                                                                                          | `reference/query-parameters.md`     |
| **Sessions & temporary tables**                          | `session_id`, `CREATE TEMPORARY TABLE`, per-session `SET` commands                                                                                                                                                              | `reference/sessions.md`             |
| **Modern data types**                                    | `Dynamic`, `Variant`, `JSON` (object), `Time`, `Time64`, `QBit` (vector search)                                                                                                                                                 | `reference/data-types.md`           |
| **Custom JSON parse/stringify**                          | Plug in `JSONBig` / `safe-stable-stringify` / a `BigInt`-aware serializer                                                                                                                                                       | `reference/custom-json.md`          |

---

## Conventions used in answers

- Always show `import { createClient } from '@clickhouse/client'` (Node, never
  Web).
- Always `await client.close()` at the end of self-contained snippets; in
  long-running services, close on graceful shutdown.
- For inserts, prefer `format: 'JSONEachRow'` and `values: [...]` unless the
  user's scenario requires otherwise.
- For selects, prefer `await (await client.query({...})).json<RowType>()` for
  small / medium result sets; for bigger results suggest streaming.
- When showing parameter binding, use ClickHouse's native `{name: Type}`
  syntax — never `$1`, `?`, or `:name`.
- For DDL inside a cluster or behind a load balancer, set
  `clickhouse_settings: { wait_end_of_query: 1 }` on the `command()` call so
  the server only acknowledges after the change is applied. See
  https://clickhouse.com/docs/en/interfaces/http/#response-buffering.

---

## Out of scope

This skill covers day-to-day coding against `@clickhouse/client` (Node).
The following topics are intentionally **not** covered here:

- **Errors, hangs, type mismatches, proxy pathname surprises, log silence,
  socket hang-ups, `ECONNRESET`** → use the
  `clickhouse-js-node-troubleshooting` skill.
- **Streaming, Parquet, file streams, server-side bulk moves, progress
  streaming, async-insert throughput tuning** — see
  [`examples/node/performance/`](https://github.com/ClickHouse/clickhouse-js/tree/main/examples/node/performance).
- **TLS, RBAC / read-only users, deeper SQL-injection guidance** — see
  [`examples/node/security/`](https://github.com/ClickHouse/clickhouse-js/tree/main/examples/node/security).
- **`CREATE TABLE` patterns, deployment-shaped connection strings,
  replication / sharding choices** — see
  [`examples/node/schema-and-deployments/`](https://github.com/ClickHouse/clickhouse-js/tree/main/examples/node/schema-and-deployments).
- **Browser, Web Worker, Next.js Edge, Cloudflare Workers** — use
  `@clickhouse/client-web` and see
  [`examples/web/`](https://github.com/ClickHouse/clickhouse-js/tree/main/examples/web).

---

## Still Stuck?

- [`examples/node/coding/`](https://github.com/ClickHouse/clickhouse-js/tree/main/examples/node/coding) — the runnable corpus this skill is built on.
- [ClickHouse JS client docs](https://clickhouse.com/docs/integrations/javascript)
- [ClickHouse supported formats](https://clickhouse.com/docs/interfaces/formats)
- [ClickHouse data types](https://clickhouse.com/docs/sql-reference/data-types)

© ClickHouse · Apache-2.0 · ClickHouse/agent-skills

Похожие скиллы

Все скиллы по теме «Данные и базы» →
clickhouse-io affaan-m Справочник архитектурных шаблонов и оптимизации ClickHouse: помогает проектировать таблицы на движках MergeTree и ускорять медленные аналитические запросы. CX Codex +1 4 500установок node mcollina Даёт агенту правила для Node.js и TypeScript: от запуска .ts без сборки до потоков, тестов и остановки сервиса. CX Codex +1 5 900установок kysely Claude MPM Team Скилл по Kysely: типы от схемы до результата запроса, миграции и транзакции. Пригодится, когда ORM уже мешает, а сырой SQL без типов надоел. CX Codex +1 389установок typeorm Mindrally Скилл задаёт агенту правила работы с TypeORM: сущности, связи, репозитории и миграции. Пригодится, когда проект на TypeScript с базой данных. CX Codex +1 2 000установок prisma Mindrally Правила проектирования схем Prisma ORM, изоляции тестов и типобезопасных запросов. Помогает выстроить слой репозиториев в TypeScript. CX Codex +1 1 000установок data-analyst cline Скилл превращает агента в аналитика: уточняет вопрос, пишет ограниченный SQL к ClickHouse и объясняет, что стоит за цифрой. CX Codex +1 2 200установок

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

clickhouse-best-practices Скилл с набором правил для проверки схем, запросов и конфигураций ClickHouse. Помогает агентам избежать типичных ошибок в дизайне таблиц, оптимизации JOIN и батчировании данных. CX Codex +1 21 700установок clickhouse-architecture-advisor Помогает спроектировать архитектуру ClickHouse под конкретный тип нагрузки: от стратегии вставки до партиционирования. Дополняет clickhouse-best-practices ссылками на документацию. CX Codex +1 9 800установок chdb-sql Скилл учит агента писать аналитический SQL по parquet, CSV, S3 и удалённым базам через chDB — это ClickHouse, встроенный в процесс Python, сервер поднимать не нужно. CX Codex +1 8 900установок chdb-datastore Скилл учит агента ускорять код на pandas через chDB и движок ClickHouse. Пригодится для тяжёлых выборок, паркета и объединения разных баз данных. CX Codex +1 7 900установок clickhouse-js-node-troubleshooting Помогает находить и устранять сбои в Node.js-клиенте @clickhouse/client: обрывы сокетов, ошибки типов данных и проблемы с TLS. CX Codex +1 7 600установок clickhouse-managed-postgres-rca Ищет причины просадки производительности ClickHouse-managed Postgres по метрикам Prometheus и Slow Query Patterns, предлагая исправления без их применения. CX Codex +1 6 600установок clickhouse-js-node-rowbinary Генерирует TypeScript и JavaScript для чтения и записи потоков ClickHouse RowBinary в Node.js. Нужен при работе с двоичным HTTP-форматом таблиц. CX Codex +1 6 400установок

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

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