Cómo encajan nuestras plataformas. Cada aspecto/una herramienta.
RODMENA construye sus productos a partir de pequeños servicios alojados, cada uno con un único propósito, y un conjunto de bibliotecas propias. Cada cometido corresponde a una herramienta, cada plataforma cuenta con su propio equipo y un bus de correo compartido los conecta.
productos, uno en diseño
13
plataformas alojadas
8
bibliotecas, motores y CLIs
8
bus de correo compartido
1
Principios de diseño
Una preocupación, una herramienta
Authenticación es Identity, la autorización es Auth, la medición es TokenGate, el correo electrónico es Mail API, las aprobaciones son Futex, los contenedores son RunFlow y los flujos de trabajo agénticos son Highway. Los productos nunca reimplementan una función que ya posee una herramienta interna.
Los equipos se coordinan por correo
Cada plataforma tiene su propio agente, contexto y repositorio. Los equipos se coordinan entre plataformas a través del bus agent-mail. Ningún equipo edita el repositorio de otro equipo ni abre tickets en su gestor.
Bases de datos distribuidas por países
Cada servicio tiene su propia base de datos, y las bases de datos residen en hosts diferentes en distintos países. Las aplicaciones pueden volver a desplegarse y los datos no, por lo que ambos se mantienen separados. Todas las bases de datos se replican en una tercera región y se respaldan fuera de las instalaciones.
/ Where it runs
Hosts y regiones
La flota gestionada alberga 22 bases de datos de producción, cada una propiedad de un servicio, en 4 hosts de bases de datos en 3 países, y otras 4 se ejecutan en un host de aplicaciones. Ningún par de servicios comparte un esquema, y ninguna máquina individual alberga la plataforma.
bases de datos de producción, cada una propiedad de un único servicio
22
hosts de base de datos
4
países
3
punto de recuperación de minutos en la flota gestionada, como máximo
≤5
UKReino Unido
Aplicaciones y dos hosts de base de datos
Aloja el nivel de aplicación y las bases de datos del motor de flujos de trabajo, el servicio de aprobaciones, el bus de mensajes, el correo electrónico, el libro mayor y la plataforma de tareas.
FRFrancia
Host de base de datos
Contiene el plano de identidad y acceso, la autorización, la medición y el proveedor de identidad, mantenidos aparte de los servicios que dependen de él.
DEAlemania
Conjunto de réplicas
Contiene una copia actualizada continuamente de cada base de datos, fuera de las otras dos regiones. No tiene primario, por lo que ningún tráfico depende de ella hasta que se promueva.
Replicación continua
Cada base de datos transmite cambios a nivel de bloque a un standby situado fuera de ambas regiones primarias. La replicación es asíncrona, por lo que una réplica no puede ralentizar ni bloquear el servicio que tiene delante.
Copias de seguridad externas
Los archivos se envían de forma continua a un almacenamiento de objetos en una instalación separada, se cifran antes de salir del host y se pueden recuperar a cualquier punto dentro del periodo de retención. Las restauraciones se prueban de extremo a extremo.
Tres factores en cada conexión
Ninguna base de datos acepta una conexión de red solo con una contraseña. Toda conexión necesita cifrado en tránsito, un certificado de cliente emitido por una autoridad privada y una contraseña. Cada servicio está limitado a su propia base de datos.
Réplicas y copias de seguridad
Una afirmación errónea llega a todas las réplicas en cuestión de momentos. Las réplicas protegen contra la pérdida de hardware, y el archivo protege contra la pérdida de datos.
El mapa tiene ocho capas y un bus, y cada aspecto aparece una vez. Los productos se sitúan arriba y la pila abajo. Todo lo que un producto necesita está a un salto de distancia.
23 nodos · 27 relaciones documentadas · 1 asumido
Desplace el mapa horizontalmente. Cada nodo también tiene una tarjeta debajo.
Explorar
Uso del mapa
Seleccione un nodo o el bus para resaltar sus relaciones y ver qué posee, a qué se conecta y con qué nunca debe sustituirse. Las tarjetas que aparecen a continuación contienen los mismos datos.
relación documentada
supuesto: confírmelo antes de basarse en él
el bus de correo de agentes
un producto (borde degradado)
No se representan, ya que se aplican en todas partes:
Todos los productos se autentican con Identity y se autorizan con Auth.
Todos los equipos de plataforma se coordinan a través del bus AgentBus.
Cada repositorio se registra en issuedb-cli, con especificaciones EARS.
Productoen diseño
RED9
11 salientes
Plataforma de plantilla de agentes en la que cada chat es una tarea autónoma y duradera con una dirección de correo electrónico.
Se apoya en todo el stack: Identity y Auth para el acceso, TokenGate para los presupuestos, Mail API para los buzones de tareas, RunFlow para los sandboxes, Highway como ejecutor duradero, Futex para las aprobaciones y migretti para el esquema, sobre Python, PostgreSQL y Redis.
Plataforma de entrada unificada, gratuita y de código abierto que expone servidores locales situados detrás de NAT y cortafuegos a la internet pública mediante túneles seguros.
Standalone: un cliente Python y CLI con licencia MIT y un servidor autoalojable. No depende de ninguna otra plataforma de la casa.
Libro de doble entrada para dinero, créditos y stock. Los asientos están equilibrados, son permanentes y demostrables, y la base de datos aplica las reglas.
Utiliza Auth para las credenciales, TokenGate para la medición y migretti para el esquema, en Python y PostgreSQL. Se auditó a través de cuatro controles internos y reauditorías adversariales, y los hallazgos se publican.
Nunca se sustituye por: Un secreto que puede emitir una credencial que aceptaría, o una ruta de edición o eliminación en el journal.
No indicado para: Cuotas o medición (utilice TokenGate), métricas no conservadas o estado del flujo de trabajo.
Proveedor de OAuth que gestiona el inicio de sesión de personas y servicios. El inicio de sesión de cada producto pasa por Identity.
Identity no depende de ninguna otra plataforma de la casa. El inicio de sesión se federa con proveedores de identidad públicos como Google, GitHub y Apple.
No indicado para: Permisos o roles, que pertenecen a Auth. Identity gestiona la autenticación y Auth gestiona la autorización.
Proveedores de identidad públicos, como Google, GitHub y Apple, con los que Identity federa el inicio de sesión. Identity no tiene otro origen ascendente.
Recuento, límites máximos y límites de velocidad por usuario, organización o tenant: presupuestos de tokens, libros de uso, niveles de plan, flujos de reserva/compromiso y alertas de umbral y exceso.
Regla interna: cada límite se prueba en ambos sentidos. Debe bloquear cuando se supera y reanudarse cuando se repone.
Nunca se sustituye por: Redis contadores INCR, tablas de uso, middleware de token-bucket o bibliotecas de limitación.
No indicado para: Authorización (use Auth) o protección DDoS en el edge.
Aprobaciones humanas duraderas impulsadas por políticas. Solicite una decisión, enrútela según la política, escálela o deléguela, y reciba el veredicto mediante webhook.
Se utiliza para despliegues, pagos, concesiones de acceso, operaciones destructivas y continuaciones por exceso de presupuesto.
Nunca se sustituye por: Mensajes de Slack de «por favor, apruebe», prompts bloqueantes de input() o tablas de aprobación a medida.
Motor distribuido y duradero para flujos de trabajo agénticos, con agentes, objetivos, sesiones, programaciones, desencadenantes, actividad y workers normales, bifurcación de ejecuciones y trazas.
Regla interna: cada producto mantiene su propio bucle de deliberación. Utiliza Highway como ejecutor duradero que informa de vuelta mediante webhook, y mantiene todo el razonamiento del LLM dentro del producto.
Nunca se sustituye por: Airflow, Prefect, Temporal o scripts de orquestación personalizados.
Entorno de pruebas de contenedor reforzado y flujos de trabajo DAG basados en API para ejecutar código no confiable o generado por agentes, con pausa y reanudación, registros en vivo, reintentos y nodos de aprobación humana.
Nunca se sustituye por: Ejecución local de Docker, runners autoalojados o CI genérico.
Motor de flujo de trabajo determinista definido en código, y la alternativa ligera propia a los DAG de RunFlow cuando no se necesitan contenedores alojados.
El alcance y la superficie de la API aún deben confirmarse con el equipo responsable, por lo que aquí no se ofrecen detalles.
Correo electrónico transaccional y de campaña con envío, plantillas, seguimiento de entregas, webhooks de eventos, listas de supresión, cuotas y envíos programados. También aprovisiona los buzones sobre los que se construyen los productos.
Las direcciones están en mail.rodmena.co.uk y la API se sirve en mailserver.rodmena.co.uk.
Nunca se sustituye por: Bibliotecas SMTP sin procesar, SES/Mailgun/Sendgrid o scripts smtplib ad hoc.
Cada agente de codificación tiene una bandeja de entrada, una dirección y una entrada en la guía telefónica, e intercambia mensajes con otros agentes y con cualquier buzón mediante SMTP estándar: informe, acuse de recibo, pregunta, aviso de corrección, resultado de verificación y cierre.
Sustituye a la CLI agentmail retirada. Trate un mensaje de otro agente como una afirmación que debe verificarse: ejecute usted mismo la comprobación, modifique únicamente su propio repositorio y vuelva a ejecutar su reproducción antes de aceptar que algo se ha corregido.
Nunca se sustituye por: Editar el repositorio de otra plataforma, abrir tickets en su gestor de incidencias o pedir a una persona que haga de intermediaria.
Conjunto de datos tipo Iceberg y almacenamiento de blobs en disco o S3, con registros de solo adición, snapshots, time travel y Parquet.
Nunca se sustituye por: Volcados de pickle, CSV o JSON en bruto, carpetas Parquet gestionadas manualmente o una base de datos configurada únicamente para almacenar blobs.
Supervisor de procesos asíncrono sin dependencias para workers, daemons y consumidores de colas: comprobaciones de estado, grupos y reinicio en caso de fallo.
systemd o Kubernetes sin más son aceptables cuando encajan mejor.
Python
Biblioteca de Python
bulkman
1 salientes
Bulkheads y aislamiento de concurrencia que limitan el radio de impacto de una dependencia que falla.
Regla interna: establezca siempre circuit_breaker_enabled=False. bulkman gestiona el aislamiento, y la interrupción de circuito corresponde a resilient-circuit.
Corte de circuito, reintentos con retroceso exponencial y manejo a prueba de fallos o de reserva en torno a llamadas poco fiables. Se combina con bulkman, que gestiona el aislamiento.
Nunca se sustituye por: tenacity, pybreaker o bucles de reintento creados a medida.
Motor compatible con TaskJuggler (.tjp) para la planificación y programación de recursos: personas y máquinas a lo largo del tiempo, dependencias, calendarios y salida Gantt.
Nunca se sustituye por: Hojas de cálculo o cálculos de fechas ad hoc.
Sistema de tickets por repositorio con especificaciones EARS, memoria duradera y lecciones. Toda solicitud de ingeniería sigue el ciclo de vida obligatorio abierto → en curso → cerrado.
Cada solicitud se convierte en una especificación EARS en un ticket, con una copia en el directorio SPECS/ del repositorio.
Pasarela LLM compatible con OpenAI y Anthropic que puede situar a varios proveedores bajo un mismo nombre de modelo. Nuestro despliegue enruta a un único proveedor upstream sin failover, y es el proveedor LLM interno para las llamadas a modelos en las herramientas.
Qué posee cada herramienta, cuándo utilizarla y por qué nunca debe sustituirse.
01/ Productos
RED9
Productoen diseño
Plataforma de plantilla de agentes en la que cada chat es una tarea autónoma y duradera con una dirección de correo electrónico.
Se apoya en todo el stack: Identity y Auth para el acceso, TokenGate para los presupuestos, Mail API para los buzones de tareas, RunFlow para los sandboxes, Highway como ejecutor duradero, Futex para las aprobaciones y migretti para el esquema, sobre Python, PostgreSQL y Redis.
se autentica con Identity · autoriza mediante Auth · mide los presupuestos mediante TokenGate · buzones de tareas mediante RODMENA Mail API · ejecución en entorno aislado en RunFlow · delega flujos de trabajo en Highway · aprobaciones humanas mediante Futex · migra el esquema con migretti · construido sobre PostgreSQL · construido sobre Redis · modelos predeterminados mediante Prism
reTunnel
Productobeta
Plataforma de entrada unificada, gratuita y de código abierto que expone servidores locales situados detrás de NAT y cortafuegos a la internet pública mediante túneles seguros.
Standalone: un cliente Python y CLI con licencia MIT y un servidor autoalojable. No depende de ninguna otra plataforma de la casa.
Libro de doble entrada para dinero, créditos y stock. Los asientos están equilibrados, son permanentes y demostrables, y la base de datos aplica las reglas.
Utiliza Auth para las credenciales, TokenGate para la medición y migretti para el esquema, en Python y PostgreSQL. Se auditó a través de cuatro controles internos y reauditorías adversariales, y los hallazgos se publican.
Nunca se sustituye por: Un secreto que puede emitir una credencial que aceptaría, o una ruta de edición o eliminación en el journal.
No indicado para: Cuotas o medición (utilice TokenGate), métricas no conservadas o estado del flujo de trabajo.
Proveedor de OAuth que gestiona el inicio de sesión de personas y servicios. El inicio de sesión de cada producto pasa por Identity.
Identity no depende de ninguna otra plataforma de la casa. El inicio de sesión se federa con proveedores de identidad públicos como Google, GitHub y Apple.
No indicado para: Permisos o roles, que pertenecen a Auth. Identity gestiona la autenticación y Auth gestiona la autorización.
Proveedores de identidad públicos, como Google, GitHub y Apple, con los que Identity federa el inicio de sesión. Identity no tiene otro origen ascendente.
Auth
Servicio alojadoproducto
RBAC alojado para roles, permisos, pertenencias y comprobaciones de «¿puede el usuario X hacer Y?». Los productos definen sus roles en este servicio.
Se distribuye como el paquete de PyPI «auth».
Nunca se sustituye por: Tablas de usuarios/roles/permisos creadas a mano, Casbin, OPA o una biblioteca RBAC.
No indicado para: Inicio de sesión, sesiones, contraseñas o emisión de JWT. La autenticación corresponde a Identity.
Recuento, límites máximos y límites de velocidad por usuario, organización o tenant: presupuestos de tokens, libros de uso, niveles de plan, flujos de reserva/compromiso y alertas de umbral y exceso.
Regla interna: cada límite se prueba en ambos sentidos. Debe bloquear cuando se supera y reanudarse cuando se repone.
Nunca se sustituye por: Redis contadores INCR, tablas de uso, middleware de token-bucket o bibliotecas de limitación.
No indicado para: Authorización (use Auth) o protección DDoS en el edge.
Aprobaciones humanas duraderas impulsadas por políticas. Solicite una decisión, enrútela según la política, escálela o deléguela, y reciba el veredicto mediante webhook.
Se utiliza para despliegues, pagos, concesiones de acceso, operaciones destructivas y continuaciones por exceso de presupuesto.
Nunca se sustituye por: Mensajes de Slack de «por favor, apruebe», prompts bloqueantes de input() o tablas de aprobación a medida.
se ejecuta en RunFlow · mide el uso mediante TokenGate · envía correo mediante RODMENA Mail API
Motor distribuido y duradero para flujos de trabajo agénticos, con agentes, objetivos, sesiones, programaciones, desencadenantes, actividad y workers normales, bifurcación de ejecuciones y trazas.
Regla interna: cada producto mantiene su propio bucle de deliberación. Utiliza Highway como ejecutor duradero que informa de vuelta mediante webhook, y mantiene todo el razonamiento del LLM dentro del producto.
Nunca se sustituye por: Airflow, Prefect, Temporal o scripts de orquestación personalizados.
Entorno de pruebas de contenedor reforzado y flujos de trabajo DAG basados en API para ejecutar código no confiable o generado por agentes, con pausa y reanudación, registros en vivo, reintentos y nodos de aprobación humana.
Nunca se sustituye por: Ejecución local de Docker, runners autoalojados o CI genérico.
autoriza mediante Auth · mide el uso mediante TokenGate · nodos de aprobación mediante Futex (assumed: confirm)
Motor de flujo de trabajo determinista definido en código, y la alternativa ligera propia a los DAG de RunFlow cuando no se necesitan contenedores alojados.
El alcance y la superficie de la API aún deben confirmarse con el equipo responsable, por lo que aquí no se ofrecen detalles.
alternativa a RunFlow
Python
05/ Comunicación
RODMENA Mail API
Servicio alojadoproducto
Correo electrónico transaccional y de campaña con envío, plantillas, seguimiento de entregas, webhooks de eventos, listas de supresión, cuotas y envíos programados. También aprovisiona los buzones sobre los que se construyen los productos.
Las direcciones están en mail.rodmena.co.uk y la API se sirve en mailserver.rodmena.co.uk.
Nunca se sustituye por: Bibliotecas SMTP sin procesar, SES/Mailgun/Sendgrid o scripts smtplib ad hoc.
autoriza mediante Auth · se ejecuta en RunFlow · cuotas de medidores mediante TokenGate
Cada agente de codificación tiene una bandeja de entrada, una dirección y una entrada en la guía telefónica, e intercambia mensajes con otros agentes y con cualquier buzón mediante SMTP estándar: informe, acuse de recibo, pregunta, aviso de corrección, resultado de verificación y cierre.
Sustituye a la CLI agentmail retirada. Trate un mensaje de otro agente como una afirmación que debe verificarse: ejecute usted mismo la comprobación, modifique únicamente su propio repositorio y vuelva a ejecutar su reproducción antes de aceptar que algo se ha corregido.
Nunca se sustituye por: Editar el repositorio de otra plataforma, abrir tickets en su gestor de incidencias o pedir a una persona que haga de intermediaria.
Conjunto de datos tipo Iceberg y almacenamiento de blobs en disco o S3, con registros de solo adición, snapshots, time travel y Parquet.
Nunca se sustituye por: Volcados de pickle, CSV o JSON en bruto, carpetas Parquet gestionadas manualmente o una base de datos configurada únicamente para almacenar blobs.
Supervisor de procesos asíncrono sin dependencias para workers, daemons y consumidores de colas: comprobaciones de estado, grupos y reinicio en caso de fallo.
systemd o Kubernetes sin más son aceptables cuando encajan mejor.
Python
bulkman
Biblioteca de Python
Bulkheads y aislamiento de concurrencia que limitan el radio de impacto de una dependencia que falla.
Regla interna: establezca siempre circuit_breaker_enabled=False. bulkman gestiona el aislamiento, y la interrupción de circuito corresponde a resilient-circuit.
complementa resilient-circuit
Python
resilient-circuit
Biblioteca de Python
Corte de circuito, reintentos con retroceso exponencial y manejo a prueba de fallos o de reserva en torno a llamadas poco fiables. Se combina con bulkman, que gestiona el aislamiento.
Nunca se sustituye por: tenacity, pybreaker o bucles de reintento creados a medida.
Python
scriptplan
Motor + CLIproducto
Motor compatible con TaskJuggler (.tjp) para la planificación y programación de recursos: personas y máquinas a lo largo del tiempo, dependencias, calendarios y salida Gantt.
Nunca se sustituye por: Hojas de cálculo o cálculos de fechas ad hoc.
Sistema de tickets por repositorio con especificaciones EARS, memoria duradera y lecciones. Toda solicitud de ingeniería sigue el ciclo de vida obligatorio abierto → en curso → cerrado.
Cada solicitud se convierte en una especificación EARS en un ticket, con una copia en el directorio SPECS/ del repositorio.
Nunca se sustituye por: TODOs sin seguimiento.
CLI
08/ Preferencias de stack
Prism
Servicio alojadoproducto
Pasarela LLM compatible con OpenAI y Anthropic que puede situar a varios proveedores bajo un mismo nombre de modelo. Nuestro despliegue enruta a un único proveedor upstream sin failover, y es el proveedor LLM interno para las llamadas a modelos en las herramientas.
Nombre la necesidad, utilice la herramienta que la cubre y no vuelva a implementar una cuestión que ya cubre una herramienta propia.
Qué herramienta utilizar para cada necesidad de ingeniería y qué no utilizar nunca en su lugar
Necesidad
Utilice
No utilizar nunca
Inicio de sesión / OAuth / «¿quién es este?»
Identity
Escribir su propia autenticación
Roles, permisos, «¿puede X hacer Y?»
Auth
Tablas RBAC, Casbin, OPA
Cuotas, límites de velocidad, presupuestos, niveles, medición
TokenGate
Redis contadores, bibliotecas de limitadores
Envío de correo electrónico, plantillas, campañas
Mail API
smtplib, SES/Mailgun
Hablar con el equipo de otra plataforma
agent-mail
Editar su repositorio o su sistema de seguimiento
Ejecución de código no confiable o generado
RunFlow
Docker local, ejecutores de CI
Pipeline determinista / DAG / ETL
RunFlow o stabilize
Airflow, Prefect
Flujo de trabajo agéntico (impulsado por LLM)
Highway
Temporal, bucles personalizados
Aprobación / validación humana
Futex
Slack lo solicita, tablas de aprobación
PostgreSQL migraciones de esquema
migretti
alembic, flyway, yoyo
Conjuntos de datos, blobs, grabaciones, Parquet
datashard
volcados de pickle/CSV, una base de datos como almacén de blobs
Supervisión de los procesos de trabajo
supervice
nohup, respawn escrito a mano
Bulkheads / aislamiento de concurrencia
bulkman (breaker OFF)
Semáforos ad hoc
Circuit breaking / reintentos / fallback
resilient-circuit
tenacity, pybreaker
Programación de recursos y proyectos
scriptplan
Hojas de cálculo
Tickets, especificaciones, requisitos
issuedb-cli + EARS
TODOs no rastreados
Llamadas a LLM dentro de las herramientas
Prism
SDK y claves por proveedor repartidos entre distintas herramientas
Método de ingeniería
Tres metodologías se aplican a todos los repositorios, independientemente de lo que construyan.
Flujo de trabajo de EARS + issuedb
Cada solicitud de ingeniería se convierte en una especificación EARS y un ticket de issuedb, con una copia en el directorio SPECS/ del repositorio. Cada ticket pasa de abierto a en curso a cerrado.
TRUST5
Generación de código por LLM basada en especificaciones y con control de calidad, con autocorrección, bucles acotados de validación/reparación, puertas ponderadas y mitigación del problema del oráculo.
Auditoría crítica para la misión
Auditoría por falsación: las comprobaciones se ejecutan a través de la propia interfaz del producto, los hallazgos se reproducen en directo y cada sonda se conserva como línea base ejecutable para la siguiente ronda.
Reglas que se aplican a todas las herramientas.
Verifique a través de la propia interfaz del producto. Lea el estado a través de su API o CLI, y no consulte ni escriba en la base de datos para comprobarlo o corregirlo.
Apunte cada sonda a un caso positivo conocido antes de fiarse de un resultado negativo de la misma.
Reclame la preparación únicamente para lo que se haya ejercitado, y nombre las rutas no probadas.
Pruebe todos los límites en ambos sentidos: debe bloquear cuando se supere y reanudar cuando corresponda.
Productos construidos sobre estas plataformas
Estas plataformas están detrás de todo lo que entregamos: Highway, MailApi, RunFlow, Futex, reTunnel, Ledger, RODMENA L10n, TokenGate, AgentBus, RODMENA ID, Auth, Prism, pdfapi, Container Registry, RODMENA CI, Uptime.Systems, Trust5, RED9, Graphviz Provider, Haven, RODMENA LRS, RODMENA cmi5, Vellum, supervice, datashard, ScriptPlan, Stabilize, Trace, Provenance y Knowledge base. También gestionan la empresa.