--- name: claude_cli_prompt kind: function lang: py domain: infra version: "1.0.0" purity: impure signature: "def claude_cli_prompt(prompt: str, timeout_s: int = 60, model: str | None = None, max_chars_response: int = 200_000, extra_args: list[str] | None = None) -> str" description: "Invoca `claude -p` via subprocess y devuelve la respuesta completa como string. Valida presencia del CLI, captura stderr en errores, y trunca respuestas largas." tags: [claude, llm, cli, ai, navegator, subprocess] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [shutil, subprocess] params: - name: prompt desc: "Texto del prompt a enviar a Claude." - name: timeout_s desc: "Segundos antes de raise TimeoutExpired. Default 60." - name: model desc: "Modelo a usar (ej. claude-opus-4-5). None usa el default del CLI." - name: max_chars_response desc: "Trunca stdout a este numero de caracteres. Default 200_000." - name: extra_args desc: "Lista de argumentos adicionales para el CLI." output: "Respuesta de Claude como texto plano (stdout del proceso)." tested: false tests: [] test_file_path: "" file_path: "python/functions/infra/claude_cli_prompt.py" --- ## Ejemplo ```python from infra.claude_cli_prompt import claude_cli_prompt # Pregunta simple respuesta = claude_cli_prompt("Suma 2+2 y devuelve solo el numero") print(respuesta) # "4" # Con modelo especifico y timeout extendido respuesta = claude_cli_prompt( prompt="Resume este texto en 3 puntos: ...", model="claude-opus-4-5", timeout_s=120, ) ``` ## Cuando usarla Cuando necesitas invocar Claude desde un script Python sin mantener sesion de chat — un prompt puntual (clasificacion, resumen, extraccion) que se resuelve en una sola llamada. Ideal para pipelines que procesan chunks de AX tree, texto, o cualquier contenido que requiera razonamiento LLM. ## Gotchas - Requiere `claude` CLI instalado y autenticado en PATH. Si no esta: `FileNotFoundError`. - Cada llamada lanza un subproceso nuevo — no hay cache ni sesion persistente. - El CLI puede tardar varios segundos al cold-start. Usa `timeout_s` conservador (>=30s). - `extra_args` se pasan literalmente — validar antes de pasar input de usuario. - En CI/CD sin display interactivo puede requerir `--no-interactive` en `extra_args`.