agents
an agent is a file. specifically a markdown file with .agent.md extension and typed frontmatter. it has a name, a model, a cwd, a toolset, and a body prompt. thats it.
anatomy
---
name: outreach
model: claude-opus
cwd: /customers
tools: [fs.read, fs.write, fs.glob, llm.complete, web.fetch]
schedule: "0 9 * * 1" # optional cron
triggers:
- file_change: /customers/leads/**
- mention: "@outreach"
---
you draft cold emails to robotics founders.
read /about/manifesto.md for voice.
save drafts to /marketing/outreach/YYYY-MM-DD-batch.md.
lifecycle
- you create the
.agent.md— thats it, it exists - someone (you, a trigger, a schedule, a mention) invokes it
- the runner picks it up and starts a run
- the run creates an entry in
/runs/<id>/with status, transcript, artifacts - if successful, the agent's writes land in the drive
running an agent
three ways:
- manual — click
runin the ui - mention —
@outreach please also include yc companiesin any file or comment - trigger — cron schedule or file change or webhook
what agents can do
they call tools. tools are functions. built-ins include filesystem ops, llm calls, web fetch, shell (in sandboxed runners), git, and more. full list at tools.
you can also define custom tools in /.vibe/tools/*.ts. any exported function with a typed signature becomes callable by any agent in the project.
how to think about agents
think of them as coworkers. you write their job description in the prompt. you give them access to the tools they need. you trust them with a scope (the cwd). and then you either call on them or put them on a schedule.
the good news: they dont get tired, they dont need 1:1s, and they leave receipts (the run log). the bad news: they dont always get it right. read the runs. catch regressions early. iterate on the prompt. same as training anyone.
next
- writing agents — full format spec
- tools — every built-in tool
- scheduling — cron, triggers, webhooks