---
title: "Building Agents with eve"
description: "Build a production bike shop dispatcher agent with eve, from its first typed tool to a deployed app behind Slack, a web dashboard, real auth, and human approval."
canonical_url: "https://vercel.com/academy/building-agents-with-eve"
md_url: "https://vercel.com/academy/building-agents-with-eve.md"
docset_id: "vercel-academy"
doc_version: "1.0"
last_updated: "2026-08-09T04:11:11.613Z"
content_type: "course"
lessons: 14
estimated_time: 
lesson_urls:
  - "https://vercel.com/academy/building-agents-with-eve/scaffold-the-dispatcher.md"
  - "https://vercel.com/academy/building-agents-with-eve/your-first-tool.md"
  - "https://vercel.com/academy/building-agents-with-eve/drive-it-over-http.md"
  - "https://vercel.com/academy/building-agents-with-eve/find-real-openings.md"
  - "https://vercel.com/academy/building-agents-with-eve/remember-the-bikes.md"
  - "https://vercel.com/academy/building-agents-with-eve/a-playbook-per-tier.md"
  - "https://vercel.com/academy/building-agents-with-eve/book-a-repair.md"
  - "https://vercel.com/academy/building-agents-with-eve/pause-for-a-signoff.md"
  - "https://vercel.com/academy/building-agents-with-eve/a-web-dashboard.md"
  - "https://vercel.com/academy/building-agents-with-eve/add-slack.md"
  - "https://vercel.com/academy/building-agents-with-eve/stamp-identity.md"
  - "https://vercel.com/academy/building-agents-with-eve/lock-the-doors.md"
  - "https://vercel.com/academy/building-agents-with-eve/deploy-agent-to-vercel.md"
  - "https://vercel.com/academy/building-agents-with-eve/where-to-go-next.md"
---

<agent-instructions>
Vercel Academy — structured learning, not reference docs.
Lessons are sequenced.
Adapt commands to the human's actual environment (OS, package manager, shell, editor) — detect from project context or ask, don't assume.
The lesson shows one path; if the human's project diverges, adapt concepts to their setup.
Preserve the learning goal over literal steps.
Quizzes are pedagogical — engage, don't spoil.
Quiz answers are included for your reference.
</agent-instructions>

# Building Agents with eve

\*\*Note: This Course Is in Beta\*\*

You're getting early access to this course as it's being refined. Have feedback? Please share it in the widget at the bottom of each lesson.

The best bike shop employees diagnose the problem before recommending work. They quote from the shop's catalog, know which repair slots are open, and remember a customer's bikes. They also know when an expensive decision needs the customer's sign-off.

An agent can handle repetitive intake, scheduling, and common questions. The bike shop is our example, but the same decisions show up in agents built for other domains.

We're going to build a production bike shop dispatcher with eve, a filesystem-first framework for durable agents. Think of eve as Next.js for agents. **An agent is a directory:** instructions live in one file, tools in a folder, and channels in another. One agent can run in the terminal, over HTTP, and inside Slack without separate implementations for each surface.

## Why do we need a framework?

Before Next.js, every web app made the same plumbing decisions from scratch: where routes live, how rendering works, how it deploys. Next.js made those calls so you could spend your time on the app instead of the scaffolding around it.

Calling a model is the easy afternoon-demo part. Production work begins around it: deciding where instructions live, how tools are registered, and what happens when a run dies halfway through. Without a framework, each project makes those decisions again.

eve provides those conventions. Instructions are Markdown, tools are TypeScript files in a folder, and the runtime handles durability, approvals, and channels.

This is what "an agent is a directory" buys you: **the filename is the API.** A file at `agent/tools/lookup_service.ts` becomes a tool called `lookup_service`. A file in `channels/` gives the agent another place to run. The directory is the registry.

The project is **Spoke & Mirror Cyclery's dispatcher**. By the end, it will be deployed and taking bookings. If a step doesn't line up, compare your work with the finished build at [vercel-labs/bike-shop-agent](https://github.com/vercel-labs/bike-shop-agent).

Commit after each lesson so you have a checkpoint to roll back to.

## What you'll build

We build the dispatcher bottom-up, then cross the gap into production:

**A working agent with real tools:**

- Scaffold an eve agent and give it a front-desk persona
- Add typed tools that quote from a real service catalog and find open slots
- Drive it over the same stable HTTP session API every eve app exposes

**An agent with memory and judgment:**

- Remember a customer's bikes across turns with durable session state
- Load a different playbook per membership tier with a dynamic skill
- Park expensive bookings for human approval, then resume the exact step

**The same agent, everywhere your users are:**

- Put it behind a web dashboard with `useEveAgent`
- Add Slack as a channel without touching a single tool
- Stamp authenticated identity at the door that drives the per-tier desk

**Shipped to production:**

- Replace placeholder auth with a real, fail-closed policy
- Build and deploy to Vercel, then smoke-test the live agent

## Prerequisites

- Node.js 24+ and npm installed
- A Vercel account (free tier works)
- A model credential, easiest through the Vercel AI Gateway, or a linked Vercel project
- Enough terminal comfort to run `curl`

## Course sections

### Section 1: Your First Agent

Scaffold the dispatcher, give it the Spoke & Mirror persona, add its first typed tool, and drive it over the HTTP session API.

### Section 2: Give It a Memory and a Brain

Add a second tool, durable per-session state that remembers the customer's bikes, and a dynamic skill that changes the desk per membership tier.

### Section 3: Put a Human in the Loop

Watch the agent book an expensive job unsupervised, then gate it on cost-based human approval that pauses and resumes the durable session.

### Section 4: Meet Your Users Where They Are

Put the same agent behind a web dashboard and Slack without touching tool code, then stamp authenticated identity that feeds the per-tier playbook.

### Section 5: Ship It

Swap placeholder auth for a real fail-closed policy, deploy the dispatcher to Vercel, and smoke-test it live.


---

[Full course index](/academy/llms.txt) · [Sitemap](/academy/sitemap.md)
