Otros stacks
Misma receta, distinto bootstrap: Node CLI · Python · Web Component · REST API (Node) · Java · Rust
Backend · 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 módulo Go usando la librería estándar más go test. También cubre la variante Cobra si quieres un binario CLI real por encima.
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.
También necesitas Go 1.22+ (go version).
Bootstrapea el proyecto.
mkdir hello-go && cd hello-gogo mod init dev.kj/hellogit init -b main && git add -A && git commit -m "chore: scaffold"Crea un esqueleto mínimo en greeter.go para que Karajan tenga algo que extender:
package hello
// Greet devuelve el saludo para el nombre dado.// Implementación pendiente — Karajan la rellena.func Greet(name string) string { return ""}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, los puertos están sanos y detecta la toolchain de Go.
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 "Implementa Greet(name string) en greeter.go para que \devuelva 'Hello, <name>!'. Si name está vacío, devuelve \'Hello, stranger!'. Añade un test table-driven en greeter_test.go \cubriendo ambos casos más un nombre unicode." \ --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:
go test línea a línea.También puedes hacer tail del mismo trace en el terminal:
kj tailInspecciona el resultado.
git statusgit diff --statgo test ./...Salida esperada de go test ./...:
ok dev.kj/hello 0.002sEn modo verboso verás los casos table-driven:
go test -v ./...# === RUN TestGreet# === RUN TestGreet/named# === RUN TestGreet/empty# === RUN TestGreet/unicode# --- PASS: TestGreet (0.00s)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/greetergit add -A && git commit -m "feat: add Greet(name)"git push -u origin feat/greetergh pr create --fillO, si quieres que Karajan abra la PR por ti, añade --auto-commit --auto-pr a la invocación kj run.
Si quieres un binario CLI real en lugar de una librería:
go get github.com/spf13/cobra@latestDespués lanza con un hint explícito:
kj run "Envuelve Greet(name) en un comando 'hello-go greet --name=<name>' \usando Cobra. Añade un test de integración que ejecute el binario y \capture stdout." \ --methodology tdd \ --max-iterations 5El coder genera cmd/root.go + cmd/greet.go y escribe un test basado en exec.Command. Compila con go build -o hello-go ./....
El mismo run lanzado vía MCP desde cualquier cliente MCP-capable (Cursor, Claude Desktop, Codex):
{ "tool": "kj_run", "params": { "task": "Implementa Greet(name string) devolviendo 'Hello, <name>!' (o 'Hello, stranger!' si vacío). Test table-driven.", "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 (ruleset Go activado), y gatea el merge contra el quality gate de Sonar además del veredicto del reviewer. El analizador Go de Sonar pilla pitfalls habituales: errores sombreados, goroutines filtradas, defer close ausente.
Otros stacks
Misma receta, distinto bootstrap: Node CLI · Python · Web Component · REST API (Node) · Java · Rust
Volver al índice
Índice How-To · setup + troubleshooting