🌱 Empieza aquí · Lanzador de Python multiplataforma
Esta semilla resuelve un dolor de cabeza clásico: tienes un hook o un script que
corre Python y funciona en tu Mac, pero truena en Windows con un error que
pide "instalar Python desde la Microsoft Store", aunque Python ya esté instalado.
La culpa es de un señuelo de Windows (un falso python3 que la tienda pone en
el camino). Este lanzador lo esquiva: encuentra el Python de verdad y corre tu
script sin importar el sistema operativo.
Para instalarla
Abre esta carpeta con Claude Code o Cowork y dile a tu asistente:
"Siembra esta semilla 🌱"
Con eso basta de tu parte. Tu asistente hace todo lo técnico y al final te dice cómo comprobar que quedó funcionando. Vas a ver algunas palabras en inglés en la pantalla; ni caso, él te guía.
¿Otras formas de pedírselo? "instala esta semilla", "pon a funcionar el lanzador de Python", "haz el setup de esto". Te entiende igual.
Para el asistente que siembra 🤖
Este componente no es un hook de evento que se dispare solo. Es un ayudante
(wrapper) que otros hooks llaman para invocar Python de forma segura en cualquier
sistema. Por eso NO lleva su propia entrada en settings.json: se instala una vez
y luego se referencia desde el comando de cualquier hook que corra Python.
Sigue estos pasos y no inventes rutas: usa $HOME siempre.
1. Copia el lanzador (el corazón de la semilla)
Copia kernel/run-python.sh a la carpeta de hooks del usuario y dale permiso de
ejecución.
Claude Code / Cowork (macOS o Linux):
mkdir -p "$HOME/.claude/hooks"
cp kernel/run-python.sh "$HOME/.claude/hooks/run-python.sh"
chmod +x "$HOME/.claude/hooks/run-python.sh"
Windows (Git Bash / WSL): misma ruta ~/.claude/hooks/. El script usa bash,
que viene con Git Bash o WSL. Justo aquí es donde este lanzador brilla, porque es
el entorno donde aparece el señuelo de la Microsoft Store. Si el usuario corre
Claude Code nativo en Windows sin bash, avísale que este ayudante necesita un
entorno con bash disponible.
2. Úsalo en los hooks que corran Python (el paso clave)
Este es el punto de toda la semilla. Cada vez que un hook (o cualquier comando)
necesite correr un archivo de Python, envuelve la llamada con el lanzador en
lugar de llamar a python3 directo.
- Antes (frágil en Windows):
python3 $HOME/.claude/hooks/mi-script.py - Después (a prueba de señuelo):
bash $HOME/.claude/hooks/run-python.sh $HOME/.claude/hooks/mi-script.py
Si un hook en settings.json corre un .py, edita su campo command para que
pase por el lanzador. Los argumentos que el script necesite van después de la
ruta del .py; el lanzador se los entrega a Python tal cual.
3. Verificación post-siembra (obligatoria)
Comprueba las tres cosas: que el archivo quedó colocado y ejecutable, que sí corre un script de Python, y que falla en silencio cuando no hay script.
a) Corre un script de Python de prueba:
printf 'print("hola desde Python")\n' > /tmp/prueba-python.py
bash "$HOME/.claude/hooks/run-python.sh" /tmp/prueba-python.py; echo "EXIT=$?"
Salida esperada:
hola desde Python
EXIT=0
Si ves el saludo y EXIT=0, el lanzador encontró el Python real y corrió el
script. (Si NO ves el saludo pero sí EXIT=0, revisa que el usuario tenga Python
instalado; el lanzador es non-blocking a propósito y no truena, solo se calla.)
b) Falla en silencio cuando el script no existe (comportamiento non-blocking):
bash "$HOME/.claude/hooks/run-python.sh" /tmp/no-existe.py; echo "EXIT=$?"
rm -f /tmp/prueba-python.py
Salida esperada: sin ninguna línea de salida y EXIT=0. Así confirmas que un
hook que dependa del lanzador nunca bloqueará el flujo por un archivo faltante.
c) El archivo quedó colocado y con permiso de ejecución:
ls -l "$HOME/.claude/hooks/run-python.sh"
Salida esperada: una línea que lista el archivo con x (ejecutable) en sus
permisos, por ejemplo -rwxr-xr-x.
Cuando las tres pruebas den lo esperado, avísale al usuario que ya quedó y explícale en una línea qué gana con esto.
✅ ¿Cómo sé que funcionó?
A partir de ahora, cualquier hook o script que corra Python y pase por este lanzador va a funcionar igual en tu Mac, en Linux y en Windows, sin el error del señuelo de la Microsoft Store. Ya no vas a ver esa pantalla pidiéndote "instalar Python desde la tienda" cuando tu automatización arranca.
No tienes que hacer nada especial en el día a día: instalas el lanzador una vez y lo pones en medio de tus hooks de Python. Ellos se vuelven multiplataforma sin que te enteres. Eso es todo. 🌱
