Nerve Development

Development guidance for Nerve, an application with a Python backend and a React/TypeScript frontend. It covers setup, testing, building, and contributing changes through pull requests.

In plain words
What is it for?
Fixing Nerve bugs, adding features, reviewing pull requests, running backend tests, and building the frontend.
Why use it?
It explains how to work safely within Nerve's repository structure and contribution process.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/clickhouse/nerve/nerve-dev
Any agent
npx skills add ClickHouse/nerve --skill nerve-dev
Clone the repo
git clone --depth 1 https://github.com/ClickHouse/nerve

Made for: Claude Code, Codex.

Per session 96 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,184 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00096 $0.03184
Opus 5 $0.00048 $0.01592
Sonnet 5 $0.00019 $0.00637
Haiku 4.5 $0.00010 $0.00318

Measured 2d ago against content hash c60a3e6280e8, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

Nerve Development scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

nerve/templates/skills/nerve-dev/SKILL.md · 300 lines

How it starts

The opening of the file, as written. The whole thing — 300 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Nerve Development Skill

Changing your own config (skills, cron, settings), not the app code? Use the nerve-workspace skill instead — that covers the workspace, and which of a pull request or a direct edit applies to this instance. This skill is for developing the Nerve application codebase.

Repository

Nerve lives under the ClickHouse organization on GitHub.

All changes go through PRs — never push directly to main.

Getting Started (Contributors)

# 1. Fork on GitHub, then clone your fork
git clone [email protected]:<your-username>/nerve.git
cd nerve

# 2. Add upstream remote
git remote add upstream [email protected]:ClickHouse/nerve.git

# 3. Set up Python environment (uv sync creates .venv from uv.lock)
uv sync --extra test
source .venv/bin/activate

# 4. Set up frontend
cd web && npm install && cd ..

# 5. Verify
.venv/bin/pytest tests/ -v
cd web && npm run build

Project Layout

nerve/
├── nerve/              # Python backend (FastAPI + Claude Agent SDK)
│   ├── cli.py          # Click CLI (start/stop/restart/status/logs/doctor)
│   ├── config.py       # YAML config loader
│   ├── db/             # SQLite async database package
│   │   ├── base.py         # Database class (connection, _atomic, FTS, mixin composition)
│   │   ├── migrations/     # File-based migration system (numbered .py files + runner.py)
│   │   ├── sessions.py     # SessionStore mixin
│   │   ├── messages.py     # MessageStore mixin
│   │   ├── tasks.py        # TaskStore mixin
│   │   ├── plans.py        # PlanStore mixin
│   │   ├── notifications.py # NotificationStore mixin
│   │   ├── sources.py      # SourceStore mixin (inbox, sync/consumer cursors)
│   │   ├── cron.py         # CronStore mixin
│   │   ├── skills.py       # SkillStore mixin
│   │   ├── mcp.py          # McpStore mixin
│   │   └── audit.py        # AuditStore mixin
│   ├── bootstrap.py    # Self-configuring onboarding (personal/worker mode)
│   ├── workspace.py    # Workspace directory management
│   ├── agent/          # Agent engine, tools, sessions, streaming
│   ├── gateway/        # FastAPI server, WebSocket, auth
│   │   ├── server.py       # App factory, lifespan, WebSocket, static serving
│   │   ├── auth.py         # JWT auth, password verification
│   │   └── routes/         # Domain-specific REST API route modules
│   │       ├── __init__.py      # register_all_routes() assembler
│   │       ├── _deps.py         # RouteDeps container (engine, db, notification_service)
│   │       ├── sessions.py      # /api/sessions/*, /api/chat
│   │       ├── tasks.py         # /api/tasks/*
│   │       ├── plans.py         # /api/plans/*, /api/tasks/{id}/plans
│   │       ├── skills.py        # /api/skills/*
│   │       ├── mcp_servers.py   # /api/mcp-servers/*
│   │       ├── memory.py        # /api/memory/*
│   │       ├── diagnostics.py   # /api/diagnostics
│   │       ├── cron.py          # /api/cron/*
│   │       ├── sources.py       # /api/sources/*
│   │       ├── notifications.py # /api/notifications/*
│   │       └── workflow_runs.py # /api/workflow-runs/*
│   ├── channels/       # Telegram bot, web UI channel adapters
│   ├── cron/           # APScheduler job runner
│   ├── sources/        # Data source adapters (Telegram, Gmail, GitHub)
│   ├── memory/         # Markdown files + memU semantic indexing
│   ├── skills/         # Filesystem-based skill loader
│   ├── tasks/          # Task markdown files + SQLite index
│   ├── notifications/  # Fire-and-forget + async question delivery
│   ├── proxy/          # CLIProxyAPI daemon (Docker/worker mode)
│   ├── workflows/      # Budget-capped workflow runs (workflow_run_* tools)
│   └── templates/      # Mode templates for nerve init (personal/, worker/)
├── web/                # React + TypeScript + Vite frontend
│   ├── src/
│   │   ├── components/ # React components
│   │   ├── pages/      # Route pages (ChatPage.tsx, WorkflowRunsPage.tsx, ...)
│   │   ├── stores/     # Zustand state stores
│   │   │   ├── chatStore.ts    # Chat state + thin WS dispatcher
│   │   │   ├── handlers/       # Domain-specific WS message handlers
│   │   │   └── helpers/        # Stateless helpers (block ops, buffer replay)
│   │   ├── api/        # API client utilities
│   │   └── types/      # TypeScript definitions
│   └── package.json
├── tests/              # pytest suite
├── docs/               # Architecture, config, API docs
├── config.yaml         # Main config (committed)
├── config.local.yaml   # Secrets (gitignored)
└── pyproject.toml      # Python project metadata + entry point

Read the full file on GitHub · 300 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 300 lines · 96 tokens per session scan A c60a3e6280e8

Subscribe to this mod's changes

Nerve Development is a skill published in the GitHub repository ClickHouse/nerve (78 stars, last pushed 2d ago), licensed Apache-2.0. It adds 96 tokens to every session and 3,184 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

hive.chart-creation-foundations

Required reading whenever any chart tool is available. Teaches the one-tool embedding contract (call chartrender → live chart appears in chat AND a downloadable PNG lands in the queen session dir), the ECharts (data viz) vs Mermaid (structural diagrams) decision, the BI/financial-grade aesthetic baseline (no…

aden-hive/hive · 133 tokens

browser-edge-cases

SOP for debugging browser automation failures on complex websites. Use when browser tools fail on specific sites like LinkedIn, Twitter/X, SPAs, or sites with Shadow DOM.

aden-hive/hive · 40 tokens

openai-whisper-api

Transcribe audio via OpenAI Audio Transcriptions API (Whisper).

spinabot/brigade · 20 tokens

post-build-flow

Handles workflow verification and setup after build-workflow succeeds, or when the message contains workflow-verification-follow-up or workflow-setup-required. Load after direct builds, when verificationReadiness requires action, or on orchestrator verify/setup follow-up turns.

n8n-io/n8n · 53 tokens

experiment-tracking-swanlab

Provides guidance for experiment tracking with SwanLab. Use when you need open-source run tracking, local or self-hosted dashboards, and lightweight media logging for ML workflows.

Orchestra-Research/AI-Research-SKILLs · 40 tokens

n8n:create-pr

Creates GitHub pull requests with properly formatted titles that pass the check-pr-title CI validation. Use when creating PRs, submitting changes for review, or when the user says /pr or asks to create a pull request.

n8n-io/n8n · 50 tokens