Tot el que necessites saber, res del que no.
English | Català | Español | Svenska
Estem al 2026. Construïm sobre tmux (2007), git worktrees (2015), terminals (1978, l’era del VT100, quan fins i tot en David era només un projecte de futur), i renderitzat per GPU (gràcies Mitchell per Ghostty). Eines velles, trucs nous.
Necessites dues coses: un Mac i la vaga sensació que el teu flux de treball podria ser millor.
brew install --cask factory-floor
Factory Floor funciona millor quan tens instal·lat el següent (t’avisarà si falta alguna cosa):
No cal cap fitxer de configuració. Factory Floor detecta automàticament la teva configuració de git, les eines instal·lades i les connexions amb GitHub.
Les tres coses amb les quals interactuaràs cada dia.
Un projecte és un repositori git. Arrossega un directori al sidebar o fes clic al botó +. Factory Floor comprova si és un repositori git (i t’ofereix inicialitzar-ne un si no ho és).
La vista general del projecte mostra informació del repositori, detalls de GitHub (estrelles, forks, issues obertes), fins a 5 PRs recents, i documentació markdown detectada automàticament del teu repositori.
Els projectes s’ordenen per Recent (última activitat) per defecte. Canvia a A-Z si ets d’aquest tipus de persona.
Fes clic dret sobre un projecte al sidebar per accés ràpid: Reveal in Finder, Open in External Terminal, Open on GitHub, o Remove (els fitxers es queden al disc, no som monstres).
Un workstream és on passa la feina. Cadascun té el seu propi git worktree, branch, terminal, coding agent, i navegador. Estan completament aïllats entre si.
⌘N crea un workstream nou. Entre bastidors:
ff).env i .env.local des del repositori principal (si està activat)La interfície apareix a l’instant, la creació del worktree passa en segon pla.
Amb Auto-rename branch activat a la configuració, el coding agent canvia el nom de la teva branch per coincidir amb la tasca al primer prompt. Així ff/coral-tidal-reef es converteix en ff/fix-login-timeout.
Quan un PR es fusiona, Factory Floor mostra un badge “Purge” perquè sàpigues que pots netejar tranquil·lament.
El Coding Agent tab executa Claude Code en un terminal integrat. Es situa just després del tab Info a cada workstream.
Les quick actions executen tasques puntuals de Claude des del sidebar:
S’executen com a crides claude -p en segon pla. Activa Quick action debug mode a la configuració si vols saber com es fa l’embotit. Confia en nosaltres, en David va passar més temps del que pot admetre depurant comportaments estranys allà dins.
Terminals, navegadors, i dreceres, les eines dins de cada workstream.
Els terminals es renderitzen per GPU via Ghostty. Són ràpids.
Pots arrossegar fitxers i text sobre el terminal. Perquè de vegades el ratolí està bé, la veritat.
⌘Shift+E obre el directori del workstream a la teva aplicació de terminal externa preferida.
Cada workstream pot tenir pestanyes de navegador (⌘B). El navegador és integrat, no cal canviar de finestra.
Quan el teu run script inicia un servidor de desenvolupament, Factory Floor detecta automàticament el port en escolta i hi navega el navegador. No cal configurar res. El llançador ff-run monitoritza l’arbre de processos per trobar listeners TCP.
El navegador mostra una pàgina d’error de connexió amb un botó de reintentar si el servidor encara no està llest. Navegarà automàticament quan es detecti el port.
Factory Floor prioritza el teclat. Aquí tens tot.
| Drecera | Acció |
|---|---|
| ⌘N | Nou workstream (o projecte, si no n’hi ha cap) |
| ⌘Shift+N | Nou projecte |
| ⌘, | Configuració |
| ⌘/ | Ajuda |
| Drecera | Acció |
|---|---|
| ⌘Return | Focus Coding Agent |
| ⌘I | Panell Info |
| ⌘E | Environment |
| ⌘T | Nou Terminal |
| ⌘B | Nou navegador |
| ⌘W | Tanca tab |
| ⌘L | Barra d’adreces (navegador) |
| ⌘0 | Torna al projecte |
| ⌘1-9 | Canvia de tab |
| ⌘Shift+[ | Tab anterior |
| ⌘Shift+] | Tab següent |
| Ctrl+Shift+R | Reconstrueix setup |
| Ctrl+Shift+S | Inicia/reinicia run |
| Drecera | Acció |
|---|---|
| Ctrl+1-9 | Canvia de workstream (des de qualsevol vista) |
| ⌘Shift+O | Obre al navegador extern |
| ⌘Shift+E | Obre al terminal extern |
Com automatitzar les parts avorrides.
Posa un .factoryfloor.json a l’arrel del teu projecte per automatitzar el cicle de vida dels workstreams.
{
"setup": "npm install",
"run": "PORT=$FF_PORT npm run dev",
"teardown": "docker-compose down"
}
| Hook | Quan s’executa |
|---|---|
setup |
Un cop, quan es crea un workstream. Instal·la dependències, executa migracions, el que sigui. |
run |
Sota demanda des del tab Environment (⌘E). Embolcallat amb ff-run per a port detection. |
teardown |
Quan un workstream s’arxiva o es purga. Atura contenidors, neteja. |
Tots els camps són opcionals. Els scripts s’executen al directori del workstream usant el teu shell de login. Sí, fins i tot fish. No preguntis quant de temps va costar.
Factory Floor també llegeix conductor.json i .superset/config.json si .factoryfloor.json no existeix. Perquè la compatibilitat és de bona educació. (Hora d’un estàndard?)
Disposició en panell dividit: Setup a l’esquerra, Run a la dreta.
Cada terminal, setup script, i comanda run d’un workstream té aquestes variables:
| Variable | Què és | Exemple |
|---|---|---|
FF_PROJECT |
Nom del projecte | my-app |
FF_WORKSTREAM |
Nom del workstream | coral-tidal-reef |
FF_PROJECT_DIR |
Ruta del repositori 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 obté un port determinista basat en un hash de la ruta del worktree. Mateix workstream, mateix port, sempre. Sense conflictes de port entre workstreams. Usa’l al teu run script: PORT=$FF_PORT npm run dev. Si el teu rotllo és executar milers de workstreams simultàniament, potser et trobes una col·lisió 🎲 però amb sort et quedes sense memòria abans.
Quan està activat (Settings > General), Factory Floor fa symlink de .env i .env.local des del teu repositori principal a cada worktree. Així els teus secrets et segueixen sense haver de copiar i enganxar. Parlant de secrets, t’hem parlat de Vaultuner?
Obre amb ⌘, o fes clic a la icona d’engranatge.
ff).env i .env.local als worktreesConnectant Factory Floor amb tot el demés.
Instal·la la comanda ff des de Settings > Environment > Install CLI. Després:
ff /path/to/your/project
Obre el directori a Factory Floor. Això és tot el que fa, i és tot el que necessita fer.
Requereix el gh CLI amb autenticació (gh auth login).
Des del sidebar, executa operacions d’un sol clic: Create PR (títol i descripció generats per IA), Push (a l’origin amb -u), o Abandon PR (tanca amb un comentari). Perquè si estàs cansat d’escriure “ara fes commit, push, i obre una PR” a Claude per centèsima vegada, no ets l’únic.
Factory Floor mostra un badge al sidebar quan hi ha una versió més nova disponible. També pots comprovar-ho manualment des de Factory Floor > Check for Updates…
Usuaris de Homebrew:
brew upgrade factory-floor
Usuaris de DMG: les actualitzacions es gestionen automàticament via Sparkle. Comprova manualment des del menú: Factory Floor > Check for Updates…
Activa Bleeding edge updates a Settings > Advanced per a builds de pre-llançament. Per als que els agrada viure al límit i enviar informes d’errors.
No. Sense ressaltat de sintaxi, sense autocompletar, sense minimapa. Els nostres VCs inexistents no han estat imposant cap agenda corporativa. La intenció és que facis servir les eines que ja t’agraden: Zed, VS Code, el que sigui. Factory Floor et dóna un coding agent, un navegador, i un worktree. A més, qui escriu codi avui en dia?
Tampoc. El teu client de git ja ho fa millor del que nosaltres mai podríem. Nosaltres només ens assegurem que cada workstream tingui una branch neta llesta per a revisió. Estàs mantenint les teves PRs petites i evitant conflictes de merge, oi? …Oi?
Factory Floor detecta les eines des del teu shell de login. Si claude, gh, git, o tmux no apareixen:
-L factoryfloor), així que la teva configuració personal de tmux no interferirà$FF_PORT (o que el port es detecta des de l’arbre de processos)ff-run embolcalla el run script, monitoritza els processos fills per trobar listeners TCP