Ir al contenido

Ecosistema

Cómo encajan nuestras plataformas.
Cada cometidouna herramienta.

RODMENA desarrolla sus productos a partir de un conjunto de librerías internas y de pequeños servicios alojados con un único propósito cada uno, y asigna cada aspecto a una sola herramienta. Las plataformas cuentan con sus propios equipos y se comunican a través de un bus de correo compartido.

productos
13
plataformas alojadas
8
bibliotecas, motores y CLI
8
bus de correo compartido
1

Principios de diseño

  • Un cometido, una herramienta

    La autenticació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 un cometido 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 de correo de agentes. Ningún equipo edita el repositorio de otro equipo ni abre tickets en su gestor.

  • Bases de datos distribuidas por países

    Los servicios cuentan con sus propias bases de datos, en diferentes hosts y en diferentes países. Una aplicación se puede volver a desplegar, pero sus datos no, y mantenemos ambos elementos separados. Todas las bases de datos se replican en una tercera región y se realizan copias de seguridad de las mismas fuera de las instalaciones.

Where it runs

Hosts y regiones

El parque gestionado alberga 22 bases de datos de producción, cada una propiedad de un servicio, en 4 hosts de bases de datos repartidos en 3 países, y 4 más se ejecutan en un host de aplicaciones. No hay dos servicios que compartan un esquema, y la plataforma no depende de ninguna máquina individual.

bases de datos de producción, cada una propiedad de un único servicio
22
hosts de base de datos
4
países
3
minutos de punto de recuperación como máximo en la flota gestionada
≤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 aloja ninguna base de datos primaria, por lo que ningún tráfico depende de ella hasta que se promueva.

  • Replicación continua

    Todas las bases de datos transmiten cambios a nivel de bloque a una instancia en espera fuera de ambas regiones principales. Dado que la replicación es asíncrona, una réplica no puede ralentizar ni bloquear el servicio que tiene delante.

  • Copias de seguridad externas

    Los archivos de copia de seguridad 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. Una conexión requiere cifrado en tránsito, un certificado de cliente emitido por una entidad emisora privada y una contraseña, y el alcance de los servicios está restringido a sus propias bases de datos.

  • Réplicas y copias de seguridad

    Una instrucción errónea llega a todas las réplicas en cuestión de instantes. Las réplicas protegen contra la pérdida de hardware, y el archivo protege contra la pérdida de datos.

Verificado el 2026-10-05. Lea la topología completa

Topología

Mapa de la plataforma

En las ocho capas y el bus único del mapa, un ámbito de interés aparece una sola vez. Los productos se sitúan en la parte superior, el stack en la inferior y todo lo que necesita un producto está a un solo salto de distancia.

23 nodos · 27 relaciones documentadas · 1 supuesto

01/PRODUCTOS02/IDENTIDAD Y ACCESO03/GOBERNANZA04/ORQUESTACIÓN Y EJECUCIÓN05/COMUNICACIÓN06/DATOS Y BIBLIOTECAS07/PROCESO DE DESARROLLO08/PREFERENCIAS DE STACK TECNOLÓGICOBUS DE CORREO DE AGENTESreport · ack · fix-notice · verify-result · closeRED9Producto · a peticiónreTunnelProductoLedgerProducto · gratuito por ahoraIdentityServicio alojadoExternal IdPsGoogle · GitHub · AppleAuthServicio alojadoTokenGateServicio alojadoFutexServicio alojadoHighwayServicio alojadoRunFlowServicio alojadostabilizeMotor de flujo de trabajo · parcialRODMENA Mail APIServicio alojadodatashardBiblioteca de PythonmigrettiCLIsuperviceBiblioteca de PythonbulkmanBiblioteca de Pythonresilient-circuitBiblioteca de PythonscriptplanMotor + CLIissuedb-cli + EARSCLIPostgreSQLExternoRedisExternoPrismServicio alojado

Desplace el mapa horizontalmente. Cada nodo también tiene una tarjeta debajo.

Explorar

Uso del mapa

Seleccione un nodo o el bus para destacar sus relaciones y ver qué posee, con qué se conecta y por qué no debe sustituirse nunca. Las tarjetas que figuran a continuación también enumeran estos 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 autentican con Identity y autorizan con Auth.
  • Todos los equipos de plataforma se coordinan a través del bus de correo de agentes.
  • Cada repositorio se registra en issuedb-cli, con especificaciones EARS.

Capas

Herramientas por capa

Qué posee cada herramienta, cuándo utilizarla y con qué no debe sustituirse nunca.

01 Productos

  • RED9

    Productoa petición

    Plataforma de equipos de agentes en la que cada chat es una tarea autónoma y duradera con una dirección de correo electrónico.

    Aprovecha todo el stack. Identity y Auth proporcionan acceso, TokenGate presupuestos, buzones de tareas de Mail API y RunFlow entornos aislados (sandboxes). Highway es el ejecutor duradero, Futex gestiona las aprobaciones y migretti 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

    Producto

    Plataforma de entrada unificada, gratuita y de código abierto que expone servidores locales situados detrás de NAT y cortafuegos a Internet mediante túneles seguros.

    Un cliente de Python independiente y CLI, con licencia MIT, que incluye un servidor autohospedable y no depende de ninguna otra plataforma propia.

    CLIHTTP/TCP Visitar

  • Ledger

    Productogratuito por ahora

    Ledger de partida doble para dinero, créditos y existencias. Sus asientos están cuadriculados, son permanentes y demostrables conforme a las reglas que aplica la base de datos.

    Desarrollado en Python y PostgreSQL, utiliza Auth para credenciales, TokenGate para medición y migretti para el esquema. Superó cuatro controles de auditoría interna y reauditorías adversarias, cuyos resultados están publicados.

    Nunca se sustituye por: Un secreto que puede emitir una credencial que aceptaría, o una vía para editar o eliminar asientos del diario.

    No indicado para: Cuotas o medición (utilice TokenGate), métricas no conservadas o estado del flujo de trabajo.

    REST /v1OpenAPI 3.1llms.txt Visitar Documentación

02 Identidad y acceso

  • Identity

    Servicio alojadoproducto

    Proveedor de OAuth que gestiona el inicio de sesión para personas y servicios. El acceso a todos nuestros productos se realiza a través de Identity.

    Identity no depende de ninguna otra plataforma interna. 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.

    federa el inicio de sesión con External IdPs

    OAuth2REST Visitar Documentación

  • External IdPs

    Google · GitHub · Apple

    Proveedores de identidad públicos, como Google, GitHub y Apple, con los que Identity federa el inicio de sesión. Identity no depende de ningún otro servicio.

  • 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.

    RESTPython Visitar

03 Gobernanza

  • TokenGate

    Servicio alojadoproducto

    Recuento, límites máximos y límites de frecuencia por usuario, organización o tenant. Cubre presupuestos de tokens, registros de uso, niveles de planes, flujos de reserva/confirmación (commit), y alertas de umbrales y excesos.

    Por norma interna, los límites máximos se prueban en ambas direcciones. Un límite debe bloquear cuando se supera y reanudarse cuando se repone.

    Nunca se sustituye por: Contadores INCR de Redis, tablas de uso, middleware de token-bucket o bibliotecas de limitación.

    No indicado para: Autorización (use Auth) o protección DDoS en el perímetro de red.

    autoriza mediante Auth

    REST Visitar Referencia para agentes

  • Futex

    Servicio alojadoproducto

    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

    RESTMCPWebhooks Visitar

04 Orquestación y ejecución

  • Highway

    Servicio alojadoproducto

    Motor distribuido y duradero para flujos de trabajo basados en agentes. Proporciona agentes, objetivos, sesiones, programaciones, activadores, actividad y workers estándar, bifurcación de ejecuciones y trazas.

    Por norma interna, cada producto mantiene su propio bucle de deliberación. Utiliza Highway como ejecutor duradero que envía notificaciones 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.

    autoriza mediante Auth · complementa RunFlow

    RESTMCP Visitar Endpoint de MCP

  • RunFlow

    Servicio alojadoproducto

    Sandbox de contenedores reforzado y flujos de trabajo DAG basados en API para ejecutar código no fiable o generado por agentes. Las ejecuciones se pueden pausar y reanudar, y disponen de registros en tiempo real, reintentos y nodos de aprobación humana.

    Nunca se sustituye por: Ejecución local de Docker, ejecutores autoalojados o CI genérica.

    autoriza mediante Auth · mide el uso mediante TokenGate · nodos de aprobación mediante Futex (asumido: confirmar)

    REST Visitar

  • stabilize

    Motor de flujo de trabajoparcial

    Motor de flujos de trabajo determinista definido en código. Es la alternativa propia más ligera a los DAG de RunFlow cuando no se necesitan contenedores alojados.

    No facilitamos detalles aquí porque el alcance y la superficie de la API aún están pendientes de confirmación con el equipo responsable.

    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 de bajo nivel, SES/Mailgun/Sendgrid o scripts smtplib ad hoc.

    autoriza mediante Auth · se ejecuta en RunFlow · mide las cuotas mediante TokenGate

    RESTMCPWebhooks Visitar

  • AgentBus

    Bus de mensajesproducto

    Un agente de programación obtiene una bandeja de entrada, una dirección y una entrada en la libreta de direcciones, e intercambia mensajes con otros agentes y con cualquier buzón a través de SMTP estándar. Los tipos de mensaje son report, ack, question, fix-notice, verify-result y close.

    Sustituye a la CLI retirada agentmail. Considere un mensaje de otro agente como una afirmación y ejecute la comprobación usted mismo. Modifique únicamente su propio repositorio y vuelva a ejecutar su reproducción antes de aceptar que algo se ha solucionado.

    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.

    transportado por RODMENA Mail API

    MCPCLIPython SDK Visitar Referencia para agentes

06 Datos y bibliotecas

  • datashard

    Biblioteca de Python

    Almacenamiento de blobs y conjuntos de datos tipo Iceberg en disco o S3 con registros de solo anexión, instantáneas, 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.

    Python Documentación

  • migretti

    CLI

    CLI de migraciones de PostgreSQL centrada en SQL: crear, aplicar, revertir, consolidar (squash) y cargar datos iniciales (seed). Es la única herramienta de migración de PostgreSQL autorizada.

    Nunca se sustituye por: alembic, flyway, yoyo o migraciones automáticas del ORM. Esta regla interna se aplica a cada esquema de PostgreSQL.

    se dirige a PostgreSQL

    CLI GitHub

  • supervice

    Biblioteca de Python

    Supervisor de procesos asíncronos sin dependencias para workers, daemons y consumidores de colas. Ejecuta comprobaciones de estado, gestiona grupos y reinicia un proceso cuando falla.

    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.

    La norma interna es establecer 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

    Circuit breaking, reintentos con backoff y gestión failsafe o fallback en llamadas no fiables. Combínelo con bulkman para 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. Gestiona personas y máquinas a lo largo del tiempo, dependencias y calendarios, y genera resultados en diagrama de Gantt.

    Nunca se sustituye por: Hojas de cálculo o cálculos de fechas ad hoc.

    CLI GitHub

07 Proceso de desarrollo

  • issuedb-cli + EARS

    CLI

    Seguimiento de tickets por repositorio con especificaciones EARS, memoria duradera y lecciones aprendidas. Todas las solicitudes de ingeniería siguen el ciclo de vida obligatorio abierto → en curso → cerrado.

    Todas las solicitudes de ingeniería se convierten en una especificación EARS en un ticket y en una copia dentro del 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 de origen, sin conmutación por error, y es el proveedor LLM interno para las llamadas a modelos en las herramientas.

    REST Referencia de API

  • PostgreSQL Almacén relacional preferido.
  • Redis Preferido para caché, colas y distribución.

Elección de una herramienta

Nombre la necesidad, utilice la herramienta que la cubre y no vuelva a implementar un cometido que ya cubre una herramienta propia.

Qué herramienta utilizar para cada necesidad de ingeniería y qué no utilizar nunca en su lugar
NecesidadUtilizarNo utilizar nunca
Inicio de sesión / OAuth / «¿quién es?»IdentityEscribir su propia autenticación
Roles, permisos, «¿puede X hacer Y?»AuthTablas RBAC, Casbin, OPA
Cuotas, límites de frecuencia, presupuestos, niveles, mediciónTokenGateContadores de Redis, bibliotecas de limitadores
Envío de correo electrónico, plantillas, campañasMail APIsmtplib, SES/Mailgun
Hablar con el equipo de otra plataformaagent-mailEditar su repositorio o su sistema de seguimiento
Ejecución de código no confiable o generadoRunFlowDocker local, ejecutores de CI
Canalización determinista / DAG / ETLRunFlow o stabilizeAirflow, Prefect
Flujo de trabajo agéntico (impulsado por LLM)HighwayTemporal, bucles personalizados
Aprobación / validación humanaFutexPeticiones por Slack, tablas de aprobación
Migraciones de esquema de PostgreSQLmigrettialembic, flyway, yoyo
Conjuntos de datos, blobs, grabaciones, Parquetdatashardvolcados de pickle/CSV, una base de datos como almacén de blobs
Supervisión de los procesos de trabajosupervicenohup, relanzamiento escrito a mano
Compartimentos estancos (bulkheads) / aislamiento de concurrenciabulkman (disyuntor desactivado)Semáforos ad hoc
Corte de circuito / reintentos / alternativa de respaldoresilient-circuittenacity, pybreaker
Programación de recursos y proyectosscriptplanHojas de cálculo
Tickets, especificaciones, requisitosissuedb-cli + EARSTODOs no rastreados
Llamadas a LLM dentro de las herramientasPrismSDK 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

    Todas las solicitudes de ingeniería se convierten en una especificación EARS y en un ticket de issuedb, y la especificación se copia en el directorio SPECS/ del repositorio. Los tickets pasan de abiertos («open») a en curso («in progress») y a cerrados («closed»).

  • 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 de calidad ponderadas y mitigación del problema del oráculo.

  • Auditoría de sistemas críticos

    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 que dé.
  • Declare que algo está listo solo si se ha probado, y nombre las rutas no probadas.
  • Pruebe cada límite en ambos sentidos: debe bloquear cuando se supere y dejar que el trabajo se reanude 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, Steward, Tollgate, Haven, RODMENA LRS, RODMENA cmi5, Vellum, supervice, datashard, ScriptPlan, Stabilize, Trace, Provenance y Knowledge base. La empresa también funciona con ellas.