Agents as directories, not ad-hoc scripts

Rillet's frontend team numbers two people under Anthony Liang, and it was formed only a few months before the company started routing customer work through agents. The team had settled on a stack — agents built with eve and run on Vercel — but the harder problem was convention. Anthony, who had been building AI applications since the GPT-3.5 era, had already tried the major model providers' SDKs and the open-source frameworks. Each supplied the model loop and little else: where instructions lived, how tools registered, how an agent reached Slack or GitHub were all left to the builder.

He wanted choices everyone at Rillet could follow, including people who had never written TypeScript. eve, Vercel's open-source framework for building, running, and scaling agents, keeps instructions, tools, and skills in a single directory.

agent/

├── agent.ts # Model and configuration

├── instructions.md # Instructions for the agent

├── tools/ # Tools the agent can call

├── skills/ # Knowledge and procedures

├── subagents/ # Agents it can delegate to

├── channels/ # Where people interact with it

└── schedules/ # When it runs on its own

Behavior lives in markdown instructions and skills, tools in TypeScript files whose names become the API. An agent moves from a laptop to Vercel without changing how it behaves, and Rillet manages every deployment in one company-controlled Vercel organization.

“Once I saw eve, it just made total sense. It's like how I felt when I first started using Next.js. It makes it very easy for someone to come on board and understand how an agent is built.”

Anthony Liang Software Engineer @ Rillet

From customer screenshot to merged pull request

A customer request used to scatter across a Linear ticket, a Slack thread, and a hallway conversation; assembling the context took longer than the code. Now customer success opens a Chrome extension next to the Rillet app, highlights what the customer sees, and describes the change. The extension's eve agent captures that context and, when the change is safe and well-scoped, hands it to a coding agent that writes the spec, makes the edit, and opens a pull request assigned to Anthony. A sandboxed browser tests the result and attaches screenshots as proof. Anthony reviews and merges, or requests changes and the agent resumes its session to address them.

Rillet tripled its shipping rate over three months, and its CEO has posted that the company shipped more in recent weeks than in the whole first half of 2026. The CPA team pushes customer requests through an in-house agent called Nebula in as little as two hours. One customer said Rillet had "completely ruined my expectations" for how fast a vendor should make changes.

Connections and credentials without per-app secrets

For agent access to Slack and Linear, Rillet uses Vercel Connect, which hands out short-lived tokens at runtime and refreshes them through its SDK. Long-lived provider secrets stay out of individual applications, and builders maintain fewer credentials; a leaked runtime token expires on its own. On top of that, a Slack bot picks up tickets and opens PRs, while other agents handle incident analysis and Linear board management. Because the conventions are shared, agent work gets reused rather than rebuilt, and building has spread beyond engineering.

One key for every model

Connecting agents directly to Anthropic and OpenAI once meant configuring each provider separately. AI Gateway fronts both behind a single integration, so builders add an agent without new provider connections. In eve, the model is a string in the agent's configuration:

agent.ts

import { defineAgent } from "eve";

export default defineAgent({

model: "zai/glm-5.3",

});

Agents deployed on Vercel authenticate to AI Gateway automatically, so swapping models for a task is a string change rather than an integration change. Usage breakdowns show Anthony which models the team relies on and what they cost.

“Having access to every model with the same key is huge. And the visibility into usage is very helpful: seeing what people are doing, what they're using, setting limits. Especially as we build autonomous agents.”

Anthony Liang Software Engineer @ Rillet

Keeping builder identity company-managed

Builder access to Vercel is handled with Enterprise Managed Users, so builders sign in through Google Workspace single sign-on with company-managed accounts rather than personal ones, and Directory Sync grants or revokes access from assignments in Rillet's identity provider. Rillet set this up itself and moved builders to company-managed accounts in a single transition.

“With Vercel, we can ship fast while keeping accounts company-managed, access automated, and internal tools private by default. Knowing we can control and audit that environment helps me sleep better at night. ”

Ed Hirst Founding IT Lead @ Rillet

Those conventions now feed an effort Anthony describes as an agent factory, in which large features travel the same pipeline as small fixes. One agent writes PRDs and technical specs; another reads Rillet's Linear boards, Miro diagrams, and knowledge base to supply context to the rest. Since eve supports subagents and delegation, each specialized agent is added as another directory in the same framework.

“Vercel's been great as a one-stop shop for everything you need to test things, try out new ideas, and experiment. Being able to deploy your agent, have it built in less than a minute, and see changes that quickly has been huge. ”

Anthony Liang Software Engineer @ Rillet

Background

Rillet is an AI-native ERP platform serving more than 600 customers, with agents doing accounting work inside a real-time general ledger under human approval and a full audit trail. It targets zero-day close, shortening month-end book closing.