by arthurpanhku (community) Windows, macOS, Linux, OpenAI, Claude, DeepSeek, Groq, Ollama, любые OpenAI-совместимые модели, Claude Desktop, Claude Code, OpenCode
Согласуемый, local-first AI coding-агент для регулируемых команд: политики контроля, управляемый MCP, пакеты доказательств, аудит-трейлы, безопасное устранение проблем, любая OpenAI-совместимая модель.
Интерактивный CLI (и веб-интерфейс), использующий Claude 3.5 Sonnet для задач разработки ПО. Позволяет Claude генерировать и …
Token-эффективный AI-агент — та же плотность интеллекта при том же бюджете токенов.
Платформа для запуска и управления AI-агентами разработки — «ваша первая AI Agents Company».
Экспериментальный CLI coding-агент, эксперименты вокруг архитектуры Goose.
Инструкция по установке не найдена в README проекта — возможно, она описана только во внешней документации. Ссылки на репозиторий смотрите на вкладке «About».

English · 中文 · 🌐 dvalincode.dev
Открытая инженерия безопасности для кода, написанного людьми и ИИ-агентами.
Обнаруживай. Исправляй. Проверяй.
Dvalin — это независимая среда выполнения безопасности между генерацией кода и его слиянием. Люди, кодинг-агенты и CI вызывают одну и ту же версионированную спецификацию для обнаружения, исправления и проверки; Dvalin нормализует данные сканеров, применяет шлюз с учётом базовой линии, сохраняет рабочий процесс безопасности и независимо проверяет исправление перед публикацией. Его встроенная способность к кодированию — это исполнитель исправлений — не граница доверия и не попытка конкурировать с каждым универсальным кодинг-агентом.
Dvalin может работать независимо, конкурировать в пересекающихся рабочих процессах безопасности приложений или взаимодействовать со специализированными системами, такими как Codex Security. Портативный экспорт SARIF от Codex Security может стать локальными кейсами исправлений Dvalin и пройти через тот же шлюз релиза, что и любой другой человек или агент. Dvalin отличается детерминированной базовой линией без учётной записи, открытым парком много-движковых сканеров, агент-нейтральными интерфейсами, локальной работой и аудиторскими доказательствами, связанными с политиками. Мы принимаем сильные идеи рабочих процессов там, где они улучшают результаты пользователей, сохраняя оба продукта опциональными. См. стратегию security-агента.
npx dvalincode security scan .
# After installing the package: dvalin scan .
Это всё. Он запускает встроенные правила для инъекций, захардкоженных
секретов, XSS, eval и небезопасного использования оболочки в текущей
директории и выводит найденное. Без учётной записи, без модели, без конфигурации,
код не покидает вашу машину. Политика по умолчанию запускает только Dvalin Built-in,
поэтому первое сканирование всегда работает. Добавляйте опциональные движки явно
или просмотрите их фиксированные команды установки:
dvalin scanners list
dvalin scanners install semgrep # review the command
dvalin scanners install semgrep --yes # execute it under Dvalin policy
Для инкрементального шлюза «без новых критических находок» зафиксируйте политику и базовую линию вместе с репозиторием:
dvalin init
dvalin baseline
dvalin scan
Это создаёт dvalin.security.json и .dvalin/baseline.json. Подавления
требуют причину и могут иметь владельца и дату истечения срока. Вывод сканирования —
это версионированный конверт с детерминированным результатом шлюза
и возобновляемым ID рабочего процесса.
# .github/workflows/security.yml
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0 # so the scan can reach the base commit
- uses: arthurpanhku/dvalincode@v0.17.0
with:
fail-on: high
diff: true # only report on what this PR changed
Находки отображаются инлайн в диффе pull request и в вашей вкладке Security. Без ключа API, без секретов, без модели — сканирование детерминировано и локально для раннера. Полный пример →
diff: true сообщает только о строках, изменённых в pull request, поэтому шлюз
блокирует то, что этот изменение добавляет, а не всё, что репозиторий уже нёс ранее.
Именно это и делает проверку применимой к кодовой базе, которая изначально не была чистой. Просто запустите её для сканирования всего репозитория.
Если код пишет агент, то проверять его должен кто-то другой, а не этот агент. DvalinCode — это MCP-сервер, поэтому любой агент, поддерживающий MCP, может:
claude mcp add dvalin -- npx -y dvalincode mcp-serve --workspace .
Одна команда настраивает редактор, которым вы реально пользуетесь:
npx dvalincode mcp-install cursor # .cursor/mcp.json
npx dvalincode mcp-install vscode # .vscode/mcp.json
npx dvalincode mcp-install claude-code # .mcp.json
Форматы различаются так, что ошибка происходит незаметно — VS Code хранит свои серверы в servers, а Cursor — в mcpServers, — поэтому команда записывает правильный вариант и объединяет его с тем, что уже есть. Редакторы и MCP →
dvalin_scan принимает diff: "uncommitted", что позволяет сообщать только о том, что только что написал агент, а не обо всём, что уже было в репозитории — это разница между полезным ответом и стеной из ранее существовавших находок. Он никогда не запускает модель и не изменяет целевое рабочее пространство. Он записывает небольшой локальный рабочий процесс, чтобы агент мог получить одну находку по отпечатку и запросить независимое повторное сканирование через dvalin_get_finding и dvalin_verify_findings. Ответы включают MCP structuredContent; готовность сканера доступна через dvalin_list_scanners. Тот же сервер предоставляет dvalin_run_task в качестве дополнительного вспомогательного инструмента, а также инструменты для сессий и аудита.
Проверено на практике с Claude Code 2.1.226 и Codex 0.147.0 — реальный вызов инструмента против опубликованного пакета, а не просто завершение рукопожатия. Интеграции с агентами →
Один сервер, доступ к которому осуществляется так, как ожидает каждый инструмент:
| Среда | Как Dvalin подключается |
|---|---|
| Claude Code | dvalincode mcp-install claude-code, или claude mcp add · skill |
| Codex | codex mcp add · интероперабельность SARIF с Codex Security |
| Cursor | dvalincode mcp-install cursor |
| VS Code | dvalincode mcp-install vscode · расширение для панели Problems — создано, но ещё не опубликовано |
| Windsurf · Zed | stdio MCP через их собственные настройки — команда сервера |
| Любой MCP-клиент | Реестр MCP: io.github.arthurpanhku/dvalincode |
| GitHub Actions | Действие в Marketplace — находки прямо в diff pull request |
| Любая CI | dvalin scan . --fail-on high, вывод SARIF для code scanning |
Форматы конфигурации MCP не взаимозаменяемы — VS Code хранит свои серверы в servers, Cursor в mcpServers, и неверный вариант молча не работает — поэтому mcp-install записывает правильную структуру и объединяет её с уже существующей. Редакторы и MCP →
Codex Security может экспортировать завершённое, запечатанное сканирование в формате SARIF. Импортируйте этот переносимый срез, не связывая Dvalin с приватным каталогом состояния Codex Security:
DVALIN_CODEX_SCAN_DIR=/tmp/codex-security-results
npx @openai/codex-security scan . --output-dir "$DVALIN_CODEX_SCAN_DIR"
npx @openai/codex-security export "$DVALIN_CODEX_SCAN_DIR" \
--export-format sarif --source-root "$PWD" --output /tmp/codex-security.sarif
dvalin import /tmp/codex-security.sarif .
dvalin scan . --fail-on high
Импорт создаёт стабильные кейсы исправления Dvalin; --no-persist проверяет передачу без изменения бэклога. Храните оригинальный манифест Codex Security, находки и артефакты покрытия вместе — Dvalin импортирует проекцию находок SARIF, но не переписывает запечатанный пакет и не переинтерпретирует его покрытие. Руководство по интеграции →
dvalincode dvalin . --fix --verify --draft-pr
Этот шаг действительно использует модель — вашу модель, любую OpenAI-совместимую конечную точку. Она готовит точечные исправления в изолированном рабочем дереве, запускает ваши тесты и требует чистого повторного сканирования, прежде чем что-либо сможет перейти к черновику pull request. Она никогда не делает автоматический merge, и чистое сканирование никогда не рассматривается как доказательство того, что код безопасен.

Эта анимация создана на основе реального приложения, а не макета. Входные данные — пример с лицензией Apache-2.0, адаптированный из OWASP NodeGoat, чей маршрут взноса обрабатывал текст, управляемый пользователем.
Dvalin превращает доказательства с открытого сканера в контролируемый рабочий процесс сканирование → исправление → тест → повторное сканирование → черновик PR. Вот запуск из анимации выше, измеренный:
| Реальный запуск, полученный из NodeGoat | До | После исправления Dvalin |
|---|---|---|
| Состояние безопасности (эвристика триажа) | 22 / 100 · F | 100 / 100 · A |
| Находки | 10 (eval по 3 правилам, 2 движка) |
0 |
| Тесты | 2 проходят | 3 проходят, включая регрессионный тест на инъекции |
| Флот сканеров | 4 / 4 завершено | 4 / 4 завершено |
Плоскость управления сканированием и усилением использует компоненты с открытым исходным кодом:
Сканеры находят и ранжируют доказательства. Настроенная модель предлагает изменения исходного кода; DvalinCode ограничивает эту работу, записывает diff, запускает тесты проекта, повторно сканирует измененное дерево и делает публикацию PR явной. Он не выполняет автоматическое слияние и не утверждает, что чистое сканирование доказывает отсутствие ошибок. Выберите модель с открытым весом через Ollama, если этап предложения исправлений также должен оставаться полностью локальным и открытым; лицензирование размещенной модели зависит от провайдера.
Вы все еще можете доказать, что агент сделал после факта:
dvalincode report verify # re-derive the hash chain of the last run's audit log
Эта последняя команда — то, что имеет значение, когда от этого зависит больше одного человека. DvalinCode — это полноценный агент кодирования — терминал, веб-интерфейс и настольное приложение — созданный так, чтобы организация, а не разработчик, определяла границы его действий: файл политики ограничивает режимы, команды, пути, инструменты и модели; каждый запуск связывается хэш-цепочкой в защищенный журнал аудита; ничего не достигает провайдера, что не разрешил шлюз исходящего трафика. Политика репозитория может только сужать машинный уровень.
Если вы человек, который должен утвердить этот класс инструментов, начните с APPROVABILITY-PLAN.md и Evidence Pack, который поставляется с каждым релизом.
| 🏠 Главная | Единое место для рабочих процессов Ask только для чтения и Collaborate с гейтами одобрения. Переключайте намерение, не выходя из проекта или разговора. |
| ⚡ Код | Сфокусированное автономное кодирование с полным доступом к инструментам и уровнями разрешений Ask / Plan / Auto / Bypass. Процедуры безопасности и браузера больше не конкурируют с основным рабочим процессом кодирования. |
| 🛡️ Dvalin | Выделенная white-box инженерия безопасности: оркестрация встроенного сканера плюс установленные Semgrep CE, Trivy и OSV-Scanner; триаж находок; создание изолированных исправлений; запуск тестов и повторное сканирование; затем явная публикация проверяемого черновика PR. Руководство Dvalin → |
| 🏦 Регулируемые команды | Разработано для финансов, здравоохранения, чувствительных к безопасности SaaS и внутренних платформенных команд, которым нужен ИИ-кодинг в рамках политики, аудита, минимизации данных и проверки цепочки поставок — а не только удобство разработчика. |
| 🛡️ Безопасное исправление | Запустите много-движковое сканирование или импортируйте SARIF из CodeQL, GitHub Code Scanning, Semgrep или совместимых сканеров, затем создайте изолированное рабочее дерево для исправления и превратите находки в целенаправленные задачи по ремонту с контекстом исходного кода, доказательствами проверки и отчетами, готовыми для PR. Рабочий процесс → |
| 📚 Навыки | Загрузка, скачивание и просмотр локальных пакетов навыков. DvalinCode поставляется со встроенными навыками безопасного сканирования кода и его исправления, а также с инструментами агента для вывода списка навыков, чтения инструкций навыков, сканирования, вывода списка случаев и подготовки рабочих деревьев для исправлений. Формат → |
| 🛡️ Журнал аудита | Каждый запуск создаёт защищённый от подделки журнал JSONL с хеш-цепочкой — каждый файл чтения/записи, каждая команда, каждое одобрение. Отчёт о запуске отображает его в Markdown; dvalincode report verify подтверждает целостность цепочки. Модель угроз → |
🔒 Политика организации и trust | Компания, а не разработчик, ограничивает агента. Файл dvalin.policy.json задаёт ограничения на режимы, команды оболочки, пути к файлам, инструменты и модели; политика репозитория может только сужать машинную политику, но никогда не расширять её. Каждый запуск записывает хеш действующей политики. dvalincode trust выводит актуальное состояние безопасности установки — активная политика + хеши, статус аудита, среда выполнения — чтобы рецензент мог проверить это напрямую. Справочник по политике → · План одобряемости → |
| 🏛️ Доказательства управления | OpenSSF Scorecard, CodeQL, Dependabot, закреплённые GitHub Actions, CODEOWNERS и документы соответствия ISO/IEC 42001 AIMS поддерживаются как проверяемые доказательства проекта, а каждый релиз включает комплект доказательств, который бинарный файл создаёт о самом себе. Карта Scorecard → · Соответствие ISO 42001 → · Доказательства релиза → |
| 📐 Открытые спецификации | PCP-1 — контракт границы провайдера (ограничение исходящего трафика, ограничение учётных данных, аудит, привязка политики), написанный как нейтральный к вендору профиль с процедурами тестирования, чтобы любая среда выполнения агента могла запустить его против своих собственных адаптеров и опубликовать результат. Это не тестовый файл DvalinCode; это контрольный список, которому мы также обязаны соответствовать. Профиль соответствия провайдера → |
| 🖥️ Полноценный GUI | Современный веб-интерфейс с подсветкой кода, файловыми @-ссылками, / слэш-командами, индикатором Git-ветки, живым счётчиком токенов и затрат, многопрофильной конфигурацией LLM и переключателем темы (тёмная / светлая / системная). |
| 🖥️ Терминал или веб — один бинарный файл | Запустите его без параметров для интерактивного терминального агента с потоковым выводом, встроенными одобрениями и красно/зелёными диффами, или используйте dvalincode serve для запуска веб-GUI для браузера/удалённого доступа. Оба интерфейса используют одно ядро агента. |
| 🖥️ Нативное desktop-приложение | DvalinCode.app — настоящее приложение в доке (нативный веб-виджет ОС, без Electron) на том же движке. На macOS однострочный установщик автоматически помещает его в /Applications; запускайте его прямо из Launchpad. |
| 🪶 Бинарный файл без зависимостей | Один исполняемый файл ~25 МБ для каждой платформы. Ни Node, ни Python, ни Docker. |
| 🔐 Локальный приоритет | Сессии, конфигурация, профили и журналы аудита хранятся в ~/.dvalincode/. Файл .dvalincodeignore блокирует чтение агентом чувствительных файлов. AGENTS.md в вашем репозитории становится постоянными инструкциями проекта. |
| 💾 Портативность и экспорт | Экспортируйте все локальные данные (память, сессии, конфигурацию, аудит) в один файл и импортируйте его на другой машине — ваша настройка перемещается вместе с вами. Любой разговор скачивается как чистый транскрипт в Markdown. |
Заставить любого человека или агента, создающего код, проходить один и тот же независимый контроль безопасности.
DvalinCode создан как совместимая с агентами среда безопасности, а не очередная запись в бенчмарке общих агентов кодирования. Основной продукт — это доказательства сканирования. политика, базовые проверки, детерминированная верификация и переносимые интерфейсы, которые могут вызывать и человек-разработчик, и внешний агент, и CI. Встроенный агент кодирования остаётся достаточно capable, чтобы реализовывать и тестировать точечные исправления надёжно; его текстовые рассуждения модели никогда не решают, пройден ли security-гейт.
dvalincode trust делает позицию самопроверяемой (прозрачность), а хэш-цепочный журнал доказывает, что делал каждый запуск (аудируемость). Эти три вещи вместе — именно то, что нужно security-ревью, чтобы сказать «да» — и то, что облачные, закрытые, мутирующие журналы агентов структурно предоставить не могут. План одобряемости →Встроенный веб-GUI — это эталонная реализация и витрина рантайма — первый потребитель этого публичного API, демонстрирующий всё, что может рантайм.
DvalinCode отличается одобряемостью. Он создан для команд, которым нужно, чтобы ИИ-кодирование прошло security-, compliance- и data-governance-ревью, прежде чем коснуться production-репозиториев.
dvalin/remediate/...; затем отправляйте точечный промпт на исправление с контекстом исходников и инструкциями по верификации.~/.dvalincode/; .dvalincodeignore и элементы управления политиками ограничивают то, что агент может читать, писать или выполнять.DvalinCode поддерживает на уровне проекта доказательства управления для open-source и корпоративного ревью. Это и есть дифференциатор для команд, где ИИ-кодирование должно пройти security-одобрение, прежде чем достичь production-репозиториев:
AGENTS.md, отравленные MCP-серверы, эскалация через prompt-injection, egress, подделка аудита, цепочка поставок, побег из песочницы), каждая сопоставлена
контроль, который его защищает, и честный остаточный разрыв. Модель угроз →Эти документы являются доказательством внедрения и рабочими процедурами; они не заявляют о сторонней сертификации ISO.
continue возобновляет работу с фактического прогресса в рабочем пространстве.git и GitHub CLI (gh) теперь поддерживают pull, push, создание PR и команды Actions/репозитория через управляемый путь одобрения оболочки.prepublishOnly запускает сборку, проверку типов и набор тестов перед публикацией.DvalinCode.app открывает настоящее окно в доке (WKWebView, без Electron) поверх встроенного движка. Исправлены две ошибки потоков, которые присутствовали в каждой более ранней сборке для настольных компьютеров: блокирующий цикл webview больше не лишает встроенный сервер ресурсов (пустое окно), а webview работает в основном потоке, как требует macOS (вообще без окна) — теперь сервер находится в дочернем процессе того же бинарного файла.curl … install.sh | bash теперь также помещает DvalinCode.app (со значком DvalinCode) в /Applications, поэтому окно настольного приложения запускается прямо из Launchpad после установки CLI. Отказ через DVALINCODE_NO_APP=1; закрепление версии через DVALINCODE_GUI_VERSION.v0.9.0 — 🛡️ Безопасное исправление · Навыки · Усиление CodeQL
v0.8.0 — 🔒 Управление: контролируемый · прозрачный · аудируемый
dvalin.policy.json позволяет компании, а не разработчику, ограничивать агента: какие режимы, команды оболочки, пути к файлам, инструменты и модели разрешены. Два уровня (машинный ~/.dvalincode/policy.json + репозиторий) разрешаются путём сужения — политика репозитория может только ужесточить машинную политику, но никогда не расширить её. Без файла политики поведение идентично прежнему. Применяется в единой точке контроля; каждый отказ — это встроенное ⛔ Blocked by policy плюс событие аудита policy_violation. Справочник по политике →dvalincode trust — выводит текущий уровень безопасности этой установки одной командой — действующая политика + хэши исходников, статус аудита, среда выполнения, зависимости — чтобы рецензент мог проверить, что агент может и не может делать напрямую, а не верить заявлениям на слово. --json для инструментов.dvalincode policy check — проверяет dvalin.policy.json на соответствие схеме, выводит разрешённую политику + канонический хэш (после сужения с машинным уровнем) и завершается с ненулевым кодом при ошибке — для CI и разработки политик. Справочник по политике →run_start, чтобы журнал с защитой от подделки доказывал, какие правила действовали.v0.7.0 — 🧪 Настольное приложение (бета)
dvalincode export / dvalincode import, или кнопки Экспорт / Импорт в панели настроек GUI.dvalincode session md <id> или GET /api/sessions/:id/markdown.DvalinCode.app на macOS, плюс сборки для Windows/Linux. Создано с помощью webview-bun с использованием нативного webview ОС (WKWebView / WebView2 / WebKitGTK) — без Electron, остаётся небольшим автономным бинарным файлом.dvalincode теперь позиционируется исключительно как CLI (терминал + serve).v0.6.0 — терминальный агент · serve · общий исполнитель ходов
dvalincode без аргументов для интерактивного терминального агента кодирования в стиле Claude-Code: потоковые ответы, встроенные подсказки [y/N] для одобрения записей с красно-зелёными диффами, команды /mode · /clear · /git · /plan · /compact · /undo · /help, Ctrl-C для прерывания и пошаговая настройка провайдера при первом запуске. По умолчанию режим только для чтения Chat, переключается на лету.dvalincode serve — веб-GUI теперь работает через команду, поэтому тот же бинарный файл разворачивается без головы на сервере: dvalincode serve --host 0.0.0.0 --no-open.src/agent/session.ts), обеспечивая паритет функций.v0.5.0 — аудиторский след уровня безопасности · Отчёт о запуске · переключатель темы
~/.dvalincode/audit/ (run_start, каждый tool_call / file_* / shell_exec / approval, run_end). Хэш-цепочка делает любые последующие правки обнаруживаемыми. Ни один локальный агент кодирования не поставляет проверяемые журналы поведения. Формат + модель угроз →dvalincode report — Markdown-сводка каждого запуска (прочитанные/изменённые файлы, команды, решения, результат теста), отображаемая как сворачиваемая карточка в GUI и из CLI:dvalincode report --last # показать последний запуск
dvalincode report <run-id> --format json
dvalincode report verify <run-id> # ✓ цепочка цела / ✗ нарушена на шаге N
system следует за вашей ОС в реальном времени; выбор сохраняется между сессиями.v0.4.0 — /compact · командный плейбук dvalin.json · автономные бинарные файлы
/compact — сжатие контекста на основе LLM: заменяет историю разговора структурированной сводкой из пяти разделов (Цель / Выполнено / Решения / Текущее состояние / Ожидает). Разделитель в цепочке чата показывает сокращение токенов (например, 8,412 → 1,203 токена −85%).dvalin.json — зафиксируйте общий набор автоматизированных подсказок в вашем репозитории. Боковая панель загружает их автоматически и позволяет коллегам запускать те же рутинные процедуры в один клик без какой-либо ручной настройки. Кнопка экспорта преобразует ваши личные рутины в dvalin.json в один клик.bun --compile, поэтому веб-интерфейс встроен в серверный бинарник.v0.3.0 — Боковая панель с учётом режима · установка одной командой · многопрофильная конфигурация LLM
localStorage.curl … | bash автоматически определяет вашу ОС и архитектуру, помещает бинарник в ~/.dvalincode/ и прописывает его в вашем PATH. Без зависимостей от менеджера пакетов.Реальное сканирование Dvalin уязвимого кода — Оценка безопасности 22/100 · F, с 10 находками, о которых реально сообщили движки, с указанием строк:

Проверенный результат — три места вызова eval заменены на ограниченный
числовой парсер, добавлен один новый регрессионный тест на инъекции, все четыре
движка с открытым исходным кодом отработали полностью, 0 находок, 100/100 · A:

Домой → Код → Dvalin — текущие рабочие области:

Изображения сканов выше — неотредактированные снимки реального запуска на документированном случае на основе NodeGoat: сканеры были запущены, модель исправила исходный код, тесты проекта были запущены, и дерево было просканировано заново. Ничего не постановочно, и оценка 100/A означает, что настроенные движки ничего не нашли — а не то, что код доказанно безопасен.
| Если вам нужно… | Ответ DvalinCode |
|---|---|
| Агент, который одобрит ваша служба безопасности | Инструменты с ограничениями политики, явные режимы одобрения, dvalincode trust, журналы аудита, подтверждение OpenSSF и документы соответствия ISO/IEC 42001. |
| ИИ-кодинг для регулируемых репозиториев — финансы, здравоохранение, корпоративные данные, код с конфиденциальными данными клиентов | Локальный runtime, собственная модель, .dvalincodeignore, контролируемый исходящий трафик и минимизированные журналы аудита. |
| Более безопасная альтернатива универсальным автономным агентам кодинга | Тезис продукта — контролируемость / прозрачность / аудируемость, а не просто «модель может редактировать файлы». |
| Рабочие процессы ИИ, ориентированные на IDE | Бинарник без зависимостей (~25 МБ). Работает где угодно, IDE не требуется. Оболочка macOS по умолчанию в песочнице — сеть запрещена, запись ограничена cwd. |
| Терминал-ориентированные рабочие процессы ИИ | Запуск из CLI → автоматически открывается современный веб-интерфейс с подсветкой кода и одобрением изменений «красный/зелёный». Одна команда установки, больше ничего не нужно. |
| Только облачные рабочие процессы ИИ | Любая совместимая с OpenAI конечная точка — полноправный участник. Запустите Ollama с Qwen2.5-Coder: без ключа, без интернета, без затрат за токен. |
| Одномашинная настройка ИИ | Файл AGENTS.md, добавленный в репозиторий, передаёт ИИ-контекст в каждый клон. Файл dvalin.json точно так же передаёт команды автоматизации команды — экспортируйте с боковой панели, закоммитьте, и готово. |
brew tap arthurpanhku/dvalincode https://github.com/arthurpanhku/dvalincode
brew install arthurpanhku/dvalincode/dvalincode
Устанавливает тот же релизный архив, подписанный контрольной суммой, что и однострочник, а
brew upgrade поддерживает его в актуальном состоянии. Homebrew никогда не применяет
атрибут карантина macOS, поэтому этот путь не подпадает под Gatekeeper.
curl -fsSL https://raw.githubusercontent.com/arthurpanhku/dvalincode/main/scripts/install.sh | bash
Определяет вашу ОС и архитектуру, загружает правильный бинарник, устанавливает в ~/.dvalincode/ и добавляет его в ваш PATH. На macOS также устанавливает нативный DvalinCode.app в /Applications (пропустите с помощью DVALINCODE_NO_APP=1), так что окно рабочего стола запускается прямо из Launchpad. После перезагрузки:
source ~/.zshrc # or ~/.bashrc
dvalincode # interactive terminal agent
dvalincode dvalin . # white-box security scan (GUI-independent)
dvalincode serve # start the web GUI, open the browser
dvalincode serve --host 0.0.0.0 --no-open # host it on a server for remote/browser use
echo "inspect src and summarize" | dvalincode run - --output-format stream-json
dvalincode mcp-serve # task-level stdio MCP server for external agents
Безголовый режим run и mcp-serve сохраняют ту же политику и контрольную точку аудита, что и интерактивные клиенты. См. рецепты для автоматических сценариев с примерами для cron, CI и внешних агентов.
Скачайте dvalincode-v*-windows-x64.zip со страницы релизов, распакуйте и дважды кликните start.bat.
Возьмите архив для вашей платформы со страницы релизов:
| Платформа | Архив |
|---|---|
| macOS Apple Silicon (M1/M2/M3) | dvalincode-v*-macos-arm64.tar.gz |
| macOS Intel | dvalincode-v*-macos-x64.tar.gz |
| Windows x64 | dvalincode-v*-windows-x64.zip |
| Linux ARM64 | dvalincode-v*-linux-arm64.tar.gz |
| Linux x64 | dvalincode-v*-linux-x64.tar.gz |
Проверьте по SHA256SUMS.txt (включён в каждый релиз).
Каждый релиз также содержит dvalincode-v*-evidence.json — пакет доказательств (Evidence Pack), который поставляемый бинарник сгенерировал сам о себе на сборочной машине: два реальных управляемых запуска, один разрешённый и один заблокированный политикой, с их хэш-цепочками. Вы можете проверить утверждения на этой странице перед установкой чего-либо:
dvalincode evidence verify dvalincode-v0.14.0-evidence.json # offline, reads only the file
Контрольная сумма пакета находится внутри SHA256SUMS.txt, который является предметом аттестации происхождения сборки релиза. Как это создаётся →
macOS Gatekeeper: бинарники не подписаны. При первом запуске либо снимите флаг карантина командой
xattr -dr com.apple.quarantine ~/.dvalincode, либо щёлкните правой кнопкой мыши по бинарнику в Finder → Открыть → подтвердите.
DvalinCode обновляется сам — нет необходимости повторно запускать установщик:
dvalincode update --check # is a newer release out? (read-only)
dvalincode update # download, verify, and install the latest
Он находит последний релиз на GitHub, и для бинарной установки загружает
соответствующий архив, проверяет его по SHA256SUMS.txt релиза перед
заменой любых файлов, затем заменяет ~/.dvalincode/ на месте. npm-установки
обновляются через npm i -g, а исходники — через git pull. Добавьте
-y, чтобы пропустить запрос, --prerelease для отслеживания предрелизов или --json для скриптов.
Десктопное приложение macOS проверяет отдельный трек релизов gui-v* при запуске.
Когда доступна более новая версия GUI, оно спрашивает перед загрузкой, проверяет архив
по SHA256SUMS-gui.txt, проверяет версию приложения, затем заменяет и
перезапускает DvalinCode.app. Если замена не удалась, выполняется откат к предыдущей версии.
Терминал (по умолчанию): запустите dvalincode. При первом запуске он проведёт вас через одноразовую настройку провайдера (выберите провайдера, вставьте ваш API-ключ, выберите модель) и сохранит её в ~/.dvalincode/config.json. Затем вы попадаете в приглашение — пишите для общения, /mode для переключения между Chat / Cowork / Code / Dvalin, /help для списка команд. В GUI разделы Chat и Cowork объединены в Home.
Веб-GUI: запустите dvalincode serve, затем:
http://localhost:3000, и ваш браузер открывается автоматически.fast, cheap, local-ollama), чтобы быстро переключаться позже.Оба используют общую конфигурацию и сессии в ~/.dvalincode/.
| Категория | Возможность | Примечания |
|---|---|---|
| Режимы | Home / Code / Dvalin | Home содержит режим Ask только для чтения и Collaborate с одобрением действий; Code — сфокусированная автономная разработка; Dvalin — рабочее пространство безопасности scan-to-fix |
| Разрешения кода | Ask Permissions / Plan Mode / Auto Mode / Bypass permissions | Проверенное поведение: Ask запрашивает одобрение перед записью/командами, Plan только для чтения и не записывает файлы, Auto выполняет операции автоматически, Bypass работает без запросов подтверждения |
| Рабочие пространства | Open folder / Import Git / Add worktree | Cowork и Code могут переключаться на локальную папку, клонировать Git-проект или создавать Git-worktree из интерфейса |
| Управление | OpenSSF Scorecard / ISO 42001 AIMS alignment | Scorecard, CodeQL, Dependabot, закреплённые Actions, оценка воздействия ИИ, реестр рисков и регламент проверок описаны в docs/security/ и docs/governance/ |
| Безопасное исправление | Встроенное + Semgrep CE + Trivy + OSV-Scanner / SARIF / кейсы / worktrees / тесты / черновик PR | Dvalin обнаруживает установленные движки, нормализует SARIF, оценивает риск, сохраняет кейсы, выполняет исправления на основе доказательств, проверяет изменения и публикует только после явного действия пользователя |
| Навыки | Загрузка / выгрузка / встроенные навыки безопасности | Навыки находятся в ~/.dvalincode/skills; встроенные направляют сканирование безопасности и исправления с помощью специальных инструментов агента. Формат → |
| Composer | Ссылки на файлы через @ |
Введите @ для нечёткого поиска файлов; выбранные файлы подставляются в промпт |
Слэш-команды / |
/clear /compact /git /plan /undo /help |
|
| Многострочный ввод + прерывание | Shift+Enter для новой строки, кнопка остановки для прерывания потока | |
| Интерфейс инструмента | Встроенные диффы | Результаты edit_file и write_file отображаются как красно-зелёный unified-дифф, по умолчанию свёрнутый |
| Диалог подтверждения с диффом | Режим Cowork показывает дифф до применения изменения | |
| Живой счётчик инструментов + токены + стоимость | Верхняя панель показывает итоги сессии в реальном времени | |
| Агент | Сжатие контекста на основе LLM | /compact резюмирует в разделы Цель / Выполнено / Решения / Ожидающее |
| Постоянный стек отмены | /undo [N] отменяет последние N вызовов инструментов |
|
| Отчёт о запуске | Markdown-сводка по каждому запуску (файлы, команды, решения, результат теста) — карточка в GUI + dvalincode report |
|
| Осведомлённость о Git | Имя ветки в верхней панели; инструмент git_status; git-контекст автоматически внедряется в промпт |
|
Память проекта AGENTS.md |
Постоянные инструкции для каждого репозитория, автоматически загружаются при каждом ходе | |
| Безопасность | Журнал аудита с защитой от изменений | Хэш-цепочечные JSONL-файлы для каждого запуска в ~/.dvalincode/audit/; dvalincode report verify обнаруживает правки |
| Песочница macOS | sandbox-exec блокирует сеть; разрешает запись только в cwd и /tmp |
|
.dvalincodeignore |
Исключение в стиле gitignore; блокирует read_file / list_files / search_text |
|
| Подтверждение каждого действия | Одобрять/отклонять каждую запись / удаление / вызов shell в режиме Cowork | |
| Внешний вид | Переключение тем | Тёмная / светлая / системная, сохраняется; system следует за ОС в реальном времени |
| Провайдеры | OpenAI-совместимые конечные точки | DeepSeek · OpenAI · Groq · OpenRouter · Ollama · пользовательские |
| Многопрофильная конфигурация | Сохранение и переключение между именованными наборами (провайдер, модель, API-ключ) | |
| Сессии | Автосохранение + восстановление | Все сессии сохраняются в ~/.dvalincode/sessions/ в формате JSON |
| Память с LLM-сводками | Межсессионная сводка сохраняет ориентацию агента после перезапуска | |
| Память | Локальная память пользователя/проекта | Поисковые факты, предпочтения и решения в ~/.dvalincode/memory/; импорт из Claude/Hermes/Markdown |
| Переносимость данных | Экспорт / импорт всех данных | Один пакет: память + сессии + конфигурация + аудит — dvalincode export / import или GUI Настройки → Экспорт / Импорт |
| Markdown-транскрипт | Загрузка любого разговора в формате Markdown — иконка загрузки на боковой панели, dvalincode session md <id> или /api/sessions/:id/markdown |
| Команда | Описание |
|---|---|
/clear |
Очистить текущий разговор (на стороне клиента, начинается новая сессия) |
/compact |
Сжатие контекста на основе LLM — заменяет историю структурированной сводкой |
/undo [N] |
Отменить последние N вызовов инструментов (по умолчанию 1) |
/git |
Выполнить git_status и показать ветку, последние коммиты, изменённые файлы |
/plan <задача> |
Попросить агента спланировать задачу пошагово без выполнения |
/help |
Показать все доступные слэш-команды |
┌───────────────────────────┐ ┌─────────────────────────┐
│ Terminal UI (readline) │ │ Browser GUI (React/Vite)│
│ streaming · approvals │ │ ChatThread · DiffViewer │
└─────────────┬─────────────┘ └────────────┬────────────┘
│ in-process HTTP / WebSocket
│ ┌───────────────▼─────────────┐
│ │ Express + ws server │
│ │ /api/* · `dvalincode serve` │
│ └───────────────┬─────────────┘
└──────────────┬─────────────────┘
┌────────────────────────────▼────────────────────────────┐
│ runAgentTurn — shared turn-runner (src/agent/session) │
│ provider · prompt (mode · git · AGENTS.md) · session │
└────────────────────────────┬────────────────────────────┘
│
┌────────────────────────────▼────────────────────────────┐
│ Agent Engine │
│ AgentLoop (8-state machine) → AgentRunner │
│ Streaming · Interrupt · Undo stack · LLM compaction │
│ run_start / run_end → AuditSink (hash-chained JSONL) │
└──────────────────────────┬──────────────────────────────┘
│ run()
┌──────────────────────────▼──────────────────────────────┐
│ ToolRegistry — Zod schemas + permission gating │
│ + audit taps: tool_call · file_* · shell_exec │
│ read_file · list_files · search_text · git_status · │
│ write_file · edit_file · delete_file · shell │
└─────────────────────────────────────────────────────────┘
RESTORE → COMPACT → COMMAND → BUILD → RUN → SAVE → RESPOND → DONE
~/.dvalincode/sessions/AgentRunner для цикла вызова инструментов LLMnpm test
372 теста · 56 файлов · все зелёные.
Требуется Bun (curl -fsSL https://bun.sh/install | bash).
git clone https://github.com/arthurpanhku/dvalincode
cd dvalincode
npm install
npm run dev:all # start backend (3001) + Vite (5173)
Собрать релизные бинарники для всех платформ:
bash scripts/build-release.sh # → release/ with tar.gz / zip + SHA256SUMS.txt
bash scripts/build-release.sh darwin # macOS only
bash scripts/build-release.sh windows # Windows only
Перед публикацией релиза:
(cd release && shasum -a 256 -c SHA256SUMS.txt)
unzip -l release/dvalincode-v*-windows-x64.zip | grep 'web/dist/index.html'
tar tzf release/dvalincode-v*-macos-arm64.tar.gz | grep 'DvalinCode.app/Contents/Resources/AppIcon.icns'
Windows-смоук-тест: распакуйте dvalincode-v*-windows-x64.zip в Windows и запустите start.bat из распакованной папки. Сервер должен открыть http://localhost:3000. Если он сообщает об ошибке пути ENOENT в B:\~BUN\root\web\dist, значит, определение скомпилированного виртуального пути Bun регрессировало; упакованный бинарник должен разрешать web/dist рядом с распакованным исполняемым файлом.
Примечание: Bun позволяет внедрять иконку/метаданные Windows .exe только при компиляции в Windows. Кросс-сборки macOS/Linux по-прежнему создают корректный Windows-архив, но без встроенной иконки .exe.
DvalinCode поддерживает любую OpenAI-совместимую конечную точку. Встроенные пресеты, отсортированные по стоимости:
| Провайдер | Самая дешёвая модель | Ввод / Вывод | Примечания |
|---|---|---|---|
| Groq | llama-3.1-8b-instant |
Бесплатный тариф | Самые быстрые открытые модели — Llama 3.3 70B, Mixtral |
| Ollama | qwen2.5-coder |
$0 (локально) | Не нужен API-ключ, работает на вашей машине |
| DeepSeek | deepseek-chat |
$0.14 / $0.28 за 1M | Дёшево и мощно; v3 почти соответствует качеству GPT-4 |
| OpenRouter | google/gemini-2.0-flash-001 |
$0.10 / $0.40 за 1M | 200+ моделей, включая Claude, Gemini, Llama |
| OpenAI | gpt-4o-mini |
$0.15 / $0.60 за 1M | Надёжно; o1 доступна для глубоких рассуждений |
| Пользовательский | — | зависит | Любой OpenAI-совместимый базовый URL |
DvalinCode показывает стоимость за сессию в реальном времени в верхней панели — переключайтесь между провайдерами в модальном окне Конфигурация LLM, сохраняйте именованные профили и сравнивайте на лету.
Отправляет ли он мой код третьим лицам?
Только то, что агент отправляет настроенной вами LLM. Сессии, конфигурации и профили хранятся на вашей машине в ~/.dvalincode/. Чтобы исключить конфиденциальные файлы из поля зрения агента, поместите .dvalincodeignore в корень репозитория (шаблоны в стиле gitignore).
Можно ли запускать без API-ключа?
Да — используйте Ollama. Скачайте модель (ollama pull qwen2.5-coder), затем в модальном окне Конфигурация LLM выберите провайдера Ollama. Без ключа, без интернета, без затрат за токен.
Почему Home, Code и Dvalin?
Они представляют разные результаты и настройки безопасности по умолчанию. Home группирует режимы Ask (только чтение) и Collaborate (с одобрением). Code — это специализированный агент разработки ПО. Dvalin — это конвейер безопасности с доказательствами сканера, кейсами исправлений, изолированными рабочими деревьями, верификацией и явной публикацией черновиков PR. Вы можете переключаться в любое время, сохраняя контекст проекта.
Изолирован ли инструмент shell?
На macOS команды используют sandbox-exec; на Linux ограничительные сетевые политики используют Bubblewrap, если он установлен. В Windows пока нет поддерживаемой сетевой изоляции подпроцессов, поэтому ограничительные политики завершаются с ошибкой, а не молча выполняются без ограничений. Сам нативный запуск команд работает на всех трёх платформах.
Какие системные оболочки поддерживаются?
Команды Linux и macOS выполняются через /bin/sh; команды Windows — через системную ComSpec (по умолчанию cmd.exe). Полные нативные командные строки поддерживают конвейеры, перенаправления и условные операторы. Раздельная форма command + args заключает пути исполняемых файлов и аргументы в кавычки для хост-оболочки.
Как увидеть, что агент реально делал — и можно ли доверять журналу?
Каждый запуск записывает журнал аудита в формате JSONL в ~/.dvalincode/audit/run-<timestamp>-<id>.jsonl. Отрисуйте его с помощью dvalincode report --last (или посмотрите сворачиваемую карточку Run Report в GUI). Каждая запись связана с предыдущей SHA-256-хешем, поэтому любое последующее редактирование обнаружимо — dvalincode report verify <run-id> сообщает ✓ цепочка цела или точное место разрыва. Это защита от вмешательства (tamper-evident), а не от взлома (tamper-proof): локальный злоумышленник, способный переписать весь файл, может пересчитать цепочку. Ценность — в судебной экспертизе/подотчётности. Полная модель угроз — в docs/AUDIT-TRAIL.md.
Перезапишет ли он мои файлы без спроса?
Зависит от режима. Home → Ask никогда не записывает. Home → Collaborate требует одобрения для каждого файла (с встроенным красным/зелёным diff до того, как вы нажмёте «Разрешить»). Режимы Code и Dvalin соблюдают выбранный уровень разрешений; используйте Auto только для доверенных рабочих областей или изолированных веток.
Бинарный файл macOS не открывается — «непроверенный разработчик»
Бинарный файл не подписан. Выполните эту команду один раз, чтобы снять флаг карантина:
xattr -dr com.apple.quarantine ~/.dvalincode
Или щёлкните правой кнопкой мыши по бинарному файлу в Finder → «Открыть» → подтвердите один раз.
Отправляется ли AGENTS.md каждый ход?
Да — DvalinCode читает AGENTS.md из корня проекта перед каждым ходом и внедряет его в системный промпт под заголовком === PROJECT INSTRUCTIONS ===. Держите его кратким — он учитывается в вашем лимите токенов.
Вклад приветствуется. Кодовая база намеренно небольшая и точечная — см. CONTRIBUTING.md.
git clone https://github.com/arthurpanhku/dvalincode
cd dvalincode && npm install
npm test # 372/372 ✅
npm run typecheck
MIT — см. LICENSE.
DvalinCode — это независимая реализация. Он не связан с Anthropic, Claude, Claude Code, OpenAI, OpenAI Codex, GitHub, Cursor, Aider, opencode, Cline, HKUDS/nanobot или любым другим проектом или поставщиком, указанным здесь, и не спонсируется ими, а также не одобрен ими.
Мы с благодарностью признаём, что направление продукта и архитектура DvalinCode были сформированы под влиянием публичных исследований, проектов с открытым исходным кодом, опубликованных статей, стандартов, заметок о выпусках и распространённых шаблонов рабочих процессов в экосистеме агентного программирования:
TurnState в DvalinCode.tool_calls от OpenAI, а также более широкая экосистема провайдеров, совместимых с OpenAI, дают DvalinCode переносимый интерфейс для взаимодействия моделей и инструментов.AGENTS.md, распространённое в инструментах агентного программирования, повлияло на механизм загрузки локальных инструкций проекта в DvalinCode.Эти ссылки сформировали наше понимание того, что пользователи ожидают от агентов программирования. Исходный код, промпты, тексты интерфейса, схемы инструментов, структура модулей и реализация продукта DvalinCode остаются оригинальными, если явно не указано иное. Никакой исходный код, промпты или тексты интерфейса из вышеуказанных проектов не были скопированы.
Полные ссылки на источники: docs/REFERENCES.md
Каждый вопрос, идея, улучшение документации, тест и вклад в код помогают сделать DvalinCode лучше.
| Участник | Профиль GitHub |
|---|---|
| Arthur Pan | @arthurpanhku |
| Shivas | @shivasb42 |
| Aditya | @adity982 |
| badhope | @weed33834 |
См. полную историю вклада, включая автоматизированные обновления зависимостей и обслуживания.
Хотите присоединиться к ним? Прочтите руководство для контрибьюторов и отправьте свой первый pull request.