# Duraton > Build, deploy and monitor AI agents with Duraton, and the developer reference for its SDK and API. - [Documentation](https://docs.duraton.ai/index.md): Build an AI agent without code, so you can turn it into something people pay for. Make money with Duraton.ai. - [Build your first agent](https://docs.duraton.ai/start/first-agent.md): Sign in, add a model provider key, and publish an agent from the console - no code. - [Quickstart](https://docs.duraton.ai/start/quickstart.md): Get your first durable run finishing in five steps: create a project, issue a key, write a workflow, connect a runner, and trigger it. - [AI quickstart](https://docs.duraton.ai/start/ai-quickstart.md): Make your first model call crash-safe: add a durable AI step, point it at your provider, and watch its spend, tokens, and latency land in the console. - [Recipes](https://docs.duraton.ai/start/recipes.md): One complete, paste-and-run workflow per task - making a model call durable, parking a run on a human decision, retrying, waiting, scheduling, replaying, and webhooks. - [Migrating from Inngest](https://docs.duraton.ai/start/migrating-from-inngest.md): Map Inngest functions, steps, and flow control onto Duraton - and the three differences that silently break a naive port. - [Upgrading](https://docs.duraton.ai/start/upgrading.md): Every breaking change to the Duraton SDK, what to rename, and why - newest first. - [Agent kit](https://docs.duraton.ai/agent-kit/index.md): Write an AI agent as a durable workflow: agent() and tool() from @duraton/agent-kit, where every model turn and tool call is a step that survives a crash. - [Agents and tools](https://docs.duraton.ai/agent-kit/agents-and-tools.md): The two building blocks of @duraton/agent-kit: agent() declares the model, instructions and tools; tool() declares one callable the model may use, with its schema, behaviour hints and context bounds. - [Approvals in the loop](https://docs.duraton.ai/agent-kit/approvals.md): Gate a tool call on a human decision, cap how many decisions an agent may ask for, show the model less than you record, and check the arguments it produced before they run. - [Structured output](https://docs.duraton.ai/agent-kit/structured-output.md): Have an agent answer in a declared shape: a JSON schema the final answer must satisfy, validated and recorded as a durable step. - [Providers and MCP](https://docs.duraton.ai/agent-kit/providers-and-mcp.md): Bring your own model provider, attach an external MCP server as a tool source, list tools before they run, and expose the same tools over MCP to other agents. - [AI](https://docs.duraton.ai/ai/index.md): Run AI agents that ask a human before the risky move, pick up where they stopped after a crash without paying the model twice, and record what every run cost. - [AI agents](https://docs.duraton.ai/ai/ai-steps.md): Build AI agents that survive a crash - step.ai turns model calls, tool calls, and agent loops into durable steps, plus the classic agent patterns. - [Approvals](https://docs.duraton.ai/ai/approvals.md): Stop your agent before a risky action and wait for a person - the run parks holding no worker, then resumes from exactly that checkpoint. - [Guardrails](https://docs.duraton.ai/ai/guardrails.md): Check a model's tool arguments before the tool runs. The verdict is a durable step, so a replay reads what was decided instead of deciding again. - [Cost controls](https://docs.duraton.ai/ai/cost-controls.md): Stop an agent before it overspends: cap halts before the call, tokenThrottle spaces out runs, the cache replays identical calls free, fallback survives an outage. - [Context management](https://docs.duraton.ai/ai/context-management.md): Bound what reaches the model each turn. A summary is a durable step, so a replay reads what was written instead of writing it again. - [Streaming](https://docs.duraton.ai/ai/streaming.md): Show a viewer tokens as the model produces them and still get one durable result - the stream replays from token 0, the memoized value is the full text. - [AI observability](https://docs.duraton.ai/ai/observability.md): Show someone what an agent did and what it cost: token and cost rollups, conversation sessions, run time-series, and GenAI spans read from the durable journal. - [Durable runs](https://docs.duraton.ai/core/index.md): The durable runtime under every Duraton agent and job: workflows, steps, triggers, retries, flow control, runners, and the live run record. - [Durable execution](https://docs.duraton.ai/core/durable-execution.md): Why a long agent picks up where it stopped instead of starting over: each step's result is recorded the moment it completes, and replay skips it. - [Workflows](https://docs.duraton.ai/core/workflows.md): Define a workflow, group it into an app, and trigger it with an event. - [Steps](https://docs.duraton.ai/core/steps.md): Wrap each unit of work in a step and it runs once: the result is saved, it retries on its own, and the run resumes from it after a crash. - [Triggers](https://docs.duraton.ai/core/triggers.md): Start a run from exactly the right thing: event triggers with CEL filters and wildcards, cron schedules, or a manual trigger with no event at all. - [Retries & failure handling](https://docs.duraton.ai/core/retries.md): Survive a flaky call without losing the run - only the failing step retries, and onFailure handlers plus replay cover the ones that run out. - [Flow Control](https://docs.duraton.ai/core/flow-control.md): Shape how a workflow runs under load: concurrency, throttle, rate limit, debounce, batch, priority, singleton, idempotency, plus AI caps and throttles. - [Runners](https://docs.duraton.ai/core/runners.md): Run your workflow code wherever it already lives: the runner dials out to Duraton over a WebSocket, so it needs no inbound address. - [Logging](https://docs.duraton.ai/core/logging.md): See what your agent did, per run: ctx.log records structured logs that Duraton captures, keeps durable under replay, and shows against the run. - [Watching a run](https://docs.duraton.ai/core/realtime.md): Watch a run as it happens instead of polling: runs.watch tails status transitions and logs over a durable, resumable per-run timeline. - [Workspaces & projects](https://docs.duraton.ai/core/projects.md): Keep teams and environments apart: a workspace holds members, roles, and one pooled allowance; a project is the isolation boundary for runs, events, and keys. - [Production and operations](https://docs.duraton.ai/core/production.md): Deploy new agent code without stranding runs in flight: how many runners to run, pin vs anycast routing, graceful shutdown, and the step-id footgun. - [Transactional run start](https://docs.duraton.ai/core/transactional-start.md): Start a run atomically with an app-side database write - the outbox recipe and the dedupeId-keyed retry pattern. - [Integrations](https://docs.duraton.ai/integrations/index.md): However the work arrives, however the result leaves: events, signed webhooks, credentials to third-party APIs, and an MCP server so an agent can drive Duraton itself. - [Webhooks](https://docs.duraton.ai/integrations/webhooks.md): Let a third party start a run, and let a finished run tell the outside world - verified inbound POSTs, signed outbound ones, one durable delivery log. - [Credentials](https://docs.duraton.ai/integrations/credentials.md): Resolve a stored third-party credential inside a step, in place of an environment variable - the credential is used only transiently and never enters a step's durable input or output. - [MCP server](https://docs.duraton.ai/integrations/mcp-server.md): Let AI agents drive Duraton - operate runs, events, approvals, and your projects - through the MCP server. - [AI coding tools](https://docs.duraton.ai/integrations/ai-coding-tools.md): Have your AI coding agent set up Duraton for you - the docs MCP, the product MCP, and Duraton's agent rules - from a single prompt. - [TypeScript SDK](https://docs.duraton.ai/reference/sdk/index.md): Write durable agents in TypeScript: @duraton/sdk authors workflows, runs a runner, and calls Duraton from app code, all from one package. - [Defining workflows](https://docs.duraton.ai/reference/sdk/defining-workflows.md): Declare a workflow in one object: name, triggers, retry policy, flow control, and handler - and get ctx.event.data typed for you. - [Steps](https://docs.duraton.ai/reference/sdk/steps.md): Everything a handler can do durably: the step API - run, sleep, sleepUntil, waitForEvent, runWorkflow, emit, and approval - plus the handler context. - [connect](https://docs.duraton.ai/reference/sdk/connect.md): Run your workflow code from behind NAT, a laptop, or a container with no ingress - connect dials out over a WebSocket, so there is no inbound URL to expose. - [REST client](https://docs.duraton.ai/reference/sdk/client.md): Drive Duraton from your app code: createClient is a typed wrapper over the HTTP API to trigger events and read or control runs. - [AI steps](https://docs.duraton.ai/reference/sdk/ai-steps.md): Make every model call run once: the step.ai reference for generate, wrap, embed, and the durable agent loop, with providers, cost, and cache options. - [Overview](https://docs.duraton.ai/reference/api/index.md): Do anything the console does from your own code: the Duraton HTTP API's base URL, authentication, conventions, and full endpoint map. - [Errors](https://docs.duraton.ai/reference/api/errors.md): Work out what went wrong and what to do about it: the error body, the status codes the API returns, and how to handle each in the SDK and over MCP. - [Runs API](https://docs.duraton.ai/reference/api/runs.md): Find any run and see what it did: list, filter, paginate, and summarize runs, and read one run's steps, logs, and AI spend. - [Events API](https://docs.duraton.ai/reference/api/events.md): Trigger workflows by sending an event, and read the durable event log. - [Workflows API](https://docs.duraton.ai/reference/api/workflows.md): See what your runners actually registered - triggers, schedules, retry policy, flow control, and the step manifest - and start a run by hand. - [Control API](https://docs.duraton.ai/reference/api/control.md): Take control of a run in flight: cancel, pause, resume, replay it, or retry from a step - plain HTTP, with replay and retry forking a new run. - [Approvals API](https://docs.duraton.ai/reference/api/approvals.md): Decide the runs waiting on a person from your own tooling: list open approvals and approve, deny, or approve with edits over HTTP. - [Webhooks API](https://docs.duraton.ai/reference/api/webhooks.md): Prove a delivery happened and fix it when it did not: read the inbound and outbound delivery logs, manage source and endpoint configs, redeliver, or replay. - [Runners & Apps API](https://docs.duraton.ai/reference/api/runners.md): See which apps and runners are live right now - they appear because a runner registered itself, with its self-reported metadata attached. - [Limits & defaults](https://docs.duraton.ai/reference/api/limits.md): Know the number before you hit it: every default and ceiling Duraton applies to pagination, request size, retries, AI steps, and connections. - [Reference](https://docs.duraton.ai/reference/index.md): Every option, signature, endpoint, and bound: the TypeScript SDK, the REST API, and the protocol your runner speaks. - [Protocol reference](https://docs.duraton.ai/reference/wire-protocol.md): How Duraton talks to a runner - the endpoints, the execution model, routing, status codes, and version negotiation.