Where to Go Next
The Spoke & Mirror dispatcher started as a generic persona in a terminal. It now quotes from a catalog, remembers bikes, chooses a playbook by customer tier, and pauses expensive bookings for approval. Customers can reach it on the web or in Slack, and production routes enforce fail-closed auth.
You built each capability by adding a file in a predictable place. That is the idea to carry out of this course: an agent is a directory.
What you built, by the folders
The dispatcher walked the first six steps of that idea:
- Pinned a model in
agent/agent.ts. - Started with one file, the persona in
agent/instructions.md. - Taught it procedures with a dynamic skill in
agent/skills/. - Gave it hands with five tools in
agent/tools/. - Let it run code safely by seeding the
agent/sandbox/workspace. - Put it where people are with
agent/channels/(web + Slack) and real auth.
eve supplied the approval queue, streaming protocol, Slack credential handling, and session store. You wrote the shop's behavior.
What eve was running underneath
- AI Gateway routed every model call. That
anthropic/claude-opus-4.8id you pinned back in 1.1 is a gateway route, which is why you never juggled a provider key. - Workflows made runs durable. A workflow preserved the $180 booking while it waited for approval in Section 3, then resumed it from the exact step after a yes.
- Sandbox kept execution isolated. The workspace you seeded in Section 2 ran in an isolated environment.
- Connect brokered access. Slack reached the agent through Connect's scoped credentials, so tokens never sat in your source.
You define the agent as a directory, and eve assembles the production machinery underneath it. You define the agent; Vercel runs it.
The three folders the shop didn't need (yet)
This bike shop did not need three of eve's directories. Add one when the corresponding need appears:
connections/: when the agent needs a system you don't own. Right now the catalog is a local file. The day the shop wants live parts availability from a supplier, you'd add a connection to that supplier's MCP or API. The model gets the supplier's tools, and eve brokers the credentials so they never reach the model. Reach for it the first time you think "the agent needs data from their system, not ours."
subagents/: when one job deserves its own specialist. Our dispatcher is a generalist. A difficult intermittent-creak diagnosis might benefit from a focused prompt and narrower toolset. Put a diagnosis specialist in agent/subagents/ and let the dispatcher delegate to it. The child runs in its own context and reports back. Use a subagent when the task needs a different set of instructions and tools.
schedules/: when the agent should act on its own clock. Everything you built waits to be asked. A schedule lets the agent start work on a cadence: a nightly sweep that texts customers whose bikes are ready for pickup, or a Monday digest of the week's bookings to the shop's Slack. One file in agent/schedules/ with a cron expression. Reach for it the first time you catch yourself wanting the agent to initiate.
Ship something
To keep exploring, change the shop. Add a report_damage tool that files a photo, give pros a bulk_book skill, or schedule reminders for overdue pickups.
The complete dispatcher lives at vercel-labs/bike-shop-agent. Diff your build against it if anything drifted, or fork it as the starting point for your own.
You can now ship a durable agent that people reach through authenticated channels, and you can inspect its behavior by listing a directory. Build one that makes your work easier.
Was this helpful?