> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nora.my/llms.txt
> Use this file to discover all available pages before exploring further.

# Transparency

> Read the definition a Flow actually ran with: model, prompt, tools, data sources, memory

Un-blackbox a Flow: **what definition actually ran?** Handy for support ("what prompt did this agent actually see?"), for pre-run assertions ("is the model I expect wired up?"), and for embedding the "why" panel next to answers in your admin UI.

Authenticated by **PAT `read` scope**.

## `resolve(slug)`

```ts theme={null}
const def = await nora.resolve("support");
// Per agent in the flow: {
//   model,          // resolved model id (respects routing / BYOK)
//   mode,           // "api" | "internal" | "sdk"
//   workerKind,     // execution class
//   prompt,         // system prompt string that will render
//   tools,          // attached tool blocks with the effective policy
//   dataSources,    // documents / memory / kg attachments
//   memorySpaces,   // greenfield memory-space attachments
// }
```

Returns the resolved definition for every agent in the Flow — not just the entry point. Reflects the currently-published version by default; there's no draft-vs-published toggle here (use the CLI's `nora flows versions` for that).

## Common patterns

### Pre-run assertion

Fail loudly if the model you expect isn't wired up, before you spend on a run:

```ts theme={null}
const def = await nora.resolve("support");
const entry = Object.values(def)[0];       // first agent
if (entry.model !== "gpt-4o") {
  throw new Error(`support flow drifted: expected gpt-4o, got ${entry.model}`);
}
```

### The "why did this answer look like this?" support panel

Next to a trace in your admin UI, pull the current definition so support engineers see the prompt the agent actually ran with:

```ts theme={null}
const [trace, def] = await Promise.all([
  yourTraceLookup(traceId),
  nora.resolve(trace.flowSlug),
]);
render({
  answer: trace.output,
  prompt: def[trace.entryAgentId].prompt,
  tools: def[trace.entryAgentId].tools,
});
```

### Audit for drift

Snapshot the resolved definition to your source of truth and diff on schedule — anything unexpected is a signal that someone edited the Flow outside change control.

```ts theme={null}
const def = await nora.resolve("support");
fs.writeFileSync(`snapshots/support-${new Date().toISOString().slice(0,10)}.json`, JSON.stringify(def, null, 2));
```

## Scope

`resolve` requires **PAT `read`**. Read tokens can surface prompts and tool config, which may contain end-user PII or credentials — treat any `read` token as admin-only and don't hand it to browser code (SDK refuses to init in the browser regardless; see [Overview](/sdk/overview)).
