VinvAI

by VinvAI (open source) · Claude Desktop, Claude Code, OpenCode, macOS, Linux, Python

MCP MCP Servers Open Source v0.2.7 · 22.08.2026 активный

Запускает, тестирует и находит проблемы в ваших сервисах — без изменений кода.

v0.2.7
22.08.2026 current

Установка
code --install-extension VinvAI.VinvAI
cursor --install-extension VinvAI.VinvAI

pip install vinv
uvx --from vinv exerciser campaign <repo> --budget 20

claude mcp add vinv -- npx -y vinv-mcp

git clone https://github.com/VinvAI/VinvAI ~/.vinv/engines && cd ~/.vinv/engines && ./install.sh
# Windows (PowerShell):
git clone https://github.com/VinvAI/VinvAI $HOME\.vinv\engines; cd $HOME\.vinv\engines; .\install.ps1
показать оригинал переведено ИИ

License Version Downloads Tests Lint Open issues 100% local

VinvAI

Vinv (Vibe Inverse) запускает ваши сервисы, находит проблемы и проверяет исправления — без изменений кода.

Он связывает трассировки выполнения с исходным кодом, который их породил, передает эти доказательства вашему агенту, затем снова запускает код, чтобы убедиться, что исправление действительно работает. Он даже использует семплирование Томпсона, чтобы решить, сколько контекста выполнения дать агенту — потому что больше не всегда лучше.

Сначала Python — сервисы и API. Далее TS и Go.
Без аккаунта. Без API-ключей. Без телеметрии. Все работает на вашей машине. Открытый исходный код, Apache-2.0.

Установка

Vinv работает тремя способами — как расширение редактора, CLI или MCP-сервер для любого агента. Они используют одни и те же движки.

Расширение редактора

Один клик — установка с vinv.ai, которая открывает расширение непосредственно в выбранном вами редакторе — или установите прямо из CLI вашего редактора:

Редактор Команда
VS Code code --install-extension VinvAI.VinvAI
Cursor cursor --install-extension VinvAI.VinvAI
Windsurf windsurf --install-extension VinvAI.VinvAI
VSCodium codium --install-extension VinvAI.VinvAI
Trae trae --install-extension VinvAI.VinvAI
VS Code Insiders code-insiders --install-extension VinvAI.VinvAI

Первый запуск собирает движки — около 4 минут: он компилирует индекс Rust и загружает одноразовую локальную модель встраивания ~500 МБ (требуются uv и Rust). Первый трейс появляется примерно через минуту после этого; все последующее — секунды.

CLI (движки Python)

pip install vinv          # every engine as a console script
# or run one with zero install:
uvx --from vinv exerciser campaign <repo> --budget 20

MCP-сервер (любой агент)

Предоставьте Claude Code, Cursor или любому MCP-клиенту инструменты Vinv. Установите движки выше, затем зарегистрируйте единый сервер — одна глобальная конфигурация; он автоматически находит ваше открытое рабочее пространство через корни MCP:

claude mcp add vinv -- npx -y vinv-mcp

Другие клиенты: добавьте { "command": "npx", "args": ["-y", "vinv-mcp"] } в mcpServers.vinv в MCP-конфигурации клиента. См. vinv-mcp — 16 инструментов: семантический поиск, мертвый код, локализация ошибок, значения/срезы/покрытие времени выполнения и цикл проверки/оптимизации.

Из исходников — для контрибьюторов или чтобы собрать движки самостоятельно


git clone https://github.com/VinvAI/VinvAI ~/.vinv/engines && cd ~/.vinv/engines && ./install.sh

Windows (PowerShell):

git clone https://github.com/VinvAI/VinvAI $HOME\.vinv\engines; cd $HOME\.vinv\engines; .\install.ps1

Что вы получаете, в одном цикле

Запуск · Тест · Поиск — затем Доказательство. Укажите Vinv на Python-репозиторий; он сделает остальное — без изменений кода, без API-ключей.

  • 🏃 Запуск — поднимает каждый сервис в вашем репозитории под трассировкой без правок, фиксируя время, аргументы, возвращаемые значения и деревья вызовов из реального запуска.
  • 🧪 Тест — прогоняет реальные запросы через каждую конечную точку (валидные, граничные, негативные, аутентифицированные) и сохраняет каждый ответ как регрессионный тест.
  • 🔎 Поиск — выявляет, что действительно сломалось или замедлилось — ошибки сервера, сбои, горячие точки задержки и мертвый код — каждый привязан к точной строке исходного кода.
  • ✅ Доказательство — передает эти доказательства агенту, которым вы уже пользуетесь (Claude Code, Cursor, Copilot…), затем проверяет его исправление на основе приемочных тестов, написанных до исправления, которые он никогда не видит. Изменение, которое делает выводы "быстрее", но изменяет какой-либо вывод, автоматически откатывается.

Ваш агент — единственная LLM — без новых счетов, без выбора модели, без ключей провайдера. Все работает на вашей машине.

Посмотрите 2-минутное демо Vinv — запуск, тестирование и поиск проблем в ваших сервисах без изменения кода
▶ Смотреть 2-минутное демо — от пустого репозитория до проверенного исправления

Проблема

84% разработчиков сейчас используют или планируют использовать ИИ-инструменты для написания кода. Больше из них активно не доверяют результату (46%), чем доверяют (33%) — и недоверие почти удвоилось за год (Stack Overflow 2025, 49k разработчиков). Вы знаете почему: агент редактирует не тот обработчик, выдумывает формы возвращаемых значений, а затем сам оценивает свою работу, в то время как сервер даже не запускается.

Или он застревает — тест не проходит, агент редактирует ту же функцию, тест снова не проходит, агент снова редактирует, сжигая ваш контекстное окно на «дай-ка я проверю». Собственное исследование Anthropic документирует агентов, «застревающих в циклах, повторяющих один и тот же неудачный подход», когда им не хватает контекста кодовой базы.

Обе неудачи имеют одну корневую причину: агент никогда не видел, как ваш код работает. Он рассуждает на основе статического текста.

Индустрия автоматизировала написание и оставила доказательство полностью ручным. Vinv автоматизирует доказательство — и только затем поиск и исправление.

Контекст важнее размера модели

Сначала результаты — затем как цикл их производит.

Vinv нашёл четыре ошибки и одну проблему производительности в fastapi/full-stack-fastapi-template (~44k★). Те же пять проблем, те же промпты, Vinv оценивает каждый запуск:

Конфигурация Исправлено
Дешёвая модель + доказательства Vinv 4 ошибки + 1 оптимизация
Фронтирная модель, работающая вслепую 1 ошибка
Дешёвая модель, работающая вслепую ничего

По одному испытанию на условие — демонстрация, а не бенчмарк. Вслепую дешёвая модель получила ноль. Дайте ей кадр сбоя, цепочку вызовов и реальные значения аргументов — и она побьёт более сильную модель, угадывающую по статическому коду. Доказательства — вот что имело значение, а не веса.

На том же чистом шаблоне цикл оптимизации позже обнаружил — только по живым трассам — что пул соединений базы данных по умолчанию заставляет запросы стоять в очереди за проверкой соединений при параллельной нагрузке, отправил исправление размера пула и доказал его: медиана при постоянной нагрузке 75.6 мс → 41.2 мс, на 45.4% быстрее (95% ДИ [36.3%, 45.8%]), ответы байт-в-байт идентичны. Две предыдущие попытки, чьи окна измерений не могли подтвердить выигрыш, были автоматически откачены — принятие произошло только тогда, когда появились доказательства.

Vinv на шаблоне FastAPI: обнаруживает голодание пула соединений, доказывает улучшение медианы на 45.4% при постоянной нагрузке с парным бутстрэпом 95% ДИ, автоматически откатывает неподтверждённые попытки

Та же дисциплина, апстрим на Hugging Face

Направленный на huggingface/smolagents (~28.5k★) — публичный Apache-2.0 агентный фреймворк, без аффилиации — цикл аллокации нашёл и доказал быстрый путь в sanitize_for_rich. Протестировано с tracemalloc на реалистичной строке журнала размером 4 КБ: временное выделение на вызов 36.27 КБ → 0.00 КБ (~37,137× меньше); сквозное на log_task, ~615.7 КБ → ~125 Б за 3 вызова; вывод байт-в-байт идентичен для 2,015 входных данных. Апстрим как PR #2572.

PR #2572 в huggingface/smolagents — протестированный быстрый путь для sanitize_for_rich
Просмотр изменённых файлов GitHub в светлой теме для PR #2572 smolagents — быстрый путь в src/smolagents/utils.py
huggingface/smolagents#2572 · протестированное улучшение выделения памяти · воспроизводимое доказательство в PR

Вот как это происходит: оракулы находят отходы, ваш агент предлагает правку, парный бутстрап + побайтово идентичный повторный прогон решают принять или откатить, и только потом что-то уходит вверх по потоку. Остальная часть этого README — механизмы, стоящие за этими квитанциями.

Под капотом: список оракулов

Этап Тест выше — это не один тестер, а набор оракулов, каждый из которых охотится за своим классом дефектов, и все они пишут в одни и те же находки и один и тот же путь отправки исправлений. Вам никогда не нужно думать о них, чтобы использовать Vinv; откройте это, если хотите полный список и как расходуется бюджет.

Полный список оракулов, диспетчер бюджета и песочница


Оракул Что он находит Виды находок
HTTP-упражнёр Сам управляет каждым обнаруженным конечным точкой — схемно-валидные, граничные, негативные, значения, извлечённые из реальных трасс, многошаговые сценарии аутентификации server-error · crash · invariant-violation
Дифференциальный оракул Сравнивает обработчик сервиса или оценщик с эталонной реализацией. Для оценщика или парсера эталоном является сам CPython — разногласие и есть отчёт об ошибке differential-mismatch
Инъекция отказов Противоборствующие, но допустимые формы на границе зависимостей (None, "", одинокий суррогат, переупорядоченный список), плюс проход по каждой точке разделения чанков в потоке fault-crash · fault-divergence
Оракул параллелизма Детерминированные перемежения и инъекция таймаутов — общее состояние, которое портится при параллельных вызовах, и порядки блокировок, которые приводят к взаимоблокировке concurrency-divergence · concurrency-hang
Оракул окружения Матрица разрешения зависимостей и вышестоящие символы, чья сигнатура изменилась под вами signature-drift (сообщается, никогда не отправляется — никакая правка здесь это не исправит)
Золотые базовые линии ввода/вывода «Более быстрое» изменение, которое незаметно удалило поле ответа или изменило класс статуса baseline-degraded
Мёртвый код Неотслеживаемые острова — связанные секции, которые ничего не выполняли ни в одном записанном запуске, — с активными вызывающими, которые всё ещё ссылаются на них мёртвые секции
Анализ времени выполнения Горячие точки задержки из живых спанов, подозреваемые в утечках памяти (наклон Тейла–Сена), дублирующиеся пересчёты, которые стоит кэшировать, потолок пропускной способности (подгонка USL) hotspots · leaks · cache candidates · throughput-ceiling

Диспетчер реален, и это бандит. exerciser campaign выделяет один бюджет на каждого вооружённого оракула через выборку Томпсона по (target × technique × oracle) — а не гоняет каждого исчерпывающе. Стоимость измеряется (настенное время, нормализованное до эквивалентов проб плюс порождённые подпроцессы), так что оракул, которому нужно сорок секунд, чтобы найти то, что другой находит за одну, проигрывает. Кредит выплачивается один раз на сигнал дефекта, в рамках одного запуска и между запусками, поэтому детерминированный оракул не может вечно зарабатывать кредит за одну и ту же ошибку. Апостериорные распределения сохраняются в campaign.json — какая техника окупается в вашем репозитории — это выучено.

Кампания запускает шесть оракулов (default_runners): crash/function, differential, fault, concurrency, HTTP и environment — каждый вооружается только тогда, когда он применим к вашему репозиторию (нет --base-url — и HTTP-оракул остаётся тёмным; нет границ — и fault-оракул тоже). Семейства мёртвого кода и анализа времени выполнения (утечки, горячие точки, кандидаты на кэш) и золотые базовые линии ввода/вывода из таблицы ниже запускаются из редактора и пути регрессии, а не из этого бюджетного цикла.

Непроверенный код выполняется за лестницей изоляции: песочница ОС, обеспечиваемая ядром (sandbox-exec / bwrap / unshare), если хост её предоставляет, в противном случае — процессный шим — всегда с одноразовой копией репозитория, перенаправленными HOME/TMPDIR, заблокированными сетью и порождением подпроцессов. Уровень определяется пробой, которая проверяет, что запись за пределами корня действительно не удалась, а не наличием бинарника в PATH. Postgres, Redis и S3 подменяются внутри тюрьмы, чтобы код, которому они нужны, работал, а не падал при подключении.

Мёртвый код на основе того, что реально выполнялось

Статические инструменты (Vulture, deadcode, Knip, ts-prune) могут доказать только «ничто статически не ссылается на это». Они не видят динамическую диспетчеризацию, флаги функций, реестры или дрейф окружения — поэтому они выдают кандидатов, которых человек должен оценивать, из-за чего очистка никогда не происходит.

Vinv может сказать то, что они не могут:

«Ни один захват никогда не выполнял это. Вот что всё ещё ссылается на это, вот прослеженное окружение, в которое оно бы встроилось, и вот что ваш агент думает об этом.»

Единицей является секция — связный остров непрослеженных символов — а не строка линтера, потому что мёртвый код почти никогда не является одной функцией. Каждая секция получает:

  • Доказательство достижимости — ДОСТИГНУТО ИЗ ЖИВОГО КОДА (исполняющийся код ссылается на него; путь никогда не выполнялся — обычно это защита или невыпущенная функция) против НЕТ ССЫЛОК вообще. Противоположные вердикты, и отфильтрованное полотно не может сказать вам, какой из них.
  • Живое окружение — Персонализированный PageRank, запущенный на символах секции в графе кода, сохраняющий символы с наибольшей массой прослеженных. Идея поиска HippoRAG, применённая к графу, который у Vinv уже есть. Это место, куда бы встроилась интеграция.
  • Вердикт вашего агента — интегрировать · переосмыслить · удалить · сохранить · неясно, каждый с описанием того, что он делает, почему ничто не достигает его, и что сломается, если его удалить. Секции отправляются по пять на промпт, чтобы агент мог сказать «это более старая копия секции ниже» — суждение, которое структурно недостижимо при запуске по одной секции.

Две вещи, которые он отказывается делать: называть что-либо мёртвым без следа на диске (при нулевом количестве захватов каждый символ непрослежен, так что список был бы вашей кодовой базой), и молча отбрасывать что-либо — оба ограничения записываются в историю, так что «12 секций» можно отличить от «12 — это предел, и 300 были отброшены».

И причина второго порядка, по которой это важно: мёртвый код делает вашего агента кодирования хуже. Каждый неиспользуемый модуль конкурирует за окно контекста, сжигает токены и предлагает неправильные шаблоны для копирования.

Четыре этапа

01 НАЙТИ — что реально выполнялось

Статические сканеры угадывают. Vinv записывает реальный запуск и ранжирует, что не удалось, что никогда не выполнялось, а что было медленным. Никаких «возможных проблем» — каждая находка называет символ, строку и трассировку за ней.

# with a service up — Auto-Pilot's path: plan every endpoint, then drive them
exerciser plan <repo> --base-url http://127.0.0.1:PORT && exerciser run <repo> --base-url http://127.0.0.1:PORT
# allocate budget across armed oracles (HTTP + the rest that apply to that run)
exerciser campaign <repo> --budget 20

02 ИСПРАВИТЬ — через агента, за которого вы уже платите

Находки становятся пакетами доказательств и отправляются вашему собственному агенту — Claude Code, Codex, Cursor, Gemini CLI, Copilot Chat, Windsurf Cascade. Ваш агент — единственная LLM Vinv. Никаких новых счетов, никакого выбора модели, никаких ключей провайдера.

Пакет составляется из контекстного графа: ваш код, ваши трассировки и метрики, полученные из них, объединённые по точной функции, которая обработала каждый запрос. Артефакты — это товары; объединение — нет.

03 ДОКАЗАТЬ — или откатить

Воспроизведённый старт. Живой порт. Приёмочные тесты, созданные до исправления, хранящиеся вне рабочей области под непрозрачным токеном и обязанные детерминированно провалиться дважды на коде до исправления — дисциплина «fail-to-pass» из SWE-bench. Тест, который проходит на сломанном коде, отбрасывается.

Вокруг этого: статический предварительный шлюз (каждый изменённый .py должен пройти ast.parse до того, как будет потрачен бюджет тестирования), детерминированная античит-проверка диффа по снапшоту и неотслеживаемым файлам (правки тестов, проглатывание except, теневые модули интерпретатора, вмешательство в .vinv — жёсткие флаги полностью блокируют возможность), ограниченный LLM-судья, который может способствовать более тщательной проверке, но никогда не может спасти проваленный шлюз, и рекомендательный мутационный дым, выжившие которого никогда не раскрываются исправляющему агенту — защита от Гудхарта.

Один клик откатывает всё, к чему прикоснулся эпизод, включая неотслеживаемые файлы.

04 УЗНАТЬ — из того, что выжило

Два реестра, оба локальные, ни один не загружается.

Состав контекст-пакета — это факторная сетка рук 2² (глубина среза графа × включение данных времени выполнения). Выбор — это семплирование Томпсона со смесью с ε-полом, и точная склонность смеси регистрируется с каждым решением — требование для несмещённых IPS/SNIPS/DR позже. ε-пол затухает, но никогда не достигает нуля, поэтому веса важности остаются ограниченными. Апостериорные вероятности учитывают только объективные эпизоды — прерывание пользователем или клик «подтвердить как выполненное» не являются свидетельством о качестве руки. Атрибуция — это контрфактический анализ в стиле COMA для каждого признака по сетке апостериорных средних: «помогли ли данные времени выполнения» — это вычисленное число, а не утверждение. Retrieval serving — это отдельный ε-жадный бандит (над top-k множеством действий) с собственным реестром. Кандидатная конфигурация может быть продвинута только при выполнении всех условий: ESS ≥ 25, n ≥ 40 объединённых выборок, ≥ 8 зарегистрированных pull'ов на каждое сравниваемое действие, BCa-бутстрап 95% нижняя граница дважды-устойчивой дельты ≥ 0, нулевые обрезанные веса, и отсутствие эпохи, противоречащей объединённой дельте (защита от артефакта Симпсона). Продвинутая политика затем обслуживается только на 5% канарейке, и три последовательных отрицательных канареечных вознаграждения автоматически откатывают её.

Измерено на собственном реестре этого репозитория (800 зарегистрированных решений, 770 объединённых, 12 индексных эпох — docs/learning.md):

кандидат DR дельта 95% BCa CI ESS продвинут
top-k 10 +0.173 [+0.081, +0.317] 577 да
top-k 3 +0.081 [−0.057, +0.226] 68 нет — LCB < 0, защита эпох не пройдена
top-k 20 +0.148 [+0.062, +0.283] 0 нет — нулевая поддержка, никогда не логировался

Ворота пропустили ровно измеренного победителя и заблокировали как неопределённого, так и неподдержанного кандидата. Именно это здесь означает «замкнутый цикл» — а части, которые не являются онлайн-обучением (пороги рефери, каталог оракулов, формы отказов), являются фиксированной политикой, намеренно.

Если у вас открыта одна из этих вкладок

Симптом Какой оракул отвечает
«claude code говорит готово, но тесты падают» рефери: воспроизведённый старт, живой порт, приёмочные тесты, которые агент никогда не видит
«cursor agent застрял в цикле» защита от цикла гибели — самоподобие набора токенов ловит повторяющегося агента и заставляет применить другой подход
«как найти мёртвый код в python по реальному использованию» секции мёртвого кода: никогда не выполнялся ни в одном захвате, с живыми вызывающими и вердиктом агента
«как тестировать fastapi эндпоинты автоматически» HTTP-упражнитель — схемные/граничные/негативные/аутентификационные входы, каждый ответ сохраняется как регрессионный случай
«python deadlock только под нагрузкой» оракул конкурентности — детерминированные расписания и инъекция таймаутов
«мой парсер принимает вход, который CPython отклоняет» дифференциальный оракул — разногласие с эталоном и есть баг-репорт
«ИИ сломал работающий код» побайтовое воспроизведение поведения гейтит каждое изменение; откат в один клик всего, что затронул эпизод
«найди утечку памяти в python без профайлера» наклон Тейла–Сена по удержанию на сессию — называет функции, удерживающие память, на основе реальных запусков
«почему мой api медленный» пламенные графики на каждый вызов из живого трафика, горячие точки Парето и подгонка USL, которая называет предел пропускной способности
«моя зависимость изменилась, и никто не сказал» оракул окружения — матрица разрешения плюс дрейф сигнатур вышестоящих зависимостей

Что делает Vinv

Дайте вашему кодирующему агенту контекст выполнения — один цикл, эти возможности:

  • Семантический поиск кода — задавайте по смыслу, получайте ранжированные символы с телами def и номерами строк, встроенные локальной моделью (без облачных ключей).
    семантический поиск кода MCP в действии
  • Граф кода — постоянная карта каждого символа и рёбер вызовов, обновляется инкрементально при сохранении, с живым оверлеем выполнения.
    интерактивный граф кода
  • Трассировка выполнения — трассировка выполнения без правок для ИИ-кодирующих агентов: время, память, аргументы, возвраты, ошибки — на каждый вызов, связанный с исходным кодом.
    трассировка Python без правок
  • Ранжирование подозреваемых — при любом сбое символы ранжируются по оценке локализации ошибок на реальных запросах успеха/неудачи, с прикреплёнными сообщениями об ошибках.
    подозреваемые, ранжированные по ошибкам
  • Проверенные исправления — проверяйте, что сгенерированный ИИ код действительно работает: воспроизведённый старт, живой порт, приёмочные тесты, которые агент никогда не видит. Один клик откатывает всё, что затронул эпизод.
    независимая проверка исправлений
  • Мёртвый код — раздел «View Dead Code» объясняет каждый непокрытый островок кода. Секции разделены на без ссылок и достижимые из живого кода, но никогда не выполняемые, каждая с указанием вызывающих кода, которые всё ещё ссылаются на него, и вердиктом «оставить или вырезать» с обоснованием.
    отчёт о мёртвом коде: достижимый, но непротестированный, живой код, который на него ссылается, и вердикт оставить или вырезать с обоснованием
  • Восстанавливаемое время — горячие точки задержек, ранжированные по миллисекундам, которые вы реально получите обратно; каждая обработана как оптимизация «сначала прогноз, потом доказательство», а не догадка о том, что медленно.
    панель Optimize: открытые возможности, восстанавливаемые миллисекунды и задержка каждого вызова относительно общего предела потока
  • Ask Vinv — задавайте любые вопросы о вашей работающей системе на простом английском; каждый ответ ссылается на точные участки трассировки и строки исходного кода, из которых он получен, а детерминированный критик блокирует любые утверждения, не подкреплённые доказательствами, — обоснованные ответы, а не уверенные догадки.
  • Behavior exerciser — Vinv не ждёт трафика: он сам запускает каждый обнаруженный сервисный эндпоинт, выбирает стратегии с помощью бандита на основе выборки Томпсона, вознаграждаемого в первую очередь за нарушения оракула и только затем за новое покрытие, и превращает каждый ответ в постоянный регрессионный тест.
  • Journey — одно прохождение всего проверенного: каждый сервис, затем дерево вызовов каждого эндпоинта, пламеграфик задержек и точные входы → выходы, которые были протестированы, — с формой для добавления собственных тестовых входов, которые движок будет воспроизводить бессрочно.
    прохождение Vinv Journey: обзор, затем дерево вызовов каждого эндпоинта, пламеграфик задержек и протестированные входы и выходы, с шагами через Next
  • Auto-Pilot и красное кольцо — один клик запускает цикл: обнаружение → настройка → трассировка → тестирование → исправление → проверка, пока не станет зелёным или не закончится бюджет; когда появляются новые ошибки трассировки, эпизод исправления уже отправлен к тому моменту, как вы видите красное кольцо на графе. Бюджет ваш: задайте количество попыток на сервис в Configure, и когда запуск их исчерпает, Vinv спросит, хотите ли вы выделить ещё, вместо того чтобы тихо сдаться.
  • Agent babysitting — защита от цикла обречённости (самоподобие токенов) ловит повторяющегося агента, адаптивный сторож бездействия ловит зависшего, а функция «Dispute a Verified Fix» удерживает подотчётным даже верификатора.
  • Findings — что нашёл Vinv и что исправил, со статистическими доказательствами: кластеры проблем, эпизоды оптимизации с парными бутстрап-доверительными интервалами, типы регрессионных диффов и машиночитаемый findings.json, который ваш агент может потреблять напрямую.
    обзор Vinv Findings: кластеры проблем, эпизоды оптимизации с 95% доверительными интервалами, типы регрессионных повторов, профиль задержек на эндпоинт и реестр состояний

Честная область применения: Python в первую очередь — сервисы и API. Auto-Pilot обнаруживает запускаемые сервисы, поднимает их под tracelens и тестирует их HTTP (и связанные) точки входа. Для других языков доступны индекс, граф и обоснованные ответы на вопросы, но пока нет доказательств на основе рантайма. TypeScript и Go — следующие.

Почему агенты не хакят вознаграждение под Vinv

Vinv связывает каждый след рантайма с точным сегментом кода, который его породил, и передаёт вашему агенту контекстный граф, построенный на этом соединении, — поэтому агент аргументирует на основе доказательств, а не ощущений. И когда агент заявляет о победе, Vinv не верит ему на слово:

  • Приёмочные тесты создаются до исправления, хранятся вне рабочей области под непрозрачным токеном и должны детерминированно падать дважды на сломанном коде — нельзя натренироваться на тест, а тест, проходящий до исправления, отбрасывается.
  • «Более быстрое» исправление, меняющее любой наблюдаемый вывод, автоматически откатывается — набор поведенческих тестов должен воспроизводиться байт-в-байт, а парный бутстрап 95% доверительный интервал ускорения должен исключать ноль. Быстрее, но неправильно — никогда не проходит.
  • Намеренные отклонения 4xx — не «ошибки» для исправления — классификатор дефектов знает разницу между сервисом, корректно отвечающим нет, и сломанным сервисом, поэтому агенту никогда не дают фальшивую цель, которую можно только обыграть. То же правило в новых оракулах: песочница, отказывающая в nonlocal, соблюдает документированное ограничение, а не падает.
  • Тихое обнаружение неверных значений с критериями, зависящими от значения — для differential-mismatch, fault-divergence, concurrency-divergence, invariant-violation и baseline-degraded утверждение «эти вызовы больше не вызывают исключений» было бы пустым, поскольку цель никогда не вызывала исключений. Критерий — это значение.
  • Когда две попытки перестают продвигаться, решает судья тупиковой ситуации по переговорам Нэша — продолжать только если и позиция исследователя, и позиция аудитора строго предпочитают это обращению к вам. В противном случае вы получите судейскую коллегию, а не костер из токенов.

Тренажер на шаблоне FastAPI

Трафик показывает только те пути кода, которые пользователи случайно затрагивают. Тренажер поведения прорабатывает остальное — тот же fastapi/full-stack-fastapi-template, один запуск:

Метрика Только трафик С прогоном
Выполнено конечных точек 0 / 23 23 / 23
Конечные точки с покрытием символов — 6 → 16 / 23 (авторизованный прогон)
Покрыто символов — 18 → 37 / 44
Сохранено регрессионных тестов 0 125 (воспроизводимы всегда)

Авторизованный прогон (каждая конечная точка повторно вызывается с учетными данными, захваченными сценарием входа, а свежесозданные идентификаторы ресурсов передаются в конечные точки по идентификатору) выявил четыре реальные ошибки, которые анонимный трафик никогда не может достичь:

  1. GET /api/v1/users/ → HTTP 500 — недопустимый email, сохраненный непроверенной частной конечной точкой, отравляет сериализацию ответа.
  2. POST /api/v1/private/users/ → IntegrityError выходит как 500 — email: str вместо EmailStr, нет защиты от дубликатов.
  3. POST /api/v1/utils/test-email/ → HTTP 500 — assert settings.emails_enabled вызывает сбой вместо деградации.
  4. POST /api/v1/password-recovery-html-content/{email} → соединение убито — несанитизированный рендеринг заголовка.

Затем тестовый стенд исправил все четыре, и набор регрессионных тестов теперь отличает регрессию вашего кода от изменения мира из-за остаточных данных самого тестового движка (реестр состояний) — так что повторный запуск не поднимает ложную тревогу. Фантомные регрессии производительности тоже исчезли: разница в задержке должна пережить медиану из 5 повторных запусков, прежде чем будет сообщена.

Глубокое погружение Vinv Journey в POST /users/signup: дерево вызовов с количеством запусков и ошибками, граф пламени задержки и все 15 протестированных входов с их выходами
Одна конечная точка после запуска: дерево вызовов с реальным временем выполнения, граф пламени задержки и каждый вход, который Vinv использовал, с полученным выходом.

Работает с вашим агентом

Vinv — это MCP-сервер для Claude Code и Cursor — и для любого другого MCP-клиента, который вы уже используете. Одна команда (Зарегистрировать Vinv MCP в инструментах агента) записывает серверы в каждого агента, которого он обнаруживает:

Агент Отправка исправлений MCP-инструменты
Claude Code ✅ ✅ авто
Cursor (CLI + чат) ✅ ✅ авто
Codex CLI ✅ ✅ авто
Gemini CLI ✅ ✅ вручную
Copilot Chat (VS Code) ✅ ✅ авто
Windsurf Cascade ✅ ✅ авто

Где сохраняется конфигурация для каждого клиента — и как проверить

Регистрация идемпотентна и никогда не фиксирует секреты. Серверы (vinv-index, vinv-runtime, vinv-exercise) запускаются через stdio с использованием собственной среды выполнения редактора.

  • Claude Code — ~/.claude.json, область действия проекта (без запроса доверия). Проверка: claude mcp list показывает серверы Vinv.
  • Cursor — <repo>/.cursor/mcp.json. Проверка: Настройки → MCP показывает их зеленым.
  • Codex CLI — ~/.codex/config.toml в разделах [mcp_servers.vinv-index] / [mcp_servers.vinv-runtime].
  • Copilot Chat — встроенный провайдер MCP в VS Code (авто), .vscode/mcp.json в старых сборках.
  • Windsurf Cascade — ~/.codeium/windsurf/mcp_config.json.
  • Gemini CLI — отправка работает из коробки; для MCP-инструментов добавьте те же stdio-серверы в ~/.gemini/settings.json.

Ваш агент также является единственной LLM для Vinv — каждый шаг анализа проходит через CLI кодирующего агента, за который вы уже платите. Никаких ключей провайдера, никакого выбора модели.

Агент без Vinv против с Vinv

Агент в одиночку Агент + Vinv
Поиск кода ищет через grep и угадывает файлы ранжированные символы с номерами строк, по смыслу
«Готово» заявляет, что готово, оценивает свою собственную работу повторный запуск, живой порт, невидимые приемочные тесты
Память забывает каждую сессию постоянный индекс + граф, обновляется при сохранении
Выполнение не может видеть реальные трассы, значения, графы пламени для каждого вызова
Отладка читает исходники, строит догадки подозреваемые, ранжированные по ошибкам, с реальными сообщениями об ошибках
Мертвый код не может отличить используемое от неиспользуемого никогда не выполняемые островки с живыми вызывающими и вердиктом «оставить или вырезать»
Плохое исправление вы делаете diff и молитесь откат в один клик всего, что затронул эпизод
Тестирование API пишет тесты, которые затем сам оценивает прогоняет каждую конечную точку сервиса, сохраняет каждый ответ как невидимый регрессионный тест
Заявления о производительности «должно быть быстрее» парный бутстрэп 95% ДИ должен исключать ноль, поведение побайтово идентично, или автозамена
Тестовые данные загрязняет вашу БД разработки и забывает реестр состояний: созданные ресурсы отслеживаются, удаляются через ваш собственный API, расхождения помечаются
Стоимость сжигает токены на повторное исследование пакет доказательств собирается один раз, локально; бандит узнает, какая композиция пакета окупается
## Проверено на себе

Ворота релиза Vinv — это сам Vinv: эти цифры получены при выполнении цикла на этом репозитории:

Метрика Результат
Индекс 4 036 символов
Поиск попадание по файлу@10 0.90 · MRR по символам 0.51 · p50 81 мс
Восстановление после сбоя индексатор, эмбеддер и трассируемый сервис — все протестированы на убийство в середине работы
Самообнаруженные потери найдено 83% дублирующихся вычислений → теперь кэшируются
Настройка поиска оценка вне политики (двойно-устойчивая, BCa-бутстрэп) по 800 зарегистрированным решениям продвинула top-k 10 (+0,173, 95% ДИ [+0,081, +0,317]) и заблокировала оба других кандидата — один из-за неопределённой нижней границы, другой из-за нулевой поддержки
Тестовый набор 2 376 тестов — 1 575 Python · 801 расширение

Как это работает

От холодного репозитория до продакшн-готовности: девять стадий Vinv вокруг вашего кодинг-агента — подъём, трассировка, индексация, карта, прогон, поиск, диспетчеризация, проверка, обучение — каждая с описанием того, что она делает и какой движок её выполняет
Одна команда запускает всё. Vinv управляет остальными восемью стадиями — каждая стрелка — это доказательство, а не догадка.

flowchart LR
  T[Trace] --> I[Index] --> S[Serve MCP] --> V[Verify] --> L[Learn] --> T
  1. Трассировка — запустите ваш Python-сервис под встроенным трассировщиком: без SDK, без изменений кода. (Нет сервиса? Функциональный, дифференциальный, отказоустойчивый, конкурентный и средовой оракулы не требуют его.)
  2. Индексация — каждая функция локально встраивается в семантический индекс + граф вызовов.
  3. Обслуживание — MCP-серверы передают доказательства вашему агенту.
  4. Проверка — воспроизведённый запуск, живой порт, приёмочные тесты, сгенерированные до исправления.
  5. Обучение — решения с логированием склонности; состав поиска и пакетов обновляется только при победах в оценке вне политики, за 5% канарейкой с автоматическим откатом.

🧠 Алгоритмы, названные по именам (для скептиков)

Никаких чёрных ящиков — каждое решение Vinv имеет опубликованный метод, и каждый из них существует, чтобы цикл оставался честным, а не хитрым:

Решение Алгоритм Почему
На какой оракул потратить следующую единицу бюджета Семплирование Томпсона по (цель × техника × оракул), стоимость измеряется в эквивалентах проб, кредит платится один раз на сигнатуру дефекта какая техника окупается — свойство вашего репозитория, изучаемое между запусками, а не фиксированный порядок выполнения
Какую стратегию ввода попробовать следующей для каждой конечной точки Семплирование Томпсона по бета-апостериорным; награда = нарушения оракула, новое покрытие стоит бонус 0,25, чтобы исследование оставалось подчинённым поиску; апостериорные сохраняются с распадом свидетельств 50% исследует граничные/негативные/аутентификационные вводы там, где они окупаются — цикл нельзя захватить дешёвой беговой дорожкой покрытия, а старые уроки истекают, а не окостеневают
Какому живому коду принадлежит мёртвый участок Персонализированный PageRank, посеянный на символах участка, с учётом трассированных соседей (шаг извлечения HippoRAG по графу кода) одношаговая схожесть упускает ассоциативное окружение, которое интеграция бы подключила
Принять или откатить оптимизацию Парный бутстрэп 95% ДИ на относительное улучшение и побайтово идентичное воспроизведение поведения «быстрее» должно быть статистически реальным и наблюдаемо безвредным
Потолок пропускной способности Универсальный закон масштабируемости (Гюнтер) по ограниченному прогону с изменением конкурентности — контенция σ и когерентность κ называет почему перестаёт масштабироваться, а не только то, что перестало
Поведенческие инварианты динамические инварианты в стиле Дайкона, поддержка ≥ 5, ноль контрпримеров, Лаплас (s+1)/(n+2) уверенность свойства зарабатывают свою уверенность на доказательствах, а не на утверждениях
Подозреваемые в утечке памяти наклон Теила–Сена по удержанию на сессию (устойчиво к 29% выбросов) один шумный сеанс не может сфабриковать или скрыть утечку
Возможности кэширования различимость хэша аргументов × доля времени, относительно Парето — без абсолютных порогов «дорого» определяется трассой вашего приложения: сервис на 5 мс или пакетная задача на 5 с
Обнаружение зависшего харнесса адаптивный сторож тишины — тайм-аут, относительный к ритму, с льготным периодом запуска медленный запуск не убивается; мёртвый не крутится
Прерывание тупика единогласие по Нэшу: продолжать, только если позиции исследователя и аудитора оба превосходят эскалацию автономия ровно тогда, когда она оправдана; человеческая панель — когда нет
Составление контекстного пакета Семплирование Томпсона с ε-полом по сетке рук 2², точная склонность логируется, контрфактическая атрибуция в стиле COMA «помогли ли свидетельства времени выполнения» вычисляется, а не утверждается
Продвижение конфигурации поиска Оценка вне политики (кросс-подогнанные DM/IPS/SNIPS/DR) за защитами ESS, поддержки, BCa-LCB и Симпсона; 5% канарейка, автооткат обучающийся не может оценивать и свою домашнюю работу
Локализация ошибок ранжирование подозреваемых на основе спектра по реальным запросам «прошло/не прошло» подозреваемые приходят из выполнений, а не из эмбеддингов
Полное обучающее прохождение — награда, склонность, математика гейтинга, с file:line для каждого утверждения — находится в docs/learning.md. Тестовая онтология — в docs/testing-ontology.md.

Глубже: контекстный граф, Auto-Pilot и структура репозитория

Vinv индексирует код и генерирует — на основе вашего собственного запуска — трассы и метрики, полученные из них, затем связывает все три с точной функцией, обработавшей каждый запрос. Артефакты — это товары; связывание — нет. Auto-Pilot ведет весь цикл без посторонней помощи: обнаружение сервисов → настройка через вашего агента → запуск под трассировкой → выполнение упражнений → исправление → повторная проверка, пока не станет зеленым или не закончится бюджет. Структура: extension/ (редакторный UI + MCP-серверы), index/ (семантический индекс на Rust), embedder/ (локальный сайдкар CodeRankEmbed), tracelens/ (трассировщик без правок), exerciser/ (рой оракулов + бандит кампаний), identification/ (связывание трасс с исходниками), handbook/ · bringup/ · goal/ (обнаружение и эпизоды), tests/e2e/ (золотой тест с внедрёнными ошибками). Python-движки — это одно рабочее пространство uv.

После установки: что попробовать

  1. Охота без сервера — exerciser campaign <repo> --budget 20. Никакого сервиса, никакого --base-url: работают функциональный, дифференциальный, оракулы ошибок, конкурентности и окружения, а бандит сообщает, какая техника окупилась.
  2. Протестируйте ваш API — exerciser plan <repo> && exerciser run <repo> --base-url http://127.0.0.1:PORT (или позвольте фазе exercise в Auto-Pilot сделать это). Канарейка окружения сначала прогоняет ваши цепочки входа в систему и громко сообщает, если база данных была сброшена или учётные данные не засеяны — больше никаких молчаливых запусков с ошибкой 401.
  3. Найдите мёртвый код — Палитра команд → "Vinv: View Dead Code": каждый неотслеживаемый участок, разделённый на никогда не упоминаемый и достижимый, но никогда не выполняемый, с живыми вызывающими, которые всё ещё указывают на него, и вердиктом «оставить или удалить».
  4. Пройдите всё — "Vinv: Open Journey". Сначала обзор (сервисы, покрытие, открытые проблемы), затем Next/→ по каждой конечной точке: дерево вызовов с реальным временем выполнения, флеймграф и точные входы → выходы. Наведите курсор на что-то непонятное — каждый маркер объясняет себя сам.
  5. Добавьте свой собственный тестовый ввод — на любом шаге конечной точки Journey заполните тело/параметры/ожидаемый статус и нажмите Add input. Он попадает в тот же слой плана, который используют сценарии, созданные ИИ, запускается с настройками аутентификации конечной точки при следующем упражнении и становится постоянным регрессионным тестом.
  6. Посмотрите, что было исправлено — "Vinv: Open Findings": кластеры проблем, эпизоды оптимизации с их доверительными интервалами, регрессионные диффы по типам, профиль задержек, журнал очистки. Базовый файл .vinv/reports/findings.json содержит те же данные в машиночитаемом формате — укажите на него вашему агенту.
  7. Проверьте регрессию после любого изменения — exerciser regress <repo> --base-url … воспроизводит все сохранённые случаи (самостоятельно перехватывая свежие учётные данные) и сообщает о различиях поведение / контракт / производительность / окружение отдельно, так что дрейф окружения никогда не маскируется под регрессию кода.
  8. Охота за потерями по требованию — "Optimize Latency Hotspots", "Analyze Memory Trends" (подозреваемые утечки по Теилу–Сену) и "Analyze Cache Opportunities" — каждая превращает одну команду в эпизод исправления с подтверждающими данными — принимается только если парный бутстрап-тест CI проходит, а поведение остаётся побайтово идентичным.

Движки

pip install vinv поставляет каждый движок как консольный скрипт — или используйте любой из них отдельно:

Движок Команда Что делает
exerciser exerciser campaign <repo> --budget N Начните здесь. Управляемый покрытием API-экзерсизер + рой оракулов — генерирует валидные/граничные/негативные/аутентифицированные/ошибочные/конкурентные запросы, сохраняет постоянный регрессионный набор и сообщает, какая техника окупилась.
tracelens tracelens run -- <cmd> Трассировщик времени выполнения без правок — тайминги, аргументы, возвращаемые значения и деревья вызовов из реального запуска.
index index query <repo> · index deadcode <repo> Семантический индекс кода на Rust — поиск кода по смыслу, плюс отчёт о мёртвом коде только по исходникам.
identification identification consolidate <repo> Связывает трассы с исходниками — строит карту API-поверхности и графа вызовов, привязывая данные времени выполнения к точной функции.
bringup bringup list/start <repo> Поднимает сервисы под трассировкой — перечисляет каждый сервис, затем запускает один инструментированный.
handbook handbook generate <repo> Формирует задачу по обнаружению кодовой базы, которую выполняет ваш агент для картирования репозитория. Только промпты — без собственных вызовов LLM.
goal goal create <context> Сжимает рабочий контекст в одну постоянную цель для эпизодов исправления/оптимизации. Только промпты.
embedder vinv-embedder serve Локальный сайдкар эмбеддингов (CodeRankEmbed) для семантического поиска — без облачных ключей.
contracts (библиотека) lens_contracts — общий контракт данных, который читает и пишет каждый движок.
## Справочник по CLI движка

exerciser — рой оракулов, запускаемый отдельно

Команда Что делает
exerciser campaign <repo> [--base-url URL] [--budget N] Начните здесь. Один бюджет на всех вооружённых оракулов с помощью выборки Томпсона; сообщает, какая техника окупилась
exerciser plan <repo> [--base-url URL] План входных данных для каждой конечной точки (схема + наблюдаемые + семантические слои)
exerciser run <repo> --base-url URL Выполняет план против живого трассируемого сервиса, управляемый покрытием
exerciser functions <repo> [--require-tier os-sandbox] Запускает точки входа и экспортированные функции в процессе, изолированно
exerciser differential <repo> [--target M:f --reference cpython-exec] Сравнивает функцию с эталонной реализацией
exerciser faults <repo> [--auto-target M:f] Легальные, но враждебные формы на границе зависимостей
exerciser concurrency <repo> --target M:f Детерминированные расписания + внедрение тайм-аутов
exerciser environment <repo> Матрица разрешения зависимостей + дрейф сигнатур вышестоящих модулей
exerciser containment Какой уровень изоляции этот хост может реально предоставить и почему — определяется пробой
exerciser throughput-sweep <repo> --base-url URL Сканирование конкурентности + подгонка USL → возможности throughput-ceiling
exerciser profile <repo> Поведенческий профиль + изученные инварианты
exerciser regress <repo> --base-url URL Воспроизводит накопленный набор поведений, сообщает различия по типу
exerciser scorecard <repo> Оценка по каждому сервису: покрытие до→после, инварианты, проблемы, задержка

Требуется сначала identification consolidate для apis.json, а для реального покрытия — сервис, работающий под tracelens.

Справочник по инструментам MCP

Немного названий инструментов намеренно — агенты лучше выбирают из коротких меню; инструмент сеанса мультиплексирует

vinv-index — код ваших сервисов и сеанс:

Инструмент Возвращает
vinv_query Ранжированные символы с путями + идентификатор решения — любой поиск по смыслу, перед grep
vinv_feedback подтверждение — вознаграждение −1..1 после действий по результатам; обучает поиск
vinv_session 10 действий в одном инструменте — чтение: траектория · статус · проблемы · горячие точки · тренды памяти · кандидаты в кэш; действие: fix (отправить эпизод с посевом улик) · run_sweep · set_goal · set_budget — ваш агент может управлять всем циклом проверки/оптимизации из чата

vinv-runtime — захваченные запуски (только чтение, с отметкой происхождения):

Инструмент Возвращает
rank_suspects Ранжированные по ошибкам символы по запросам pass/fail, прикреплены реальные ошибки — сначала при любом сбое
values_of Наблюдаемые типы аргументов/возвратов, частота null, диапазоны
slice Наблюдаемая цепочка вызовов от корня запроса, значения на каждом кадре
coverage_of Что выполнялось, как часто, ok/error, время
callers_of / blast_radius / why_did_this_run Наблюдаемые вызывающие · транзитивное влияние · пути точек входа

vinv-exercise — замыкает цикл тестирования конечных точек: ваш агент запускает ваш сервис и сообщает о выполнении, а Vinv оценивает полученное.

Часто задаваемые вопросы

Нужны ли мне собственные ключи API?

Нет. Vinv запускает всё локально. Семантический индекс и эмбеддер кода работают на вашей машине без каких-либо ключей провайдера. Ваш CLI-агент (например, Claude Code или Cursor) обрабатывает собственное общение с LLM, используя уже настроенную вами аутентификацию.

Есть ли телеметрия или сбор данных?

Никакой телеметрии, никакой аналитики, никаких пингов об использовании, никаких отчетов о сбоях. Vinv хранит состояние для каждого репозитория в .vinv/ и состояние для каждой машины в ~/.vinv/, а конфиденциальные данные в трассах редактируются и никогда никуда не отправляются. Расширение делает ровно один исходящий запрос: GET статического файла на notices.vinv.ai при активации, чтобы релиз, который ломает вашу установку, мог сообщить вам об этом. Ни строки запроса, ни идентификаторов, ни версии, ничего не загружается — вся фильтрация происходит на вашей машине, не чаще одного раза в 12 часов. Отключите это с помощью vinv.notices.enabled.

Что Auto-Pilot запускает сегодня?

Сервисы и API. Auto-Pilot обнаруживает запускаемые Python-сервисы, поднимает их под tracelens и управляет их HTTP- (и связанными) точками входа. Обычное управление библиотеками / функциями внутри процесса сейчас не входит в область Auto-Pilot — продуктовый путь — это сервисы, которые вы можете запускать и вызывать.

Изолирован ли непроверенный код упражнений в песочнице?

Да. Цели, которые защита чистоты не может проверить, направляются через лестницу изоляции: песочница ОС на уровне ядра (sandbox-exec, bwrap, unshare), если хост её предоставляет, в противном случае — обёртка процесса Python — всегда с одноразовой копией репозитория, перенаправленными HOME/TMPDIR/XDG_*, заблокированной сетью и порождением подпроцессов, а также POSIX-ограничениями rlimits. Какой уровень вам достался, определяется пробой, которая проверяет, что запись за пределы корня действительно не удалась, и об этом сообщается честно. --no-sandbox оставляет этот набор отказанным и неуправляемым; он никогда не запускает их свободно. exerciser containment сообщает, что может предоставить ваш хост.

Почему первый запуск медленный? (Время сборки)

Первый запуск занимает около 4 минут, потому что Vinv необходимо скомпилировать индекс Rust и загрузить локальную модель эмбеддингов (~500 МБ). Последующие запуски и трассировки будут начинаться за секунды.

Изменяет ли Vinv мой код?

Нет. Vinv использует трассировщик с нулевым редактированием. Он инструментирует ваш Python-бэкенд во время выполнения без необходимости интеграции SDK, декораторов или изменений в вашем исходном коде.

Какие языки поддерживаются?

Сейчас доказательства времени выполнения — трассировка, рой оракулов, проверенные исправления — доступны для Python, для сервисов и API. Другие стеки по-прежнему получают семантический индекс, граф кода и обоснованные ответы на вопросы. TypeScript и Go — следующие.

Как он узнает, что исправление сработало?

Приёмочные тесты создаются до исправления, хранятся вне вашего рабочего пространства под непрозрачным токеном и должны детерминированно падать дважды на сломанном коде — тест, который проходит до исправления, отбрасывается. Затем исправление должно пройти их с повторным запуском, живым портом и каждым другим наблюдаемым поведением, байт-в-байт идентичным. Детерминированный аудит против читерства по диффу блокирует правки тестов, проглоченные исключения и теневые модули.

Какие редакторы и агенты кодирования работают?

Редакторы: VS Code, Cursor, Windsurf, VSCodium, Trae, VS Code Insiders. Агенты, которыми он управляет: Claude Code, Cursor CLI, Codex CLI, Gemini CLI, Copilot Chat, Windsurf Cascade. См. Работает с вашим агентом.

Действительно ли это бесплатно и с открытым исходным кодом?

Да — Apache 2.0, каждый движок собирается из исходников в этом репозитории.

Конфиденциальность

  • Всё на вашей машине — состояние для каждого репозитория в .vinv/ (автоматически в .gitignore), для каждой машины в ~/.vinv/. Никакой учётной записи, никаких ключей API, никакой телеметрии — вообще.
  • Один исходящий запрос, и вы можете его прочитать: GET статического JSON-файла на notices.vinv.ai при активации, только для уведомлений о сломанных релизах и проблемах безопасности. Никакой строки запроса, никаких идентификаторов, никакой версии, ничего не загружается; максимум один раз за 12 часов; URL — константа, которую нельзя перенаправить; отключается через vinv.notices.enabled.
  • Единственная загрузка — модель эмбеддингов (Hugging Face, один раз, ~500 МБ); всё остальное собирается из этого репозитория.
  • Трассировки хранят ограниченные сводки, а не необработанные значения; имена чувствительных параметров (password, token, api_key, …) редактируются и никогда не захватываются.
  • Единственный LLM, с которым общается Vinv, — это CLI агента кодирования, который настроили вы, через его собственную аутентификацию.

Участие и лицензия

См. CONTRIBUTING.md — uv sync, cargo build в index/, npm install && npm run check в extension/, держите tests/e2e/planted_bug_golden/run.py зелёным. Хорошие первые задачи помечены. Участвуя, вы соглашаетесь с нашим Кодексом поведения; чтобы сообщить об уязвимости, см. SECURITY.md. Лицензия Apache 2.0 © 2026 VinvAI.

Ваш агент говорит, что готово. Vinv говорит: докажи. Если Vinv заметил то, что пропустил ваш агент — оставьте отзыв на Open VSX и ⭐ поставьте звезду этому репозиторию.

vinv.ai · Open VSX · LinkedIn · support@vinv.ai · Python в приоритете, затем TS и Go · Контекст важнее размера модели.

Войдите, чтобы оставить комментарий