GitHub maintainer
- GitHub
- Linear
- Resend
Kody, a personal GitHub maintainer agent that emails you a weekly digest of open issues, acts on your email replies, summarizes new pull requests, answers @mentions, and works delegated Linear issues.
- GitHub
- Linear
- Resend
agent/agent.tstypescriptimport { defineAgent } from "eve";
/**
* Root agent runtime configuration.
*
* @remarks
* Sets the model and the session budget for Kody, the GitHub maintainer agent; the rest of the
* agent's surface (channels, connections, tools, skills, subagents) is discovered from the
* filesystem under `agent/`. Conversation history is compacted once it reaches 75% of the context
* window, and the per-session output token limit caps runaway sessions. `@vercel/connect` is
* externalized from the build as a temporary workaround until eve handles transitive Connect
* imports from `@github-tools/sdk` without configuration.
*/
export default defineAgent({
build: { externalDependencies: ["@vercel/connect"] },
compaction: { thresholdPercent: 0.75 },
limits: {
maxOutputTokensPerSession: 20_000,
},
model: "anthropic/claude-fable-5",
});
Kody (GitHub Maintainer) eve Template
Kody is a personal GitHub maintainer agent built on eve, made for freelancers, solo maintainers, and anyone who runs a repo alongside everything else. Every Monday it emails you a digest of your repo's open issues, and you reply to act on it ("create Linear issues for #1 and #2 and assign them to me"). Between digests it keeps working the repo: summarizing new pull requests, answering @mentions, and handling the Linear issues you delegate. You stay in your inbox, Kody works the tracker.
- Digests your issue tracker weekly. A cron schedule fetches all open issues on your repo, groups them (needs attention, recent activity, stale), cites every issue as #N, and sends the digest by email through the Resend MCP tools.
- Acts on email replies. Inbound replies land on the Resend chat channel; the agent resolves the referenced issue numbers against GitHub, does what was asked (comment, label, close, create Linear issues), and replies on the same thread.
- Summarizes new pull requests. When a PR opens, Kody posts one orienting comment: what the PR does and why, plus a table breaking down the changed files. PRs opened by bots are skipped.
- Works in Linear. Delegate issues to the agent or mention it in Linear Agent Sessions ("email me a summary of this issue"), and it works the issue with the Linear MCP tools.
- Answers GitHub mentions. @Kody on an issue or PR gets an in-thread reply, cross-referencing Linear when it helps.
- Remembers your preferences. Standing preferences (a preferred email address, how you like the digest grouped, a default Linear team) live in Vercel Blob, keyed to the resolved principal.
Deploy
Deploying with the button provisions everything the agent needs and wires it up for you:
- a GitHub connector (sets
GITHUB_CONNECTOR, with the trigger pointed at/eve/v1/github), - a Linear connector (sets
LINEAR_CONNECTOR, with the trigger pointed at/eve/v1/linear), - a Vercel Blob store for the preference tools,
- an Upstash Redis store (sets
REDIS_URL) for the email channel's thread state, - prompts for the Resend API key, webhook secret, sender address, and digest repo and recipient.
After it deploys, point Resend's inbound webhook at https://<deployment>/eve/v1/resend (see Resend below).
To set things up by hand instead, deploy with eve deploy (it wraps vercel deploy --prod; the raw command cannot auto-detect the eve framework) and provision the integrations first:
GitHub and Linear connectors
Create the connectors with the Vercel CLI and point their triggers at the routes the agent serves:
Set GITHUB_CONNECTOR and LINEAR_CONNECTOR to the printed UIDs in the project's environment.
Resend
Set RESEND_API_KEY (used by both the email channel and the Resend MCP connection) and RESEND_WEBHOOK_SECRET, then point Resend's inbound webhook at https://<deployment>/eve/v1/resend so replies reach the agent. Set RESEND_FROM_ADDRESS to a verified sender on your Resend domain, and optionally RESEND_FROM_NAME (defaults to "Kody"); the email channel and the system prompt both read them, so every email the agent sends carries the same identity.
Redis, Blob, and digest config
REDIS_URL: thread state for the email channel (@chat-adapter/state-redis). Any Redis works; the Upstash for Redis marketplace integration sets the variable automatically when you connect a store.- A Vercel Blob store connected to the project, for the preference tools:
vercel blob create-store <name> --access public --yes. DIGEST_REPO(e.g.owner/repo) andDIGEST_EMAIL: what the weekly digest covers and who receives it. Both are required at build time; a missing value fails discovery with a clear error instead of deploying a digest that cannot send.
Tech stack
GitHub and Linear credentials are brokered by Vercel Connect; Blob and the model authenticate with the project's Vercel OIDC token. The only static credentials are the Resend API key and inbound webhook secret.
Quick start with an AI coding agent
If you're working with an AI coding agent like Claude Code or Cursor, you can use this prompt to have it help you with building your agent:
What's inside
Pairing with the content agent template
The eve content agent template is a full content assistant: per-surface style skills (blog, LinkedIn, X, release notes, newsletters), a house voice, and a style lint. Instead of merging all of that into Kody, you can deploy it as its own agent and let Kody delegate to it, through eve's remote agents feature, when repo work turns into writing work: release notes for a shipped fix, or a post announcing a feature that just closed out.
- Deploy the content agent template as its own Vercel project.
- Add a remote subagent file to this repo. The filename is the tool name, and
vercelOidc()handles deployment-to-deployment auth with no shared secret:
- Set
CONTENT_AGENT_URLin this project's environment and mention the new subagent inagent/instructions.tsso Kody knows when to hand off.
The remote agent runs in its own deployment with its own skills and connections, and it never sees Kody's conversation history, so Kody packs everything the writer needs into the call message: the issues or PRs the piece covers, the audience, and the surface. The result comes back as a normal tool result, the same shape as the local researcher subagent.
Local development
Link the project you deployed (or a fresh one) and pull its environment:
Then run the development server and link a model provider with /model in the TUI:
You can chat with the agent directly in the dev TUI to exercise the GitHub tools, the Linear and Resend connections, and the preference tools. The webhook surfaces (GitHub mentions, Linear sessions, email replies) run against a deployment.
eve dev never fires schedules on their cron cadence. Trigger the digest by hand with the dev dispatch route:
Ship changes with:
Linting and formatting
This project uses Ultracite (a Biome preset) for linting and formatting:
Customizing
- Behavior: edit
agent/instructions.ts. It describes the whole workflow: ground everything in the real tracker, the weekly digest shape, acting on email replies, Linear sessions, and GitHub mentions. The sending-email rule resolvesRESEND_FROM_ADDRESSat build time. - The digest: the cron expression, subject line, and recipient live in
agent/schedules/weekly-digest.ts; the digest's structure (grouping, needs-attention and stale criteria, one-line summaries) lives inagent/skills/digest-format/SKILL.md. - PR summaries: the
onPullRequesthook and its task prompt live inagent/channels/github.ts. Adjust the dispatch condition there (for example, to include bot PRs or drafts) or the comment's shape. - Approval gates:
agent/tools/github.tssetsrequireApproval: "never"for the reversible issue-conversation writes because email cannot render an approval prompt; adjust the list to re-gate them.clear_user_preferencesstays approval-gated. - Skills: edit or add skills in
agent/skills/. Each folder holds aSKILL.mdplus its reference files. - Model: edit
agent/agent.ts(or run/modelin the dev TUI). - Tools: add or change tools in
agent/tools/. The filename is the tool name.
The agent auto-updates as you edit these files.
Learn more
- eve documentation: the framework powering this agent.
- Vercel Connect: manages the GitHub and Linear credentials.
- Chat SDK: the adapter layer behind the email channel.
- Resend: email sending and inbound webhooks.
- Vercel Blob: object storage for the preference tools.