Ir al contenido

Tutorial · Rust

Systems · Tiempo estimado: ~15 min · Iteraciones Karajan: 2–3

Este tutorial te lleva desde un directorio vacío hasta una feature mergeada en un pequeño crate CLI Rust usando cargo + clap para parsear argumentos. Incluye el loop de tests exacto que Karajan usa para gatear merges (cargo test), para que lo 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.

También necesitas una toolchain de Rust vía rustup (rustc --version → 1.75+ recomendado) y cargo en PATH.

  1. Bootstrapea el proyecto.

    Ventana de terminal
    cargo new hello-rs --bin
    cd hello-rs
    cargo add clap --features derive
    git add -A && git commit -m "chore: scaffold"

    cargo new --bin genera Cargo.toml, src/main.rs con un stub Hello, world! e inicializa un repo git automáticamente. Confirma que cargo test corre (reportará 0 tests por ahora):

    Ventana de terminal
    cargo test
  2. Inicializa Karajan en el repo.

    Ventana de terminal
    kj init
    kj doctor

    kj 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 Rust (versión de cargo, rustc).

  3. 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 "Añade un subcomando 'greet --name=<name>' a src/main.rs \
    usando clap con derive. Debe imprimir 'Hello, <name>!' por stdout. \
    Si falta --name, imprime 'Hello, stranger!'. Añade tests unitarios \
    en un módulo #[cfg(test)] cubriendo la función greet para ambos casos." \
    --methodology tdd \
    --coder claude \
    --reviewer codex \
    --reviewer-fallback claude \
    --max-iterations 5
  4. 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 de cargo test línea a línea, incluyendo warnings de rustc.
    • El veredicto del reviewer.

    También puedes hacer tail del mismo trace en el terminal:

    Ventana de terminal
    kj tail
  5. Inspecciona el resultado.

    Ventana de terminal
    git status
    git diff --stat
    cargo test

    Salida esperada de cargo test:

    running 2 tests
    test tests::greet_with_name ... ok
    test tests::greet_without_name ... ok
    test result: ok. 2 passed; 0 failed; 0 ignored

    Comprueba en vivo:

    Ventana de terminal
    cargo run -- greet --name=world
    # Hello, world!
    cargo run -- greet
    # Hello, stranger!
  6. 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/greet
    git add -A && git commit -m "feat: add greet subcommand"
    git push -u origin feat/greet
    gh pr create --fill

    O, 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 subcomando clap 'greet --name=<name>' imprimiendo 'Hello, <name>!' (o 'Hello, stranger!' si falta). Tests unitarios en #[cfg(test)].",
"methodology": "tdd",
"coder": "claude",
"reviewer": "codex",
"reviewerFallback": "claude",
"maxIterations": 5
}
}