Documentation menu

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.lock was 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 is ahena 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.