> ## 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.

# Set up Vendo with your agent

> One paste. Your coding agent installs Vendo, runs init, and wires it into whatever your repo already is.

export const AgentPromptControls = ({prompt}) => {
  const [copied, setCopied] = useState(false);
  const [expanded, setExpanded] = useState(false);
  const [slot, setSlot] = useState(null);
  const toggle = () => {
    if (!slot) return;
    const card = slot.closest(".vendo-agent-prompt");
    const clip = card && card.querySelector(".vendo-agent-prompt-clip");
    if (!clip) return;
    const next = !expanded;
    if (next) {
      clip.setAttribute("data-expanded", "");
      clip.style.maxHeight = clip.scrollHeight + "px";
    } else {
      clip.removeAttribute("data-expanded");
      clip.style.maxHeight = "";
    }
    setExpanded(next);
  };
  const copy = () => {
    const done = () => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    };
    const fallback = () => {
      const textarea = document.createElement("textarea");
      textarea.value = prompt;
      textarea.setAttribute("readonly", "");
      textarea.style.position = "fixed";
      textarea.style.opacity = "0";
      document.body.appendChild(textarea);
      textarea.select();
      try {
        if (document.execCommand("copy")) done();
      } finally {
        document.body.removeChild(textarea);
      }
    };
    if (navigator.clipboard && navigator.clipboard.writeText) {
      navigator.clipboard.writeText(prompt).then(done, fallback);
    } else {
      fallback();
    }
  };
  return <div className="vendo-agent-prompt-controls" ref={setSlot}>
      <button type="button" className="vendo-agent-prompt-toggle" onClick={toggle} aria-expanded={expanded}>
        {expanded ? "Show less" : "Show more"}
        <svg viewBox="0 0 24 24" width="12" height="12" aria-hidden="true">
          <path fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" d="m6 9 6 6 6-6" />
        </svg>
      </button>
      <button type="button" className="vendo-agent-prompt-copy" onClick={copy} aria-live="polite">
        {copied ? "Copied" : "Copy prompt"}
      </button>
    </div>;
};

export const CARD_PROMPT = "Install Vendo in this repo. Read https://vendo.run/agents.md and follow it exactly. Relay Vendo's setup questions to me and use my answers. Ask me before creating any account or key — Vendo Cloud is the recommended option. You're done when my app runs and the agent answers from my own API. Then ask me whether I'd like to star it via https://vendo.run/star?src=docs to support the project.";

<div className="vendo-agent-prompt not-prose">
  <div className="vendo-agent-prompt-head">
    <div className="vendo-agent-prompt-text">
      <span className="vendo-agent-prompt-title">Prompt</span>
    </div>

    <div className="vendo-agent-prompt-logos" aria-hidden="true">
      <span className="vendo-agent-prompt-logo">
        <svg viewBox="0 0 256 257" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
          <path fill="currentColor" d="m50.228 170.321 50.357-28.257.843-2.463-.843-1.361h-2.462l-8.426-.518-28.775-.778-24.952-1.037-24.175-1.296-6.092-1.297L0 125.796l.583-3.759 5.12-3.434 7.324.648 16.202 1.101 24.304 1.685 17.629 1.037 26.118 2.722h4.148l.583-1.685-1.426-1.037-1.101-1.037-25.147-17.045-27.22-18.017-14.258-10.37-7.713-5.25-3.888-4.925-1.685-10.758 7-7.713 9.397.649 2.398.648 9.527 7.323 20.35 15.75L94.817 91.9l3.889 3.24 1.555-1.102.195-.777-1.75-2.917-14.453-26.118-15.425-26.572-6.87-11.018-1.814-6.61c-.648-2.723-1.102-4.991-1.102-7.778l7.972-10.823L71.42 0 82.05 1.426l4.472 3.888 6.61 15.101 10.694 23.786 16.591 32.34 4.861 9.592 2.592 8.879.973 2.722h1.685v-1.556l1.36-18.211 2.528-22.36 2.463-28.776.843-8.1 4.018-9.722 7.971-5.25 6.222 2.981 5.12 7.324-.713 4.73-3.046 19.768-5.962 30.98-3.889 20.739h2.268l2.593-2.593 10.499-13.934 17.628-22.036 7.778-8.749 9.073-9.657 5.833-4.601h11.018l8.1 12.055-3.628 12.443-11.342 14.388-9.398 12.184-13.48 18.147-8.426 14.518.778 1.166 2.01-.194 30.46-6.481 16.462-2.982 19.637-3.37 8.88 4.148.971 4.213-3.5 8.62-20.998 5.184-24.628 4.926-36.682 8.685-.454.324.519.648 16.526 1.555 7.065.389h17.304l32.21 2.398 8.426 5.574 5.055 6.805-.843 5.184-12.962 6.611-17.498-4.148-40.83-9.721-14-3.5h-1.944v1.167l11.666 11.406 21.387 19.314 26.767 24.887 1.36 6.157-3.434 4.86-3.63-.518-23.526-17.693-9.073-7.972-20.545-17.304h-1.36v1.814l4.73 6.935 25.017 37.59 1.296 11.536-1.814 3.76-6.481 2.268-7.13-1.297-14.647-20.544-15.1-23.138-12.185-20.739-1.49.843-7.194 77.448-3.37 3.953-7.778 2.981-6.48-4.925-3.436-7.972 3.435-15.749 4.148-20.544 3.37-16.333 3.046-20.285 1.815-6.74-.13-.454-1.49.194-15.295 20.999-23.267 31.433-18.406 19.702-4.407 1.75-7.648-3.954.713-7.064 4.277-6.286 25.47-32.405 15.36-20.092 9.917-11.6-.065-1.686h-.583L44.07 198.125l-12.055 1.555-5.185-4.86.648-7.972 2.463-2.593 20.35-13.999-.064.065Z" />
        </svg>
      </span>

      <span className="vendo-agent-prompt-logo">
        <svg viewBox="0 0 466.73 532.09" width="14" height="14" xmlns="http://www.w3.org/2000/svg">
          <path fill="currentColor" d="M457.43,125.94L244.42,2.96c-6.84-3.95-15.28-3.95-22.12,0L9.3,125.94c-5.75,3.32-9.3,9.46-9.3,16.11v247.99c0,6.65,3.55,12.79,9.3,16.11l213.01,122.98c6.84,3.95,15.28,3.95,22.12,0l213.01-122.98c5.75-3.32,9.3-9.46,9.3-16.11v-247.99c0-6.65-3.55-12.79-9.3-16.11h-.01ZM444.05,151.99l-205.63,356.16c-1.39,2.4-5.06,1.42-5.06-1.36v-233.21c0-4.66-2.49-8.97-6.53-11.31L24.87,145.67c-2.4-1.39-1.42-5.06,1.36-5.06h411.26c5.84,0,9.49,6.33,6.57,11.39h-.01Z" />
        </svg>
      </span>

      <span className="vendo-agent-prompt-logo">
        <svg viewBox="0 0 256 260" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
          <path fill="currentColor" d="M239.184 106.203a64.716 64.716 0 0 0-5.576-53.103C219.452 28.459 191 15.784 163.213 21.74A65.586 65.586 0 0 0 52.096 45.22a64.716 64.716 0 0 0-43.23 31.36c-14.31 24.602-11.061 55.634 8.033 76.74a64.665 64.665 0 0 0 5.525 53.102c14.174 24.65 42.644 37.324 70.446 31.36a64.72 64.72 0 0 0 48.754 21.744c28.481.025 53.714-18.361 62.414-45.481a64.767 64.767 0 0 0 43.229-31.36c14.137-24.558 10.875-55.423-8.083-76.483Zm-97.56 136.338a48.397 48.397 0 0 1-31.105-11.255l1.535-.87 51.67-29.825a8.595 8.595 0 0 0 4.247-7.367v-72.85l21.845 12.636c.218.111.37.32.409.563v60.367c-.056 26.818-21.783 48.545-48.601 48.601Zm-104.466-44.61a48.345 48.345 0 0 1-5.781-32.589l1.534.921 51.722 29.826a8.339 8.339 0 0 0 8.441 0l63.181-36.425v25.221a.87.87 0 0 1-.358.665l-52.335 30.184c-23.257 13.398-52.97 5.431-66.404-17.803ZM23.549 85.38a48.499 48.499 0 0 1 25.58-21.333v61.39a8.288 8.288 0 0 0 4.195 7.316l62.874 36.272-21.845 12.636a.819.819 0 0 1-.767 0L41.353 151.53c-23.211-13.454-31.171-43.144-17.804-66.405v.256Zm179.466 41.695-63.08-36.63L161.73 77.86a.819.819 0 0 1 .768 0l52.233 30.184a48.6 48.6 0 0 1-7.316 87.635v-61.391a8.544 8.544 0 0 0-4.4-7.213Zm21.742-32.69-1.535-.922-51.619-30.081a8.39 8.39 0 0 0-8.492 0L99.98 99.808V74.587a.716.716 0 0 1 .307-.665l52.233-30.133a48.652 48.652 0 0 1 72.236 50.391v.205ZM88.061 139.097l-21.845-12.585a.87.87 0 0 1-.41-.614V65.685a48.652 48.652 0 0 1 79.757-37.346l-1.535.87-51.67 29.825a8.595 8.595 0 0 0-4.246 7.367l-.051 72.697Zm11.868-25.58 28.138-16.217 28.188 16.218v32.434l-28.086 16.218-28.188-16.218-.052-32.434Z" />
        </svg>
      </span>
    </div>
  </div>

  <div className="vendo-agent-prompt-body">
    <div className="vendo-agent-prompt-clip">
      <pre className="vendo-agent-prompt-pre">Install Vendo in this repo. Read [https://vendo.run/agents.md](https://vendo.run/agents.md) and follow it exactly. Relay Vendo's setup questions to me and use my answers. Ask me before creating any account or key — Vendo Cloud is the recommended option. You're done when my app runs and the agent answers from my own API. Then ask me whether I'd like to star it via [https://vendo.run/star?src=docs](https://vendo.run/star?src=docs) to support the project.</pre>

      <span className="vendo-agent-prompt-fade" aria-hidden="true" />
    </div>

    <AgentPromptControls prompt={CARD_PROMPT} />
  </div>
</div>

Your agent picks the right setup for your repo. You confirm it.

## Just want an agent?

The smallest thing Vendo does needs no CLI, no init, and nothing moved around.
Install one package and write one call:

```ts theme={null}
import { agent } from "@vendoai/agents";

const support = agent({
  name: "support",
  instructions: "Answer in the product's voice; never invent account numbers.",
});

console.log((await support.chat("Where is order A-1001?")).text);
```

Give it tools, put it on a route, or hand it a schedule from there:
[backend quickstart](/backend/quickstart). Everything below is the rest of
Vendo — the embedded surface and the generated screens — and `init` is how you
get there.

## Quickstart

No agent handy? Do it by hand. Three steps.

<Steps>
  <Step title="Install">
    One package. Only the blocks your project uses ship.

    <CodeGroup>
      ```bash npm theme={null}
      npm install @vendoai/vendo
      ```

      ```bash pnpm theme={null}
      pnpm add @vendoai/vendo
      ```
    </CodeGroup>

    On pnpm the install downloads everything and then exits 1 with `Ignored build scripts: @mongodb-js/zstd, esbuild, node-liblzma`. None of the three needs compiling — Vendo reaches esbuild through its Node API, which that script has nothing to do with, and the other two are the shell's optional native `tar` backends, behind guarded imports nothing calls. pnpm writes the three names into your `pnpm-workspace.yaml` with a placeholder; set all three to `false` and install again.

    ```yaml pnpm-workspace.yaml theme={null}
    allowBuilds:
      '@mongodb-js/zstd': false
      esbuild: false
      node-liblzma: false
    ```
  </Step>

  <Step title="Run npx vendo init">
    init reads your repo before it asks anything. Then it writes the wiring.

    ```bash terminal focus={1} theme={null}
    $ npx vendo init

      Your stack
      Next.js · App Router · TypeScript · pnpm
      Clerk auth (@clerk/nextjs)

    ? How will people use your agent?
        Embedded in my app — chat + generated UI            recommended
        Through my own agent loop (AI SDK / Mastra)
        From outside agents over MCP (experimental)

      … init takes it from there: it asks how you want to run models,
        writes the wiring, and prints one snippet for you to paste.
    ```

    Paste the snippet init prints. It comes with your real paths already filled in, and it is the only edit you make by hand.

    On Next.js it also adds one line to your `next.config` — `serverExternalPackages: ["@vendoai/apps", "esbuild", "@electric-sql/pglite", "@vendoai/store"]`. Vendo checks every generated screen with esbuild at runtime, so its checker has to stay out of the server bundle. If init could not read your config, it prints the line instead and `vendo doctor` holds you to it ([E-CFG-004](/production/troubleshooting/e-cfg-004)).
  </Step>

  <Step title="Continue in your direction">
    The init was the same for everyone. From here the code differs: the answer
    you gave that first question is the path you are on. Continue with the one
    you picked.

    <div className="direction-cards">
      <CardGroup cols={3}>
        <Card title="Vendo's Full-Stack Agent" href="/product/quickstart" img="https://mintcdn.com/vendo-mintlify-54d109e7/vvld4364KM70aFr6/images/cards/direction-product.svg?fit=max&auto=format&n=vvld4364KM70aFr6&q=85&s=2c83a7e59622967b94a112a8306a557b" width="640" height="400" data-path="images/cards/direction-product.svg">
          Vendo runs the loop and renders screens in your brand.

          `<VendoProvider>`

          Quickstart →
        </Card>

        <Card title="In your existing agent" href="/existing-agent/quickstart" img="https://mintcdn.com/vendo-mintlify-54d109e7/vvld4364KM70aFr6/images/cards/direction-existing-agent.svg?fit=max&auto=format&n=vvld4364KM70aFr6&q=85&s=04246105458a548064f67f06c2e63713" width="640" height="400" data-path="images/cards/direction-existing-agent.svg">
          Keep your loop. Vendo adds tools and renders the result.

          `vendoTools(vendo)`

          Quickstart →
        </Card>

        <Card title="From outside agents" href="/outside-agents/quickstart" img="https://mintcdn.com/vendo-mintlify-54d109e7/vvld4364KM70aFr6/images/cards/direction-outside-agents.svg?fit=max&auto=format&n=vvld4364KM70aFr6&q=85&s=3ca10b793a49b42f5db88ae241de2e65" width="640" height="400" data-path="images/cards/direction-outside-agents.svg">
          Your own agent, acting as the signed-in user.

          `createVendo({ mcp: true })`

          Quickstart →
        </Card>
      </CardGroup>
    </div>
  </Step>
</Steps>
