> ## Documentation Index
> Fetch the complete documentation index at: https://vendo-mintlify-54d109e7.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Instructions

> The product brief your agent reads before every turn, where it lands in the assembled prompt, and the two channels that sit beside it.

The prose your agent reads before every turn.

## The picture

One markdown file says what your product is and how to talk about it. It
becomes the Product section of the system prompt, verbatim.

```md .vendo/brief.md theme={null}
# Maple

Maple is a modern consumer-banking demo with accounts, cards, transactions,
payments, goals, and spending insights. Vendo should act as a concise, warm
banking assistant, use the host API as the signed-in demo user, preserve
integer-cent money semantics, and prefer a generated view when a chart or
table communicates the answer better than prose.
```

<Frame>
  <img src="https://mintcdn.com/vendo-mintlify-54d109e7/vvld4364KM70aFr6/images/maple/brief-voice.png?fit=max&auto=format&n=vvld4364KM70aFr6&q=85&s=a61a6f695429c5a18d922b2c3bde1554" alt="Maple's panel answering a grocery spending question in one short, warm sentence, with the merchants named" width="620" height="280" data-path="images/maple/brief-voice.png" />
</Frame>

This file is where your agent's voice comes from.

## The brief file

`vendo init` drafts it from your graded tool catalog and your code, then leaves
it alone. A brief you have edited is never overwritten by a later run.

What belongs in it: what the product is, who uses it, the house voice, and
what to emphasize. Keep it to prose you would hand a new support hire.

What does not belong in it: policy. Rules about what the agent may do are
[guard directions](/product/how-it-works), and they ride their own section of
the prompt.

`createVendo({ instructions })` is the same slot, for a deployment that holds
its config in code. A non-blank string wins over the file, and a blank one
falls through to it.

```ts app/api/vendo/[...vendo]/route.ts focus={2} theme={null}
export const vendo = createVendo({
  instructions: "Maple is a consumer bank. Be concise and warm.",
  auth: authJs(),
});
```

## Where it lands

The prompt is assembled fresh on every turn, in this order.

<svg viewBox="0 0 560 236" role="img" aria-label="The assembled system prompt, top to bottom: Vendo's operating sections, Product from your brief, the User facts block, Directions from your guard, the theme line, and the knowledge index" style={{ width: "100%", height: "auto", margin: "1.5rem 0" }}>
  <g fill="none" stroke="currentColor" strokeOpacity="0.2">
    <rect x="1" y="1" width="558" height="34" rx="9" />

    <rect x="1" y="79" width="558" height="34" rx="9" />

    <rect x="1" y="118" width="558" height="34" rx="9" />

    <rect x="1" y="157" width="558" height="34" rx="9" />

    <rect x="1" y="196" width="558" height="34" rx="9" />
  </g>

  <rect x="1" y="40" width="558" height="34" rx="9" fill="#6c3bff" fillOpacity="0.06" stroke="#6c3bff" strokeOpacity="0.45" />

  <g fill="currentColor" fontSize="13" fontWeight="600">
    <text x="18" y="23">Vendo's operating sections</text>
    <text x="18" y="101">\[User]</text>
    <text x="18" y="140">Directions</text>
    <text x="18" y="179">Theme</text>
    <text x="18" y="218">Knowledge</text>
  </g>

  <text x="18" y="62" fill="#6c3bff" fontSize="13" fontWeight="600">Product</text>

  <g fill="currentColor" fillOpacity="0.55" fontSize="11.5" textAnchor="end">
    <text x="542" y="23">how to work, how to speak</text>
    <text x="542" y="101">facts you assert about the signed-in user</text>
    <text x="542" y="140">policy steering from your guard</text>
    <text x="542" y="179">one line about your brand</text>
    <text x="542" y="218">an index of your docs</text>
  </g>

  <text x="542" y="62" fill="#6c3bff" fillOpacity="0.75" fontSize="11.5" textAnchor="end">your brief, verbatim</text>
</svg>

A section with nothing to say drops out entirely. The theme line and the
knowledge index ride only the surfaces that can render a screen.

Three channels reach the model, and each has exactly one home:

| Channel                                                               | Where it goes                      |
| --------------------------------------------------------------------- | ---------------------------------- |
| `.vendo/brief.md`, or `createVendo({ instructions })`                 | the Product section, every turn    |
| your guard's `directions`                                             | the Directions section, every turn |
| `.vendo/design-rules.md`, or `createVendo({ apps: { designRules } })` | the screen generator only          |

Directions are policy data. They live in `.vendo/policy.json` under
`directions`, or inline on the policy you pass the guard.

Design rules are the house style for [generated screens](/generated/apps).
The file is re-read on every generation, so an edit applies to the next screen
with no restart.

```md .vendo/design-rules.md theme={null}
Lead with the number the user asked for, then the breakdown.
Never put more than six series on one chart.
```

Bring your own agent loop and none of these channels apply, because that agent
runs on your system prompt rather than Vendo's. The block to paste there is on
[Quickstart: apps](/generated/quickstart).

## Where to go next

The brief is what your agent knows about you. These two are what it knows
about the moment.

<Columns cols={3}>
  <Card title="Context" icon="user" href="/customize/context">
    Who is asking, and what their screen shows.
  </Card>

  <Card title="Knowledge" icon="book-open" href="/customize/knowledge">
    Answers from your docs, with citations.
  </Card>

  <Card title="Theming" icon="palette" href="/customize/theming">
    The token file every surface renders through.
  </Card>
</Columns>
