Skip to content
Theme:

Architecture

Aether is organized as a Cargo workspace with focused, single-responsibility packages. Each package can be used independently or composed together.

PackageCratePurpose
aether-coreaether_coreAgent runtime — conversation loop, context management, tool dispatch, streaming
llmllmUnified LLM provider interface — Anthropic, OpenRouter, OpenAI, DeepSeek, Gemini, Ollama, Bedrock, and more
mcp-serversmcp_serversBuilt-in MCP tool servers — coding (files, bash, search, LSP), skills, tasks, sub-agents, survey, and plan
aether-cliaether_cliCLI binaries — headless mode, ACP server, init wizard, show-prompt
aether-projectaether_projectProject configuration — loads and validates settings.json, resolves MCP configs and prompt globs
wispwispInteractive TUI — markdown rendering, syntax highlighting, inline diffs, command picker
cruciblecrucibleEvaluation framework — assertion-based testing of agent behavior
mcp-utilsmcp_utilsMCP client utilities — connecting to and managing external MCP servers
tuituiLow-level TUI rendering primitives used by Wisp
acp-utilsacp_utilsAgent Client Protocol utilities — client and server helpers
aether-lspdaether_lspdLSP server daemon — standalone language server integration
llm-codegenllm_codegenCode generation for LLM provider model catalogs
utilsutilsShared utilities used across packages
aether-cli
├── aether-core
│ ├── llm (provider interface)
│ ├── mcp-servers (built-in tools)
│ └── mcp-utils (external server connections)
├── aether-project (config loading)
└── wisp
└── tui (rendering primitives)
crucible (standalone — uses aether-core for eval runs)
  • MCP for all tools — There is no built-in tool system. Every tool comes through MCP, whether from in-memory servers or external processes. This keeps the core runtime minimal and tools composable.
  • Provider abstraction — The llm crate defines a unified interface. Adding a new provider means implementing a single trait, not touching the agent runtime.
  • Config as data — Agent definitions, tool access, and prompt composition are all declarative JSON/markdown. No code changes needed to reconfigure agents.
  • Workspace isolation — Each package has a focused responsibility. You can use llm without mcp-servers, or aether-core without wisp.

Each package with a public API has its own documentation section:

  • aether-core — Agent builder, events, MCP integration
  • llm — Provider trait, creating and implementing providers
  • mcp-servers — Embedding built-in servers in custom apps
  • tui — Component trait, widgets, rendering
  • crucible — Evaluation framework for testing agent behavior