Empresa por departamentos · empieza en el D6 (ERP) · Opción 2

Hub por departamentos — Opción 2: todo en el VPS

La misma meta —cerebro central, memoria compartida, testeo— pero todos se conectan al VPS y corren Claude allí, cada uno en su carpeta aislada. Nadie trabaja en su portátil: es como Emilio ya usa la Pi, llevado al equipo.

En planificación 3 devs · abierto a más ~10 clientes self-hosted 2026-07-16
← ◐ Opción 1 · en local ◑ Opción 2 · todo en el VPS
En una frase

Qué es

Los markdown de la memoria son la fuente de verdad; los hooks los alimentan solos desde el trabajo de los devs; los bots de cron vigilan git y el correo; CodeGraph + el grafo de conocimiento los vuelven consultables; y Claude, corriendo en el VPS, lee y escribe todo eso — de modo que, trabaje quien trabaje, el equipo entero está al día en un solo sitio.
◐ Dirigido

Claude en tu carpeta del VPS

Cuando trabajas: corre en el VPS, en tu carpeta aislada. Tú diriges, él programa.

todo en
el VPS
◑ Autónomo

Claude del Hub

Resume, clasifica emails, levanta Odoo y testea. También en el VPS. Nunca mergea.

Por departamentos

Empieza en el D6, pero pensado para toda la empresa

El Hub se organiza por departamentos. Cada uno tiene sus devs, sus clientes, su memoria y sus estándares. Arrancamos solo con el D6 (ERP / Odoo); añadir otro es una partición más, sin rehacer nada.

la jerarquía
Empresa
└── Departamentos
    ├── D6 · ERP (Odoo)   # empezamos aquí
    │   ├── devs        # sus cuentas
    │   ├── clientes    # JMC, …
    │   ├── memoria     # propia del D6
    │   └── estándares  # Odoo / OCA
    ├── D? · (futuro)   # otro stack, otros devs
    └── …
en el VPS + Forgejo
/opt/hub/departamentos/D6/
├── git/ · repos/ · memoria/ · staging/
└── (mañana) …/D?/   # una partición más

Forgejo: una organización por departamento
  org D6 → los repos de sus clientes
Aislado

Cada departamento, su mundo

Los devs de un departamento no ven lo de otro. Dentro del D6, todos ven qué hace el resto.

Estándares

Empresa + departamento

Reglas comunes de la empresa + las propias de cada uno. El D6 usa las de Odoo/OCA.

Escala

Añadir uno = una partición

Un departamento nuevo es una carpeta y una org de Forgejo más. Nada del D6 se rehace.

Qué construimos

Las capacidades y su "hecho"

Cada capacidad tiene un criterio medible de cuándo está terminada — sin tecnicismos, en qué se nota.

C1

Memoria compartida

Cualquier dev abre un cliente y Claude ya sabe su contexto, lo último que hizo cualquiera y las tareas abiertas.

Hecho cuandocada bloque de trabajo aparece resumido en la memoria en <2 min, solo.
C2

Presencia en vivo

Ver en un sitio quién trabaja ahora, en qué cliente y rama. Si dos coinciden, ambos reciben aviso.

Hecho cuandoel estado del equipo refleja la realidad sin que nadie lo actualice.
C3

Emails → tareas

Por ahora cada dev pega el email de su cliente en su propio Claude; en minutos hay una tarea clasificada en el cliente correcto.

Hecho cuando9 de 10 emails acaban bien clasificados sin tocar nada; los dudosos van a triaje.
C4

Testeo automático (QA)

El Hub levanta el Odoo del cliente, corre los tests y prueba en navegador — la red de seguridad.

Hecho cuandoningún cambio llega a un cliente sin pasar por esto.
C5

Claude del Hub bajo demanda

Te conectas al VPS y le encargas ("analiza el issue #12"); trabaja en ramas hub/* y entrega una propuesta.

Hecho cuandoentrega PR + informe y jamás mergea ni toca producción.
C6

Onboarding de un dev

Un comando deja la máquina lista: VPN, repos, hooks e identidad.

Hecho cuandoun dev nuevo está operativo en <30 min sin que nadie toque su equipo.
Arquitectura

El mapa, de un vistazo

Para empezar, la conexión al VPS es simple: acceso directo (SSH) para quien quiera ir al grano, o a través del Claude de cada dev. El método definitivo se decide más adelante.

Los devs — su ordenador es solo un terminal para conectarse

term
Dev 1
se conecta al VPS
term
Dev 2
se conecta al VPS
term
Dev 3
se conecta al VPS
+
más devs
solo una cuenta más
▼   Se conectan al VPS con usuario y contraseña · corren Claude ALLÍ   ▼

◑ ERP Hub — VPS 16 GB

self-hosted
Carpeta por empleado
copia aislada por dev · cuentas separadas · Claude corre aquí
Memoria global
contexto, sesiones, tareas, emails — compartida
Código + grafos
CodeGraph + Basic Memory
Staging Odoo
doodba, on-demand
Claude del Hub
headless · ramas hub/* · QA
Agentbrowser + cron
Playwright + 5 bots

Hacia fuera

git
GitHub org
repo por cliente · issues = tareas
mail
Emails a mano
cada dev los pega desde su equipo · buzón auto = futuro
ssh
Acceso directo
te conectas al VPS y le hablas
Las dos máquinas

Qué carpetas hay en cada lado

El ordenador del dev es solo un terminal para conectarse. Dentro del VPS, cada empleado tiene su cuenta y su carpeta privada; el cerebro es compartido.

ordenador del dev · solo un terminal
# En el portátil NO vive el código.
# Solo un cliente para conectarse:

$ erp
  → conecta al VPS (usuario + contraseña)
  → abre Claude en tu carpeta del VPS

# Sus cosas personales las hace aparte,
# en su propia máquina — fuera del ERP.
dentro del VPS · una cuenta por empleado
/home/juan/erp/jmc     # privado de Juan (solo él)
/home/pedro/erp/jmc    # privado de Pedro · mismo cliente
/home/maria/erp/cliente-x
/opt/hub/              # cerebro COMPARTIDO (todos leen)
├── memoria/            # contexto · sesiones · tareas · emails
├── codegraph/ · kg/    # grafos de código y conocimiento
├── staging/            # Odoo doodba on-demand
└── agentbrowser/       # pruebas
Alta y login del dev

Un responsable lo da de alta en el VPS · el dev entra con su usuario y contraseña

Un responsable (con acceso admin) se conecta al VPS y da de alta al usuario con su email y su contraseña. Cuando ese dev arranca en su ordenador, inicia sesión con esas credenciales — y con eso queda todo montado.

1 · un responsable se conecta al VPS y da de alta
$ hub-nuevo-dev
 Usuario:    juan
 Email:      juan@labelgrup.com
 Contraseña: 7fK2-p9Qr  (o generar)

 ✅ Dev creado: juan (juan@labelgrup.com)
    Clientes: —  # hub-asignar juan jmc

 # Pásale las credenciales por un canal seguro.
2 · el dev arranca en su ordenador
$ erp
──  ERP Hub  ───────────────────────
 Inicia sesión con tu usuario y contraseña

 Usuario:    juan
 Contraseña: ••••••••
────────────────────────────────────
 ✅ Bienvenido, Juan — ya estás dentro
    Proyectos, hooks y contexto: listos.
    Abriendo Claude en ~/erp/
Crear

Un responsable, desde el VPS

Alguien con acceso admin se conecta al VPS y da de alta al usuario con su email y su contraseña. Queda registrado en el cerebro. Nadie se auto-registra.

Entrar

Usuario + contraseña

La primera vez, el dev teclea sus credenciales. El instalador valida contra el VPS y deja todo montado sin que toque nada más.

Seguro después

La contraseña, solo una vez

En ese primer login se instala una clave en su máquina. A partir de ahí conecta sin contraseña y de forma segura — él solo recuerda su usuario y su pass.

Dar de baja a alguien es igual de simple: un comando en el VPS borra su acceso al instante. Y añadir al dev nº 4, 5, 6… es exactamente el mismo hub-nuevo-dev — por eso el equipo se abre a más gente sin rehacer nada.

Cada dev, registrado

El VPS sabe dónde tiene cada uno sus proyectos

No todos guardan los proyectos en la misma ruta. El cerebro registra, por dev, en qué carpeta local vive cada cliente — para saber siempre dónde está todo.

equipo/devs/juan.md · en el VPS
---
dev: juan
maquina: portatil-juan
clientes:
  jmc:        ~/erp/jmc
  cliente-x:  ~/erp/cliente-x
ultima_conexion: 2026-07-16 09:05
---
# Juan — dev del equipo ERP
Skills y estándares globales sincronizados ✅
equipo/devs/pedro.md · rutas distintas, sin problema
---
dev: pedro
maquina: mac-pedro
clientes:
  jmc:   /Users/pedro/dev/jmc
  otro:  /Users/pedro/dev/otro
ultima_conexion: 2026-07-16 09:31
---

Se registra en el alta del dev y se actualiza solo cuando clona un proyecto nuevo. Así el cerebro —y su Claude— saben exactamente en qué ruta de cada máquina vive cada cliente, aunque cada uno lo tenga en un sitio distinto.

Conexión y arranque

Cómo el dev sabe que está conectado

No hay ritual de conexión: la VPN está siempre arriba y el cerebro se conecta solo al abrir Claude. Estas dos piezas —baratas— hacen que el dev lo vea y confíe desde el primer segundo.

Canal · MCP

Dinámico, bajo demanda

El VPS expone un servidor MCP. El Claude del dev consulta y escribe en el cerebro en el momento exacto en que hace falta (contexto del cliente, presencia, crear tarea). Es lo mismo que ya hace CodeGraph.

Canal · Hooks

Automático, garantizado

Aunque Claude no llame a nada, los hooks capturan siempre lo esencial: los eventos de presencia y el cierre de bloques. La red de seguridad para que nada dependa de que "se acuerde".

Opción 1 · aviso al arrancar
$ claude
── ERP Hub ─────────────────────────────
✅ Conectado al cerebro (VPS)
   12 clientes · Pedro y María activos ahora
   3 tareas tuyas abiertas en JMC
─────────────────────────────────────────

# si el VPS no responde:
⚠️  Sin conexión al cerebro
   No se llega al VPS → revisa tu conexión
   (sigues trabajando; se sincroniza al volver)
Opción 2 · comando erp
$ erp
▸ Conexión al VPS…… ✅ el VPS responde
▸ Cerebro ERP (MCP)… ✅ conectado
▸ Repo de memoria…… ✅ al día (pull ok)
▸ Identidad……… Juan · JMC, Cliente-X

Todo listo — abriendo Claude en ~/erp/
Conectado conectas pero el VPS no responde Sin conexión · app de escritorio con esta misma luz = fase 2, al abrir a más devs
Equipo vs personal

Dos modos: el trabajo del equipo y lo tuyo

El dev tiene libertad total para sus cosas. Solo el trabajo dentro de su zona ERP entra en el cerebro compartido — todo lo demás es privado.

🟢 Modo ERP · con erp

El trabajo del equipo

Abre Claude en su carpeta ERP. Conectado al VPS: contexto inyectado, acciones capturadas, tareas y resúmenes compartidos con el equipo.

Se compartesolo lo que pasa aquí dentro.
⚪ Modo personal · con claude

Lo suyo, privado

Abre Claude normal en cualquier otra carpeta. Nada se conecta al VPS, nada se captura, nada se comparte. Sus experimentos y proyectos son suyos.

No sale nadani el equipo lo ve.
Cómo se logra

La maquinaria vive pegada a la carpeta ERP

Los hooks y el servidor MCP del VPS se instalan en la config de la carpeta ~/erp/, no en la global de Claude. Así solo se activan ahí dentro. Y como doble seguro, los propios hooks comprueban la ruta: fuera de la zona ERP, no hacen nada.

🔒 La garantía: todo lo que el dev hace fuera de su carpeta ERP es 100% privado y local — ni se captura, ni se envía, ni el equipo lo ve. Solo se comparte el trabajo de los clientes. Nada más.
Aislado pero compartido

Cada uno en su cuenta — pero todos saben qué hace el resto

Parece una contradicción y no lo es: se comparte el conocimiento, no los archivos.

🔒 Los archivos

Aislado

Cada dev = una cuenta separada, con su carpeta privada. No puede abrir los proyectos de otro. Su código y sus ramas son suyos y solo suyos.

🌐 El conocimiento

Compartido

Toda la info se guarda en el cerebro común: presencia, actividad, resúmenes, tareas. Todos ven qué hace y qué ha hecho el resto — como información, no abriendo archivos ajenos.

🔑 La clave: se comparte el conocimiento (qué hace cada uno, resúmenes, tareas, presencia), no el acceso a los archivos. Código privado por dev, saber común para todo el equipo.
Detalle técnico

Por dentro: cómo se organiza en el VPS

Tres niveles de copia del código, más un cerebro y un clon de referencia fuera de los usuarios. Eso resuelve el aislamiento, el seguimiento y las pruebas de varios devs a la vez.

estructura en el VPS · tres niveles
/opt/hub/                        # ZONA DEL HUB — fuera de los usuarios
├── git/jmc.git                 # repo "origin" (bare): TODOS pushean aquí
├── repos/jmc                    # clon de REFERENCIA · aquí corre el cron git pull
├── memoria/                     # cerebro compartido (todos leen)
│   ├── equipo/estado.md            # presencia en vivo
│   └── clientes/jmc/ actividad.md · sesiones/ · tareas/
├── staging/                     # Odoo doodba on-demand
└── ports.registry                  # qué puerto usa cada dev

/home/juan/   # cuenta aislada (permisos 700)
├── erp/jmc/                        # COPIA DE TRABAJO de Juan (origin = /opt/hub/git/jmc.git)
└── .claude/                        # sus hooks + transcripts (privados)

/home/pedro/ erp/jmc …             # copia de Pedro · mismo cliente, sin choque
1 · memoria por usuario

Todo lo que hace cada uno, guardado

Cada cuenta corre Claude con los hooks. El observer apunta cada acción al cerebro compartido, etiquetada con el usuario y el cliente. Escritura local en el mismo disco: instantánea.

Privacidadel transcript entero queda privado en ~/.claude/; solo el resumen y la actividad se comparten.
2 · clon central + cron

Saber qué hace cada uno

Al hacer push, el commit va al bare /opt/hub/git/. El cron hace git pull en el clon de referencia, detecta commits nuevos de cualquiera y los apunta en actividad.md + reindexar CodeGraph.

Dos vistascommits = qué committeó · hooks = qué toca ahora mismo.
3 · puertos

Levantar el web, varios a la vez

Un comando busca un puerto libre y arranca el Odoo de la copia de ese dev, lo anota en ports.registry y da la URL. O un rango por dev (Juan 8069–79, Pedro 8080–89…). Nunca chocan.

4 · agentbrowser

Pruebas concurrentes

Cada dev lanza su propio Chromium headless contra su Odoo (su puerto). Procesos independientes y aislados. Límite = RAM del VPS; para pocos devs, de sobra. Playwright deja capturas, sin pantalla.

Flujo de git del dev

Su propio clon, sus ramas, su PR

Cada dev tiene su propio clon del proyecto —aunque sea el mismo cliente que otro—. Todos comparten un único origin en el VPS; trabajan aislados y se sincronizan por ahí.

un origin · un clon por dev (mismo proyecto, clones separados)
        ┌──────────── Forgejo (VPS) ────────────┐
        │   origin · PRs · issues · usuarios     │
        └───▲───────────────▲───────────────▲────┘
       push │               │               │
   /home/juan/erp/jmc  /home/pedro/erp/jmc  /home/maria/erp/…
     clon de Juan        clon de Pedro       clon de María
     rama jmc/feat-x     rama jmc/fix-stock  (mismo proyecto,
                                              clones distintos)
1

Su clon

Cada dev tiene su propia copia del proyecto en su carpeta, con el origin apuntando a Forgejo. Aunque dos trabajen en JMC, son dos clones separados.

2

Su rama

Claude crea una rama por tarea (jmc/feat-descuento) en el clon del dev. Nadie pisa a nadie.

3

Commit + push

Se commitea y se hace push de la rama al origin de Forgejo. Ahí aparece para todos, y el cron la registra en la actividad del cliente.

4

Su PR

El dev abre la PR en Forgejo (jmc/feat-descuento → develop-jmc). El Claude del Hub la testea y deja el veredicto; mergea un humano.

🧩 Forgejo en el VPS lo une todo: los repos origin, las PRs, las tareas (issues por cliente) y el login de cada dev (usuario+contraseña). Un solo componente self-hosted, todo en casa.
Forma de trabajar

Estándares, skills y agentes

La manera de trabajar no se le explica a cada dev: se define una vez y le llega sola a su Claude. Igual que en la Pi, pero compartido por todo el equipo.

Cuatro capas de reglas — cada una vive donde le toca

CapaEjemplosDónde vive
Global
todo el equipo
Commits en inglés · rama por tarea · no tocar PROD · black/ruff/pylint-odooVPS · biblioteca global
Por stack"Odoo → convenciones OCA + estas librerías"VPS · según el stack
Por negocio"JMC factura a 60 días · no tocar la secuencia de facturas"VPS · contexto del cliente
Por proyecto
técnico
CLAUDE.md del repo · skill "añadir campo a la factura" · agente "jmc-tester"En el git del proyecto
🌐 La biblioteca global vive en el VPS (equipo/skills/ · equipo/agents/ · equipo/reglas/) y se sincroniza a cada dev. Todos comparten el mismo maletín: un skill "montar un módulo Odoo", un agente "odoo-tester", los estándares. Una sola fuente — y cuando cambias algo ahí, todos lo tienen en la siguiente sesión.
Llega vía · git clone

Lo del proyecto viene con el código

El CLAUDE.md, los skills y los agentes dentro del repo llegan solos al clonarlo. Los tiene el dev y también el Claude del VPS. Cero esfuerzo.

Llega vía · al iniciar

Lo global se inyecta al arrancar

El hook injector hace pull del VPS y mete en contexto solo lo que aplica: global + stack del proyecto + negocio del cliente. Como ya haces en la Pi.

Y funciona en los dos sentidos: cuando un skill de un proyecto resulta útil para todos, se promociona a global — pasa a la biblioteca del VPS y desde entonces lo tiene el equipo entero. El maletín común crece con lo que aporta cada uno.

Los archivos, por dentro

Contexto real, no abstracto

Ejemplos con contenido real de cómo se ve la ficha de un cliente, la presencia del equipo y un email ya convertido en tareas.

clientes/acme/contexto.md
---
cliente: jmc
dev_asignado: juan
odoo_version: "17.0"
---
# JMC S.L.

Distribuidora de material de oficina, ~40
empleados. Contacto: Marta (admin).

## Siempre tener en cuenta
- No tocar la secuencia de facturas (AEAT).
- Aprobación de pedidos > 5.000 €.
- A producción solo los viernes por la mañana.
clientes/acme/sesiones/…_juan.md
---
dev: juan   cliente: jmc
rama: jmc/feat-descuento
tarea: "#48 descuento no sale a crédito"
---
# Bloque de trabajo — Juan en JMC

## Qué se hizo
- Bug en account_move.py: condición de
  pago demasiado estricta. Corregido.
- Añadido test test_descuento_credito.

## Estado — rama lista, pendiente QA.
NO mergeado.

equipo/estado.md — presencia en vivo (TTL 30 min)

DevClienteRamaÚltima acciónDesde
JuanJMCjmc/feat-descuentoedit invoice.py09:05
PedroJMCjmc/fix-stockrun tests09:31
MaríaCliente-Xx/portal-loginedit portal.js08:50
⚠️ Juan y Pedro coinciden en JMC (ramas distintas) — aviso, no bloqueo.
Cómo funciona

Un email de JMC, de punta a punta

Sigue una petición real desde que llega hasta que se aprueba, viendo qué cuerpo actúa en cada paso.

1

Llega el email local

Marta escribe a Juan. Él lo pega a mano en su Claude, desde su propio ordenador: "tengo este email de JMC…". Su Claude lo interpreta al vuelo. (Sin buzón automático por ahora.)

2

Se parte en tareas local

Detecta JMC y separa dos cosas: un bug (descuento a crédito) y una mejora (exportar a Excel). Crea los issues #48 y #49 en el centro, no en el portátil.

3

Juan trabaja el bug local

Al decir "vamos con el bug de JMC", el hook le inyecta el contexto del cliente y lo que hizo Pedro. Claude corrige en la copia local, en jmc/feat-descuento.

4

Cambia de cliente → se guarda solo hub

Juan salta al Cliente-X sin cerrar nada. El cambio de cliente cierra el bloque: el Hub lo resume desde el flujo de eventos y lo guarda en sesiones/.

5

El Hub testea hub

Te conectas al VPS y le dices "prueba la rama de descuento": levanta el Odoo de JMC (doodba), corre los tests, factura a crédito con Playwright y responde ✅ 12 tests OK, descuento correcto (captura).

6

Un humano aprueba

Un dev revisa y mergea. El Hub nunca mergea ni toca producción.

Cuando aparece algo nuevo

El cerebro aprende sobre la marcha — y no duplica

No hay que dar de alta nada antes de empezar. En cuanto algo aparece, el cerebro lo registra solo en la carpeta del cliente con todo lo que necesita. Y si ya existía, avisa en vez de duplicar.

Cliente nuevo

Se registra al tocarlo

Un dev empieza con "Bodegas Rivas", que no existe. Su Claude crea la ficha esqueleto, empieza a registrar la actividad, y pide dos líneas de contexto que solo sabe un humano.

Email nuevo

Genera todo en el centro

Le pasas el email a mano. El cerebro genera en la carpeta del cliente todo lo que necesita: guarda el email, lo clasifica, crea la tarea con el texto citado y la prioridad. Sin que muevas nada más.

Repetido

Avisa, no duplica

Si otra persona pasa el mismo email, el cerebro ve que ya existe la tarea y quién la lleva — y te lo dice, en vez de crear un duplicado.

Pedro pega el mismo email de Marta
$ "tengo este email de JMC: no sale el descuento…"

⚠️  Esto ya está registrado
   Tarea #48 · "descuento no sale a crédito" (JMC)
   La lleva Juan · rama jmc/feat-descuento · desde 09:05

No creo un duplicado. ¿Quieres verla o añadir algo?

Puede hacerlo porque todo vive en el centro: las tareas y la presencia. Antes de crear nada, el cerebro mira si ya existe una tarea para eso en ese cliente y si alguien está en ella. Los dos únicos límites: no puede probar código que no esté subido al remoto, ni inventar el contexto de un cliente nuevo — eso lo teclea un humano (dos líneas).

La capa de grafo

Dos grafos, unidos por el módulo

El grafo del código y el grafo del conocimiento del departamento, conectados: desde una tarea saltas directo al código que la resuelve.

CodeGraph

Grafo de código

La estructura del código de los 10 clientes. Ya lo usas.

  • "¿Dónde se calcula el descuento en JMC?" → _compute_amount()
  • Quién llama a qué, sin grep.
  • Se refresca con codegraph sync tras cada pull.
puente · el módulo / la ruta
Basic Memory

Grafo de conocimiento

Las entidades del departamento y sus relaciones, sobre los mismos markdown.

  • "¿Qué módulos toca más Pedro?"
  • "Este email, ¿en qué acabó?" → Tarea → Commit
  • "¿Qué tareas abiertas tiene JMC?"
ClienteDevTareaSesiónEmailMóduloCommit

El nexo es el módulo: el nodo jmc_facturacion del grafo de conocimiento apunta a su subgrafo en CodeGraph. Así, desde "tarea #48 sobre facturación de JMC" saltas al código real sin buscar a mano.

Los bots de cron

Cinco vigilantes, cada uno una cosa

Mismo patrón que tu scheduler actual con claude -p. Ninguno depende de que un dev haga nada.

BotCadaQué hace
fetch-commits10–15 mingit fetch de los 10 repos → apunta commits en actividad.md → refresca CodeGraph y el grafo.
email-inbox (futuro)5–15 minAutomatiza el buzón tareas@. Al principio no hace falta: los devs pasan los emails a mano desde su Claude.
work-blocks5 minDetecta bloques cerrados (cambio de cliente / inactividad / fin de día) → resume → guarda la sesión.
hub-queue2 minLee hub/cola.md → ejecuta encargos del Claude del VPS (testeo, análisis) → informe.
digest-diario09:00Resumen del día anterior por dev/cliente → queda en el VPS, lo ves al conectarte.
al conectarte al VPS · digest del día
📊 Equipo ERP — 16/07
JMC: 4 commits (Juan 3, Pedro 1) · issue #48 en QA ✅ · 2 tareas nuevas por email
Cliente-X: 2 commits (María) · portal-login en progreso
🔴 Pendiente aprobación: merge de jmc/feat-descuento
Cómo empezamos

Hoja de ruta por fases

Cada fase entrega valor por sí sola. Con las tres primeras ya tienes el corazón funcionando.

F0

Cimientos

VPS + WireGuard + repos + secretos cifrados + script de onboarding.

2–3 días
F1

Visibilidad

Cron que registra commits por cliente + digest que ves al conectarte.

1–2 días
F2
🏁 Mínimo viable = F0 + F1 + F2

Memoria + presencia

Tus hooks en modo equipo: contexto al abrir, resumen por bloques.

3–5 días
F3

Emails → tareas

Buzón + clasificación automática → issue + borrador de respuesta.

2–3 días
F4

El cuarto trabajador

Claude del Hub + Odoo staging (doodba) + QA con Playwright.

4–6 días
F5

Extras

Grafo semántico completo, Plane, dashboard — cuando duelan, no antes.

Comparativa

Las dos vías, cara a cara

Estás viendo la Opción 2 (todo en el VPS) — cambia arriba a la Opción 1 para verla completa. El cerebro, la memoria y las tareas son iguales en las dos; lo único que cambia es dónde vive el código y dónde corre Claude.

Cara a cara

DimensiónOpción 1 · localOpción 2 · todo en el VPS
Dónde vive el códigoPortátil de cada devEn el VPS, carpeta por empleado
Dónde corre ClaudeEn el portátilEn el VPS
OnboardingInstala repos, hooks, config localmás simple user+pass y a trabajar
EntornoDistinto en cada máquinaidéntico lo monta el admin
Aislamiento entre devsNatural (cada uno su máquina)cuentas separadas nadie ve el código de otro
Trabajar sin conexiónno
Si el VPS se caeCada uno sigue en su localequipo parado (backup obligatorio)
Recursos del VPSLigeros (solo cerebro)Altos (N Claudes + N Odoos)
Se parece a…Cómo Emilio ya usa la Pi
Cómo lo veo: con espacio de sobra, la Opción 2 es más simple y centralizada —es tu forma natural de trabajar con la Pi— y el aislamiento por cuentas cubre que nadie vea el código de otro sin perder la visibilidad compartida. Su único cuello es CPU/RAM y que es punto único de fallo (backup desde el día 0). La Opción 1 gana solo si necesitas trabajar offline o máxima resiliencia. Para este equipo, pequeño y con VPS holgado, la Opción 2 es probablemente el mejor encaje.
Antes de arrancar

Lo que tienes que confirmar

Solo estas bloquean. En tres ya hay recomendación clara; una es grande.

D1 · la grande

¿Dónde vive el código de los clientes?

GitHub privado + copias espejo, o Forgejo en el VPS. Lo más caro de revertir.

Recomendación GitHub — pero revisa antes si algún contrato prohíbe la nube. Si alguno exige on-premise → Forgejo.

D2

El VPS

Proveedor y tamaño. Lo monta el equipo de sistemas.

Recomendación OVH nuevo, 16 GB. Nunca el VPS2 (PROD de thetraktor).

D3

Suscripciones Claude

Cuántas y de qué nivel. Es el coste dominante.

Recomendación 3× Max (devs) + 1 para el Hub. Evaluar plan Team.

D4 · más adelante

Buzón de emails

No bloquea el arranque: por ahora cada dev pasa los emails a mano desde su ordenador. El buzón automático tareas@… queda para cuando queráis automatizarlo.

Sin prisa el dominio se decide al llegar a F3.

Riesgo nº1

Las credenciales de 10 clientes. Hoy viven en texto plano en los markdown. El Hub concentraría los accesos de 10 empresas, así que sops + age desde el día 0 es innegociable — cifradas dentro del repo, una clave por persona.

Herramientas

Con qué se monta — y qué reaprovecha

Casi todo el software es open-source o ya lo tienes montado. El único coste recurrente real son las suscripciones de Claude.

PiezaHerramientaRol¿Ya lo tienes?
Conexión al VPSSSH (por ahora)Acceso directo o vía el Claude del dev · método final a decidir
Memoriarepo git de markdownFuente de verdad, versionada✅ tu sistema de memoria
Grafo de códigoCodeGraphEstructura del código✅ ya en 5 repos
Grafo de conocimientoBasic MemoryEntidades y relaciones sobre los MDnuevo
Tareasissues del forgeTarea ↔ commit, en el centro✅ gh CLI
Presencia + resúmeneshooks + claude -pQuién hace qué, sin cerrar sesión✅ injector/observer
Email → tareaIMAP + HaikuClasificación automática✅ patrón soporte email
Testeodoodba + PlaywrightLevanta Odoo y prueba✅ Playwright
Secretossops + ageCredenciales cifradasnuevo · necesario
Cronscheduler propioLos 5 bots✅ tu scheduler