Otros stacks
Tutorial · Web Component
Vanilla · Tiempo estimado: ~12 min · Iteraciones Karajan: 1–2
Este tutorial te lleva desde un directorio vacío hasta una feature mergeada en un pequeño proyecto Web Component vanilla — un Custom Element que puedes embeber en cualquier página HTML sin React / Vue / Svelte. Ideal para design systems, embebibles y demos.
Prerrequisitos
Sección titulada «Prerrequisitos»Deberías haber completado el setup común: npm install -g karajan-code, kj init dentro del proyecto y un kj doctor verde. Si kj doctor está rojo, arréglalo antes — kj run se negará a arrancar.
Tutorial
Sección titulada «Tutorial»-
Bootstrapea el proyecto.
Ventana de terminal mkdir hello-wc && cd hello-wcnpm init -ynpm install --save-dev vitest @vitest/browser playwrightgit init -b main && git add -A && git commit -m "chore: scaffold"Edita
package.jsonpara cablear el runner de tests:{"type": "module","scripts": {"test": "vitest run --browser=chromium"}}Añade un
vitest.config.jsmínimo para el runner de browser:import { defineConfig } from "vitest/config";export default defineConfig({test: {browser: { enabled: true, name: "chromium", provider: "playwright" }}}); -
Inicializa Karajan en el repo.
Ventana de terminal kj initkj doctorkj initcrea.karajan/y escribe la configuración del orquestador;kj doctorconfirma que los CLIs de los agentes, Docker, Ollama, los puertos y ahora también la descarga de Chromium de Playwright están en su sitio. -
Describe la feature en lenguaje natural.
Sin fichero de spec. Sin JSON. Solo la tarea como se la dirías a un compañero:
Ventana de terminal kj run "Crea un Custom Element 'hello-badge' en src/hello-badge.js \que tome un atributo 'name' y renderice 'Hello, <name>!' dentro de \un Shadow DOM con una CSS variable --hello-bg para el color de fondo. \Añade un test Vitest que monte el elemento, ponga name='world' y \verifique el texto renderizado." \--methodology tdd \--coder claude \--reviewer codex \--reviewer-fallback claude \--max-iterations 5 -
Mira el run en el HU Board.
Abre http://localhost:4000 en otra pestaña mientras el pipeline corre. Verás, en tiempo real:
- Cada rol activándose (planner → coder → tester → reviewer).
- El prompt y la respuesta exactos de cada llamada al agente.
- El diff tras cada iteración.
- La salida del test en Chromium headless.
- El veredicto del reviewer.
También puedes hacer tail del mismo trace en el terminal:
Ventana de terminal kj tail -
Inspecciona el resultado.
Ventana de terminal git statusgit diff --statnpm testSalida esperada de
npm test:✓ tests/hello-badge.test.js (1)✓ renders the name attribute in shadow DOM (87ms)Test Files 1 passed (1)Tests 1 passed (1)Comprueba a ojo abriendo un
index.htmlrápido:<!DOCTYPE html><script type="module" src="./src/hello-badge.js"></script><hello-badge name="world" style="--hello-bg: #fdd"></hello-badge> -
Mergea.
Karajan no hace push ni merge por ti por defecto — esa decisión es tuya. Cuando estés contento con el diff:
Ventana de terminal git checkout -b feat/hello-badgegit add -A && git commit -m "feat(wc): add <hello-badge> custom element"git push -u origin feat/hello-badgegh pr create --fillO, si quieres que Karajan abra la PR por ti, añade
--auto-commit --auto-pra la invocaciónkj run.
Errores posibles y cómo resolverlos
Sección titulada «Errores posibles y cómo resolverlos»Variantes
Sección titulada «Variantes»El mismo run lanzado vía MCP desde cualquier cliente MCP-capable (Cursor, Claude Desktop, Codex):
{ "tool": "kj_run", "params": { "task": "Crea un Custom Element 'hello-badge' con atributo 'name' y CSS variable --hello-bg. Añade un test Vitest browser.", "methodology": "tdd", "coder": "claude", "reviewer": "codex", "reviewerFallback": "claude", "maxIterations": 5 }}Si prefieres Lit para templating + reactive properties:
npm install litY luego lanza con un hint explícito:
kj run "Crea un 'hello-badge' basado en Lit con una propiedad reactiva \'name'…" \ --methodology tdd \ --max-iterations 5El coder detecta la dependencia Lit y escribe el elemento usando LitElement + @property.
Para un contexto de design system, añade una pasada de validación de tokens:
kj run "<tarea>" \ --mode strict \ --enable-security \ --methodology tddEsto cablea los collectors OSV-Scanner y Semgrep en el audit y gatea el merge contra los checks de accesibilidad (Lighthouse a11y si está disponible).
Siguientes pasos
Sección titulada «Siguientes pasos»Volver al índice
Índice How-To · setup + troubleshooting