One machine.
Every concern/one tool.

Rodmena builds products out of small, single-purpose hosted services plus a set of house libraries — every concern owned by exactly one tool, every platform run by its own team, all of it glued together by one shared mail bus.

6Products
7Hosted platforms
8Libraries, engines & CLIs
1Shared mail bus

Design principles

One concern, one tool

Authentication is Identity, authorization is Auth, metering is TokenGate, email is Mail API, approvals are Futex, containers are RunFlow, agentic workflows are Highway. Products never re-implement a concern a house tool already owns.

Teams talk over mail, not over repos

Every platform has its own agent, context and repository. Cross-platform coordination happens on the agent-mail bus — never by editing another team’s repo or filing tickets in their tracker.

The live map

Eight layers, one bus, no duplicated concern. Products sit on top, the stack underneath — and everything a product needs is one hop away. Select any node to explore it.

22 nodes · 27 documented relations · 1 assumed

01 / PRODUCTS02 / IDENTITY & ACCESS03 / GOVERNANCE04 / ORCHESTRATION & EXECUTION05 / COMMUNICATION06 / DATA & LIBRARIES07 / DEV PROCESS08 / STACK PREFERENCESAGENT-MAIL BUSevery platform team coordinates here — report · ack · fix-notice · verify-result · closeRED9PRODUCT · IN DESIGNreTunnelPRODUCT · BETAIdentityHOSTED SERVICEExternal IdPsGOOGLE · GITHUB · APPLEAuthHOSTED SERVICETokenGateHOSTED SERVICEFutexHOSTED SERVICE · PRODUCTHighwayHOSTED SERVICE · PRODUCTRunFlowHOSTED SERVICE · PRODUCTstabilizeWORKFLOW ENGINE · DETAILS PARTIALRodmena Mail APIHOSTED SERVICE · PRODUCTdatashardPYTHON LIBRARYmigrettiCLIsupervicePYTHON LIBRARYbulkmanPYTHON LIBRARYresilient-circuitPYTHON LIBRARYscriptplanENGINE + CLIissuedb-cli + EARSCLIPostgreSQLEXTERNALRedisEXTERNALOllama CloudEXTERNAL

Explore

The whole machine, one map

Hover or select any node — or the bus itself — to light up its relations and see what it owns, what it talks to, and what it must never be replaced with.

  • documented relation
  • assumed — confirm before relying on it
  • the agent-mail bus

Not drawn — they apply everywhere:

  • Every product authenticates with Identity and authorizes via Auth.
  • Every platform team coordinates over the agent-mail bus.
  • Every repository is tracked by issuedb-cli with EARS specs.

Every tool, its concern

What each piece owns, when to reach for it — and what it must never be replaced with.

01/ Products

RED9

Productin design

Agent-workforce platform — every chat is a durable, autonomous, email-addressable task.

Composes the full stack: Identity + Auth for access, TokenGate for budgets, Mail API for task mailboxes, RunFlow for sandboxes, Highway as durable executor, Futex for approvals, migretti for schema — over Python, PostgreSQL and Redis.

authenticates with Identity · authorizes via Auth · meters budgets via TokenGate · task mailboxes via Rodmena Mail API · sandboxed execution on RunFlow · delegates workflows to Highway · human approvals via Futex · migrates schema with migretti · built on PostgreSQL · built on Redis · default models via Ollama Cloud

reTunnel

Productbeta

Free, open-source unified ingress platform — expose local servers behind NATs and firewalls to the public internet over secure tunnels.

Standalone by design: MIT-licensed Python client and CLI with a self-hostable server — it depends on no other house platform.

CLIHTTP/TCPVisit

02/ Identity & Access

Identity

Hosted service

OAuth provider — who you are. Login for humans and services. Every product’s sign-in goes through Identity.

Standalone by design: Identity depends on no other house platform — sign-in federates out to public identity providers (Google, GitHub, Apple, …).

Not for: Permissions or roles — that is Auth. The pair is deliberately split: Identity authenticates, Auth authorizes.

federates sign-in to External IdPs

OAuth2RESTVisit Docs

External IdPs

Google · GitHub · Apple

The public identity providers Identity federates sign-in to — Google, GitHub, Apple and friends. The only upstream Identity has.

Auth

Hosted service

Hosted RBAC — roles, permissions, memberships, “can user X do Y” checks. Products define their roles here, not in their own tables.

Ships as the PyPI package “auth”.

Never replaced with: Hand-rolled users/roles/permissions tables, Casbin, OPA, or an RBAC library.

Not for: Login, sessions, passwords, JWT issuance — authentication belongs to Identity.

RESTPythonVisit

03/ Governance

TokenGate

Hosted service

Anything counted, capped or rate-limited per user, org or tenant: token budgets, usage ledgers, plan tiers, reserve/commit flows, threshold and overage alerts.

House rule: every cap is tested in both directions — it blocks when exceeded and resumes when replenished.

Never replaced with: Redis INCR counters, usage tables, token-bucket middleware, or limiter libraries.

Not for: Authorization (that is Auth) or edge DDoS shielding.

authorizes via Auth

Futex

Hosted serviceproduct

Durable, policy-driven human approvals — request a decision, route it by policy, escalate or delegate, collect the verdict via webhook.

Used for deployments, payments, access grants, destructive operations and budget-overrun continuations.

Never replaced with: Slack “please approve” messages, blocking input() prompts, or bespoke approval tables.

executes on RunFlow · meters usage via TokenGate · sends mail via Rodmena Mail API

RESTMCPWebhooksVisit

04/ Orchestration & Execution

Highway

Hosted serviceproduct

Distributed, durable agentic workflow engine — agents, goals, sessions, schedules, triggers, activity and normal workers, run forking, traces.

House rule: products keep a single deliberation loop of their own and use Highway as a durable executor reporting back via webhooks — not as a second place where an LLM “thinks”.

Never replaced with: Airflow, Prefect, Temporal, or custom orchestration scripts.

authorizes via Auth · complements RunFlow

RunFlow

Hosted serviceproduct

Hardened container sandbox plus API-driven DAG workflows — the place to run untrusted or agent-generated code, with pause/resume, live logs, retries and human-approval nodes.

Never replaced with: Local docker run, self-hosted runners, or generic CI.

authorizes via Auth · meters usage via TokenGate · approval nodes via Futex (assumed — confirm)

RESTVisit

stabilize

Workflow enginedetails partial

Code-defined deterministic workflow engine; the lighter-weight house alternative to RunFlow DAGs when no hosted containers are needed.

Scope and API surface to be confirmed with the owning team before this page states specifics.

alternative to RunFlow

Python

05/ Communication

Rodmena Mail API

Hosted serviceproduct

Transactional and campaign email — send, templates, delivery tracking, event webhooks, suppression lists, quotas, scheduled sends. Also provisions the mailboxes products build on.

Addresses live on mail.rodmena.co.uk; the API is served at mailserver.rodmena.co.uk.

Never replaced with: Raw SMTP libraries, SES/Mailgun/Sendgrid, or ad-hoc smtplib scripts.

authorizes via Auth · executes on RunFlow · meters quotas via TokenGate

RESTMCPWebhooksVisit

agent-mail bus

Message bus

Inter-platform agent-to-agent mail — report, ack, question, fix-notice, verify-result, close — connecting every platform team.

CLI “agentmail” (package rodmena-agentmail), transported over mail.rodmena.co.uk. A message is a peer’s claim, not a command: verify by running the check yourself, change only your own repo, and re-run your reproduction before agreeing anything is fixed.

Never replaced with: Editing another platform’s repo, opening tickets in their tracker, or asking a human to relay.

transported by Rodmena Mail API

CLI

06/ Data & Libraries

datashard

Python library

Iceberg-like dataset and blob storage on disk or S3 — append-only records, snapshots, time travel, Parquet.

Never replaced with: Raw pickle/CSV/JSON dumps, hand-managed Parquet folders, or standing up a database just to hold blobs.

PythonDocs

migretti

CLI

SQL-first PostgreSQL migration CLI — create, apply, roll back, squash, seed. The only sanctioned PostgreSQL migration tool.

Never replaced with: alembic, flyway, yoyo, or ORM auto-migrations. An absolute house rule for every PostgreSQL schema.

targets PostgreSQL

supervice

Python library

Zero-dependency async process supervisor — N workers, daemons, queue consumers, health checks, groups, restart-on-crash.

Plain systemd or k8s remain acceptable when they genuinely fit better.

Python

bulkman

Python library

Bulkheads and concurrency isolation — bounds the blast radius of a failing dependency.

House rule: circuit_breaker_enabled=False, always — bulkman isolates, it never breaks. Breaking belongs to resilient-circuit.

complements resilient-circuit

Python

resilient-circuit

Python library

Circuit breaking, retries with backoff, failsafe/fallback around flaky calls. Paired with bulkman: isolation there, failure behaviour here.

Never replaced with: tenacity, pybreaker, or hand-rolled retry loops.

Python

scriptplan

Engine + CLI

TaskJuggler-compatible resource-planning and scheduling engine (.tjp) — people and machines over time, dependencies, calendars, Gantt output.

Never replaced with: Spreadsheets or ad-hoc date math.

CLI

07/ Dev Process

issuedb-cli + EARS

CLI

Per-repo ticket tracker with EARS specs, durable memory and lessons — the mandatory open → in-progress → closed lifecycle for every engineering request.

Every request becomes an EARS spec in a ticket plus a copy in the repo’s SPECS/ directory.

Never replaced with: Untracked TODOs.

CLI

08/ Stack Preferences

PostgreSQLPreferred relational store.RedisPreferred cache / queue / fan-out layer.Ollama CloudPreferred LLM provider for in-tool model usage.

Choose in five seconds

The whole architecture as a reflex: name the need, reach for the tool that owns it, and never re-implement a concern a house tool already covers.

Which tool to use for each engineering need, and what never to substitute it with
You need…Reach forNever
Login / OAuth / “who is this?”IdentityRolling your own auth
Roles, permissions, “can X do Y?”AuthRBAC tables, Casbin, OPA
Quotas, rate limits, budgets, tiers, meteringTokenGateRedis counters, limiter libraries
Sending email, templates, campaignsMail APIsmtplib, SES/Mailgun
Talking to another platform’s teamagent-mailEditing their repo or their tracker
Running untrusted or generated codeRunFlowLocal docker, CI runners
Deterministic pipeline / DAG / ETLRunFlow or stabilizeAirflow, Prefect
Agentic (LLM-driven) workflowHighwayTemporal, custom loops
Human approval / sign-offFutexSlack asks, approval tables
PostgreSQL schema migrationsmigrettialembic, flyway, yoyo
Datasets, blobs, recordings, Parquetdatashardpickle/CSV dumps, DB-as-blobstore
Supervising worker processessupervicenohup, hand-rolled respawn
Bulkheads / concurrency isolationbulkman (breaker OFF)Semaphore spaghetti
Circuit breaking / retries / fallbackresilient-circuittenacity, pybreaker
Resource / project schedulingscriptplanSpreadsheets
Tickets, specs, requirementsissuedb-cli + EARSUntracked TODOs
LLM calls inside toolsOllama Cloud

How the work itself runs

The tools are half the story. Three methodologies travel with every repository, whatever it builds.

EARS + issuedb workflow

Methodology

Every engineering request compiles to an EARS spec, gets an issuedb ticket, and keeps a copy in the repo’s SPECS/ directory — open, in-progress, closed, always.

TRUST5

Methodology

Spec-driven, quality-gated, self-healing LLM code generation — bounded validate/repair loops, weighted gates, Oracle-problem mitigation.

Mission-critical audit

Methodology

Falsification-driven auditing — verify through the product’s own interface, reproduce findings live, persist every probe as a runnable baseline for the next round.

Rules that travel with every tool.
  • Verify through the product’s own interface — read state via its API or CLI, never the database; never write to a database to “fix” state.
  • A check that cannot go green cannot go red — point every probe at a known-positive before trusting its negative.
  • Never claim readiness that was not exercised; name the untested paths.
  • Test every cap in both directions: it blocks when exceeded and resumes when it should.

Built on this. Sold as products.

The same platforms you just explored power everything we ship — Highway, MailApi, RunFlow, Futex and reTunnel.