llm-coding-agent: un agente de codificación impulsado por LLM

Simon Willison publicó una primera versión alfa del llm-coding-agent, un agente de codificación construido sobre su framework de agentes LLM. El proyecto automatiza tareas como leer y editar archivos, ejecutar comandos y buscar código, y ya se puede instalar desde PyPI en una versión preliminar.

Por Redaccion TD
llm-coding-agent: un agente de codificación impulsado por LLM

Introducción

Simon Willison presentó una nueva apuesta en su experimento Fable: llm-coding-agent 0.1a0. El proyecto nace ahora que su librería de LLM evolucionó hacia un framework de agentes, y el objetivo fue explorar cómo se vería un agente de codificación sencillo construido sobre esa base. El resultado es una librería Python inicial publicada como una pre-alfa en PyPI que permite automatizar operaciones habituales de desarrollo con un modelo LLM.

En términos prácticos, el agente fue generado a partir de instrucciones y pruebas automatizadas: Willison creó un repositorio basado en su plantilla python-lib-template-repository y alimentó al sistema con prompts para generar una especificación (spec.md) y luego le solicitó que realizara commits usando TDD en una secuencia sensata. El experimento incluyó pruebas manuales puntuales usando la clave de OpenAI disponible en el entorno.

Cómo se creó y cómo se usa

El flujo de trabajo que originó el agente es interesante porque combina generación automática de especificación y desarrollo basado en pruebas. En esencia, se le pidió al sistema:

  • Generar un spec.md que declare la dependencia del paquete llm (alpha) en PyPI y describa un agente de estilo “Claude Code” con herramientas para leer y editar archivos y ejecutar comandos.
  • Hacer commits que sigan la metodología red/green TDD: cada commit con pruebas que pasan y documentación actualizada.

Willison empaquetó una versión preliminar (slop-alpha) en PyPI, y el agente puede ejecutarse desde la CLI usando uvx con la opción prerelease, por ejemplo: uvx —prerelease=allow —with llm-coding-agent llm code

El repositorio generado incluye además un README (autogenerado por Fable en el experimento) con recetas de uso como llm code —yolo y llm code —allow “pytest*” —allow “git diff*” que permiten ajustar el comportamiento permisivo del agente.

API y diseño: la clase CodingAgent

Además de la interfaz de línea de comandos, el experimento produjo una API Python orientada a objetos para interactuar con el agente. Un ejemplo presentado es:

CodingAgent(model=“gpt-5.5”, root=“/path”, approve=True).run(“Fix the failing test in tests/test_parser.py”)

No fue una instrucción explícita al sistema crear esa API, pero apareció como una implementación útil: la clase ofrece una forma de invocar al agente desde código para tareas específicas de mantenimiento o corrección.

Herramientas que expone el agente

El llm-coding-agent expone un conjunto de herramientas que permiten a los LLMs inspeccionar y modificar un repositorio de forma estructurada. Estas herramientas son las piezas clave que convierten un modelo de lenguaje en un agente con capacidades prácticas de desarrollo:

  • CodingTools_edit_file(path: str, old_string: str, new_string: str, replace_all: bool = False) -> str

    • Reemplaza una cadena exacta en un archivo. old_string debe coincidir exactamente con el contenido (incluyendo espacios) y debe apuntar a una ubicación única salvo que replace_all sea true. Devuelve un diff del cambio para verificación.
  • CodingTools_execute_command(command: str, timeout: int = 120) -> str

    • Ejecuta un comando de shell en el directorio raíz de la sesión. Retorna stdout y stderr combinados y una línea con el código de salida. El timeout está en segundos (máximo 600); si ocurre timeout se mata el árbol de procesos.
  • CodingTools_list_files(pattern: str = ’**/*’, path: str = ’.’) -> str

    • Lista archivos que coinciden con un glob, ordenados por novedad. Omite directorios ocultos, node_modules, pycache y lo que esté cubierto por .gitignore en un repositorio git. Devuelve hasta 200 rutas relativas.
  • CodingTools_read_file(path: str, offset: int = 0, limit: int = 2000) -> str

    • Lee un archivo de texto y devuelve líneas numeradas como cat -n. Permite paginar con offset y limit.
  • CodingTools_search_files(pattern: str, path: str = ’.’, glob: str = None, max_results: int = 100) -> str

    • Busca en el contenido de archivos usando una expresión regular y devuelve coincidencias en formato path:line_number:line, limitado por max_results. Se puede restringir por glob (por ejemplo “*.py”).
  • CodingTools_write_file(path: str, content: str) -> str

    • Crea o sobrescribe un archivo con el contenido proporcionado. Crea directorios padres según sea necesario. Se recomienda usar edit_file para modificar archivos existentes.

Estas herramientas proveen al agente control fino sobre el árbol de proyecto y la ejecución de comandos, lo que habilita flujos de trabajo reales como arreglar tests fallidos, aplicar refactorings simples o ejecutar suites de pruebas.

Un ejemplo curioso: generar un CLI SwiftUI que imprime arte ASCII

Willison también mostró una sesión experimental en la que ejecutó llm code —yolo y le pidió al agente crear una app CLI SwiftUI que muestre la hora en arte ASCII. El agente, razonando sobre limitaciones, señaló que SwiftUI no es apropiado para una CLI y terminó generando un ejecutable que, al correr swift run AsciiTime, imprime una representación en arte ASCII de la hora.

Este ejemplo ilustra tanto las posibilidades como las limitaciones: el agente puede combinar conocimiento técnico y heurísticas para adaptar la solución a un objetivo práctico, pero también puede tomar decisiones de implementación que requieren revisión humana.

Implicaciones para equipos y tomadores de decisión en América Latina

Para equipos de desarrollo en la región, llm-coding-agent muestra cómo los agentes basados en LLM pueden integrarse en ciclos de trabajo cotidianos: revisión de código, corrección de tests, generación de tareas repetitivas y prototipado rápido. Las organizaciones pueden beneficiarse explorando estas herramientas para:

  • Acelerar tareas repetitivas de mantenimiento.
  • Probar ideas con prototipos rápidos antes de invertir en desarrollo completo.
  • Facilitar soporte a equipos con menos experiencia en ciertos stacks, usando el agente como asistente.

Sin embargo, la adopción debe considerar aspectos operativos: disponibilidad de créditos y claves para APIs externas, privacidad del código (transferir código a servicios externos puede implicar riesgos regulatorios o contractuales) y la necesidad de revisar los cambios propuestos por el agente.

Riesgos y consideraciones prácticas

Aunque prometedor, este tipo de agentes no son una solución plug-and-play que reemplace a desarrolladores. Riesgos prácticos incluyen:

  • Cambios inapropiados o incompletos que pasan pruebas locales pero introducen problemas (especialmente si las pruebas no cubren casos críticos).
  • Dependencia de claves de API y servicios externos para razonamiento avanzado.
  • Requisitos de auditoría y trazabilidad: es crucial mantener registros claros de las acciones automatizadas y revisiones humanas.

Para equipos en empresas, especialmente en entornos regulados, es recomendable usar el agente en entornos controlados y habilitar aprobaciones humanas (por ejemplo, approve=False por defecto) antes de aplicar cambios en ramas principales.

Conclusión

llm-coding-agent 0.1a0 es un experimento interesante que demuestra cómo un framework de agentes LLM puede materializarse en una herramienta práctica para desarrolladores. Ofrece una colección de herramientas operativas que permiten inspeccionar, modificar y ejecutar en un repositorio, y aporta una API que facilita integraciones programáticas.

Para equipos en América Latina, representa una oportunidad para explorar automatización asistida por IA en flujos de trabajo de desarrollo, siempre acompañada de prácticas de control, revisión humana y gestión de riesgos. La versión actual es preliminar, pero muestra el potencial y las direcciones de trabajo futuras para agentes que actúen como asistentes de programación.

Fuente original: Simon Willison