Every component is versioned and released on its own cadence. They all meet at the core
runtime — the engine that loads an agent and runs it. Pick a part of the stack to see what
lives there.
Clockwise from the top: author an agent, choose how it executes, put it in front of people,
ship it somewhere, operate it — and, upstream of all of it, make the models.
Four ways to write an agent — Python, browser, desktop, or plain English. All of them emit the same YAML.
What the core runs when a loop of tool calls is the wrong shape for the job.
The gateway between an agent and the person it is talking to, in both directions.
Where the runtime lives: a system service, a sealed appliance, or cloud infrastructure you did not have to write.
Day two. Who is running what, for which tenant, at what cost.
Upstream of everything: the foundry that trains and publishes the models the runtime routes to.
A ReAct loop asks the model what to do next, one tool at a time, and resends the whole prompt
every turn. With pattern: glyph the model writes the plan once, as a program, and
the runtime executes it — chaining locally and running independent statements at the same time.
Each name is bound exactly once, so reads and writes give an exact dependency graph.
oem and alt never read each other, so nothing forces them
into sequence.
Measured, against three models
Model writes the program on every run
+164% to +2839%
more expensive than ReAct, and slower in 16 of 17 runs. Output tokens cost roughly 4× input
tokens, and this trades cheap input for expensive output — 81–99% of the bill is the model
writing code.
Program reviewed once, pinned in spec.program
zero model calls
The model authors it, you review and parameterise it, the runtime executes it from then on.
This is the mode Glyph is for, and the reason a fixed program that fails to compile stops
the agent from loading instead of quietly falling back.
x = cap(arg=v)Call. Arguments are always by name.
x = c | where(a == 1)Filter a collection; conditions AND together.
x = c | top(3, by=f)Sort descending and truncate.
x = c | map({g: cap(id=id)})One call per item, in parallel, capped at 16.
if / elseThe only branch. The same name may be bound in both arms.
ReAct (think-act-observe), Plan & Execute, Parallel Fan-Out, Pipeline, Supervisor (delegate to workers), Swarm (agents hand off conversations), Glyph (the plan is a program, not a loop).
3 Memory TypesPersistent context across conversations
One command to provision a production-ready Astromesh stack on GCP.
Cloud-native managed services, declarative config, and an escape hatch to raw Terraform.
Install Astromesh as a first-class OS service on Linux, macOS, and Windows.
Platform packages, automatic restarts, CLI management, and 7 runtime profiles — no containers required.
Astromesh is more than a runtime. Build agents visually, run them on a hardened appliance, orchestrate them across tenants in the cloud, put them in front of customers on WhatsApp, or spin one up in plain English.
NEWcortex-v0.19.0
AstromeshCortex
Desktop IDE & Control Plane
A native desktop IDE for designing, testing, and shipping agents — with a managed local runtime, GCP provisioning via Orbit, and a Nexus cloud console in a single window.
Publishes agents with versioning, dispatches runs to a shared runtime pool, and meters and bills what each one consumes. External clients call one REST API; Nexus resolves the tenant, applies its limits, and records the invocation.
run an agent
1POST /api/v1/agents/soporte/run
2X-API-Key: <tenant key>
3{
4 "query": "¿Cuándo llega mi pedido?",
5 "session_id": "wa:+5491100000001"
6}
7→ 200 { "answer": …, "usage": {
8 "credits": 412, "model": "kimi-k2" } }
Multi-TenantThe tenant comes from the credential
Versioned RegistrySpecs in Postgres, author + checksum
Metering & BillingPer run, per model, per tenant
Shared Runtime PoolDispatch, not a node per tenant
Streaming RunsWebSocket, cancellable mid-flight
Per-Run CredentialsOne tenant, one capability, one run
An inbound WhatsApp message reaches an agent, and an agent reaches a person back — through the
same Postgres outbox, with the same retry budget. Herald never talks to the runtime: whether an
agent exists and who may run it is Nexus's call, checked when a binding is created and again on
every run.
One message, end to end
Inbound
PersonWhatsApp
WebhookHMAC-SHA256 checked
Routeconversation or entry agent
NexusPOST /agents/:name/run
the agent answers
Outbound
Persondelivered
Channel APIGraph API send
Outbox10 attempts, 30s × 2ⁿ
An agent calling send_message mid-run enters at the outbox too — same queue, same
retries. A success means queued, never delivered.
The entry agent decides
When no conversation exists yet for a sender, the binding's entry agent gets the message and
answers with a routing decision. That is how a courtesy refusal costs nothing: nothing is
persisted, and the answer is still delivered.
{
"answer": "Te ayudo con tu reclamo.",
"data": {
"route": {
"start_session": true,
"handoff_agent": "reclamos"
}
}
}
Channels
WhatsAppliveMeta Cloud API — text, media, templates
Echodevthe whole pipeline with no provider account
Web chatreservedneeds a WebSocket endpoint to activate
SMTPreservedoutbound only, by design
Stubs are real port implementations that refuse work — the contract exists, the provider
does not. Listing them as shipped would be a lie you would find out on a Friday.
A minimal, immutable, API-only Linux appliance built with mkosi on Debian trixie — a verified read-only root, A/B updates with automatic rollback, and the Astromesh runtime baked in at a pinned commit. Mature through Phase 4 + post-4: TPM-sealed secrets, mesh mTLS, OTel, and eBPF causal egress.
A Claude Code plugin that turns a business idea into a deployed WhatsApp agent on a Nexus cluster — no Kubernetes required. Named after Leia, a lemon beagle: approachable, loyal, friendly.
Each package carries its own version and its own changelog. A core release does not bump
anything else, and a component that has not changed keeps its number.
Latest movement 2026-08-10
Per-run credentials — Nexus mints a short-lived token per invocation, so an agent can send a message without the shared pool holding any tenant secret.