Come si integrano le nostre piattaforme. Ogni esigenza/un unico strumento.
RODMENA costruisce i propri prodotti a partire da piccoli servizi ospitati, ciascuno con un unico scopo, e da una serie di librerie interne. Ogni funzione appartiene a un solo strumento, ogni piattaforma ha il proprio team e un bus di posta condiviso li collega.
prodotti, uno in progettazione
13
piattaforme ospitate
8
librerie, motori e CLI
8
bus di posta condiviso
1
Principi di progettazione
Una funzione, uno strumento
L'Authenticazione è Identity, l'autorizzazione è Auth, la misurazione è TokenGate, l'email è Mail API, le approvazioni sono Futex, i container sono RunFlow e i flussi di lavoro agentici sono Highway. I prodotti non reimplementano mai una funzione di cui è già titolare uno strumento interno.
I team si coordinano via e-mail
Ogni piattaforma ha il proprio agente, contesto e repository. I team coordinano tra piattaforme sull'agent-mail bus. Nessun team modifica il repository di un altro team né apre ticket nel suo tracker.
Database distribuiti tra paesi diversi
Ogni servizio ha il proprio database e i database risiedono su host diversi in paesi diversi. Le applicazioni possono essere ridistribuite, i dati no, quindi i due aspetti sono tenuti separati. Ogni database viene replicato in una terza regione ed eseguito il backup fuori sede.
/ Where it runs
Host e regioni
La flotta gestita contiene 22 database di produzione, ciascuno di proprietà di un servizio, su 4 host di database in 3 paesi, e altri 4 vengono eseguiti su un host applicativo. Nessun servizio condivide uno schema con un altro e nessuna singola macchina contiene la piattaforma.
database di produzione, ciascuno di proprietà di un singolo servizio
22
host di database
4
paesi
3
punto di ripristino di minuti sulla flotta gestita, al massimo
≤5
UKRegno Unito
Applicazioni e due host di database
Ospita il livello applicativo e i database per il motore di workflow, il servizio di approvazioni, il bus di messaggi, l'email, il ledger e la piattaforma di attività.
FRFrancia
Host del database
Contiene il piano di identità e accesso, l'autorizzazione, la misurazione e il provider di identità, tenuti separati dai servizi che ne dipendono.
DEGermania
Replica set
Contiene una copia aggiornata continuamente di ogni database, al di fuori delle altre due regioni. Non ha un primario, quindi nessun traffico dipende da essa finché non viene promossa.
Replica continua
Ogni database trasmette in streaming le modifiche a livello di blocco verso uno standby situato al di fuori di entrambe le regioni primarie. La replica è asincrona, quindi una replica non può rallentare o bloccare il servizio che la precede.
Backup off-site
Gli archivi vengono inviati in modo continuo all'object storage in una struttura separata, crittografati prima di lasciare l'host e ripristinabili a qualsiasi punto entro il periodo di conservazione. I ripristini vengono testati end to end.
Tre fattori su ogni connessione
Nessun database accetta una connessione di rete con la sola password. Ogni connessione richiede cifratura in transito, un certificato client emesso da un'autorità privata e una password. Ogni servizio è limitato al proprio database.
Repliche e backup
Un'istruzione errata raggiunge ogni replica in pochi istanti. Le repliche proteggono dalla perdita dell'hardware, mentre l'archivio protegge dalla perdita dei dati.
La mappa ha otto livelli e un bus, e ogni esigenza compare una sola volta. I prodotti si trovano in alto e lo stack in basso. Tutto ciò di cui un prodotto ha bisogno è a un solo passaggio di distanza.
23 nodi · 27 relazioni documentate · 1 presunto
Scorra la mappa lateralmente. Ogni nodo ha anche una scheda di seguito.
Esplora
Utilizzo della mappa
Selezioni un nodo o il bus per evidenziarne le relazioni e vedere ciò che possiede, a cosa si connette e con cosa non deve mai essere sostituito. Le schede sottostanti riportano gli stessi fatti.
relazione documentata
presunto: da confermare prima di farvi affidamento
il bus di posta degli agenti
un prodotto (bordo sfumato)
Non rappresentati, in quanto si applicano ovunque:
Ogni prodotto si autentica con Identity e autorizza con Auth.
Ogni team di piattaforma si coordina tramite l'agent-mail bus.
Ogni repository è tracciato in issuedb-cli, con specifiche EARS.
Prodottoin progettazione
RED9
11 in uscita
Piattaforma di forza lavoro di agenti in cui ogni chat è un'attività durevole e autonoma con un indirizzo e-mail.
Si basa sull'intero stack: Identity e Auth per l'accesso, TokenGate per i budget, Mail API per le caselle di posta delle attività, RunFlow per le sandbox, Highway come esecutore durevole, Futex per le approvazioni e migretti per lo schema, su Python, PostgreSQL e Redis.
Libro mastro a partita doppia per denaro, crediti e scorte. Le scritture sono bilanciate, permanenti e dimostrabili, e il database applica le regole.
Utilizza Auth per le credenziali, TokenGate per la misurazione e migretti per lo schema, su Python e PostgreSQL. È stato sottoposto a verifica attraverso quattro gate interni e ri-verifiche adversarial, e i risultati sono pubblicati.
Mai sostituito con: Un segreto in grado di generare una credenziale che accetterebbe, oppure un percorso di modifica o cancellazione sul journal.
Non per: Quote o misurazione (utilizzare TokenGate), metriche non conservate o stato del flusso di lavoro.
Conteggio, limiti massimi e limiti di frequenza per utente, organizzazione o tenant: budget di token, registri di utilizzo, livelli di piano, flussi di riserva/impegno e avvisi di soglia e superamento.
Regola interna: ogni limite viene testato in entrambe le direzioni. Deve bloccare quando viene superato e riprendere quando viene ripristinato.
Mai sostituito con: Contatori INCR di Redis, tabelle di utilizzo, middleware token-bucket o librerie di limitazione.
Non per: Authorizzazione (utilizzare Auth) o protezione DDoS all'edge.
Approvazioni umane durevoli guidate da policy. Richiedere una decisione, instradarla secondo la policy, escalarla o delegarla e ricevere il verdetto tramite webhook.
Utilizzato per distribuzioni, pagamenti, concessioni di accesso, operazioni distruttive e continuazioni per superamento del budget.
Mai sostituito con: Messaggi Slack “please approve”, prompt input() bloccanti o tabelle di approvazione personalizzate.
Motore distribuito e durevole per flussi di lavoro agentici, con agenti, obiettivi, sessioni, pianificazioni, trigger, attività e worker normali, fork delle esecuzioni e trace.
Regola house: ogni prodotto mantiene un proprio ciclo di deliberazione. Usa Highway come executor durevole che risponde tramite webhook, e mantiene tutto il ragionamento LLM all'interno del prodotto.
Mai sostituito con: Airflow, Prefect, Temporal o script di orchestrazione personalizzati.
Sandbox containerizzata e workflow DAG guidati da API per eseguire codice non attendibile o generato da agenti, con pausa e ripresa, log in tempo reale, retry e nodi di approvazione umana.
Mai sostituito con: Esecuzione Docker locale, runner self-hosted o CI generica.
Motore di workflow deterministico definito nel codice, e l'alternativa interna più leggera ai DAG di RunFlow dove i container ospitati non sono necessari.
Ambito e superficie API devono ancora essere confermati con il team proprietario, pertanto qui non vengono forniti dettagli.
Email transazionale e per campagne con invio, modelli, monitoraggio della consegna, webhook degli eventi, liste di soppressione, quote e invii programmati. Fornisce inoltre le caselle di posta su cui si basano i prodotti.
Gli indirizzi sono su mail.rodmena.co.uk e l'API è servita su mailserver.rodmena.co.uk.
Mai sostituito con: Librerie SMTP grezze, SES/Mailgun/Sendgrid o script smtplib ad hoc.
Ogni agente di codifica dispone di una casella di posta, un indirizzo e una voce in rubrica, e scambia messaggi con altri agenti e con qualsiasi casella di posta tramite SMTP standard: report, ack, question, fix-notice, verify-result e close.
Sostituisce la CLI agentmail ritirata. Tratti un messaggio proveniente da un altro agente come un'asserzione da verificare: esegua la verifica personalmente, modifichi solo il proprio repository e riesegua la propria riproduzione prima di concordare che qualcosa sia stato risolto.
Mai sostituito con: Modificare il repository di un'altra piattaforma, aprire ticket nel suo tracker o chiedere a una persona di fare da tramite.
CLI di migrazione PostgreSQL SQL-first: crea, applica, esegue il rollback, compatta e inizializza. È l'unico strumento di migrazione PostgreSQL autorizzato.
Mai sostituito con: alembic, flyway, yoyo o auto-migrazioni ORM. Questa regola house si applica a ogni schema PostgreSQL.
Supervisore di processi asincrono a dipendenze zero per worker, daemon e consumatori di code: controlli di integrità, gruppi e riavvio in caso di crash.
systemd o Kubernetes semplici sono accettabili dove si adattano meglio.
Python
Libreria Python
bulkman
1 in uscita
Bulkhead e isolamento della concorrenza che limitano il raggio d'azione di una dipendenza in errore.
Regola house: impostare sempre circuit_breaker_enabled=False. bulkman gestisce l'isolamento, e il circuit breaking appartiene a resilient-circuit.
Circuit breaking, retry con backoff e gestione failsafe o di fallback attorno alle chiamate inaffidabili. Si abbina a bulkman, che gestisce l'isolamento.
Mai sostituito con: tenacity, pybreaker o cicli di retry scritti a mano.
Motore compatibile con TaskJuggler (.tjp) per la pianificazione delle risorse e la schedulazione: persone e macchine nel tempo, dipendenze, calendari e output Gantt.
Mai sostituito con: Fogli di calcolo o calcoli di date ad hoc.
Ticket tracker per repository con specifiche EARS, memoria durevole e lezioni apprese. Ogni richiesta di engineering segue il ciclo di vita obbligatorio open → in-progress → closed.
Ogni richiesta diventa una specifica EARS in un ticket, con una copia nella directory SPECS/ del repository.
Gateway LLM compatibile con OpenAI e Anthropic che può porre più fornitori dietro un unico nome di modello. La nostra distribuzione instrada verso un singolo provider upstream senza failover ed è il provider LLM di riferimento per le chiamate ai modelli negli strumenti.
Ciò che ogni strumento possiede, quando utilizzarlo e con cosa non deve mai essere sostituito.
01/ Prodotti
RED9
Prodottoin progettazione
Piattaforma di forza lavoro di agenti in cui ogni chat è un'attività durevole e autonoma con un indirizzo e-mail.
Si basa sull'intero stack: Identity e Auth per l'accesso, TokenGate per i budget, Mail API per le caselle di posta delle attività, RunFlow per le sandbox, Highway come esecutore durevole, Futex per le approvazioni e migretti per lo schema, su Python, PostgreSQL e Redis.
si autentica con Identity · autorizza tramite Auth · misura i budget tramite TokenGate · caselle di posta delle attività tramite RODMENA Mail API · esecuzione in sandbox su RunFlow · delega i flussi di lavoro a Highway · approvazioni umane tramite Futex · migra lo schema con migretti · basato su PostgreSQL · basato su Redis · modelli predefiniti tramite Prism
reTunnel
Prodottobeta
Piattaforma di ingresso unificata gratuita e open source che espone server locali dietro NAT e firewall a Internet pubblico tramite tunnel sicuri.
Standalone: un client Python e una CLI con licenza MIT, con un server self-hostable. Non dipende da nessun'altra piattaforma interna.
Libro mastro a partita doppia per denaro, crediti e scorte. Le scritture sono bilanciate, permanenti e dimostrabili, e il database applica le regole.
Utilizza Auth per le credenziali, TokenGate per la misurazione e migretti per lo schema, su Python e PostgreSQL. È stato sottoposto a verifica attraverso quattro gate interni e ri-verifiche adversarial, e i risultati sono pubblicati.
Mai sostituito con: Un segreto in grado di generare una credenziale che accetterebbe, oppure un percorso di modifica o cancellazione sul journal.
Non per: Quote o misurazione (utilizzare TokenGate), metriche non conservate o stato del flusso di lavoro.
Conteggio, limiti massimi e limiti di frequenza per utente, organizzazione o tenant: budget di token, registri di utilizzo, livelli di piano, flussi di riserva/impegno e avvisi di soglia e superamento.
Regola interna: ogni limite viene testato in entrambe le direzioni. Deve bloccare quando viene superato e riprendere quando viene ripristinato.
Mai sostituito con: Contatori INCR di Redis, tabelle di utilizzo, middleware token-bucket o librerie di limitazione.
Non per: Authorizzazione (utilizzare Auth) o protezione DDoS all'edge.
Approvazioni umane durevoli guidate da policy. Richiedere una decisione, instradarla secondo la policy, escalarla o delegarla e ricevere il verdetto tramite webhook.
Utilizzato per distribuzioni, pagamenti, concessioni di accesso, operazioni distruttive e continuazioni per superamento del budget.
Mai sostituito con: Messaggi Slack “please approve”, prompt input() bloccanti o tabelle di approvazione personalizzate.
esegue su RunFlow · misura l'utilizzo tramite TokenGate · invia posta tramite RODMENA Mail API
Motore distribuito e durevole per flussi di lavoro agentici, con agenti, obiettivi, sessioni, pianificazioni, trigger, attività e worker normali, fork delle esecuzioni e trace.
Regola house: ogni prodotto mantiene un proprio ciclo di deliberazione. Usa Highway come executor durevole che risponde tramite webhook, e mantiene tutto il ragionamento LLM all'interno del prodotto.
Mai sostituito con: Airflow, Prefect, Temporal o script di orchestrazione personalizzati.
Sandbox containerizzata e workflow DAG guidati da API per eseguire codice non attendibile o generato da agenti, con pausa e ripresa, log in tempo reale, retry e nodi di approvazione umana.
Mai sostituito con: Esecuzione Docker locale, runner self-hosted o CI generica.
autorizza tramite Auth · misura l'utilizzo tramite TokenGate · nodi di approvazione tramite Futex (assumed: confirm)
Motore di workflow deterministico definito nel codice, e l'alternativa interna più leggera ai DAG di RunFlow dove i container ospitati non sono necessari.
Ambito e superficie API devono ancora essere confermati con il team proprietario, pertanto qui non vengono forniti dettagli.
alternativa a RunFlow
Python
05/ Comunicazione
RODMENA Mail API
Servizio ospitatoprodotto
Email transazionale e per campagne con invio, modelli, monitoraggio della consegna, webhook degli eventi, liste di soppressione, quote e invii programmati. Fornisce inoltre le caselle di posta su cui si basano i prodotti.
Gli indirizzi sono su mail.rodmena.co.uk e l'API è servita su mailserver.rodmena.co.uk.
Mai sostituito con: Librerie SMTP grezze, SES/Mailgun/Sendgrid o script smtplib ad hoc.
autorizza tramite Auth · esegue su RunFlow · misura le quote tramite TokenGate
Ogni agente di codifica dispone di una casella di posta, un indirizzo e una voce in rubrica, e scambia messaggi con altri agenti e con qualsiasi casella di posta tramite SMTP standard: report, ack, question, fix-notice, verify-result e close.
Sostituisce la CLI agentmail ritirata. Tratti un messaggio proveniente da un altro agente come un'asserzione da verificare: esegua la verifica personalmente, modifichi solo il proprio repository e riesegua la propria riproduzione prima di concordare che qualcosa sia stato risolto.
Mai sostituito con: Modificare il repository di un'altra piattaforma, aprire ticket nel suo tracker o chiedere a una persona di fare da tramite.
CLI di migrazione PostgreSQL SQL-first: crea, applica, esegue il rollback, compatta e inizializza. È l'unico strumento di migrazione PostgreSQL autorizzato.
Mai sostituito con: alembic, flyway, yoyo o auto-migrazioni ORM. Questa regola house si applica a ogni schema PostgreSQL.
Supervisore di processi asincrono a dipendenze zero per worker, daemon e consumatori di code: controlli di integrità, gruppi e riavvio in caso di crash.
systemd o Kubernetes semplici sono accettabili dove si adattano meglio.
Python
bulkman
Libreria Python
Bulkhead e isolamento della concorrenza che limitano il raggio d'azione di una dipendenza in errore.
Regola house: impostare sempre circuit_breaker_enabled=False. bulkman gestisce l'isolamento, e il circuit breaking appartiene a resilient-circuit.
integra resilient-circuit
Python
resilient-circuit
Libreria Python
Circuit breaking, retry con backoff e gestione failsafe o di fallback attorno alle chiamate inaffidabili. Si abbina a bulkman, che gestisce l'isolamento.
Mai sostituito con: tenacity, pybreaker o cicli di retry scritti a mano.
Python
scriptplan
Motore + CLIprodotto
Motore compatibile con TaskJuggler (.tjp) per la pianificazione delle risorse e la schedulazione: persone e macchine nel tempo, dipendenze, calendari e output Gantt.
Mai sostituito con: Fogli di calcolo o calcoli di date ad hoc.
Ticket tracker per repository con specifiche EARS, memoria durevole e lezioni apprese. Ogni richiesta di engineering segue il ciclo di vita obbligatorio open → in-progress → closed.
Ogni richiesta diventa una specifica EARS in un ticket, con una copia nella directory SPECS/ del repository.
Mai sostituito con: TODO non tracciati.
CLI
08/ Preferenze dello stack
Prism
Servizio ospitatoprodotto
Gateway LLM compatibile con OpenAI e Anthropic che può porre più fornitori dietro un unico nome di modello. La nostra distribuzione instrada verso un singolo provider upstream senza failover ed è il provider LLM di riferimento per le chiamate ai modelli negli strumenti.
Individui il bisogno, utilizzi lo strumento che lo possiede e non reimplementi una funzione già coperta da uno strumento interno.
Quale strumento utilizzare per ogni esigenza di ingegneria e cosa non usare mai al suo posto
Esigenza
Utilizzi
Non utilizzare mai
Login / OAuth / “chi è?”
Identity
Scrivere la propria autenticazione
Ruoli, autorizzazioni, “X può fare Y?”
Auth
Tabelle RBAC, Casbin, OPA
Quote, limiti di frequenza, budget, livelli, misurazione
TokenGate
Contatori Redis, librerie di limitazione
Invio di email, template, campagne
Mail API
smtplib, SES/Mailgun
Comunicare con il team di un'altra piattaforma
agent-mail
Modifica del proprio repository o tracker
Esecuzione di codice non attendibile o generato
RunFlow
Docker locale, runner CI
Pipeline deterministica / DAG / ETL
RunFlow o stabilize
Airflow, Prefect
Flusso di lavoro agentico (guidato da LLM)
Highway
Temporal, cicli personalizzati
Approvazione umana / sign-off
Futex
Richieste su Slack, tabelle di approvazione
Migrazioni dello schema PostgreSQL
migretti
alembic, flyway, yoyo
Dataset, blob, registrazioni, Parquet
datashard
dump pickle/CSV, un DB come blob store
Supervisione dei processi worker
supervice
nohup, respawn scritto a mano
Bulkhead / isolamento della concorrenza
bulkman (breaker OFF)
Semafori ad hoc
Circuit breaking / retry / fallback
resilient-circuit
tenacity, pybreaker
Pianificazione di risorse / progetti
scriptplan
Fogli di calcolo
Ticket, specifiche, requisiti
issuedb-cli + EARS
TODO non tracciati
chiamate LLM all'interno degli strumenti
Prism
SDK e chiavi specifici per fornitore distribuiti tra gli strumenti
Metodo di ingegneria
Tre metodologie si applicano a ogni repository, qualunque cosa costruisca.
Flusso di lavoro EARS + issuedb
Ogni richiesta di engineering diventa una specifica EARS e un ticket issuedb, con una copia nella directory SPECS/ del repository. Ogni ticket passa da aperto a in corso a chiuso.
TRUST5
Generazione di codice LLM guidata da specifiche e con controllo di qualità, con auto-riparazione, cicli di validazione/riparazione limitati, gate ponderati e mitigazione del problema dell'Oracolo.
Audit mission-critical
Audit per falsificazione: i controlli vengono eseguiti tramite l'interfaccia del prodotto stesso, i risultati sono riprodotti dal vivo e ogni prova è conservata come baseline eseguibile per il ciclo successivo.
Regole che si applicano a ogni strumento.
Verifichi tramite l'interfaccia del prodotto stesso. Legga lo stato tramite la sua API o CLI e non interroghi o scriva nel database per verificarlo o correggerlo.
Prima di fidarsi di un risultato negativo di una prova, verifichi che ogni prova punti a un caso positivo noto.
Dichiarare la readiness solo per ciò che è stato esercitato e indicare i percorsi non testati.
Verifichi ogni limite in entrambe le direzioni: deve bloccare quando viene superato e riprendere quando deve.
Prodotti basati su queste piattaforme
Queste piattaforme sono alla base di tutto ciò che forniamo: 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 e Knowledge base. Gestiscono anche l'azienda.