Core concepts
Stack Graph
Uses the Ahena CLI (beta). Install it with npm install -g @ahena/cli, or prefix commands with npx @ahena/cli. See Installation. The dashboard covers projects, connections, Doctor, the Stack Graph, plans and approvals without it.
The Stack Graph is Ahena's model of your application's external stack. The dashboard (Project →
Stack), the CLI (ahena status) and AI agents (inspect_stack, explain_stack) all render the
same graph, built by Ahena's server:
project ─ environment ─ capability ─ provider ─ resources
└ health, issues, next actions
For each environment it answers:
- which capabilities the app uses (auth, database, storage, email, payments, push, AI, DNS) and which provider fills each one;
- the provider's connection state and resources (bucket, domain, webhook endpoints, project ids);
- health and open issues, from the latest Doctor run, mapped to the capability they affect;
- drift: how many settings changed outside Ahena since
ahena.lockwas recorded, per provider and per environment, and when that was last checked (server-side drift). A node with drift needs attention, and its next action isahena drift -e <env>; - next actions: providers to connect, fixes Ahena can apply, steps only you can do.
ahena status # every environment
ahena status -e production # one environment
ahena status --json # the graph as JSON
Where it comes from
What the app needs is declared in ahena.config.ts, in your repository.
Whenever the CLI or the MCP server talks to Ahena, it shares a secret-free copy of the parsed
config and ahena.lock (the project's blueprint), after the same secret checks as the
files themselves. That lets the dashboard and agents show capabilities without your checkout.
The repository stays the source of truth.
Ahena combines the blueprint with the environment's connections, the latest finished Doctor
run, the latest drift check and the capability registry. It doesn't call providers to draw the
graph; Doctor, inspect and the drift check (yours, or
continuous Doctor's) do that. In the JSON, environments carry
drift: { count, high, status, checkedAt } | null and capability nodes drift: { count, checkedAt }.
Managed or observed
Ahena manages what ahena.config.ts declares and a provider can configure. Anything else it
finds, such as Stripe webhook endpoints it didn't create, Doctor reports as "not verified" and
Ahena leaves alone. When ahena init imports an existing app, services Ahena doesn't support
are listed as "Not managed by Ahena" and never imported or guessed at.