Otros stacks
Misma receta, distinto bootstrap: Python · Web Component · REST API (Node) · Java · Go · Rust
Recomendado · Tiempo estimado: ~10 min · Iteraciones Karajan: 1–2
Este tutorial te lleva desde un directorio vacío hasta una feature mergeada en un pequeño proyecto CLI Node. La receta es deliberadamente mínima para que la puedas re-ejecutar sobre un repo real cambiando el bootstrap por cd <tu-repo>.
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.
Bootstrapea el proyecto.
mkdir hello-cli && cd hello-clinpm init -ynpm install --save-dev vitestgit init -b main && git add -A && git commit -m "chore: scaffold"Edita package.json para cablear el runner de tests:
{ "type": "module", "scripts": { "test": "vitest run" }}Inicializa Karajan en el repo.
kj initkj doctorkj init crea .karajan/ y escribe la configuración del orquestador; kj doctor confirma que los CLIs de los agentes, Docker, Ollama y los puertos están sanos.
Describe la feature en lenguaje natural.
Sin fichero de spec. Sin JSON. Solo la tarea como se la dirías a un compañero:
kj run "Añade un comando 'greet <name>' a bin/cli.js que imprima \'Hello, <name>!'. Añade un test Vitest que ejecute el CLI vía execa \y verifique stdout para el nombre 'world'." \ --methodology tdd \ --coder claude \ --reviewer codex \ --reviewer-fallback claude \ --max-iterations 5Mira el run en el HU Board.
Abre http://localhost:4000 en otra pestaña mientras el pipeline corre. Verás, en tiempo real:
También puedes hacer tail del mismo trace en el terminal:
kj tailInspecciona el resultado.
git statusgit diff --statnpm testSalida esperada de npm test:
✓ tests/cli.test.js (1) ✓ greets the given name (42ms)
Test Files 1 passed (1) Tests 1 passed (1)Mergea.
Karajan no hace push ni merge por ti por defecto — esa decisión es tuya. Cuando estés contento con el diff:
git checkout -b feat/greet-commandgit add -A && git commit -m "feat(cli): add greet <name> command"git push -u origin feat/greet-commandgh pr create --fillO, si quieres que Karajan abra la PR por ti, añade --auto-commit --auto-pr a la invocación kj run.
El mismo run lanzado vía MCP desde cualquier cliente MCP-capable (Cursor, Claude Desktop, Codex):
{ "tool": "kj_run", "params": { "task": "Añade un comando 'greet <name>' a bin/cli.js que imprima 'Hello, <name>!'. Añade un test Vitest.", "methodology": "tdd", "coder": "claude", "reviewer": "codex", "reviewerFallback": "claude", "maxIterations": 5 }}Añade --mode strict y los collectors deterministas de seguridad:
kj run "<tarea>" \ --mode strict \ --enable-security \ --enable-sonarcloud \ --methodology tddEsto cablea los collectors OSV-Scanner y Semgrep en el audit, y gatea el merge contra el quality gate de Sonar además del veredicto del reviewer.
Para runs air-gapped o con presupuesto ajustado, cambia el coder a OpenCode con un modelo local:
kj run "<tarea>" \ --coder opencode \ --coder-model gemma-local/coder \ --reviewer claude \ --max-iterations 8--max-iterations sube porque los modelos locales tienden a necesitar una vuelta extra o dos.
Otros stacks
Misma receta, distinto bootstrap: Python · Web Component · REST API (Node) · Java · Go · Rust
Volver al índice
Índice How-To · setup + troubleshooting