Deepseek-agent: как написать свой Claude Code за 2000 строк кода
Разработчик запилил собственный Claude Code для DeepSeek буквально за одну ночь вместо использования API Anthropic. Результат: ~2000 строк чистого Node.js без ф

Разработчик на Хабре поделился интригующей историей: как за одну ночь он написал собственный полнофункциональный аналог Claude Code — популярного терминального AI-ассистента, работающего из командной строки. Вместо привязки к API Anthropic, он выбрал DeepSeek и запилил всё с нуля на чистом Node.js, создав минималистичный, но по-настоящему мощный инструмент.
Почему потребился свой велосипед
Claude Code — это признанно мощный и универсальный инструмент, но имеет одну критическую проблему для многих разработчиков: жёстко привязан к экосистеме Anthropic и его API. Разработчик захотел получить похожий функционал, но работающий с DeepSeek — альтернативным провайдером, который быстро развивается и предлагает интересные возможности для собственных экспериментов. Вместо использования готовых фреймворков и тяжёлых библиотек, он решил собрать всё нужное с нуля. Такой подход позволил контролировать каждую деталь реализации, избежать лишних зависимостей и создать действительно лёгкое, быстрое решение, которое можно быстро модифицировать под свои нужды.
Что получилось на практике
Проект назван deepseek-agent и содержит примерно 2000 строк чистого, хорошо организованного кода. Но главное достижение — экстремальный минимализм в зависимостях. Автор ограничился всего четырьмя внешними библиотеками, каждая из которых решает конкретную задачу: openai — SDK для работы с DeepSeek API (полностью совместим с OpenAI протоколом) fast-glob — быстрый и эффективный поиск файлов в файловой системе dotenv — удобная загрузка переменных окружения из .env файла @modelcontextprotocol/sdk — поддержка Model Context Protocol для интеграции с внешними инструментами и сервисами Никаких тяжёлых фреймворков типа Express или других слоёв абстракции, которые добавляют код, но не добавляют функциональности. Всё построено на чистом Node.js, что делает исходный код простым для понимания, легко модифицируемым и быстрым в исполнении.
Какие ключевые концепции реализованы
Несмотря на компактность и минимализм кода, deepseek-agent реализует все ключевые механики, которые делают современный AI-ассистент по-настоящему полезным и безопасным: Tool use — агент может самостоятельно вызывать функции: bash-команды, файловые операции (чтение, запись, удаление), MCP-инструменты из других систем Permissions — система управления правами доступа, которая позволяет пользователю одобрять потенциально опасные операции перед их выполнением Memory — агент запоминает контекст между запросами и может ссылаться на детали предыдущих разговоров Context compaction — автоматическое интеллектуальное сжатие истории диалога по мере её роста, чтобы экономить токены и держать размер в разумных пределах * Subagents — возможность запускать вложенных агентов для параллельной и независимой обработки разных задач > «Казалось бы, не столько сложно запилить своего агента, но есть нюансы», — отмечает автор.
Где начинаются настоящие сложности
Реализация каждой из этих концепций имеет свои подводные камни, которые далеко не очевидны при первом взгляде. Система permissions требует очень тщательного проектирования архитектуры, чтобы не создавать дырявые места в контроле безопасности. Context compaction нужно делать умно и деликатно, чтобы сохранить действительно важную информацию и не потерять ключевые детали из предыдущих разговоров. Работа с MCP-протоколом требует глубокого понимания его спецификации и всех нюансов взаимодействия с внешними инструментами. Автор отмечает, что даже на 2000 строк кода нашлось огромное количество мест, где нужно было тщательно учитывать edge case'ы, правильно и элегантно обрабатывать ошибки, а также предусмотреть различные сценарии отказа и сбоев.
Что это значит для экосистемы AI
Этот проект доказывает, что мощные и полнофункциональные AI-ассистенты вполне реализуемы для опытных разработчиков без привязки к единственному провайдеру. Минималистичный подход с ограничением зависимостей не только экономит код и упрощает поддержку, но и делает решение заметно более надёжным и понятным. Модульная архитектура позволяет легко подключать новых провайдеров (Claude, Grok, локальные модели) вместо DeepSeek, просто заменяя API клиент и несколько конфиг-параметров.