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 ← mix ← cos. cos depends on both siblings; neither depends on cos.Build & install
Clone the two siblings, then build the workspace with cargo
# 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