Саймон Уиллисон собрал coding agent за два промпта — и выложил его на PyPI
Саймон Уиллисон выпустил llm-coding-agent 0.1a0 — coding agent на Python поверх LLM-фреймворка. Как установить, запустить и что внутри инструмента.

Саймон Уиллисон (Simon Willison) выпустил llm-coding-agent 0.1a0 — минималистичный coding agent на Python, построенный поверх его же LLM-библиотеки. Сам автор называет релиз «slop-alpha», но инструмент уже умеет читать файлы, редактировать код и выполнять команды в оболочке — всё через стандартный интерфейс llm.
Зачем это нужно, если есть Claude Code и Cursor
Готовые инструменты вроде Claude Code или Cursor — чёрные ящики: нельзя посмотреть, как именно агент принимает решения, добавить свой инструмент или встроить логику в собственный Python-скрипт.
llm-coding-agent решает другую задачу: это референсная реализация, которую можно читать, форкать и расширять. Плюс — она работает с любой моделью, которую поддерживает llm (OpenAI, Anthropic, локальные через Ollama и т.д.). Если вы уже используете экосистему llm Уиллисона, агент встраивается в неё без лишних зависимостей.
Установка и первый запуск
Агент опубликован на PyPI как альфа, поэтому нужен флаг --prerelease=allow. Самый быстрый способ попробовать — через uvx без глобальной установки:
``bash uvx --prerelease=allow --with llm-coding-agent llm code ``
Если хотите установить постоянно:
``bash pip install --pre llm-coding-agent ``
После установки команда llm code становится доступна как субкоманда основного CLI llm.
Перед запуском убедитесь, что у вас настроен API-ключ нужной модели. Для OpenAI:
``bash llm keys set openai ``
Режимы запуска: от осторожного до «дай волю»
По умолчанию агент спрашивает подтверждение перед каждым действием. Для экспериментов это быстро надоедает, поэтому есть несколько режимов:
Полный автопилот — агент выполняет любые команды без вопросов:
``bash llm code --yolo ``
Разрешить только конкретные паттерны команд — агент автоматически выполняет только то, что совпадает с маской:
``bash llm code --allow "pytest*" --allow "git diff*" ``
Второй вариант удобен для CI-подобных сценариев: агент может гонять тесты и смотреть диффы, но не может, например, сделать git push без вашего ведома.
Что внутри: шесть инструментов агента
Набор инструментов можно посмотреть командой:
``bash uvx --prerelease=allow --with llm-coding-agent llm tools ``
Вот что реализовано:
`CodingTools_read_file(path, offset, limit)` — читает файл с нумерацией строк (как cat -n). Параметры offset и limit позволяют постранично обходить большие файлы; по умолчанию возвращает 2000 строк.
`CodingTools_write_file(path, content)` — создаёт или перезаписывает файл целиком. Родительские директории создаются автоматически. Для точечных правок лучше использовать edit_file.
`CodingTools_edit_file(path, old_string, new_string, replace_all)` — заменяет точную строку в файле. old_string должен совпадать с содержимым побайтово, включая пробелы. Возвращает diff изменения — агент может сразу проверить результат.
`CodingTools_execute_command(command, timeout)` — выполняет shell-команду в корне сессии. Таймаут по умолчанию 120 секунд, максимум 600. При таймауте убивается всё дерево процессов.
`CodingTools_list_files(pattern, path)` — листинг файлов по glob-паттерну, новые сначала. Пропускает скрытые директории, node_modules, __pycache__ и всё из .gitignore. Возвращает не более 200 путей.
`CodingTools_search_files(pattern, path, glob, max_results)` — поиск по содержимому файлов через регулярное выражение. Результат в формате path:line_number:line, максимум 100 совпадений. Параметр glob ограничивает поиск нужными типами файлов, например "*.py".
Python API: то, что автор не просил, но получил
Помимо CLI, агент реализовал Python API — Уиллисон признаётся, что не закладывал это в задание, но был рад увидеть в результате. Использование выглядит так:
```python from llm_coding_agent import CodingAgent
agent = CodingAgent( model="gpt-5.5", root="/path/to/project", approve=True ) agent.run("Fix the failing test in tests/test_parser.py") ```
Параметр approve=True включает интерактивное подтверждение действий. Это удобно для встраивания агента в собственные скрипты автоматизации — например, в хук после упавшего CI.
Где ломается
Точность `edit_file` — главная боль. Инструмент требует побайтового совпадения old_string. Если модель чуть изменила отступы или добавила пробел, замена не сработает, и агент уйдёт в цикл попыток. В реальных проектах с автоформатированием это случается часто.
`--yolo` в чужом репозитории — риск. Агент выполняет произвольные shell-команды без ограничений. Запускайте только в изолированных директориях или контейнерах, если не уверены в промпте.
Версия 0.1a0 — альфа без стабильного API. Уиллисон прямо называет релиз «slop-alpha». Интерфейсы могут измениться в следующих версиях без предупреждения. Не стоит строить на этом продакшн-пайплайны прямо сейчас.
Контекстное окно при больших проектах. list_files возвращает максимум 200 путей, read_file — 2000 строк за вызов. В монорепозиториях агент может не увидеть нужный файл с первой попытки и потратить токены на навигацию.
Что попробовать дальше
Исходный код лежит на GitHub в simonw/llm-coding-agent — там же spec.md, по которому Fable строил реализацию через TDD. Это редкий случай, когда можно проследить всю цепочку: от промпта до коммитов с тестами.
Если хотите расширить набор инструментов (например, добавить git commit или запрос к базе данных), точка входа — класс CodingTools. Архитектура намеренно простая: каждый инструмент — метод класса с типизированными аргументами, который llm подхватывает автоматически через llm tools.
Источники
Читайте также
Комментарии
Пока никто не написал. Будьте первым.


