Skip to content

Ecosystem Components & Dependencies

This page tracks the components that make up the Astromesh ecosystem, how they relate to each other, and the dependency graph between the packages in the monorepo. It is kept in sync with docs/ECOSYSTEM_DEPENDENCIES.md in the repository.

These directories ship from this repository on their own tags and versions.

ComponentPackageDirectoryVersionVersion sourceMin Python / Runtime
Core Runtimeastromeshastromesh/0.59.0astromesh/__init__.pyPython 3.12
Glyphastromesh-glyphastromesh-glyph/0.1.2astromesh_glyph/__init__.pyPython 3.12
ADKastromesh-adkastromesh-adk/0.3.0astromesh_adk/__init__.pyPython 3.12
CLIastromesh-cliastromesh-cli/0.3.0astromesh_cli/__init__.pyPython 3.12
Nodeastromesh-nodeastromesh-node/0.1.2src/astromesh_node/__init__.pyPython 3.12
Orbitastromesh-orbitastromesh-orbit/0.4.1astromesh_orbit/__init__.pyPython 3.12
Forgeastromesh-forgeastromesh-forge/0.24.0package.jsonNode 22.12
Docs sitedocs-sitedocs-site/0.1.0package.jsonNode (site build)
VS Code extensionvscode-extensionvscode-extension/0.1.0package.jsonNode (build)
Native extensionastromesh-nativenative/0.1.0Cargo.tomlRust

One column and not two: this table used to carry a main and a develop version side by side, from when develop was the integration branch. It is not one any more — see section 4.

These components are part of the Astromesh ecosystem but live in their own repositories. Their versions are recorded in docs-site/src/data/ecosystem.ts, which feeds the ecosystem map, release ledger, and status board on the documentation site.

ComponentRepositoryCurrent versionEcosystem groupStatus
Cortexastromesh-cortex0.19.0AuthorShipped
Leiaastromesh-leia0.5.0AuthorShipped
Heraldastromesh-herald0.7.4ReachShipped
OSastromesh-os0.10.1ShipShipped
Prismaastromesh-prisma0.1.0ShipIn development
Nexusastromesh-nexus0.23.1OperateShipped
Nebulaastromesh-nebula0.1.0ModelsPreview

The core runtime sits at the center. Every Python package that needs to run agents declares a runtime dependency on astromesh. Optional extras on the core pull in astromesh-glyph for the glyph orchestration pattern.

Consumer packageDeclared dependencyMinimum versionNotes
astromesh-adkastromesh>=0.40.0Editable path source in the monorepo (..)
astromesh-cliastromesh>=0.40.0Editable path source in the monorepo (..)
astromesh-nodeastromesh>=0.40.0Editable path source in the monorepo (..)
astromesh-nodeastromesh-cli>=0.3.0Editable path source (../astromesh-cli)
astromeshastromesh-glyph>=0.1.1Optional extra only (astromesh[glyph]); editable path source in the monorepo

These are the floors the packages actually declare, read from their pyproject.toml. They are not decorative: a floor that lags reality lets uv resolve a runtime too old for the feature a package depends on, and the failure shows up as behaviour that silently does nothing rather than as a resolution error.

  • astromesh-cli exposes the astromeshctl.plugins entry point.
  • astromesh-node registers node = astromesh_node.cli.plugin:register.
  • astromesh-orbit registers orbit = astromesh_orbit.cli:register.

This means astromesh-node and astromesh-orbit extend the same CLI binary (astromeshctl) when they are installed alongside astromesh-cli.

All authoring tools produce the same agent spec that the core runtime understands:

  • ADK — Python decorators + project CLI. Generates YAML under the hood.
  • Forge — Browser-based visual builder, served by the node at /forge.
  • Cortex — Desktop IDE (own repo).
  • Leia — Natural-language operations plugin for Claude Code (own repo).
  • Core Runtime — Loads YAML agents, routes roles to models, runs orchestration patterns, manages memory/tools/guardrails.
  • Glyph — Optional action-language pattern inside the runtime. Requires the glyph extra or a local editable install.
  • Herald (own repo) — Communications gateway. Inbound WhatsApp messages invoke agents; agents reach people back through the same outbox. Herald sits in front of Nexus, not the runtime directly.
  • The core runtime also has a built-in WhatsApp channel adapter for self-hosted deployments.
  • Node — Native system service installer/deb/rpm/pkg/Windows service.
  • OS (own repo) — Immutable Linux appliance image.
  • Orbit — Terraform-based cloud infrastructure (GCP first).
  • Prisma (own repo, in development) — Reconciles agent specs into cloud-managed AI primitives instead of running the runtime.
  • CLI — astromeshctl, the terminal interface to a node.
  • Nexus (own repo) — Multi-tenant control plane: publishes agents, dispatches runs, meters and bills.
  • Nebula (own repo) — Open-model foundry that trains, gates, and publishes the models the runtime routes to.

main is the branch. origin/HEAD points at it, every release tag since v0.46.0 was cut on it, and the documentation site publishes from it.

develop still exists and is not used: it sits behind main and has nothing of its own. It was the integration branch until the repository moved, and for a while the way to publish the docs was to back-merge main into develop by hand — the docs workflow was still watching that branch. When nobody remembered, the site stayed on the 2026-08-28 build for eleven days and three releases while main moved on, and nothing said so. The workflow now triggers on main.

4.1 What the v0.45.0 → v0.55.0 run carried

Section titled “4.1 What the v0.45.0 → v0.55.0 run carried”

Each is described in full in CHANGELOG.md:

VersionWhat landed
0.46.0praxis_alcaldia — the municipal-revenue vertical joins the integration catalog.
0.46.1 / 0.46.2mi_cuenta also returns the day’s rate; the runtime stops re-prefixing a session_id that Nexus already namespaced.
0.47.0An integration handler can know who is writing — the caller’s identity reaches the handler instead of being dropped at the boundary.
0.48.0ReAct groups the tool calls of one response into a single assistant message instead of repeating the reasoning; the llm.complete span carries cached_tokens, so the context cache can be measured rather than assumed.
0.49.0praxis.obtener_record — an agent can follow a relation. buscar_records filters on declared fields and id is a system column, so id:eq:<uuid> came back 422; without a way to read by id an agent duplicated a record instead of failing.
0.50.0Price rows for kimi-k2.7-code, kimi-k2.7-code-highspeed and kimi-k3. estimated_cost() returns 0.0 for a model it does not know, so an agent pointed at kimi-k3 ran perfectly and reported no cost at all.
0.51.0 / 0.51.1spec.prefetch — read-only lookups run before the LLM, so the model starts with the facts instead of spending a turn fetching them. A when with a syntax error used to kill every prefetch entry, not just its own.
0.52.0praxis_lca joins the integration catalog, thirteen actions.
0.52.1 / 0.52.2An integration handler learns who is writing; it stops receiving the run’s credentials along with it. praxis_lca records a “no” to the membership offer.
0.53.0conocimiento — the tenant’s knowledge base as an integration, so an agent can search the documents its tenant uploaded.
0.54.0usage.by_model[].tokens_cached — the input the provider served from cache, per model. The runtime already measured it; now the breakdown reports it, so a biller can discount it.
0.55.0An agent called as a tool returns its answer, not its whole run. Its steps and trace used to be stringified into the caller’s history: about 13,000 extra input tokens per call, paid again on every later turn of the caller’s loop.
  1. Update CHANGELOG.md under the new version’s heading.
  2. Bump astromesh — pyproject.toml (two places: project.version and [tool.commitizen] version, which is not in version_files and does not move on its own) and astromesh/__init__.py. tests/test_version_coherente.py compares the three.
  3. Re-lock all three uv.lock files — root, astromesh-cli/ and astromesh-node/. The sub-packages depend on the root and their jobs run uv sync --locked, so a stale lock turns jobs red that have nothing to do with the change.
  4. Push main, then push the tag vX.Y.Z.

The tag fires two independent publications — Docker Hub (Release) and PyPI (Release PyPI) — and one can fail while the other succeeds. PyPI additionally gates on pyproject.toml and astromesh/__init__.py agreeing. Check both before calling a release done: v0.50.0 published its image and failed on PyPI, leaving the package split across registries until the job was re-run.

When a package version changes:

  1. Update its version in the package’s own pyproject.toml / package.json / Cargo.toml and its __init__.py.
  2. Update docs-site/src/data/ecosystem.ts (the source of truth for the site map and release ledger).
  3. Update docs/ECOSYSTEM_DEPENDENCIES.md in the repository root.
  4. Update this page if the prose description of a component changed.