Otros stacks
Misma receta, distinto bootstrap: Node CLI · Web Component · REST API (Node) · Java · Go · Rust
Python · Tiempo estimado: ~12 min · Iteraciones Karajan: 1–3
Este tutorial te lleva desde un directorio vacío hasta una feature mergeada en un pequeño proyecto Python (CLI / librería / script de datos). 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.
También necesitas Python 3.10+ en el PATH (python --version). En macOS recomendamos pyenv; en Linux usa el paquete de la distro; en Windows usa el instalador oficial con la opción “Add to PATH” marcada.
Bootstrapea el proyecto.
mkdir hello-py && cd hello-pypython -m venv .venvsource .venv/bin/activate # Windows: .venv\Scripts\activatepip install --upgrade pippip install pytestgit init -b main && git add -A && git commit -m "chore: scaffold"Crea un pyproject.toml mínimo para que el tester de Karajan sepa cómo invocar pytest:
[project]name = "hello-py"version = "0.0.1"requires-python = ">=3.10"
[tool.pytest.ini_options]testpaths = ["tests"]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. kj doctor también detecta tu versión de Python y la registra en el perfil del proyecto.
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 una función 'greet(name)' en src/hello.py que devuelva \'Hello, <name>!'. Añade un test pytest en tests/test_hello.py que importe \la función y verifique la salida 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 --statpytestSalida esperada de pytest:
============================= test session starts ==============================collected 1 item
tests/test_hello.py . [100%]
============================== 1 passed in 0.02s ===============================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-functiongit add -A && git commit -m "feat: add greet(name) function"git push -u origin feat/greet-functiongh 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 una función 'greet(name)' en src/hello.py que devuelva 'Hello, <name>!'. Añade un test pytest.", "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. Semgrep trae un ruleset de Python de fábrica.
Para un proyecto con muchos notebooks o data-heavy, sube las iteraciones:
kj run "<tarea>" \ --coder claude \ --reviewer codex \ --max-iterations 8--max-iterations sube porque los loops de validación de datos (numpy / pandas / fixtures de pytest) tienden a necesitar una pasada extra.
Otros stacks
Misma receta, distinto bootstrap: Node CLI · Web Component · REST API (Node) · Java · Go · Rust
Volver al índice
Índice How-To · setup + troubleshooting