Todo lo que necesitas saber, nada de lo que no.
English | Català | Español | Svenska
Estamos en 2026. Construimos sobre tmux (2007), git worktrees (2015), terminals (1978, la era del VT100, cuando incluso David era solo un proyecto de futuro), y renderizado por GPU (gracias Mitchell por Ghostty). Herramientas viejas, trucos nuevos.
Necesitas dos cosas: un Mac y la vaga sensación de que tu flujo de trabajo podría ser mejor.
brew install --cask factory-floor
Factory Floor funciona mejor cuando tienes esto instalado (te avisará si falta algo):
No necesitas archivos de configuración. Factory Floor detecta tu configuración de git, herramientas instaladas y conexiones de GitHub automáticamente.
Las tres cosas con las que interactuarás cada día.
Un proyecto es un repositorio git. Arrastra un directorio al sidebar o haz clic en el botón +. Factory Floor comprueba si es un repositorio git (y ofrece inicializar uno si no lo es).
La vista de proyecto muestra información del repositorio, detalles de GitHub (stars, forks, issues abiertas), hasta 5 PRs recientes y documentación markdown descubierta automáticamente en tu repositorio.
Los proyectos se ordenan por Recientes (última actividad) por defecto. Cambia a A-Z si eres de esos.
Haz clic derecho en un proyecto en el sidebar para acceso rápido: Reveal in Finder, Open in External Terminal, Open on GitHub, o Remove (los archivos se quedan en disco, no somos monstruos).
Un workstream es donde ocurre el trabajo. Cada uno tiene su propio git worktree, branch, terminal, coding agent y navegador. Están completamente aislados entre sí.
⌘N crea un nuevo workstream. Entre bastidores:
ff).env y .env.local del repositorio principal (si está habilitado)La interfaz aparece al instante, la creación del worktree ocurre en segundo plano.
Con Auto-rename branch habilitado en ajustes, el coding agent renombra tu branch para que coincida con la tarea en el primer prompt. Así ff/coral-tidal-reef se convierte en ff/fix-login-timeout.
Cuando un PR se fusiona, Factory Floor muestra un badge “Purge” para que sepas que es seguro limpiar.
El tab de coding agent ejecuta Claude Code en un terminal integrado. Aparece justo después del tab Info en cada workstream.
Las quick actions ejecutan tareas puntuales de Claude desde el sidebar:
Se ejecutan como llamadas claude -p en segundo plano. Activa Quick action debug mode en ajustes si quieres saber cómo se hace la salchicha. Confía en nosotros, David pasó más tiempo del que puede admitir depurando comportamientos extraños ahí dentro.
Terminals, navegadores y atajos de teclado, las herramientas dentro de cada workstream.
Los terminals se renderizan por GPU con Ghostty. Son rápidos.
Puedes arrastrar archivos y texto al terminal. Porque a veces el ratón está bien, la verdad.
⌘Shift+E abre el directorio del workstream en tu aplicación de terminal externa preferida.
Cada workstream puede tener pestañas de navegador (⌘B). El navegador está integrado, no necesitas cambiar de ventana.
Cuando tu run script inicia un servidor de desarrollo, Factory Floor detecta el port en escucha automáticamente y navega el navegador hacia él. No necesitas configurar nada. El launcher ff-run monitoriza el árbol de procesos buscando listeners TCP.
El navegador muestra una página de error de conexión con un botón de reintentar si el servidor aún no está listo. Navegará automáticamente cuando se detecte el port.
Factory Floor prioriza el teclado. Aquí está todo.
| Atajo | Acción |
|---|---|
| ⌘N | Nuevo workstream (o proyecto, si no hay ninguno) |
| ⌘Shift+N | Nuevo proyecto |
| ⌘, | Ajustes |
| ⌘/ | Ayuda |
| Atajo | Acción |
|---|---|
| ⌘Return | Foco en Coding Agent |
| ⌘I | Panel de Info |
| ⌘E | Environment |
| ⌘T | Nuevo Terminal |
| ⌘B | Nuevo navegador |
| ⌘W | Cerrar tab |
| ⌘L | Barra de direcciones (navegador) |
| ⌘0 | Volver al proyecto |
| ⌘1-9 | Cambiar tab |
| ⌘Shift+[ | Tab anterior |
| ⌘Shift+] | Tab siguiente |
| Ctrl+Shift+R | Reconstruir setup |
| Ctrl+Shift+S | Iniciar/reiniciar run |
| Atajo | Acción |
|---|---|
| Ctrl+1-9 | Cambiar workstream (desde cualquier vista) |
| ⌘Shift+O | Abrir en navegador externo |
| ⌘Shift+E | Abrir en terminal externo |
Cómo automatizar las partes aburridas.
Coloca un .factoryfloor.json en la raíz de tu proyecto para automatizar el ciclo de vida del workstream.
{
"setup": "npm install",
"run": "PORT=$FF_PORT npm run dev",
"teardown": "docker-compose down"
}
| Hook | Cuándo se ejecuta |
|---|---|
setup |
Una vez, cuando se crea un workstream. Instalar dependencias, ejecutar migraciones, lo que sea. |
run |
Bajo demanda desde el tab Environment (⌘E). Envuelto en ff-run para detección de port. |
teardown |
Cuando se archiva o purga un workstream. Parar contenedores, limpiar. |
Todos los campos son opcionales. Los scripts se ejecutan en el directorio del workstream usando tu login shell. Sí, incluso fish. No preguntes cuánto tardó eso.
Factory Floor también lee conductor.json y .superset/config.json si .factoryfloor.json no existe. Porque la compatibilidad es de buena educación. (¿Es hora de un estándar?)
Diseño en dos paneles: Setup a la izquierda, Run a la derecha.
Cada terminal, setup script y comando run en un workstream tiene estas variables:
| Variable | Qué es | Ejemplo |
|---|---|---|
FF_PROJECT |
Nombre del proyecto | my-app |
FF_WORKSTREAM |
Nombre del workstream | coral-tidal-reef |
FF_PROJECT_DIR |
Ruta del repositorio principal | /Users/you/my-app |
FF_WORKTREE_DIR |
Ruta del worktree | ~/.factoryfloor/worktrees/my-app/coral-tidal-reef |
FF_PORT |
Port determinista (40001-49999) | 42847 |
Cada workstream recibe un port determinista basado en un hash de la ruta del worktree. Mismo workstream, mismo port, siempre. Sin conflictos de port entre workstreams. Úsalo en tu run script: PORT=$FF_PORT npm run dev. Si lo tuyo es ejecutar miles de workstreams simultáneamente, puede que tengas una colisión 🎲 pero esperemos que te quedes sin memoria antes.
Cuando está habilitado (Settings > General), Factory Floor hace symlink de .env y .env.local de tu repositorio principal a cada worktree. Así tus secretos te siguen sin copiar y pegar. Hablando de secretos, ¿te hemos hablado de Vaultuner?
Abre con ⌘, o haz clic en el icono del engranaje.
ff).env y .env.local a worktreesConectar Factory Floor con todo lo demás.
Instala el comando ff desde Settings > Environment > Install CLI. Luego:
ff /path/to/your/project
Abre el directorio en Factory Floor. Eso es todo lo que hace, y es todo lo que necesita hacer.
Requiere el gh CLI con autenticación (gh auth login).
Desde el sidebar, ejecuta operaciones con un clic: Create PR (título y descripción generados por IA), Push (al origin con -u), o Abandon PR (cierra con un comentario). Porque si estás cansado de escribir “ahora haz commit, push y abre un PR” en Claude por centésima vez, no estás solo.
Factory Floor muestra un badge en el sidebar cuando hay una versión más nueva disponible. También puedes comprobarlo manualmente desde Factory Floor > Check for Updates…
Usuarios de Homebrew:
brew upgrade factory-floor
Usuarios de DMG: las actualizaciones se gestionan automáticamente vía Sparkle. Comprueba manualmente desde el menú: Factory Floor > Check for Updates…
Activa Bleeding edge updates en Settings > Advanced para builds pre-release. Para los que les gusta vivir al límite y reportar bugs.
No. Sin resaltado de sintaxis, sin autocompletado, sin minimapa. Nuestros VCs inexistentes no han estado presionando ninguna agenda corporativa. Nuestra intención es que uses las herramientas que ya te gustan: Zed, VS Code, lo que sea. Factory Floor te da un coding agent, un navegador y un worktree. Además, ¿quién escribe código ya?
Tampoco. Tu cliente de git ya lo hace mejor de lo que nosotros haríamos nunca. Nosotros solo nos aseguramos de que cada workstream tenga una branch limpia lista para revisión. Mantienes tus PRs pequeños y evitas merge conflicts, ¿verdad? …¿Verdad?
Factory Floor detecta herramientas desde tu login shell. Si claude, gh, git o tmux no aparecen:
-L factoryfloor), así que tu configuración personal de tmux no interferirá$FF_PORT (o que el port se detecta del árbol de procesos)ff-run envuelve el run script, monitoriza los procesos hijos buscando ports TCP en escucha