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

# Safe by design

> The boundaries the compiler and runtime enforce, and why a compiled graph is the right shape for production workflows.

export const DocMeta = ({type, applies, owner}) => {
  const LABELS = {
    tutorial: "Tutorial",
    "how-to": "How-to guide",
    explanation: "Explanation",
    reference: "Reference"
  };
  return <div className="e6-meta">
      <span className={type === "how-to" || type === "tutorial" ? "e6-eyebrow" : "e6-eyebrow e6-eyebrow--quiet"}>{LABELS[type] || type}</span>
      {applies ? <span>Applies to: {applies}</span> : null}
      {owner ? <span>Owner: {owner}</span> : null}
    </div>;
};

<DocMeta type="explanation" applies="All deployments" />

A workflow's structure is data that the runtime compiles, so its boundaries live in the architecture, not only in a prompt. Step types, topology, tool access, typed inputs and outputs, assertions, model rules and action policy are all validated before a run starts.

## What the runtime enforces

| Boundary | What it means |
| - | - |
| Typed steps and fields | Each of the ten step types has a defined contract. |
| Per-step tool gating | Agentic steps see only their declared tools; deterministic tool steps call the one named tool. |
| Deterministic topology | Step order and declared branches compile before the run. |
| Typed dataflow and references | Upstream dependencies are explicit; large data moves by durable reference. |
| Assertions and bounded retries | Result checks and limits prevent unbounded validation loops. |
| Model boundaries | Step types that never call a model reject model pins. |
| Action policy | Approved actions run the frozen plan; turning approval off is explicit. |
| Sandbox isolation | Python runs away from application credentials, with resource limits and optional `nsjail`. |
| Auditable execution | Runs and action decisions produce durable records. |
| Explicit reuse | Skills are attached to steps, and subworkflows name a saved workflow. |

## When to use a compiled graph

One agent with every tool, deciding what to do and in what order, is useful for exploration. For regulated, audited, production workflows, where a wrong tool, a runaway loop or an ungoverned write-back has real consequences, a compiled graph gives a stronger operating boundary. It's the difference between a workflow you can ship and one you can only demo.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.