# Dos proyectos, un robot, un PC En el mismo equipo hay otro proyecto hablando con el mismo Reachy. Los síntomas que ya has visto —**dos voces a la vez**, un panel cerrado que **sigue escuchando y hablando**— no son fallos del robot: son dos programas cogiendo el mismo micrófono y el mismo altavoz. Esto es lo que se ha hecho para que convivan. ## El reparto El robot es uno: micrófono, altavoz y motores **no se comparten**. Lo que sí se reparte son los puertos, y ahí cada proyecto necesita su franja. | | LexIA (por defecto) | Sugerido para el otro proyecto | |---|---|---| | Panel web | 7862 | 7962 | | Motor de lenguaje | 8080 | 8180 | | Embeddings | 8081 | 8181 | | **Cerrojo del robot** | 7869 | 7969 | Los cuatro son configurables en `runtime/settings/app.json`: ```json "puertos": { "panel": 7862, "llm": 8080, "embeddings": 8081, "cerrojo": 7869 } ``` Lo importante es el **motor**: dos `llama-server` en el mismo puerto se pisan sin avisar, y el segundo simplemente no arranca o responde el primero. Si el otro proyecto usa OpenAI y no levanta motor local, el único conflicto real es el panel. ## El cerrojo: por qué ya no pueden sonar dos voces Al arrancar, LexIA **ocupa un puerto** antes de tocar el audio. Si ya está ocupado, no arranca y lo dice con el número delante: > Ya hay otra instancia de LexIA usando el robot (puerto 7869). Cierre la > anterior antes de abrir esta, o cambie el puerto del cerrojo si son dos > proyectos distintos. Se eligió un puerto y no un fichero de bloqueo por una razón práctica: cuando el proceso muere —aunque muera mal, aunque se cierre la consola— **el sistema operativo libera el puerto solo**. Un fichero se quedaría ahí mintiendo. Esto protege de dos LexIA. Del otro proyecto no protege, porque ese no mira nuestro cerrojo: para eso está el reparto de arriba y la regla de abajo. ## La regla que hay que cumplir a mano **Solo una aplicación con el robot cogido a la vez.** Antes de arrancar una, cerrar la otra. El daemon de Reachy Mini solo entrega el audio a una app, pero si una se lanza a mano y otra desde el daemon, las dos creen tenerlo. En la práctica, para las pruebas de hoy: cuando pruebes LexIA, que el otro proyecto no esté corriendo, y al revés. Cuando lo instales en el daemon, **que haya un solo `--startup-app` configurado**, no dos. Una prueba o comprobación que encuentre un motor ya activo lo reutiliza y no lo apaga al terminar; solo el proceso que lo creó o la acción explícita de mantenimiento puede liberarlo. ## «Callar ahora» El panel tiene ahora un botón **Callar ahora**, siempre disponible. Corta el audio en curso aunque esté a media frase, suelta la sesión remota y deja de escuchar, **sin cerrar la app ni perder la configuración**. Es el botón que hace falta justo cuando algo va mal, que es cuando no apetece buscar una consola. ## Cerrar de verdad al cerrar Había un fallo real detrás de «cierro el panel y sigue hablando»: al terminar se cerraba el audio **antes** de cortar lo que estuviera sonando, así que la frase a medias seguía su curso. Ahora el orden es el correcto: primero callar, después cerrar el micrófono y el altavoz, después soltar el cerrojo. ## Lo que avisa el panel El botón **Comprobar** incluye ahora un bloque **Puertos**: qué puertos usa LexIA y cuáles están ocupados por otro. Si el cerrojo aparece ocupado, hay otra instancia con el robot —o un programa ajeno en ese puerto— y conviene resolverlo antes de culpar al micrófono. ## Y lo de la antena Dijiste que no hace falta abrir la app tocando la antena. Sigue funcionando si se instala en el daemon, pero **ya no es el camino obligatorio**: para las pruebas basta con arrancar la app y hablarle. Eso además reduce el riesgo de que el daemon abra LexIA por su cuenta mientras el otro proyecto tiene el robot.