Как accepted-решения с LeetCode уходят в GitHub: self-hosted цепочка с Claude API

Автор с ником nathanff на dev.to описывает проект leetcode-sync: после статуса Accepted решение оформляется для выгрузки в GitHub, а Claude API генерирует текст коммита и «шапку» файла с пояснением подхода и оценкой сложности. Материал вышел 4 апреля 2026 года; ниже — сжатое изложение архитектуры по тексту поста, без тем, которые автор там не раскрывал (лицензия, хранение токенов, детальный разбор ToS платформ).
От ручного копирования к автоматизации и ИИ-текстам
В посте боль сформулирована так: после каждой задачи на LeetCode приходилось вручную переносить решение в GitHub — монотонно, повторяемо и легко забыть. Ответ автора в духе оригинала: «So I automated it.»
Заголовок поста связывает автоматический push с сообщениями коммитов, сгенерированными ИИ — это и читательский крючок: речь не только о скриптах, но и о том, как LLM участвует в оформлении истории репозитория.
Цепочка: Tampermonkey, FastAPI, Claude API, GitHub API
По описанию автора, логика выглядит так:
На стороне LeetCode фиксируется момент принятого решения (Accepted).
В браузере работает userscript для Tampermonkey: перехватывается запрос и уходит POST на эндпоинт вида:
https://your-server.com/leetcode-sync/submitНа сервере — FastAPI; в посте указано развёртывание в Docker.
Сервер вызывает Claude API — для заголовка файла (в том числе пояснение алгоритма и time/space complexity) и описательного сообщения коммита.
Далее — GitHub API: выкладка файла и обновление README. Push идёт без локального git на машине пользователя — через API GitHub.
Claude API стоит в центре текстового контура: он формирует коммит-месседжи и структуру шапки решения, а не только копирует код.
Нюанс Chrome Manifest V3 и unsafeWindow
Перехват запросов в браузере — часть того же контура, который дальше сводится к серверу, Claude API и GitHub API. Без стабильного доступа к сетевому слою страницы цепочка от Accepted до сгенерированного коммита не стартует.
Отдельный акцент в посте — ограничения Manifest V3 в Chrome: Tampermonkey не может напрямую подцепиться к window.fetch страницы LeetCode. Обход автора: работа через unsafeWindow, чтобы получить «настоящие» fetch и XMLHttpRequest до того, как их перехватит код платформы. Это не реклама расширения, а конкретика интеграции в браузерный контекст.
Открытый код, self-hosted и граница с внешними сервисами
В блоке «Try it» автор даёт ссылку на репозиторий https://github.com/NathanaelFetue/leetcode-sync и пишет по-английски, что проект fully open source и self-hosted, а «ваш код не проходит через сторонние сервисы», кроме Claude API для генерации текстов.
Автоматизация под вашим контролем, а облачный вызов модели — отдельная, осознанная точка доверия для ИИ-генерации коммитов и комментариев в файлах.
В посте приводятся примеры дерева каталогов, текстов коммитов и многострочной шапки файла с полями вроде Problem, Difficulty, URL, Approach, Time, Space — как иллюстрации, а не как гарантированный вывод для любой задачи.
Чтобы повторить идею у себя, имеет смысл прочитать полный пост и репозиторий: там — инструкции и код; здесь собраны только утверждения, явно следующие из указанных источников.
Источники
- Nathanff (nathanff). I built a tool that auto-pushes your accepted LeetCode solutions to GitHub with AI-generated commit messages — dev.to. URL: https://dev.to/nathanff/i-built-a-tool-that-auto-pushes-your-accepted-leetcode-solutions-to-github-with-ai-generated-commit-4ni9 — дата обращения: 2026-04-05 (UTC).
- Репозиторий проекта (ссылка из поста): https://github.com/NathanaelFetue/leetcode-sync — дата обращения: 2026-04-05 (UTC), в связке с материалом на dev.to по ссылке выше.