MKS DevEnv

Casos de Uso

Ejemplos reales de cómo usar MKS DevEnv en diferentes escenarios

Casos de Uso

MKS DevEnv nació de una necesidad personal: estaba cansado de configurar mis dev envs a mi gusto y mantener mis dotfiles. Decidí integrarlo todo en una imagen reutilizable y desplegarla en Coolify — y vi el potencial.

Este proyecto es parte de un ecosistema más grande de automatización:

Todos se integran con MKS DevEnv para crear, configurar y deployar workspaces y proyectos vía Telegram, API CLI, web app, y uso como librería.


¿Por qué no otro wrapper de OpenClaw?

No quería hacer otro instalador simple de OpenClaw como los que han salido en Twitter. Lo integré a mi infraestructura existente para darle un lugar real donde vivir a mis agentes propios — y hacerlo realmente útil para mis proyectos.


Escenarios de Uso Principales

1. Integración Continua con Pull Requests

Crea entornos efímeros por cada PR para testing automatizado.

Paso 1: Configura el webhook

Primero, obtén la URL del API de tu instancia de MKS DevEnv:

export DEVENV_API_URL="https://lab1-helsinki.api.mks2508.systems"

Paso 2: Workflow de GitHub Actions

Crea un archivo .github/workflows/devenv-pr.yml:

name: DevEnv PR Workspace
on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  create-workspace:
    runs-on: ubuntu-latest
    steps:
      - name: Create DevEnv workspace
        id: create-ws
        run: |
          RESPONSE=$(curl -X POST "${{ secrets.DEVENV_API_URL }}/api/workspaces" \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer ${{ secrets.DEVENV_TOKEN }}" \
            -d '{
              "name": "pr-${{ github.event.pull_request.number }}",
              "template": "bun-typescript",
              "type": "temporary",
              "repo": "${{ github.event.pull_request.head.repo.full_name }}",
              "branch": "${{ github.event.pull_request.head.ref }}"
            }')

          WORKSPACE_ID=$(echo $RESPONSE | jq -r '.id')
          echo "workspace_id=$WORKSPACE_ID" >> $GITHUB_OUTPUT

      - name: Run tests in workspace
        run: |
          curl -X POST "${{ secrets.DEVENV_API_URL }}/api/workspaces/pr-${{ github.event.number }}/exec" \
            -H "Authorization: Bearer ${{ secrets.DEVENV_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d '{"command": "bun test"}'

      - name: Cleanup workspace on PR close
        if: github.event.action == 'closed'
        run: |
          curl -X DELETE "${{ secrets.DEVENV_API_URL }}/api/workspaces/pr-${{ github.event.number }}" \
            -H "Authorization: Bearer ${{ secrets.DEVENV_TOKEN }}"

Paso 3: Los tests corren en el workspace

Los tests de Playwright corren en el entorno sandboxed con todos los browsers disponibles.

2. Agentes de AI para Code Review

Integra Claude u otros agentes para análisis automático de código.

Claude Agent Integration

import { AgentBackend } from '@mks-devenv/agent-backend';

const agent = new AgentBackend({
  apiUrl: 'https://lab1-helsinki.api.mks2508.systems',
  apiKey: process.env.DEVENV_API_KEY!,
});

// Crear sesión de análisis
const session = await agent.sessions.create({
  workspaceId: 'my-project',
  model: 'claude-4',
  context: {
    task: 'code-review',
    prNumber: 123,
  },
});

// Agent analiza el PR
const review = await agent.sessions.sendMessage(session.id, {
  message: `Analiza el PR #123 y encuentra:
  1. Bugs potenciales
  2. Problemas de seguridad
  3. Mejoras de rendimiento
  4. Code smell`,
});

console.log(review.content);

OpenAI Agents

const session = await agent.sessions.create({
  workspaceId: 'my-project',
  model: 'gpt-4-turbo',
  context: {
    task: 'code-review',
    prNumber: 123,
  },
});

3. Workshops y Cursos

Crea entornos consistentes para estudiantes o asistentes a workshops.

Creación Masiva de Workspaces

#!/bin/bash
# create-workshops.sh

WORKSHOP_TEMPLATE="bun-typescript"
STUDENT_COUNT=20

for i in $(seq 1 $STUDENT_COUNT); do
  devenv create "workshop-student-$i" \
    --template "$WORKSHOP_TEMPLATE" \
    --type temporary \
    --port-auto
done

echo "✓ Created $STUDENT_COUNT workspaces"
devenv list | grep workshop-student

Configurar Material del Curso

Cada workspace tiene acceso al material del curso montado como volumen:

# docker-compose.override.yml
services:
  devenv:
    volumes:
      - ./course-material:/workspace/course-material:ro

4. QA Automatizado

Entornos efímeros para testing E2E con Playwright.

Script de Testing E2E

// e2e/test-runner.ts
import { WorkspaceService } from '@mks-devenv/core';

async function runE2ETests() {
  const workspace = new WorkspaceService();

  // Crear workspace efímero para tests
  const testWorkspace = await workspace.create({
    name: `e2e-${Date.now()}`,
    template: 'bun-typescript',
    type: 'temporary',
  });

  try {
    // Clonar repo bajo test
    await workspace.cloneRepository(testWorkspace.id, {
      url: 'https://github.com/your-org/your-repo',
      branch: 'main',
    });

    // Instalar dependencias
    await workspace.exec(testWorkspace.id, {
      command: 'bun install',
    });

    // Correr Playwright tests
    const result = await workspace.exec(testWorkspace.id, {
      command: 'bunx playwright test',
    });

    console.log('Tests output:', result.stdout);

    if (result.exitCode !== 0) {
      throw new Error('Tests failed');
    }
  } finally {
    // Cleanup
    await workspace.remove(testWorkspace.id, { volumes: true });
  }
}

5. Desarrollo de Features en Paralelo

Múltiples workspaces para desarrollar features sin interferir entre sí.

# Crear workspace para feature A
devenv create feature-auth --template bun-typescript

# Crear workspace para feature B
devenv create feature-payments --template bun-typescript

# Ambos corren en puertos diferentes
devenv list
# NAME                STATUS    PORT   TEMPLATE
# feature-auth        running   8443   bun-typescript
# feature-payments    running   8444   bun-typescript

6. Demo Environments

Entornos de demo limpios para presentaciones a clientes.

Script de Reset de Demo

#!/bin/bash
# reset-demo.sh

# Destruir workspace anterior
devenv destroy demo-client --volumes --force

# Crear nuevo workspace limpio
devenv create demo-client \
  --template bun-typescript \
  --type temporary

# Clonar repo de demo
cd ~/workspaces/demo-client
git clone https://github.com/your-org/demo-repo.git .

# Instalar y setup
bun install
bun run setup:demo

echo "✓ Demo environment ready"
devenv open demo-client

7. Microservicios

Despliega múltiples microservicios en workspaces separados.

# docker-compose.microservices.yml
services:
  # Auth service
  auth-service:
    image: ghcr.io/mks2508/devenv-full:latest
    labels:
      - "mks.devenv=true"
      - "mks.devenv.workspace=auth-service"
      - "mks.devenv.type=persistent"
      - "mks.devenv.port.codeserver=8443"
    environment:
      - SERVICE_NAME=auth
      - PORT=3001

  # API Gateway
  api-gateway:
    image: ghcr.io/mks2508/devenv-full:latest
    labels:
      - "mks.devenv=true"
      - "mks.devenv.workspace=api-gateway"
      - "mks.devenv.type=persistent"
      - "mks.devenv.port.codeserver=8444"
    environment:
      - SERVICE_NAME=gateway
      - PORT=3002

  # Frontend
  frontend:
    image: ghcr.io/mks2508/devenv-full:latest
    labels:
      - "mks.devenv=true"
      - "mks.devenv.workspace=frontend"
      - "mks.devenv.type=persistent"
      - "mks.devenv.port.codeserver=8445"
    environment:
      - SERVICE_NAME=frontend
      - PORT=3000

8. Debugging de Producción

Replica issues de producción en un entorno sandboxed.

# Crear workspace con mismo commit que producción
devenv create debug-prod-$(date +%s) --template bun-typescript

cd ~/workspaces/debug-prod-*
git clone https://github.com/your-org/your-repo.git
git checkout $PRODUCTION_COMMIT_TAG

# Replicar variables de entorno
cat > .env.prod << EOF
DATABASE_URL=$PROD_DB_READONLY
REDIS_URL=$PROD_REDIS
API_KEY=$PROD_API_KEY_READONLY
EOF

# Iniciar servicio y debug
bun run dev
devenv open debug-prod-*

Más Casos de Uso

¿Tienes un caso de uso interesante? Compártelo en GitHub Discussions.

Actions

On this page