{"slug": "llm-coding-agent-0-1a0", "title": "llm-coding-agent 0.1a0", "summary": "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.", "body_md": "**Release:** [llm-coding-agent 0.1a0](https://github.com/simonw/llm-coding-agent/releases/tag/0.1a0)\n\nAnother 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.\n\nI 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)):\n\n`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`\n\nThen:\n\n`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`\n\nHere'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).\n\nI've shipped a slop-alpha to PyPI, so you can run the new agent like this:\n\n```\nuvx --prerelease=allow --with llm-coding-agent llm code\n```\n\nIt'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`\n\nand `llm code --allow \"pytest*\" --allow \"git diff*\"`\n\n.\n\nIt 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\")`\n\nclass which I didn't ask for but I'm delighted to see implemented.\n\nHere'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`\n\n:\n\n`CodingTools_edit_file(path: str, old_string: str, new_string: str, replace_all: bool = False) -> str`\n\nReplace an exact string in a file.\n\nold_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.\n\n`CodingTools_execute_command(command: str, timeout: int = 120) -> str`\n\nRun a shell command in the session root directory.\n\nReturns combined stdout and stderr followed by an Exit code line. timeout is in seconds (maximum 600); on timeout the whole process tree is killed.\n\n`CodingTools_list_files(pattern: str = '**/*', path: str = '.') -> str`\n\nList files matching a glob pattern, newest first.\n\nSkips hidden directories, node_modules, __pycache__ and (in a git repository) anything covered by .gitignore. Returns at most 200 paths relative to the searched directory.\n\n`CodingTools_read_file(path: str, offset: int = 0, limit: int = 2000) -> str`\n\nRead a text file, returning numbered lines like cat -n.\n\nPaths 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.\n\n`CodingTools_search_files(pattern: str, path: str = '.', glob: str = None, max_results: int = 100) -> str`\n\nSearch file contents for a regular expression.\n\nReturns matches as path:line_number:line, capped at max_results. Use glob (e.g. \"*.py\") to restrict which files are searched.\n\n`CodingTools_write_file(path: str, content: str) -> str`\n\nCreate or overwrite a file with the given content.\n\nParent directories are created as needed. Prefer edit_file for modifying existing files.\n\nI tried it out by running `llm code --yolo`\n\nand then prompting:\n\n`mkdir /tmp/demo and then in that folder create a simple swiftui CLI app for telling the time in ascii art`\n\nHere'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`\n\n:\n\n```\n      █    █████         ████     █             █     ███   \n     ██    █        █        █   ██      █     ██    █   █  \n      █    ████           ███     █             █       █   \n      █        █    █        █    █      █      █      █    \n     ███   ████          ████    ███           ███   █████\n```\n\nTags: [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)", "url": "https://wpnews.pro/news/llm-coding-agent-0-1a0", "canonical_source": "https://simonwillison.net/2026/Jul/2/llm-coding-agent/#atom-everything", "published_at": "2026-07-02 19:33:12+00:00", "updated_at": "2026-07-03 21:50:05.406673+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "large-language-models"], "entities": ["Simon Willison", "LLM", "PyPI", "Claude Code", "OpenAI", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/llm-coding-agent-0-1a0", "markdown": "https://wpnews.pro/news/llm-coding-agent-0-1a0.md", "text": "https://wpnews.pro/news/llm-coding-agent-0-1a0.txt", "jsonld": "https://wpnews.pro/news/llm-coding-agent-0-1a0.jsonld"}}