# Саймон Уиллисон собрал coding agent за два промпта — и выложил его на PyPI
Каноническая страница: https://plainews.ru/posts/llm-coding-agent-quick-start-guide
Опубликовано: 2026-07-03T07:01:07.205Z

Саймон Уиллисон выпустил 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.

## Источники

- Simon Willison: llm-coding-agent 0.1a0
