Layers
Code structure
AdaOS follows a practical layered layout:
apps: executable entry points such as CLI and APIservices: orchestration, lifecycle, registries, update flows, and runtime logicsdk: public modules used by skills and higher-level codeadapters: concrete IO implementationsports: abstractions for infrastructure-facing concernsdomain: core data types and domain-level helpers
Why this matters
This split keeps most operational code out of the command layer:
- CLI commands stay thin and mostly delegate
- API routers map HTTP requests onto the same services
- adapters contain platform-specific or external-system logic
- SDK modules expose stable entry points for skills and tooling
Typical paths
- skill lifecycle:
apps/cli/commands/skill.py->services/skill/*->adapters/db,adapters/git, runtime state - scenario lifecycle:
apps/cli/commands/scenario.py->services/scenario/* - node operations:
apps/cli/commands/node.pyandapps/api/node_api.py-> node and subnet services - local API hosting:
apps/cli/commands/api.py->apps/api/server.py