En los equipos de desarrollo de software modernos, la acumulación constante de pequeños errores y tareas de mantenimiento repetitivas representa una fuga continua de tiempo y concentración. Las comprobaciones de punteros nulos, la actualización de bibliotecas obsoletas, el ajuste de expresiones regulares o la adición de pruebas unitarias faltantes suelen quedar estancadas en el backlog durante semanas porque los desarrolladores sénior deben priorizar las funcionalidades críticas de negocio.
Sweep fue concebido precisamente como un desarrollador júnior autónomo impulsado por inteligencia artificial (AI Junior Developer). Al integrarse como una GitHub App en el repositorio, Sweep supervisa las incidencias (Issues), indexa el código mediante embeddings vectoriales y análisis sintáctico (AST), genera modificaciones en múltiples archivos y abre un Pull Request (PR) estructurado. Además, cierra el ciclo de desarrollo al inspeccionar los fallos en las pruebas de integración continua (CI) de GitHub Actions para autocorregirse y reacciona de forma inmediata a los comentarios de revisión de código realizados por los desarrolladores.
Esta guía detalla cómo configurar Sweep en un entorno de producción, estructurar el archivo sweep.yaml, redactar incidencias óptimas para guiar al modelo y establecer límites de seguridad en el flujo de trabajo.
1. Ciclo de vida: de una incidencia de GitHub a un Pull Request
Antes de desplegar los archivos de configuración, el equipo debe comprender cómo procesa Sweep cada tarea:
- Evento disparador: Un desarrollador abre una incidencia en GitHub con el prefijo
Sweep:(por ejemplo,Sweep: Fix KeyError when user metadata payload is missing), añade la etiquetasweepo menciona a@sweepaien un comentario. - Recuperación de contexto del repositorio: El webhook de Sweep (
on_ticket) se activa y utiliza incrustaciones vectoriales y segmentación por AST para localizar los archivos, clases y pruebas relacionados con el problema reportado. - Plan de ejecución interactivo: Sweep publica un comentario en la incidencia resumiendo su enfoque técnico y detallando la lista de archivos que modificará.
- Generación de código y rama: En una rama aislada (por ejemplo,
sweep/fix-...), Sweep escribe las modificaciones respetando las directrices del proyecto. - Apertura del Pull Request: Sweep emite un PR formal que incluye el enlace de resolución (
Fixes #<id>), un resumen de cambios y una lista de verificación. - Bucle de retroalimentación:
- Autocorrección con CI: Con GitHub Actions habilitado (
gha_enabled: true), si las pruebas fallan, Sweep examina los registros de error y realiza nuevos commits correctivos. - Revisión humana: Si un revisor deja comentarios línea a línea en el diff del PR, Sweep los interpreta e introduce las correcciones solicitadas en la misma rama.
- Autocorrección con CI: Con GitHub Actions habilitado (
2. Instalación y permisos en GitHub
Para conectar Sweep con su organización o proyecto:
- Instalación de la GitHub App: Acceda al panel de instalación de la aplicación Sweep en GitHub y seleccione los repositorios que desea autorizar.
- Permisos requeridos:
- Repository Contents (Lectura y Escritura): Para examinar el código fuente y crear ramas con commits.
- Issues (Lectura y Escritura): Para leer descripciones de incidencias, gestionar etiquetas y publicar actualizaciones de estado.
- Pull Requests (Lectura y Escritura): Para crear PRs, inspeccionar diffs y responder a revisiones de código.
- Actions / Checks (Lectura): Para extraer trazas de error cuando fallen los flujos de integración continua.
- Estrategia de borradores: Al principio, es recomendable configurar los PRs en modo borrador (
draft: true) para evitar notificaciones prematuras en los canales del equipo hasta que un ingeniero valide el enfoque propuesto.
3. Configuración del proyecto mediante sweep.yaml
El comportamiento de Sweep se define a través del archivo sweep.yaml (o .sweep/config.yaml) ubicado en la raíz del repositorio. Este archivo evita alucinaciones en las importaciones, estandariza el estilo y protege zonas sensibles del sistema.
Plantilla de producción de sweep.yaml
# sweep.yaml - Configuración para la resolución automática de incidencias
# Rama base sobre la que Sweep creará las ramas de trabajo y los PRs
branch: 'main'
# Abrir PRs como borrador (recomendado en fase inicial)
draft: false
# Permitir a Sweep leer los registros de GitHub Actions y autocorregirse
gha_enabled: true
# Descripción general del proyecto para orientar el contexto del modelo
description: >
API REST de backend construida con Python 3.10 y FastAPI.
La persistencia se gestiona con SQLAlchemy 2.0 y PostgreSQL.
La lógica de negocio se encuentra en services/, los modelos en models/ y las rutas en api/v1/.
Todas las importaciones deben ser absolutas (ej. `from services.auth import verify_token`).
# Directorios y archivos que Sweep NUNCA debe modificar ni leer
blocked_dirs:
- "deploy/"
- "terraform/"
- ".github/workflows/"
- "migrations/"
- "*.env*"
- "security/"
# Comandos de sandbox ejecutados antes de abrir el Pull Request
sandbox:
install:
- "poetry install --no-root"
check:
- "poetry run ruff check {file_path}"
- "poetry run pytest tests/unit"
# Reglas estrictas de codificación inyectadas en el prompt del agente
rules:
- "Todo arreglo de bug debe incluir o actualizar pruebas unitarias con pytest en tests/."
- "Prohibido el uso de importaciones comodín (`from module import *`)."
- "Utilizar esquemas Pydantic v2 para la validación de peticiones y respuestas."
- "Registrar logs con loguru; en bloques de excepción usar logger.exception() para incluir tracebacks."
- "No modificar el esquema de base de datos ni generar migraciones alembic sin orden explícita."
- "Añadir anotaciones de tipos completas en todas las firmas de funciones."
Directivas clave explicadas
branch: Define la rama de referencia. Si el equipo utiliza flujos basados endevelop, debe actualizarse aquí.blocked_dirs: Barrera de seguridad crítica. Cualquier ruta coincidente queda bloqueada frente a cambios de Sweep. Imprescindible para aislar infraestructura, flujos de CI, credenciales y migraciones de datos.gha_enabled: Al fijarse entrue, Sweep analiza las fallas notificadas por los webhooks de GitHub Actions y genera commits adicionales para corregir los tests caídos.rules: Reglas de estilo y desarrollo en lenguaje natural. El agente las incorpora como restricciones fijas, garantizando coherencia con el estándar del equipo.sandbox: Especifica las instrucciones de instalación de dependencias (install) y validación de código (check) en un contenedor seguro antes de publicar el PR.
4. Redacción de incidencias efectivas para Sweep
La precisión del Pull Request generado depende de la claridad y especificidad del Issue en GitHub. A diferencia de un colega humano que puede consultar dudas por chat, el agente de IA depende exclusivamente del repositorio y del texto de la incidencia.
Estructura ideal de un reporte de error
Título: Sweep: Fix 400 Bad Request on empty user metadata payload in /api/v1/profile
### Descripción del error
Al actualizar un perfil mediante `PUT /api/v1/profile`, enviar un diccionario vacío en `metadata` genera un ValidationError en lugar de aplicar los valores por defecto.
### Pasos para reproducir
1. Enviar una petición PUT a `/api/v1/profile` con el cuerpo `{"metadata": {}}`.
2. Observar que el servidor responde con HTTP 400 y el detalle `Value error, metadata must contain required fields`.
### Comportamiento esperado
Un diccionario `metadata` vacío debe ser aceptado, inicializado con valores predeterminados (`{"theme": "light", "notifications": true}`) y guardado correctamente.
### Archivos y funciones relevantes
- `api/v1/profile.py`: Controlador de la ruta `update_profile`.
- `schemas/profile.py`: Modelo Pydantic `UserProfileUpdate`.
- `services/profile_service.py`: Función auxiliar `save_profile_metadata`.
### Criterios de aceptación
- Corregir la validación en `schemas/profile.py` para permitir diccionarios vacíos con valores por defecto.
- Añadir una prueba en `tests/unit/test_profile_api.py` que verifique esta condición.
- Garantizar que todas las pruebas existentes en `tests/unit/` se ejecuten con éxito.
Modificadores de título y modos de ejecución
La función de análisis de títulos de Sweep (strip_sweep) admite prefijos especiales para modular el comportamiento:
Sweep: <título>: Modo estándar de resolución.Sweep(sandbox): <título>: Obliga a validar en sandbox antes de abrir el PR.Sweep(fast): <título>: Utiliza inferencia rápida para modificaciones triviales.Sweep(slow): <título>: Permite un razonamiento más profundo para problemas de múltiples dependencias.Sweep(lint): <título>: Aplica formateo riguroso y análisis estático.Sweep(subissues): <título>: Divide tareas extensas en subtareas independientes.
5. El ciclo de revisión e interacción en el PR
Una vez publicado el Pull Request, la colaboración se gestiona directamente en GitHub:
[GitHub Issue] ──> Activación de Sweep ──> PR Creado ──> CI (GitHub Actions)
│
┌─────────────────────────────────────┴─────┐
▼ ▼
CI Falla (gha_enabled) CI Exitoso
│ │
▼ ▼
Sweep commitea solución Revisión de Código Humana
│ │
└─────────► PR Actualizado ◄────────────────┘
│
(Comentario de revisión:
"@sweepai reutiliza la función
auxiliar ya existente")
Comentarios de revisión en el diff
Los desarrolladores no necesitan descargar la rama localmente para pedir ajustes menores. Basta con comentar sobre la línea afectada:
@sweepai Utiliza nuestra función DateUtils.formatIso() en lugar de instanciar un nuevo formateador de fechas.
Sweep procesa el comentario, contextualiza el cambio e inserta un nuevo commit en el Pull Request.
Regeneración de la incidencia
Si la solución inicial no es adecuada o la descripción del Issue era imprecisa, los ingenieros pueden editar el título o la descripción del Issue original en GitHub. Sweep detectará la actualización, descartará la rama previa y generará un PR nuevo desde cero.
6. Buenas prácticas de seguridad y limitaciones operativas
Para implementar agentes autónomos en un entorno empresarial con total tranquilidad:
- Aprobación humana obligatoria: No configure nunca la fusión automática (Auto-merge) en los PRs de Sweep. Exija mediante reglas de protección de rama la aprobación de al menos un ingeniero sénior y el paso satisfactorio del CI.
- Aislamiento estricto de rutas críticas: Bloquee en
blocked_dirsla infraestructura como código (terraform/,k8s/), los flujos de trabajo (.github/), las migraciones de bases de datos y los archivos de secretos. - Acotación de tareas: Emplee a Sweep para errores delimitados, ampliación de pruebas unitarias y refactorizaciones locales. Evite delegar rediseños arquitectónicos o desarrollos con requisitos ambiguos.
- Batería de pruebas sólida: La capacidad de autorreparación de Sweep depende íntegramente del feedback de las pruebas. Cuanto mayor sea la cobertura de tests, mayor será la fiabilidad del código propuesto.
Referencias
- GitHub - sweepai/sweep: Sweep: AI coding assistant for JetBrains
- GitHub - sweepai/sweep: sweep.yaml configuration file
- GitHub - sweepai/sweep: sweepai/config/client.py
- GitHub - sweepai/sweep: sweepai/handlers/on_ticket.py
- GitHub - sweepai/sweep: sweepai/utils/str_utils.py
- sweepai · PyPI
- Launch YC: Sweep: JetBrains AI Coding Assistant | Y Combinator