Build a Slack agent that answers your team's business questions from your documented dbt models.
Answers in SlackOnly for the people and channels you allow.
Grounded in dbtReads your model docs before it writes a query.
Read-only SQLQueries DuckDB or MotherDuck, and never writes to them.
Build an agent that turns issues into reviewed draft pull requests, from triage and planning to implementation.
GitHub and LinearPicks up tasks where your team already files them.
Four stationsClassifier, analyst, implementer, and reviewer subagents work each task.
Draft pull requestsEvery task ends in a reviewed draft on your repository.
Agents inside your product, over web, voice, or iMessage, with memory for every user.
Web chatInside your app, with long-term memory for each user.
VoiceCalls that run tools and ask for approval.
iMessageThreads that share memory with web and Slack.
D
Dana9:41 AM
@company-brain how are repeat orders trending this quarter?
company-brainAgent9:41 AM
list_modelsFound customers, orders, and payments
get_modelRead the docs for the orders model
query_sqlRan 1 query, returned 3 rows
Repeat customers placed 44% of orders in October, up from 38% in August.
Month
Orders
Repeat
August
412
38%
September
455
41%
October
498
44%
Dynamic where you need it
Write your agent as plain files. When it needs to behave differently for each customer, make any file dynamic.
When the support agent serves
agent/example
instructions.md
An instructions.md file is a complete agent. Describe its role in Markdown, then run eve.
Static in this example. Any file can be dynamic.
# IdentityYou are a support agent.Answer customer questions, look uptheir orders, and escalate anythingyou can't resolve.
instructions/sla.tsdynamic
Add instructions that depend on the customer. Enterprise customers get a one-hour SLA, and Pro customers get a reply within a business day.
Acme Org
Enterprise
1-hour SLA, escalate when stuck
import { defineDynamic, defineInstructions } from "eve/instructions";export default defineDynamic((ctx) => { const plan = ctx.session.auth.current?.attributes.plan; return defineInstructions({ content: plan === "enterprise" ? "Reply within the 1-hour SLA. Escalate anything you can't resolve." : "Reply within one business day.", });});
agent.tsdynamic
Choose the model per customer: a larger model for enterprise conversations.
Skills are Markdown playbooks loaded only when relevant, so the agent gets focused guidance without carrying it in every prompt.
Static in this example. Any file can be dynamic.
---name: refundsdescription: Handle refund requests---Check the order date first. Refundwithin 30 days. After that, offerstore credit.
tools/lookup_order.tsoptional
Drop a TypeScript file in tools/ and the model can call it. The filename becomes the tool name, no registration required.
Static in this example. Any file can be dynamic.
import { defineTool } from "eve/tools";import z from "zod";export default defineTool({ description: "Look up an order by ID", inputSchema: z.object({ orderId: z.string() }), async execute(input) { const res = await fetch( `${process.env.ORDERS_API_URL}/orders/${input.orderId}` ); return res.json(); },});
tools/page_on_call.tsdynamic
Let the agent page the on-call engineer, but only for enterprise customers.
Acme Org
Enterprise
Can page on-call
import { defineDynamic, defineTool } from "eve/tools";import { z } from "zod";import { pageOnCall } from "../lib/pager";export default defineDynamic((ctx) => ctx.session.auth.current?.attributes.plan === "enterprise" ? defineTool({ description: "Page the on-call engineer.", inputSchema: z.object({ summary: z.string() }), execute: ({ summary }) => pageOnCall(summary), }) : null,);
channels/slack.tsoptional
Add channel files to answer customers in Slack, Discord, Teams, or the web with the same agent.
Static in this example. Any file can be dynamic.
import { slackChannel } from "eve/channels/slack";export default slackChannel();
connections/linear.tsoptional
Connections handle auth for services like Linear, GitHub, and Stripe, so the agent can file a bug for a support issue without managing tokens.
Static in this example. Any file can be dynamic.
import { defineMcpClientConnection } from "eve/connections";export default defineMcpClientConnection({ url: "https://mcp.linear.app/mcp",});
subagents/billing/agent.tsoptional
Add subagents for specialized work. The support agent hands billing questions to a billing specialist and uses its answer.
Schedules run agents automatically for jobs like daily digests, continuing durably without an active session.
Static in this example. Any file can be dynamic.
---cron: "0 8 * * *"---Post a summary of yesterday's opentickets to the support channel.
agent/example
instructions/sla.ts
Add instructions that depend on the customer. Enterprise customers get a one-hour SLA, and Pro customers get a reply within a business day.
Acme Org
Enterprise
1-hour SLA, escalate when stuck
import { defineDynamic, defineInstructions } from "eve/instructions";export default defineDynamic((ctx) => { const plan = ctx.session.auth.current?.attributes.plan; return defineInstructions({ content: plan === "enterprise" ? "Reply within the 1-hour SLA. Escalate anything you can't resolve." : "Reply within one business day.", });});
You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.