---
title: Recipe in a guide
description: E6 fixture — a runnable walkthrough authored inside a guide, hydrated by the recipe console.
---

## Overview

A `:::recipe` written here renders the same runnable step islands a recipe PAGE
ships, from the same generator, hydrated by the same console against the same
hardened proxy. The reader never leaves the guide they were reading.

::::recipe{title="Your first call"}

:::step{title="Look at a pet" method="GET" path="/pets/1"}
Fetch one pet. The response is captured, so the next step can chain off it.
:::

:::step{title="Read it back" method="GET" path="/pets/${steps.0.json.id}" headers="[&#x22;Accept: application/json&#x22;]"}
This step's path references step 0's captured output — the chaining loop.
Unresolved tokens stay literal, so a step you have not run yet reads as what it
is instead of throwing.
:::

::::

## A second walkthrough on the same page

Each walkthrough is its own chaining scope: `${steps.0.…}` below means the first
step of THIS recipe, not the first step of the page.

::::recipe{title="Create one"}

:::step{title="Create a pet" method="POST" path="/pets" body="{&#x22;name&#x22;:&#x22;Rex&#x22;}"}
E6_GUIDE_RECIPE_CANARY — a runnable step with a request body.
:::

::::

## A stepper that is not runnable

An ordinary stepper is untouched: no island, no console scope, no button that
could not work.

<!-- Deliberately worded away from the census fixture vocabulary ("install"):
     the search census pins result-row counts for that query, and a fixture page
     that quietly joins those results moves a DESIGN pin for a content reason.
     A pin should only move when the design moved. -->

::::steps{title="Set up a key"}

:::step{title="Create a key"}
Run `doctorine keys create`.
:::

:::step{title="Log in"}
Run `doctorine login`.
:::

:::step{title="Write about the console"}
A step that only MENTIONS the island class — `doctorine-recipe-step`, as this
sentence does — declares no request, so this stepper is still not a console
scope. Docs about the console are ordinary prose.
:::

::::

## Related pages

- [/](../index.md)
- [/guides/blocks-showcase](./blocks-showcase.md)
- [/guides/copy-page-off](./copy-page-off.md)
- [/guides/frame-block](./frame-block.md)
- [/guides/getting-started](./getting-started.md)
- [/guides/no-page-title-toc](./no-page-title-toc.md)
- [/guides/prompt-block](./prompt-block.md)
- [/guides/single-entry-toc](./single-entry-toc.md)
- [/guides/visibility-audience](./visibility-audience.md)

# Agent Instructions

This portal answers questions programmatically. To receive a synthesized,
source-cited answer instead of crawling page by page, append the `?ask=`
query parameter to any page URL on this site:

    /guides/quickstart?ask=how+do+I+authenticate

Optional parameters:

- `&goal=<what-you-are-trying-to-do>` steers the answer toward your
  objective (e.g. `&goal=write+a+python+client`).
- `&version=<label>` scopes the answer to a mounted version when the
  portal publishes more than one.

The response is `text/markdown`: the answer followed by a `# Sources` list
of the portal pages it was grounded in. Status codes are the contract:

- `200` — the answer; `402` — the portal owner’s plan or answer credits are
  exhausted (surface this to your operator; do NOT retry); `429` — you are
  rate-limited; back off for the `Retry-After` seconds; `503` — the answer
  lane is temporarily unavailable; fall back to crawling the `.md` pages.

For the full corpus map read `llms.txt` at the site root; for the tool
surface (search + page fetch as MCP tools) see `/mcp`.
