Volver

17. Práctica OpenClaw: Construir un asistente de programación con IA

Este artículo demuestra cómo usar OpenClaw para construir un asistente de programación con IA, integrando herramientas como Claude Code y Codex para implementar revisión de código, pruebas automatizadas, integración CI/CD y más funciones para mejorar la eficiencia del desarrollo.

Aplica a OpenClaw v2026.2 | Requiere instalar los skills de coding-agent, git-workflows, test-runner y tener acceso al repositorio de código del proyecto.

TL;DR: Revisión de código: el Agent analiza cambios de PR y genera informes de revisión. Pruebas automatizadas: "test-runner": {"frameworks": ["jest", "vitest"]}. Integración CI/CD: Webhook recibe eventos de GitHub/GitLab. Gestión multiproyecto: "projects": {"frontend": {...}, "backend": {...}}. Comando principal: openclaw agent --message "revisa este PR".

Objetivo práctico

Construir un asistente de programación con IA capaz de:

  1. Automatizar la revisión de código
  2. Ejecutar pruebas y reportar resultados
  3. Generar documentación de código
  4. Integrar pipelines CI/CD
  5. Cambiar contexto entre múltiples proyectos

Instalar skills necesarios

# Skills relacionados con programación
openclaw skill install coding-agent
openclaw skill install debug-pro
openclaw skill install git-workflows
openclaw skill install docker-essentials

# Skill de pruebas
openclaw skill install test-runner

Automatización de revisión de código

Configurar revisión de código

---
name: code-review-assistant
version: 1.0.0
description: Automated code review with OpenClaw
triggers:
  - code review
  - revisión de código
  - review
  - PR review
---

# Code Review Assistant

Automate code review for pull requests.

## Features

- Review code changes
- Check for common issues
- Suggest improvements
- Generate review comments

## Review Checklist

1. **Code Quality**
   - Naming conventions
   - Code structure
   - Error handling

2. **Security**
   - SQL injection
   - XSS vulnerabilities
   - Secret exposure

3. **Performance**
   - N+1 queries
   - Memory leaks
   - Inefficient algorithms

4. **Best Practices**
   - DRY principle
   - SOLID principles
   - Design patterns

Escenario de revisión de código

Usuario: Revisa este PR

Agent: De acuerdo, déjame revisar el PR #123...

[Obteniendo información del PR]
[Analizando cambios de código]
[Verificando problemas potenciales]

## Informe de revisión PR #123

### Resumen
- Rama: feature/user-search
- Cambios: +156 -23
- Archivos: 8

### Problemas encontrados

**Críticos** (1):
- 🚨 `auth.js:45` - Riesgo de almacenamiento de contraseña en texto plano

**Advertencias** (3):
- ⚠️ `search.js:23` - Posible inyección SQL
- ⚠️ `user.js:78` - Promise no manejada
- ⚠️ `utils.js:12` - API obsoleta

**Sugerencias** (5):
- 💡 Considerar añadir pruebas unitarias
- 💡 Usar constantes en lugar de números mágicos
- 💡 Sugerir añadir error boundary
- 💡 Considerar extraer método común
- 💡 Sugerir añadir anotaciones de tipo

### Aspectos positivos del código
- ✅ Buen nombrado de funciones
- ✅ División razonable de módulos
- ✅ Comentarios apropiados

¿Necesitas que genere los comentarios de revisión?

Pruebas automatizadas

Configuración del ejecutor de pruebas

{
  "skills": {
    "test-runner": {
      "frameworks": ["jest", "vitest", "pytest"],
      "coverage": {
        "enabled": true,
        "threshold": 80
      },
      "reporting": {
        "format": "markdown",
        "output": "test-report.md"
      }
    }
  }
}

Escenario de pruebas

Usuario: Ejecuta las pruebas y reporta los resultados

Agent: Ejecutando pruebas...

[Ejecutando comando de pruebas]
[Recopilando resultados]
[Analizando cobertura]

## Informe de pruebas

### Resultados
- Total: 45 pruebas
- Pasadas: 42 ✅
- Fallidas: 2 ❌
- Omitidas: 1 ⏭️

### Pruebas fallidas

**1. UserSearch.test.js**

AssertionError: expected [] to equal [{id: 1, name: ’test’}]

Sugerencia: Verificar la conexión a base de datos o los datos mock

**2. Auth.test.js**

Timeout: Async callback not invoked within 5000ms

Sugerencia: Aumentar tiempo de espera o verificar lógica asíncrona

### Cobertura

| Archivo | Sentencias | Ramas | Funciones | Líneas |
|-----|-----|-----|-----|-----|
| auth.js | 85% | 78% | 90% | 85% |
| search.js | 72% | 65% | 80% | 70% |
| user.js | 90% | 85% | 95% | 90% |
| **Total** | **82%** | **76%** | **88%** | **82%** |

¿Necesitas que corrija las pruebas fallidas?

Integración CI/CD

Integración con GitHub Actions

# .github/workflows/openclaw-review.yml
name: OpenClaw Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup OpenClaw
        run: npm install -g openclaw@latest
        
      - name: Run Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          openclaw agent --message "Review PR #${{ github.event.pull_request.number }}" \
            --output review-comment.md
            
      - name: Post Comment
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const comment = fs.readFileSync('review-comment.md', 'utf8');
            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: context.issue.number,
              body: comment
            });

Despliegue automático

Usuario: Despliega a staging

Agent: Desplegando al entorno staging...

[Obteniendo código más reciente]
[Ejecutando pruebas]
[Construyendo proyecto]
[Desplegando al servidor]

## Informe de despliegue

### Información del despliegue
- Entorno: staging
- Rama: main
- Commit: abc1234
- Hora: 2026-02-26 15:30

### Pasos del despliegue
1. ✅ Obtener código
2. ✅ Instalar dependencias
3. ✅ Ejecutar pruebas (45/45 pasadas)
4. ✅ Construir proyecto
5. ✅ Desplegar al servidor

### Verificación de salud
- API: ✅ Normal
- Base de datos: ✅ Conexión correcta
- Redis: ✅ Conexión correcta

### Direcciones de acceso
- URL: https://staging.example.com
- API: https://api-staging.example.com

¡Despliegue exitoso!

Gestión multiproyecto

Configuración de proyectos

{
  "projects": {
    "frontend": {
      "path": "~/projects/frontend",
      "skills": ["coding-agent", "test-runner"],
      "context": "AGENTS.md"
    },
    "backend": {
      "path": "~/projects/backend",
      "skills": ["coding-agent", "docker-essentials"],
      "context": "AGENTS.md"
    },
    "mobile": {
      "path": "~/projects/mobile",
      "skills": ["coding-agent"],
      "context": "AGENTS.md"
    }
  }
}

Cambio de proyecto

Usuario: Cambiar al proyecto backend

Agent: Se ha cambiado al proyecto backend.

Información del proyecto actual:
- Nombre: backend
- Ruta: ~/projects/backend
- Tecnología: Python/FastAPI
- Último commit: Añadir autenticación de usuarios

¿En qué puedo ayudarte?

Generación de código

Generar código boilerplate

Usuario: Crea una API CRUD para el modelo User

Agent: De acuerdo, voy a crear la API CRUD para el modelo User...

[Analizando estructura de código existente]
[Generando archivos de código]

Se han generado los siguientes archivos:

**1. models/user.py**
```python
from pydantic import BaseModel
from datetime import datetime

class User(BaseModel):
    id: int
    name: str
    email: str
    created_at: datetime
    updated_at: datetime

class UserCreate(BaseModel):
    name: str
    email: str

class UserUpdate(BaseModel):
    name: str | None = None
    email: str | None = None

2. routers/users.py

from fastapi import APIRouter, HTTPException
from models.user import User, UserCreate, UserUpdate

router = APIRouter(prefix="/users", tags=["users"])

@router.get("/", response_model=list[User])
async def list_users(): ...

@router.get("/{user_id}", response_model=User)
async def get_user(user_id: int): ...

@router.post("/", response_model=User)
async def create_user(user: UserCreate): ...

@router.put("/{user_id}", response_model=User)
async def update_user(user_id: int, user: UserUpdate): ...

@router.delete("/{user_id}")
async def delete_user(user_id: int): ...

3. tests/test_users.py

from fastapi.testclient import TestClient

def test_list_users(): ...
def test_create_user(): ...
def test_update_user(): ...
def test_delete_user(): ...

¿Necesitas que ejecute las pruebas para verificar?


## Generación de documentación

### Documentación de API

Usuario: Genera documentación para esta API

Agent: Analizando los endpoints de la API…

[Escaneando archivos de rutas] [Extrayendo información de la API] [Generando documentación]

Documentación de la API

Módulo de usuarios

GET /users

Obtener lista de usuarios

Parámetros

Nombre Tipo Requerido Descripción
page int No Número de página
limit int No Cantidad por página

Respuesta

{
  "data": [User],
  "total": int,
  "page": int,
  "limit": int
}

POST /users

Crear usuario

Cuerpo de la solicitud

{
  "name": "string",
  "email": "string"
}

Respuesta

{
  "id": 1,
  "name": "string",
  "email": "string",
  "created_at": "2026-02-26T00:00:00Z",
  "updated_at": "2026-02-26T00:00:00Z"
}

¿Guardar en docs/api.md?


## Solución de problemas

### Problemas de CI/CD

```bash
# Verificar estado de CI/CD
openclaw ci status

# Ver registros de CI/CD
openclaw ci logs --last

# Reintentar trabajo fallido
openclaw ci retry

Problemas de código

# Analizar problemas de código
openclaw analyze --project backend

# Generar sugerencias de corrección
openclaw suggest --file auth.js

Resumen

Al construir un asistente de programación con OpenClaw:

  • Revisión de código: Revisión automatizada de PRs
  • Ejecución de pruebas: Pruebas automatizadas y reportes
  • Integración CI/CD: Flujo de despliegue automatizado
  • Gestión multiproyecto: Cambio rápido de contexto
  • Generación de código: Código boilerplate generado automáticamente
  • Generación de documentación: Documentación de API generada automáticamente

Registro de actualizaciones:

  • 2026-02-26: Publicación inicial

Navegación de la serie: