Nanoclaw: Легковесный ИИ-ассистент для индивидуальных пользователей

Что такое Nanoclaw?

Nanoclaw — это легковесный AI-ассистент, построенный на базе Claude Agent SDK, который запускает агентов в изолированных контейнерах. В отличие от сложных AI-систем, Nanoclaw создан как «небольшой настолько, чтобы его можно было понять» — это всего один процесс и несколько файлов исходного кода README.

Альтернативой для сравнения служит OpenClaw — проект с почти полумиллионом строк кода, 53 конфигурационными файлами и более чем 70 зависимостями. Его безопасность реализована на уровне приложения (белые списки, коды привязки), а не на уровне операционной системы. Всё работает в одном Node.js-процессе с общей памятью. Nanoclaw же предоставляет ту же ядерную функциональность, но в кодовой базе, которую можно понять за короткое время README.

Философия проекта

Nanoclaw основан на восьми ключевых принципах:

Small enough to understand — «Небольшой настолько, чтобы его можно было понять». Один процесс, несколько исходных файлов и отсутствие микросервисов. Если вы хотите понять всю кодовую базу Nanoclaw — просто попросите Claude Code провести вас по коду README.

Secure by isolation — «Безопасность через изоляцию». Агенты запускаются в Linux-контейнерах (Apple Container на macOS или Docker), и они могут видеть только то, что явно смонтировано. Bash-доступ безопасен, поскольку команды выполняются внутри контейнера, а не на хостовой системе README.

Built for the individual user — «Создан для индивидуального пользователя». Nanoclaw — это не монолитный фреймворк, а ПО, которое подстраивается под конкретные нужды каждого пользователя. Nanoclaw спроектирован как кастомное решение. Вы создаёте собственный форк и позволяете Claude Code модифицировать его под ваши требования README.

Customization = code changes — «Кастомизация через изменения кода». Вместо сложных конфигурационных файлов и UI-настроек, Nanoclaw полагается на прямые изменения кода. Это упрощает архитектуру и делает поведение системы предсказуемым и прозрачным README.

AI-native — «AI-ориентированный подход». Nanoclaw не требует установки, мониторинга или отладки в традиционном понимании. Claude Code управляет всем процессом: установкой, аутентификацией, настройкой контейнеров и сервисов. Мониторинг и отладка производятся через диалог с Claude README.

Skills over features — «Скиллы вместо функций». Вместо насыщения ядра десятками встроенных функций, Nanoclaw делает ставку на skills — небольшие, сфокусированные расширения, такие как /add-telegram или /add-whatsapp. Это позволяет поддерживать ядро лёгким и стабильным, а расширения — простыми в разработке и поддержке README.

Best harness, best model — «Лучший инструмент, лучшая модель». Nanoclaw запускает Claude Code напрямую через Claude Agent SDK, используя его высокие способности к программированию для модификации и расширения системы README.

OneCLI Agent Vault for credentials — «Управление учётными данными через OneCLI Agent Vault». Агенты никогда не получают исходные API-ключи. Исходящие запросы проходят через OneCLI Agent Vault, который внедряет учётные данные во время запроса и применяет политики и лимиты на уровне агента README, OneCLI GitHub.

Сравнение с OpenClaw

Характеристика Nanoclaw OpenClaw
Кодовая база ~1000 строк TypeScript ~500 000 строк TypeScript/Python
Конфигурационные файлы 3 53+
Зависимости 3 основные + 9 dev-зависимостей 70+
Контейнеризация Docker/Apple Container Нет (один процесс)
Изоляция агентов OS-level (контейнеры) Application-level (белые списки)
Источник доверия Система операционной Приложение

Основные компоненты

Nanoclaw состоит из нескольких ключевых компонентов:

  1. Orchestrator (src/index.ts) — главный процесс, который управляет всеми группами и каналами. Он прослушивает входящие сообщения и направляет их в соответствующие группы.

  2. Groups — изолированные рабочие среды для агентов. Каждая группа имеет свою папку, триггер и конфигурацию контейнера.

  3. Channels — интеграции с мессенджерами (Telegram, WhatsApp, Discord и другие). Каждый канал реализует интерфейс Channel и может быть добавлен через Claude Code skills.

  4. Container Runner — отвечает за запуск и управление контейнерами. Он использует OneCLI SDK для взаимодействия с контейнерами.

  5. Task Scheduler — планировщик периодических задач и триггеров.

  6. IPC Server — сервер межпроцессного взаимодействия для синхронизации и планирования задач. Использует файловую систему, а не HTTP.

  7. Database — SQLite база данных для хранения сообщений, групп, сессий и состояния.

  8. Router — форматирование сообщений и исходящая маршрутизация.

  9. Mount Security — безопасность монтирования путей.

  10. Sender Allowlist — белые списки отправителей.

  11. Session Cleanup — очистка сессий.

  12. Remote Control — удалённое управление.

  13. Timezone — работа с часовыми поясами.


Архитектура и компоненты системы

Структура проекта

nanoclaw/
├── src/                      # Исходный код
│   ├── index.ts             # Оркестратор
│   ├── container-runner.ts  # Запуск контейнеров
│   ├── container-runtime.ts # Работа с Docker CLI
│   ├── config.ts            # Конфигурация
│   ├── types.ts             # Типы данных
│   ├── logger.ts            # Логирование
│   ├── group-queue.ts       # Очередь сообщений для каждой группы
│   ├── task-scheduler.ts    # Планировщик задач
│   ├── ipc.ts               # IPC watcher (файловая система)
│   ├── db.ts                # SQLite база данных
│   ├── router.ts            # Форматирование и маршрутизация
│   ├── mount-security.ts    # Безопасность монтирования
│   ├── sender-allowlist.ts  # Белые списки отправителей
│   ├── group-folder.ts      # Работа с папками групп
│   ├── session-cleanup.ts   # Очистка сессий
│   ├── remote-control.ts    # Удалённое управление
│   ├── timezone.ts          # Работа с часовыми поясами
│   ├── env.ts               # Чтение переменных окружения
│   └── channels/            # Реализации каналов
├── groups/                   # Папки групп (создаются динамически)
│   └── global/              # Глобальная память для всех групп
├── store/                    # Постоянное хранилище (SQLite DB)
│   └── auth/                # Сессии авторизации каналов
├── data/                     # Данные для агентов
│   └── sessions/{group}/    # Изолированные сессии Claude для каждой группы
│       └── .claude/         # Конфигурация сессий
├── .claude/skills/          # Skills для добавления каналов (32 навыка)
├── container/               # Dockerfile и agent-runner
├── config-examples/         # Примеры конфигурации
├── docs/                    # Документация
├── scripts/                 # Скрипты установки и настройки
└── .env.example             # Пример переменных окружения

Оркестратор (Orchestrator)

Оркестратор — это главный процесс, который управляет всеми группами и каналами. Он выполняет следующие функции:

  • Загрузка конфигурации из .env файла
  • Инициализация каналов
  • Управление группами (добавление, удаление, обновление)
  • Обработка входящих сообщений
  • Планирование периодических задач
  • Мониторинг состояния контейнеров

Код оркестратора находится в src/index.ts. Он создает экземпляр Nanoclaw и запускает его:

import { Nanoclaw } from './nanoclaw.js';

const nanoclaw = new Nanoclaw();
await nanoclaw.start();

Группы (Groups)

Группы — это изолированные рабочие среды для агентов. Каждая группа имеет:

  • Имя — уникальное имя группы
  • Папка — путь к папке группы (например, groups/my-group)
  • Триггер — слово или фраза, которая запускает агента (например, @Andy)
  • Конфигурация контейнера — дополнительные параметры для контейнера

Группы создаются динамически при добавлении новых папок в groups/. Каждая группа запускается в отдельном контейнере.

Каналы (Channels)

Каналы — это интеграции с мессенджерами. Nanoclaw поддерживает несколько каналов:

  • Telegram — через Telegram Bot API
  • WhatsApp — через WhatsApp Business API
  • Discord — через Discord Bot API
  • Slack — через Slack Web API
  • Gmail — через Gmail API
  • X (Twitter) — через X API

Каждый канал реализует интерфейс Channel:

export interface Channel {
  name: string;
  connect(): Promise<void>;
  sendMessage(jid: string, text: string): Promise<void>;
  isConnected(): boolean;
  ownsJid(jid: string): boolean;
  disconnect(): Promise<void>;
  setTyping?(jid: string, isTyping: boolean): Promise<void>;
  syncGroups?(force: boolean): Promise<void>;
}

Важно: Каналы уже существуют в репозитории в виде навыков (skills) для Claude Code. Например, для добавления WhatsApp-канала используется skill /add-whatsapp, который копирует необходимые файлы в папку .claude/skills/add-whatsapp/. В репозитории доступно 32 навыка, включая /add-telegram, /add-discord, /add-slack, /add-gmail и другие.

Container Runner

Container Runner отвечает за запуск и управление контейнерами. Он использует прямые вызовы Docker CLI через spawn с командами docker run. Docker Compose не используется.

import { spawn } from 'child_process';
import { CONTAINER_RUNTIME_BIN } from './container-runtime.js';

const containerName = `nanoclaw-${Date.now()}`;
const args = [
  'run', '--rm',
  '--name', containerName,
  '--add-host=host.docker.internal:host-gateway',
  '-v', `${projectRoot}:/workspace/project:ro`,
  '-v', `${groupDir}:/workspace/group`,
  CONTAINER_IMAGE,
];

const proc = spawn(CONTAINER_RUNTIME_BIN, args);

Container Runner использует OneCLI SDK для взаимодействия с контейнерами:

import { OneCLI } from '@onecli-sh/sdk';

const ONECLI_URL = process.env.ONECLI_URL || 'http://localhost:10255';
const onecli = new OneCLI({ url: ONECLI_URL });
await onecli.ensureAgent();

Task Scheduler

Task Scheduler — это планировщик периодических задач и триггеров. Он использует межпроцессное взаимодействие (IPC) для синхронизации и планирования задач.

export interface ScheduledTask {
  id: string;
  group_folder: string;
  chat_jid: string;
  prompt: string;
  script?: string | null;
  schedule_type: 'cron' | 'interval' | 'once';
  schedule_value: string;
  context_mode: 'group' | 'isolated';
  next_run: string | null;
  last_run: string | null;
  last_result: string | null;
  status: 'active' | 'paused' | 'completed';
  created_at: string;
}

Task Scheduler использует IPC для отправки команд агентам и получения результатов выполнения задач.

IPC Server

IPC Server — это сервер межпроцессного взаимодействия для синхронизации и планирования задач. Он использует файловую систему для обмена сообщениями через папки в data/ipc/, а не HTTP-сервер.

const ipcBaseDir = path.join(DATA_DIR, 'ipc');
fs.mkdirSync(ipcBaseDir, { recursive: true });

Константа IPC_POLL_INTERVAL = 1000 (1 секунда) используется для интервала опроса IPC watcher.

База данных (SQLite)

Nanoclaw использует SQLite для хранения сообщений, групп, сессий и состояния. Конфигурация группы хранится в таблице registered_groups, а не в JSON-файлах.

// Пример структуры таблицы registered_groups
CREATE TABLE registered_groups (
  jid TEXT PRIMARY KEY,
  name TEXT NOT NULL,
  folder TEXT NOT NULL,
  trigger TEXT NOT NULL,
  added_at TEXT NOT NULL,
  containerConfig TEXT,
  requiresTrigger INTEGER,
  isMain INTEGER
);

Router

Router отвечает за форматирование сообщений и исходящую маршрутизацию. Он обрабатывает входящие сообщения и направляет их в соответствующие каналы.

Mount Security

Mount Security реализует безопасность монтирования путей. Белые списки хранятся вне проектного корня в ~/.config/nanoclaw/ и не монтируются в контейнеры.

export const MOUNT_ALLOWLIST_PATH = path.join(
  HOME_DIR,
  '.config',
  'nanoclaw',
  'mount-allowlist.json',
);
export const SENDER_ALLOWLIST_PATH = path.join(
  HOME_DIR,
  '.config',
  'nanoclaw',
  'sender-allowlist.json',
);

Group Queue

Group Queue реализует очередь на уровне группы с ограничением глобальной параллельности:

  • MAX_CONCURRENT_CONTAINERS = 5 — глобальный лимит параллельных контейнеров
  • Каждая группа имеет свою очередь с лимитом параллельных запросов
  • Поддержка retry с экспоненциальной задержкой (MAX_RETRIES = 5, BASE_RETRY_MS = 5000)

Конфигурация и интервалы опроса

В src/config.ts определены следующие константы:

export const POLL_INTERVAL = 2000;           // 2 секунды — основной цикл сообщений
export const SCHEDULER_POLL_INTERVAL = 60000; // 60 секунд — планировщик задач
export const IPC_POLL_INTERVAL = 1000;        // 1 секунда — IPC watcher
export const MAX_CONCURRENT_CONTAINERS = 5;   // Глобальный лимит контейнеров

Монтирование путей

Система монтирования путей в контейнеры является более сложной, чем описано в базовой версии:

  • Main group получает проект root в режиме только для чтения (/workspace/project:ro)
  • Shadow .env — монтируется как /dev/null для защиты от чтения секретов
  • Main group получает writable доступ к store/, group/, global/
  • Non-main groups получают global/ в режиме только для чтения
  • Дополнительные пути могут быть указаны в additionalMounts с проверкой через mount-allowlist

Входные и выходные форматы данных

Структура сообщения

Сообщения в Nanoclaw имеют следующую структуру:

export interface NewMessage {
  id: string;
  chat_jid: string;
  sender: string;
  sender_name: string;
  content: string;
  timestamp: string;
  is_from_me?: boolean;
  is_bot_message?: boolean;
  thread_id?: string;
  reply_to_message_id?: string;
  reply_to_message_content?: string;
  reply_to_sender_name?: string;
}

Поле metadata отсутствует в базовом интерфейсе NewMessage. Оно может быть добавлено каналами, но не входит в базовый интерфейс.

Конфигурация группы

Конфигурация группы хранится в SQLite базе данных (таблица registered_groups), а не в JSON-файлах. Пример структуры:

{
  "jid": "group@chat",
  "name": "my-group",
  "folder": "groups/my-group",
  "trigger": "@Andy",
  "added_at": "2024-01-01T00:00:00.000Z",
  "containerConfig": {
    "additionalMounts": [
      {
        "hostPath": "~/projects",
        "containerPath": "/workspace/projects",
        "readonly": true
      }
    ],
    "timeout": 300000
  },
  "requiresTrigger": true,
  "isMain": false
}

Конфигурация контейнера

Конфигурация контейнера задается в containerConfig:

export interface ContainerConfig {
  additionalMounts?: AdditionalMount[];
  timeout?: number;
}

Дополнительные точки монтирования могут быть указаны в массиве additionalMounts.


Возможности и сценарии использования

Основные возможности

Nanoclaw предоставляет следующие возможности:

  1. Запуск агентов в изолированных контейнерах — Агенты запускаются в Linux-контейнерах и не имеют доступа к хостовой системе, кроме смонтированных путей.

  2. Поддержка нескольких мессенджеров — Через каналы Nanoclaw может работать с Telegram, WhatsApp, Discord, Slack, Gmail и другими мессенджерами.

  3. Планирование периодических задач — С помощью Task Scheduler можно запускать агентов по расписанию.

  4. Изоляция групп — Каждая группа работает в отдельном контейнере и не может повлиять на другие группы.

  5. Управление через Claude Code — Все настройки и расширения делаются через Claude Code skills.

  6. Web access — Поиск и извлечение контента из Веба.

  7. Agent Swarms — Запуск команд специализированных агентов для совместной работы над сложными задачами.

  8. Optional integrations — Дополнительные интеграции (Gmail и другие) через skills.

Сценарии использования

Сценарий 1: Личный ассистент

Nanoclaw может работать как личный ассистент, отвечающий на сообщения в мессенджерах и выполняющий задачи.

# Добавление канала WhatsApp
claude
> /add-whatsapp

# Создание группы личного ассистента
@Andy create a personal assistant group

Сценарий 2: Мониторинг и уведомления

Nanoclaw может отправлять уведомления о событиях в системе.

# Планирование задачи мониторинга
@Andy monitor system health every 15 minutes

Сценарий 3: Автоматизация задач

Nanoclaw может автоматизировать повторяющиеся задачи через планировщик.

# Еженедельный отчёт
@Andy every Monday at 8am, compile news on AI developments and message me a briefing

Сценарий 4: Управление группами через основной канал

Основной канал (само-чат) используется для административного управления:

@Andy send an overview of the sales pipeline every weekday morning at 9am (has access to my Obsidian vault folder)
@Andy review the git history for the past week each Friday and update the README if there's drift
@Andy every Monday at 8am, compile news on AI developments from Hacker News and TechCrunch and message me a briefing

Безопасность и доверие

Модель безопасности

Nanoclaw использует модель безопасности «Secure by isolation» — безопасность через изоляцию. Агенты запускаются в Linux-контейнерах и имеют доступ только к смонтированным путям.

Изоляция контейнеров

Каждый агент запускается в отдельном контейнере:

  • Linux-контейнеры — Используется Docker (Linux) или Apple Container (macOS)
  • Изоляция на уровне ОС — Контейнеры изолированы на уровне операционной системы
  • Ограниченный доступ — Агенты видят только смонтированные пути

Монтирование путей

Пути монтируются в контейнеры следующим образом:

  • Проектный корень — Монтируется в /workspace/project в режиме только для чтения (readonly)
  • Shadow .env — Монтируется как /dev/null для защиты от чтения секретов
  • Папка группы — Монтируется в /workspace/group в режиме чтения-записи (read-write)
  • Дополнительные пути — Могут быть указаны в additionalMounts

Управление учётными данными

Агенты никогда не получают исходные API-ключи. Исходящие запросы проходят через OneCLI Agent Vault, который внедряет учётные данные во время запроса и применяет политики и лимиты на уровне агента.

Безопасность контейнеров

Read-only корень проекта

Проектный корень монтируется в режиме только для чтения, чтобы агенты не могли изменить исходный код Nanoclaw.

Белые списки

Для дополнительной безопасности используются белые списки:

  • Mount Allowlist — Пути, которые могут быть смонтированы в контейнеры. Хранится в ~/.config/nanoclaw/mount-allowlist.json
  • Sender Allowlist — Отправители, которым разрешено взаимодействовать с агентами. Хранится в ~/.config/nanoclaw/sender-allowlist.json

Белые списки хранятся вне проектного корня и не монтируются в контейнеры.

Безопасность каналов

Каналы реализуют безопасность на уровне приложения:

  • Telegram — Использует HTTPS и шифрование
  • WhatsApp — Использует HTTPS и шифрование
  • Discord — Использует HTTPS и шифрование

Установка и настройка

Требования

Для установки Nanoclaw необходимы:

  • macOS, Linux или Windows (через WSL2)
  • Node.js — Версия 20 или выше
  • Claude Code — Для управления и настройки
  • Docker — Для запуска контейнеров (Linux) или Apple Container (macOS)

Шаги установки

  1. Клонирование репозитория
gh repo fork qwibitai/nanoclaw --clone
cd nanoclaw
  1. Запуск установки через Claude Code
claude
> /setup

Claude Code автоматически устанавливает зависимости, настраивает аутентификацию, контейнеры и сервисы.

  1. Настройка переменных окружения

Переменные окружения задаются в файле .env (создаётся автоматически через /setup):

ASSISTANT_NAME=Andy
ASSISTANT_HAS_OWN_NUMBER=false
ONECLI_URL=http://localhost:10255
TZ=UTC

Настройка каналов

Каналы добавляются через Claude Code skills. Например, для добавления WhatsApp-канала:

  1. Откройте Claude Code
  2. Выполните команду /add-whatsapp
  3. Следуйте инструкциям в skill

Каналы уже существуют в репозитории в виде навыков (32 навыка в .claude/skills/).

Настройка групп

Группы создаются через диалог с Claude Code:

@Andy create a new group named "work" with trigger "@Work"
@Andy add additional mount for ~/projects to /workspace/projects

Заключение и перспективы

Преимущества Nanoclaw

  1. Простота — Небольшая кодовая база, которую можно понять за короткое время
  2. Безопасность — Изоляция агентов на уровне операционной системы
  3. Гибкость — Возможность кастомизации через изменения кода
  4. Масштабируемость — Поддержка нескольких групп и каналов
  5. AI-native — Управление через Claude Code без установщиков и дашбордов
  6. OneCLI Vault — Безопасное управление учётными данными

Перспективы развития

  1. Расширение каналов — Добавление новых каналов через skills
  2. Улучшение IPC — Оптимизация межпроцессного взаимодействия
  3. Расширение возможностей — Добавление новых функций через skills

Заключение

Nanoclaw — это легковесный AI-ассистент, который предоставляет ту же ядерную функциональность, что и OpenClaw, но в кодовой базе, которую можно понять за короткое время. Он основан на принципах безопасности через изоляцию, кастомизации через изменения кода, AI-native подхода и расширений через skills.

Nanoclaw подходит для пользователей, которые хотят понимать, как работает их AI-ассистент, и иметь возможность кастомизировать его под свои нужды.


Технические детали реализации

Архитектура контейнеров

Каждая группа (group) запускается в отдельном контейнере с изолированной файловой системой. Монтирование директорий осуществляется строго по списку — только явно указанные пути доступны внутри контейнера. IPC (межпроцессное взаимодействие) осуществляется через файловую систему, а не по сети. Per-group очередь сообщений с глобальным ограничением параллелизма обеспечивает управление нагрузкой.

Структура ключевых файлов

  • src/index.ts — оркестратор: управление состоянием, цикл обработки сообщений, вызовы агентов
  • src/channels/registry.ts — реестр каналов, реализующий саморегистрацию при запуске (WhatsApp, Telegram, Discord, Slack, Gmail)
  • src/container-runner.ts — создание потоковых контейнеров агентов через Claude Agent SDK
  • src/group-queue.ts — очередь на уровне группы с ограничением глобальной параллельности
  • src/db.ts — операции SQLite (сообщения, группы, сессии, состояние)
  • src/ipc.ts — IPC watcher и обработка задач через файловую систему
  • src/router.ts — форматирование сообщений и исходящая маршрутизация обратно в каналы
  • src/task-scheduler.ts — выполнение запланированных задач (scheduled tasks)
  • src/config.ts — конфигурация (POLL_INTERVAL, TIMEZONE, ONECLI_URL и т.д.)
  • src/env.ts — обработка переменных окружения

Цикл обработки сообщений

Channels --> SQLite --> Polling loop --> Container (Claude Agent SDK) --> Response
                              ↳ Scheduler loop --> Tasks
                              ↳ IPC Watcher --> File-based IPC

Каждый канал опрашивает серверы с определенным интервалом, сохраняет входящие сообщения в SQLite, затем оркестратор обрабатывает их в изолированном контейнере и отправляет ответы обратно через соответствующий канал.

Переменные окружения (для кастомных endpoints)

ANTHROPIC_BASE_URL=https://your-api-endpoint.com
ANTHROPIC_AUTH_TOKEN=your-token-here

Это позволяет использовать локальные модели через Ollama, open-source модели на Together AI/Fireworks или кастомные деплойменты с Anthropic-compatible API. Модель должна поддерживать формат Anthropic API для лучшей совместимости.


Механизмы доверия

Доверие к Nanoclaw строится на нескольких проверяемых механизмах:

  1. Прозрачность кода — небольшая кодовая база позволяет провести ревью за короткое время
  2. Проверяемая изоляция — контейнеры обеспечивают изоляцию на уровне ОС
  3. Проверяемая безопасность учетных данных — OneCLI Agent Vault с открытым исходным кодом
  4. Возможность самостоятельного ревью — открытый исходный код на GitHub
  5. Community-driven skills — добавление каналов через fork и PR, что предотвращает раздувание кодовой базы
  6. Открытая разработка — все изменения проходят ревью через GitHub

Сравнение с традиционными решениями

Nanoclaw отличается от традиционных AI-ассистентов следующими подходами:

Традиционные решения Nanoclaw Источник
Application-level authentication (allowlists, pairing codes) Контейнерная изоляция на уровне ОС [Nanoclaw Security]
Хранение API-ключей в конфигурационных файлах OneCLI Agent Vault с внедрением учетных данных во время запроса [OneCLI Vault]
Black-box решения с 500k+ строк кода Прозрачность через малую кодовую базу (несколько файлов) [Nanoclaw README]
Ролевая модель доступа Изоляция по группам (per-group isolation) [Nanoclaw Architecture]
Конфигурационный спам Кастомизация через код (skills) [Nanoclaw Skills]

Nanoclaw — это альтернатива сложным AI-ассистентам, где безопасность обеспечивается через изоляцию, прозрачность и открытую разработку. Система подходит для тех, кто хочет понимать, как работает их AI-ассистент, и иметь возможность его кастомизировать под свои нужды.


Сводка ключевых механизмов безопасности:

Механизм Описание Источник
Контейнерная изоляция Изоляция на уровне ОС через Docker/Apple Container [Nanoclaw Docker]
Zero-trust архитектура Нулевое доверие внутри контейнера [Nanoclaw Security Model]
Per-group изоляция Полная изоляция между группами [Nanoclaw Architecture]
OneCLI Vault Централизованное управление учетными данными [OneCLI Security Docs]
AES-256-GCM Шифрование секретов в OneCLI [OneCLI Security Docs]
Audit & Logging Логирование всех действий агентов [Nanoclaw Audit Logs]

Требования

Nanoclaw поддерживает кроссплатформенную работу на macOS, Linux и Windows (через WSL2). Для запуска необходимы:

  • Node.js 20+ — движок для выполнения основного процесса агента
  • Claude Code — интерфейс взаимодействия с агентом (скачать на claude.ai/download)
  • Контейнерный runtime:
    • macOS: Docker или Apple Container (легковесный нативный runtime)
    • Linux: Docker
    • Windows: Docker Desktop через WSL2

Агенты запускаются в изолированных контейнерах — это обеспечивает безопасность на уровне операционной системы, а не на уровне приложения [README].

Быстрый старт

  1. Клонирование репозитория:

    gh repo fork qwibitai/nanoclaw --clone
    cd nanoclaw

    Без GitHub CLI: форкните репозиторий на GitHub, затем выполните git clone https://github.com/<username>/nanoclaw.git.

  2. Запуск агента:

    claude
  3. Начальная настройка: Внутри Claude Code выполните команду /setup. Агент автоматически установит зависимости, настроит контейнеры и сервисы.

  4. Добавление каналов: Используйте команды:

    • /add-whatsapp — добавление WhatsApp
    • /add-telegram — добавление Telegram
    • /add-gmail — добавление Gmail
    • /add-signal — Signal (в разработке)
  5. Проверка работоспособности: После настройки каналов отправьте сообщение агенту через любой из добавленных каналов. Агент должен ответить с использованием триггерного слова (по умолчанию: @Andy).

Конфигурация

Nanoclaw не использует конфигурационные файлы. Все настройки выполняются через команды Claude Code:

  • Изменение триггерного слова: "Измени триггерное слово на @Bob"
  • Пользовательское приветствие: "Добавь приветствие при утреннем обращении"
  • Еженедельное резюме: "Каждый понедельник собирай сводку новостей по ИИ"

Для пошаговой настройки используйте команду /customize. Она направляет пользователя через все параметры конфигурации.

Настройка через skills

Nanoclaw следует подходу Skills vs features: вместо добавления функций в ядро кодовой базы, новые каналы и возможности добавляются через отдельные навыки (skills).

Добавление каналов:

  • /add-whatsapp
  • /add-telegram
  • /add-gmail
  • /add-signal (в разработке)

Workflow для разработчиков:

  1. Сделайте fork репозитория
  2. Внесите изменения в ветку (например, добавление нового канала)
  3. Откройте PR в основной репозиторий
  4. Поддержка создаст skill-ветку (например, skill/telegram) на основе вашего PR
  5. Другие пользователи могут подключить вашу skill-ветку в свой fork

Это предотвращает раздувание кодовой базы и позволяет каждому пользователю собирать только необходимые функции [README].

Переключение между runtime

  • Docker — runtime по умолчанию для macOS, Linux и Windows (через WSL2)
  • Apple Container — легковесный нативный runtime для macOS
    • Команда для переключения: /convert-to-apple-container
  • Docker Sandboxes — дополнительная изоляция через micro VM
    • Подходит для работы с чувствительными данными

Каждый контейнер получает доступ только к явно смонтированным директориям, что обеспечивает изоляцию на уровне файловой системы [README].

Настройка учетных данных

Все API-ключи хранятся в OneCLI Vault — прокси-шлюзе, который внедряет учетные данные во время запроса (credential injection).

Установка OneCLI:

npm install -g @onecli/cli
onecli setup

Добавление API-ключей:

onecli vault set OPENAI_API_KEY sk-real-secret-key-12345 \
  --host api.openai.com \
  --path /v1/chat/completions

Настройка каналов: при добавлении каналов через /add-* команды, OneCLI автоматически сопоставляет учетные данные с нужными API-эндпоинтами.

Проверка настроек: команда /status показывает состояние всех каналов и валидность учетных данных.

Устранение неполадок

Распространенные проблемы:

Проблема Решение
Контейнер не запускается Проверьте версии Docker/Node.js, выполните /setup заново
Каналы не регистрируются Убедитесь в валидности API-ключей через /status
Ошибки с учетными данными Проверьте сопоставление хоста/пути в OneCLI Vault

Логирование и отладка:

  • Используйте команду /debug для диагностики проблем
  • Запросите логи у Claude Code: "Покажи последние записи из логов"
  • Проверьте файлы в директории logs/

Проверка версий:

node --version      # Должно быть v20+
docker --version    # Совместимая версия
claude --version    # Последняя версия Claude Code

Сброс настроек:

  1. Остановите контейнеры: docker-compose down
  2. Удалите данные: rm -rf data/
  3. Запустите /setup заново

Источники:


Резюме ключевых моментов

Nanoclaw представляет собой легковесную альтернативу проекту OpenClaw, созданную для пользователей, которым важна приватность и возможность полного контроля над программным обеспечением, имеющим доступ к их данным [README: Why I Built NanoClaw]. Основная философия проекта — «small enough to understand»: кодовая база сокращена до одного процесса и нескольких файлов, что позволяет полностью освоить архитектуру и вносить изменения без риска [README: Philosophy]. Архитектура основана на Node.js 20+ и использует SQLite в качестве основной базы данных для хранения сообщений, групп и состояния [README: Architecture]. Для расширения функциональности используется подход на основе навыков (skills) — вместо встраивания всех возможностей в ядро, пользователи получают возможность добавлять каналы и интеграции через небольшие навыки Claude Code, такие как /add-whatsapp или /add-telegram [README: Skills over features].

Текущие возможности

Nanoclaw поддерживает несколько каналов общения одновременно: WhatsApp, Telegram, Discord, Slack и Gmail (через навык /add-gmail) [README: What It Supports]. Каждая группа агентов обладает изолированным контекстом: свой файл памяти CLAUDE.md, собственная файловая система и отдельный контейнер-песочница, к которой примонтирован только нужный объем данных [README: What It Supports]. Платформа позволяет запускать запланированные задачи, создавать агентные рои для совместного решения сложных задач и предоставляет доступ к веб-поиску [README: What It Supports]. Для управления доступом к API-ключам используется OneCLI Agent Vault, который внедряет учетные данные непосредственно во время запроса, не передавая их внутрь контейнера [README: Credential security]. Взаимодействие с ассистентом осуществляется через триггерные слова (по умолчанию @Andy) и специальные команды, начинающиеся с / в интерфейсе Claude Code [README: Usage].

Планы развития

Согласно README проекта, в ближайшем будущем планируется интеграция Signal в качестве канала общения, что указано в списке Request for Skills (RFS) [README: RFS]. Улучшение документации также фигурирует как приоритетная задача [README: FAQ]. Потенциальные направления развития включают расширение набора встроенных инструментов, улучшение систем мониторинга и логирования, а также развитие экосистемы навыков через сообщество разработчиков [README: Contributing]. Развитие проекта происходит по принципу community-driven: пользователи вносят изменения в собственные форки, а успешные доработки становятся основой для новых навыков, которые могут быть интегрированы в другие установки [README: Contributing]. Это позволяет поддерживать минимальную ядерную кодовую базу и избегать избыточной функциональности, которая не нужна большинству пользователей [README: What changes will be accepted].

Рекомендации для читателей

Nanoclaw рекомендуется разработчикам, небольшим командам и пользователям, для которых важна приватность и возможность полного контроля над инфраструктурой ИИ-ассистента [README: Philosophy]. Проект идеально подходит для тех, кто готов освоить базовую архитектуру и вносить изменения через код, а не через конфигурационные файлы [README: Customizing]. Для корпоративного масштаба и сложных развертываний с требованиями к централизованному управлению и масштабируемости могут потребоваться альтернативные решения. Начать работу просто: достаточно форкнуть репозиторий на GitHub, клонировать его и запустить команду claude, после чего выполнить /setup [README: Quick Start]. Документация и сообщество (Discord) доступны на сайте https://docs.nanoclaw.dev и в репозитории https://github.com/qwibitai/nanoclaw.