Interfaces de herramientas para programar (Read, Edit, Bash)
Las herramientas mínimas que necesita un agente de código: leer un archivo, editarlo, ejecutar el shell y ejecutar pruebas.
Interfaces de herramientas para programar (Read, Edit, Bash) es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
¿Qué herramientas necesita un agente de código?
Lo mínimo:
- read_file — ver código
- edit_file / write_file — cambiar código
- bash — ejecutar comandos del shell (pruebas y compilaciones)
- search / grep — buscar código por cadena o símbolo
read_file
def read_file(path: str, start_line: int = 0, end_line: int | None = None) -> str:
with open(path) as f:
lines = f.readlines()
return ''.join(lines[start_line:end_line])
# --- demo ---
with open('demo_source.py', 'w', encoding='utf-8') as f:
f.write('line0\nline1\nline2\nline3\nline4\n')
snippet = read_file('demo_source.py', start_line=1, end_line=3)
print('Lines 1-2 of demo_source.py:')
print(snippet)
Las lecturas por rango de líneas ahorran tokens
Para archivos grandes, lea únicamente el rango relevante. Ahorrará una enorme cantidad de tokens frente a leer el archivo completo en cada llamada.
edit_file (reemplazo de cadenas)
El patrón str_replace de Anthropic: busque una cadena única en un archivo y sustitúyala:
def edit_file(path: str, old_string: str, new_string: str):
contents = read_file(path)
occurrences = contents.count(old_string)
if occurrences == 0:
raise ValueError('old_string not found')
if occurrences > 1:
raise ValueError('old_string is not unique')
contents = contents.replace(old_string, new_string)
with open(path, 'w') as f:
f.write(contents)Por qué usar reemplazo de cadenas en lugar de diferencias
- Es más sencillo para el modelo que producir una sintaxis de diferencias válida
- Obliga al modelo a examinar el código REAL (lo que ayuda a detectar alucinaciones)
- Falla cuando hay ambigüedad
Es el formato que utiliza Claude Code.
write_file
Para crear archivos nuevos:
def write_file(path: str, content: str):
os.makedirs(os.path.dirname(path), exist_ok=True)
with open(path, 'w') as f:
f.write(content)bash
Comandos del shell para pruebas, compilaciones e instalaciones de paquetes:
def bash(command: str, timeout: int = 60) -> dict:
import subprocess
try:
result = subprocess.run(command, shell=True, capture_output=True, text=True, timeout=timeout)
return {'stdout': result.stdout[-5000:], 'stderr': result.stderr[-5000:], 'exit_code': result.returncode}
except subprocess.TimeoutExpired:
return {'error': 'timeout', 'exit_code': -1}
# --- demo ---
result = bash("echo hello from the sandboxed shell")
print(f"exit_code={result['exit_code']}")
print(f"stdout={result['stdout'].strip()!r}")
Aísle la herramienta bash
NUNCA ejecute bash en su host. Utilice Docker / Firecracker / E2B. (Consulte el curso anterior sobre aislamiento.)
Trunque las salidas largas
Los fallos de las pruebas pueden generar megabytes de salida. Trúnquela a los últimos KB; normalmente contienen el error real:
stderr = 'error line\n' * 1000
if len(stderr) > 5000:
stderr = '...[truncated]...' + stderr[-5000:]
print(f'Truncated stderr length: {len(stderr)}')search / grep
def grep(pattern: str, path: str = '.', file_glob: str = '**/*') -> list[str]:
matches = []
for f in glob(file_glob, recursive=True):
for i, line in enumerate(open(f)):
if re.search(pattern, line):
matches.append(f'{f}:{i+1}: {line.rstrip()}')
return matches[:50]list_files
def list_files(path: str = '.') -> list[str]:
return [p for p in glob(f'{path}/**', recursive=True) if os.path.isfile(p)][:200]Opcional: herramientas AST
Para comprender mejor el código:
def find_function(name: str, path: str):
tree = ast.parse(open(path).read())
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef) and node.name == name:
return ast.unparse(node)Las descripciones de las herramientas son lo más importante aquí
Los agentes de código eligen la herramienta incorrecta con más frecuencia que los agentes de chat. Dedique más tiempo a las descripciones:
description='Edit a file by replacing a unique string. The old_string MUST appear exactly once in the file. Reads the file first to validate. Use this for any code change in an existing file.'Ese es todo el conjunto de herramientas
Leer, editar, escribir, bash, grep y listar. Con estas seis herramientas, un agente puede realizar casi cualquier tarea de ingeniería de software. Añada herramientas especializadas solo cuando exista un beneficio medido.
Patrón de edición
¿Por qué es más segura una edición con "string-replace" que una edición con "send full file"?
Repaso
Leer, editar (str_replace), escribir, bash, grep y listar. Seis herramientas, bien descritas y aisladas en un sandbox, son suficientes para casi cualquier agente de programación.
Preguntas frecuentes
¿La lección «Interfaces de herramientas para programar (Read, Edit, Bash)» es gratis?
Sí — el texto completo de «Interfaces de herramientas para programar (Read, Edit, Bash)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Interfaces de herramientas para programar (Read, Edit, Bash)»?
Las herramientas mínimas que necesita un agente de código: leer un archivo, editarlo, ejecutar el shell y ejecutar pruebas. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Interfaces de herramientas para programar (Read, Edit, Bash)»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Patrones agénticos: planificar, ejecutar y verificar
- Interfaces de herramientas para programar (Read, Edit, Bash)
- Bucles iterativos de autocorrección
- Arquitecturas de SWE-Agent y OpenDevin