Slopo — это лёгкая CLI-утилита для поиска неочевидных копий кода. Обычные дубликаты лежат рядом, и их легко замечают люди или AI. А вот фрагменты, которые разбросаны по разным модулям или сидят далеко друг от друга в большом файле, — зона ответственности Slopo. Инструмент не ищет точное совпадение (с этим другие утилиты справляются), а вычисляет эмбеддинги для каждой порции кода и сравнивает их. Если эмбеддинги близки, код почти наверняка делает одно и то же, но написан чуть иначе. Если код реализует алгоритм принципиально другим способом, эмбеддинги будут далеки, и Slopo его не покажет.
Поддерживаются Python, TypeScript, JavaScript, Java, Kotlin, C#, Go и Rust. Slopo группирует похожие блоки в кластеры и сортирует их одновременно по схожести и по расстоянию в кодовой базе. Полученный отчёт — сырьё для AI-агента, который проверяет, действительно ли перед ним дубликат. Просмотренные кластеры можно записать в slopo.ignore.txt.
Установка простая: команда использует uv и качает Slopo из PyPI в изолированное окружение. Отдельно Python ставить не нужно. Сначала slopo init создаёт конфиг. Обязательны только директория с кодом и модель эмбеддингов. Лучше всего подходят модели, заточенные под код, например от Voyage AI (работают даже на размерности 512). Можно использовать любого провайдера, совместимого с LiteLLM. API-ключ безопаснее задавать через переменные окружения.
Дальше три команды: slopo index, slopo embed, slopo analyze. Индексация инкрементальная — обновляет только изменённые файлы. Отчёт лежит в index.md. Если результат слишком большой или маленький, настраиваются пороги similarity_threshold и rerank_threshold. Первый задаёт минимальную косинусную схожесть, второй — финальный порог после того, как к схожести добавляется бонус за близость в кодовой базе (до 15% за число директорий и до 10% за строки в одном файле). Ещё есть body_node_count_threshold — минимальное количество узлов AST в теле функции, чтобы отсеять мелкий мусор.
Точные копии Slopo тоже находит, но показывает их списком путей без повторения кода. В отчёте есть параметр «similarity ratio» в двух вариантах: с учётом точных копий и без них.