llm-coding-agent 0.1a0 Simon Willison released llm-coding-agent 0.1a0, an experimental coding agent built on his LLM library. The agent provides tools for file editing, command execution, and code search, and is available via PyPI with a Python API. Release: llm-coding-agent 0.1a0 https://github.com/simonw/llm-coding-agent/releases/tag/0.1a0 Another Fable 5 experiment. Now that my LLM library https://llm.datasette.io/ has evolved into more of an agent framework it's time to see what a simple coding agent would look like built on it. I started a new Python library https://github.com/simonw/llm-coding-agent/tree/2466fa03ba8e5122c3bfa93d52167d33bce40ac6 using my python-lib-template-repository https://github.com/simonw/python-lib-template-repository GitHub template repository, then ran these two prompts here's the Claude Code for web transcript https://claude.ai/code/session 01TEUBvBbMipbFSoqjMiJ7ha : Write a spec.md for this project - it will depend on the latest “llm” alpha from PyPI and implement a Claude code style coding agent complete with tools for reading and editing files and executing commands Then: Commit the spec, then build it using red/green TDD in a series of sensible commits each with passing tests and updated docs - occasionally manually test it using the OpenAI API key in your environment Here's the spec https://github.com/simonw/llm-coding-agent/blob/0.1a0/spec.md , the resulting README file https://github.com/simonw/llm-coding-agent/blob/0.1a0/README.md , and the sequence of commits https://github.com/simonw/llm-coding-agent/commits/0.1a0 . I've shipped a slop-alpha to PyPI, so you can run the new agent like this: uvx --prerelease=allow --with llm-coding-agent llm code It's pretty good for a first attempt Here's the Fable-authored README https://github.com/simonw/llm-coding-agent/blob/0.1a0/README.md , which lists recipes like llm code --yolo and llm code --allow "pytest " --allow "git diff " . It also presents a Python API https://github.com/simonw/llm-coding-agent/blob/0.1a0/README.md codingagent based around a CodingAgent model="gpt-5.5", root="/path", approve=True .run "Fix the failing test in tests/test parser.py" class which I didn't ask for but I'm delighted to see implemented. Here's the suite of tools it implemented https://github.com/simonw/llm-coding-agent/blob/0.1a0/llm coding agent/tools.py L22 , listed using uvx ... llm tools : CodingTools edit file path: str, old string: str, new string: str, replace all: bool = False - str Replace an exact string in a file. old string must match the file contents exactly including whitespace and must identify a unique location unless replace all is true. Returns a diff of the change so it can be verified. CodingTools execute command command: str, timeout: int = 120 - str Run a shell command in the session root directory. Returns combined stdout and stderr followed by an Exit code line. timeout is in seconds maximum 600 ; on timeout the whole process tree is killed. CodingTools list files pattern: str = ' / ', path: str = '.' - str List files matching a glob pattern, newest first. Skips hidden directories, node modules, pycache and in a git repository anything covered by .gitignore. Returns at most 200 paths relative to the searched directory. CodingTools read file path: str, offset: int = 0, limit: int = 2000 - str Read a text file, returning numbered lines like cat -n. Paths are relative to the session root. Use offset 0-based first line and limit max lines to page through files too large to read in one call. CodingTools search files pattern: str, path: str = '.', glob: str = None, max results: int = 100 - str Search file contents for a regular expression. Returns matches as path:line number:line, capped at max results. Use glob e.g. " .py" to restrict which files are searched. CodingTools write file path: str, content: str - str Create or overwrite a file with the given content. Parent directories are created as needed. Prefer edit file for modifying existing files. I tried it out by running llm code --yolo and then prompting: mkdir /tmp/demo and then in that folder create a simple swiftui CLI app for telling the time in ascii art Here's the transcript https://gist.github.com/simonw/750009007050124cd1b390cfe8488e41 , in which GPT-5.5 reasoning notes that "SwiftUI isn't suitable for a true CLI" and then builds an app that outputs this on swift run AsciiTime : █ █████ ████ █ █ ███ ██ █ █ █ ██ █ ██ █ █ █ ████ ███ █ █ █ █ █ █ █ █ █ █ █ ███ ████ ████ ███ ███ █████ Tags: projects https://simonwillison.net/tags/projects , ai https://simonwillison.net/tags/ai , generative-ai https://simonwillison.net/tags/generative-ai , llm https://simonwillison.net/tags/llm , llm-tool-use https://simonwillison.net/tags/llm-tool-use , coding-agents https://simonwillison.net/tags/coding-agents , claude-code https://simonwillison.net/tags/claude-code , claude-mythos-fable https://simonwillison.net/tags/claude-mythos-fable