pure Rust · AMP-native · mesh daemons

cos

The cosmix daemon family

Every Rust daemon that runs a node in a cosmix mesh — broker, mail, web, DNS, knowledge indexer, display compositor, agent runtime, MCP bridge — plus the substrate libraries they share. Each daemon exposes its state and actions over the AMP mesh.

The daemons that run a mesh node

One workspace of Rust crates — long-running services plus the libraries they share

cos is the daemon side of the cosmix substrate. Where mix is the language you drive the mesh with, cos is what actually runs on each node: a set of long-running daemons that speak the AMP mesh protocol, expose their state as typed property namespaces, and are operable from the outside by agents and scripts. Every daemon is legible (query its state), modifiable (write its config through structured channels), and reconstructible (build and run it from a clean clone).

noded — the broker

  • The AMP broker
  • Every node runs one
  • Routes service.node.amp
  • The mesh backbone

maild — mail

  • JMAP-native mail daemon
  • SMTP + IMAP + JMAP
  • Bayesian spam filter
  • Sieve-style rules

webd — web

  • Multi-vhost HTTPS
  • Automatic ACME certs
  • SSR + Datastar SSE
  • Mail / files / CMS UI

dnsd — DNS

  • Authoritative WG-mesh DNS
  • Generated from inventory
  • Serves *.amp + zones
  • Fail-closed serials

indexd — knowledge

  • Vector knowledge base
  • Auto-indexes on commit
  • Skills / docs / journals
  • Powers agent recall

disp-skia — display

  • Skia display backend
  • Markdown-over-AMP UI
  • winit + tiny-skia
  • The desktop surface

agentd — agents

  • Agent supervision
  • Multi-turn LLM loops
  • Tool-calling backends
  • Sessions persist to disk

mcp — bridge

  • Claude Code MCP bridge
  • AMP + logs as tools
  • Knowledge / skill loop
  • Runs Mix on the node

Daemons, helpers, and libraries

33 workspace crates — pick a component in the sidebar for its own page

The workspace splits three ways: daemons are the long-running services; helpers are the CLI subcrates and adapters they lean on; libraries are the shared substrate — property store, mesh peering, node identity, logging — that every daemon builds on. New library crates default to a core layer with no mesh dependencies, so each is testable in isolation.

Daemons

  • noded · maild · webd
  • dnsd · indexd
  • disp-skia · agentd
  • Long-running services

Helpers & adapters

  • mcp — Claude Code bridge
  • claud — Claude SDK runtime
  • mds — mail data store
  • maild-auth / -rules / -bayesian

Libraries

  • props-store · daemon · config
  • mesh · mesh-trust · node-id · wg
  • skills · agent · llm · display
  • dns · files · davproto · log

amp ← mix ← cos

Three public repos, one one-way dependency chain

cos is one of three public sibling repos. amp is the AMP protocol family and depends on nothing. mix is the language and depends on amp. cos is the daemon family and depends on both — its config, DNS, mail, and agent crates consume the mix strict-data parser, and every daemon speaks AMP. Build the two siblings first, then cos.

amp protocol family mix the language cos daemon family amp also feeds cos directly
One-way dependency order — amp ← mix ← cos. cos depends on both siblings; neither depends on cos.

Build & install

Clone the two siblings, then build the workspace with cargo

shell
# cos depends on two sibling checkouts under $HOME
git clone https://github.com/markc/amp ~/.amp
git clone https://github.com/markc/mix ~/.mix
git clone https://github.com/markc/cos ~/.cos

# build the whole daemon family (release)
cd ~/.cos/src && cargo build --workspace --release

# run a daemon (each reads a bootstrap config, then joins the mesh)
./target/release/cosmix-noded --help