eve / sanity-copilot-eve-template
AGENTS.md5.9k starsChanged 2 days agoApache-2.0View on GitHub
Guidance for AI coding agents working in this repository. A Slack-based Sanity copilot built on the eve agent framework. Users @mention it in Slack; it manages their Sanity project through the Sanity MCP connection (GROQ queries, schemas, drafts, releases), pulls source material from and drafts into Notion (user-scoped OAuth via Vercel Connect), stores files in a private Vercel Blob store, and remembers each user's standing preferences in eve memory. Its workflow lives in agent/instructions.md. The whole agent is defined under…
- Reads credentials
- Installs packages
1 other project uses a version of this.
Trending
More talk lately.about the whole repository
Most recently taken up by
- vercel-labs/sanity-copilot-eve-templateword for word, first seen Nov 12, 2026
Who's talking about vercel/eve
- @qdrddr.bsky.social“@vercel.com Eve #Agentic #framework uses #filesystem as interface for tools, just drop a #TypeScript code …”Bluesky · Oct 16, 2026 · 8 likes
- @projectnothing.bsky.social“When frameworks like eve break out, it’s a sign: AI agents are no longer side projects—they’re becoming a …”Bluesky · Jun 17, 2026 · 3 likes
- @github-trending-js.bsky.social“📦 vercel / eve ⭐ 5,184 (+40) 🗒 TypeScript The Open Framework for Building Agents”Bluesky · Sep 17, 2026 · 2 likes
- DataDog/dd-trace-js“feat(llmobs): add external experiment recorder”GitHub · Jul 31, 2026 · 2 reactions
- ComposioHQ/composio“chore(deps-dev): bump the npm-development group across 1 directory with 9 updates”GitHub · Nov 6, 2026 · 1 reactions
The biggest 5 of 56 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 56
Talked about on GitHub and Bluesky (56 times).
On GitHub · 49
- Jul 31, 2026feat(llmobs): add external experiment recorder — DataDog/dd-trace-js2 reactions · 5 comments
- Nov 6, 2026chore(deps-dev): bump the npm-development group across 1 directory with 9 updates — ComposioHQ/composio1 reaction · 5 comments
- Nov 3, 2026chore(deps-dev): bump the npm-development group across 1 directory with 8 updates — ComposioHQ/composio1 reaction · 6 comments
- Oct 30, 2026Bump the production-dependencies group across 1 directory with 11 updates — byronwade/rebuzzle.byronwade.com1 reaction · 6 comments
- Oct 30, 2026chore(deps-dev): bump the npm-development group with 7 updates — ComposioHQ/composio1 reaction · 6 comments
44 more on GitHub
- Oct 16, 2026chore(deps-dev): bump the npm-development group across 1 directory with 8 updates — ComposioHQ/composio1 reaction · 6 comments
- Oct 16, 2026chore(deps-dev): bump the npm-development group with 4 updates — ComposioHQ/composio1 reaction · 6 comments
- Oct 13, 2026chore(deps-dev): bump the npm-development group with 3 updates — ComposioHQ/composio1 reaction · 5 comments
- Oct 9, 2026chore(deps-dev): bump the npm-development group across 1 directory with 7 updates — ComposioHQ/composio1 reaction · 6 comments
- Sep 25, 2026chore(deps-dev): bump the npm-development group with 8 updates — ComposioHQ/composio1 reaction · 4 comments
- Sep 14, 2026chore(deps): bump the production-dependencies group across 1 directory with 13 updates — byronwade/rebuzzle.byronwade.com1 reaction · 5 comments
- Sep 11, 2026chore(deps-dev): bump the npm-development group with 5 updates — ComposioHQ/composio1 reaction · 4 comments
- Sep 7, 2026chore(deps): bump the production-dependencies group across 1 directory with 12 updates — byronwade/rebuzzle.byronwade.com1 reaction · 4 comments
- Sep 1, 2026@nuxt/kit missing @nuxt/schema dependency breaks TypeScript with pnpm 12 GVS — nuxt/nuxt1 reaction
- Aug 31, 2026chore(deps): bump the production-dependencies group with 11 updates — byronwade/rebuzzle.byronwade.com1 reaction · 4 comments
- Aug 13, 2026基于 vercel/eve 实现 agents demo 切片 — SawanaLabs/agent-demos1 reaction · 3 comments
- Jul 28, 2026fix(nitro): vercel function rules - preserve relative symlinks — nitrojs/nitro1 reaction · 4 comments
- Jul 3, 2026Add Eve adapter (eve_gateway + eve_local) — paperclipai/paperclip1 reaction · 6 comments
- Jun 30, 2026Install eve skill from vercel/eve — TommyBez/evex1 reaction · 2 comments
- Jun 19, 2026[codex] Read downloads from the sandbox stream — remiconnesson/eve-single-user-agent-starter1 reaction · 1 comment
- Nov 3, 2026[ARCHITECTURE ASSESSMENT] Eve.dev adoption — no control-plane replacement; bounded comparative pilot — mastermindx-market-intelligence/Mastermind0 reactions
- Nov 2, 2026Broken links report — Li-Evan/awesome-jev0 reactions
- Oct 27, 2026Telegram HITL: при нажатии кнопки подтверждения теряется нажавший (auth: null) — в вендоренном eve 0.51.1 нет фикса vercel/eve#4241 — smixs/iva-agent0 reactions · 1 comment
- Oct 26, 2026Broken links report — Li-Evan/awesome-jev0 reactions
- Oct 19, 2026Broken links report — Li-Evan/awesome-jev0 reactions
- Oct 18, 2026T2: Preserve authenticated attachments when continuing copied history — FranciscoMoretti/chat-js0 reactions
- Oct 18, 2026T1/T2: Adopt upstream structured history imports with completed tools and attachments — FranciscoMoretti/chat-js0 reactions
- Oct 17, 2026Research: Eve project primer — setup, models via AI Gateway, approvals, subagents, Next.js mount, deploy — rymanacevedo/business-wiki-agent0 reactions · 2 comments
- Oct 12, 2026Broken links report — Li-Evan/awesome-jev0 reactions
- Oct 11, 2026`vercel dev` stalls silently (no port, no error) when the Next.js dev-manifest config loader exits non-zero — vercel/vercel0 reactions
- Oct 6, 2026Research: custom SPARQL-generation model + separate review layer (prior art: eve + Qwen + Jev data analyst) — wazootech/wazoo-memorybench0 reactions
- Oct 3, 2026[Add] eve (vercel/eve) — PyTorchKR/landscape0 reactions
- Sep 30, 2026Research report - numbered build order, hackathon checklist, runtime pick — VasuBansal7576/return-intelligence-voice0 reactions
- Sep 19, 2026未対応のカードの効果の翻訳を、会話の中で Pull Request として足せるようにする — mokosystem/pokemon-tcg-buddy0 reactions
- Sep 1, 2026sep 2026 — kimtth/azure-openai-llm-notes0 reactions
- Aug 12, 2026Ship an eve and AI SDK memory integration guide — Studio-Moser/Advisaur-MCP0 reactions
- Aug 12, 2026Evaluate eve as a seventh distribution channel — tartinerlabs/skills0 reactions · 2 comments
- Aug 10, 2026epic(ai): the agent harness -- vision, prior art, and the plan to stand behind "or the agent harness itself" — routecraftjs/routecraft0 reactions · 4 comments
- Jul 14, 2026Epic: publish TypeScript SDK and durable Eve approval channel — asiraky/mayi0 reactions · 2 comments
- Jul 13, 2026@ai-sdk/openai: support ordered additional_tools after a normal tool result — vercel/ai0 reactions · 4 comments
- Jul 4, 2026feat(eve): import Agent Runs and OpenTelemetry evidence into fak session ledgers — anthony-chaudhary/fak0 reactions
- Jul 4, 2026test(eve): run eve evals as fak parity and regression witnesses — anthony-chaudhary/fak0 reactions · 7 comments
- Jul 4, 2026feat(eve): lease-gate shared-sandbox subagent fan-out from child session streams — anthony-chaudhary/fak0 reactions · 1 comment
- Jul 4, 2026feat(eve): preflight MCP/OpenAPI connections for scoped auth, allowlists, and approval gates — anthony-chaudhary/fak0 reactions · 1 comment
- Jul 4, 2026feat(eve): compile agent/ directories into fak policy and mount manifests — anthony-chaudhary/fak0 reactions · 1 comment
- Jul 4, 2026epic(eve): Vercel eve integration bridge - filesystem agents, policy lint, evals, and observability — anthony-chaudhary/fak0 reactions
- Jun 23, 2026@vercel/connect/eve: support context-aware Slack installation selection — vercel/vercel0 reactions
- Jun 19, 2026Remove sandbox stream compatibility fix after Eve #117 is released — remiconnesson/eve-single-user-agent-starter0 reactions
- Jun 19, 2026Add Vercel Eve sandbox backend adapter support — sandbox0-ai/sandbox00 reactions
On Bluesky · 7
- Oct 16, 2026@vercel.com Eve #Agentic #framework uses #filesystem as interface for tools, just drop a #TypeScript code into a folder, the filename… — @qdrddr.bsky.social8 likes and reposts · 1 reply
- Jun 17, 2026When frameworks like eve break out, it’s a sign: AI agents are no longer side projects—they’re becoming a new pillar of mainstream software… — @projectnothing.bsky.social3 likes and reposts
- Sep 17, 2026📦 vercel / eve ⭐ 5,184 (+40) 🗒 TypeScript The Open Framework for Building Agents — @github-trending-js.bsky.social2 likes and reposts
- Sep 20, 2026github.com/vercel/eve GitHub - vercel/eve: The Open Framework for Building Agents — @technews4869.bsky.social1 likes and repost
- Aug 11, 2026Cloudflare OS blog: blog.cloudflare.com/cloudflare-os/, github.com/cloudflare/cloudflare-os Vercel eve: vercel.com/blog/introducing-eve ·… — @akash-bhatia.bsky.social1 likes and repost
2 more on Bluesky
- Jul 2, 2026Vercel's eve is a filesystem-first framework for durable AI agents: an agent is a directory of instructions, tools, skills, channels, and… — @agentpalisade.bsky.social1 likes and repost
- Jun 17, 2026The Framework for Building Agents https://github.com/vercel/eve — @laxima-tech.bsky.social1 likes and repost
Other versions1 project uses a version of this.
Word for word · 1
- vercel-labs/sanity-copilot-eve-template★ 5100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,439 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository115 other files it gives its agents.
- AGENTS.mdAGENTS.md
- apps/docs/AGENTS.mdAGENTS.md
- apps/templates/eve-agent-python-template/AGENTS.mdAGENTS.md
- apps/templates/eve-agent-python-template/apps/web/AGENTS.mdAGENTS.md
- apps/templates/eve-chat-template/AGENTS.mdAGENTS.md
- apps/templates/eve-coding-agent-template/AGENTS.mdAGENTS.md
- apps/templates/eve-content-agent-template/AGENTS.mdAGENTS.md
- apps/templates/eve-contentful-agent-template/AGENTS.mdAGENTS.md
- apps/templates/eve-data-analyst-template/AGENTS.mdAGENTS.md
- apps/templates/eve-discord-agent-template/AGENTS.mdAGENTS.md
- apps/templates/eve-llm-council-template/AGENTS.mdAGENTS.md
- apps/templates/eve-mem0-template/AGENTS.mdAGENTS.md
- apps/templates/eve-memory-agent-template/AGENTS.mdAGENTS.md
- apps/templates/eve-slack-agent-template/AGENTS.mdAGENTS.md
- apps/templates/eve-software-factory-template/AGENTS.mdAGENTS.md
- apps/templates/eve-sre-agent-template/AGENTS.mdAGENTS.md
- apps/templates/eve-tanstack-start-template/AGENTS.mdAGENTS.md
- apps/templates/eve-vercel-drives-starter/AGENTS.mdAGENTS.md
- apps/templates/eve-voice-template/AGENTS.mdAGENTS.md
- apps/templates/kody-eve-template/AGENTS.mdAGENTS.md
- apps/templates/marketing-team-eve-template/AGENTS.mdAGENTS.md
- apps/templates/openinstinct/AGENTS.mdAGENTS.md
- apps/templates/personal-agent-template/AGENTS.mdAGENTS.md
- apps/templates/slack-company-brain-template/AGENTS.mdAGENTS.md
- packages/eve-agent-desktop/AGENTS.mdAGENTS.md
- packages/eve-code/AGENTS.mdAGENTS.md
- packages/eve-computer-use/AGENTS.mdAGENTS.md
- packages/eve-custom-skills/AGENTS.mdAGENTS.md
- packages/eve-git/AGENTS.mdAGENTS.md
- packages/eve/src/internal/nitro/AGENTS.mdAGENTS.md
- apps/templates/eve-agent-python-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-chat-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-coding-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-content-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-contentful-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-data-analyst-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-discord-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-llm-council-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-mem0-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-memory-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-slack-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-software-factory-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-sre-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-tanstack-start-template/CLAUDE.mdCLAUDE.md
- apps/templates/eve-vercel-drives-starter/CLAUDE.mdCLAUDE.md
- apps/templates/eve-voice-template/CLAUDE.mdCLAUDE.md
- apps/templates/kody-eve-template/CLAUDE.mdCLAUDE.md
- apps/templates/marketing-team-eve-template/CLAUDE.mdCLAUDE.md
- apps/templates/openinstinct/CLAUDE.mdCLAUDE.md
- apps/templates/personal-agent-template/CLAUDE.mdCLAUDE.md
- apps/templates/sanity-copilot-eve-template/CLAUDE.mdCLAUDE.md
- apps/templates/slack-company-brain-template/CLAUDE.mdCLAUDE.md
- CLAUDE.mdCLAUDE.md
- gh-pr-descriptionSkill
- pr-shepherdSkill
- technical-writingSkill
- test-auditSkill
- create-payment-credentialSkill
- dashboard-chat-best-practicesSkill
- eve-chat-template-eveSkill
- The first 60 shown.
The file
We split this AGENTS.md into the rules it gives an agent
6 rules. About 0 are common, 0 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 43
After editing, check LSP diagnostics / pnpm typecheck and fix type errors before moving on.
- Very specific: line 50
Every dependency in package.json is pinned to an exact version.
- Very specific: line 51
Document exported config with TSDoc (@remarks, @param, @returns, @defaultValue, @see).
- Very specific: line 59
If you ever build a RegExp from data, escape it (literal match) and bound the input length.
- Very specific: line 65
Keep built-in tools to what each agent uses.
- Very specific: line 70
No secrets, node_modules, or build output (.eve, .vercel, .output) staged.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AGENTS.md
Guidance for AI coding agents working in this repository.
Project overview
A Slack-based Sanity copilot built on the eve agent framework. Users @mention it in Slack; it manages their Sanity project through the Sanity MCP connection (GROQ queries, schemas, drafts, releases), pulls source material from and drafts into Notion (user-scoped OAuth via Vercel Connect), stores files in a private Vercel Blob store, and remembers each user's standing preferences in eve memory. Its workflow lives in agent/instructions.md.
The whole agent is defined under agent/. eve discovers capabilities from the filesystem. Offline and live evals live under evals/. See ARCHITECTURE.md for the component map, data flow, and boundaries.
Setup & commands
pnpm install # install dependencies (Node 24.x)
pnpm dev # eve dev: local TUI; run /login once to connect a model provider
pnpm typecheck # tsc (TypeScript, no emit)
pnpm check # ultracite (Biome) lint + format check
pnpm fix # ultracite (Biome) auto-fix
pnpm build # eve build
eve deploy # deploy to Vercel production (use this, not raw `vercel deploy`)
npx eve info # print the discovered surface + discovery diagnostics
pnpm eval:offline # six offline evals on mock models (EVE_MOCK_MODEL=1 eve eval offline)
pnpm eval # three live evals on real models (eve eval live); costs money, not part of validate
pnpm sync:shared # copy shared-references/ into both writing-quality skills (also runs before dev and build)
pnpm validate # shared-reference check + check + typecheck + eve info + eval:offline in one commandThere is no unit-test suite. The checks are six offline evals under evals/offline/ that run the real tools, approvals, memory, and subagent delegation on mock models, so they need no model provider. EVE_MOCK_MODEL=1 swaps every agent's model for a mock from agent/lib/mock-model.ts; never set it on a deployment. Verify changes with pnpm validate (the shared-reference copies must be up to date, lint, typecheck, and discovery diagnostics must all report 0 errors / 0 warnings, and every offline eval must pass), then exercise the agent in the pnpm dev TUI.
Three live evals under evals/live/ (research/quick, review/revise, quality/short-draft) run with pnpm eval. They call real models through the AI Gateway, so every run costs money and they are not part of pnpm validate. They need Gateway credentials for a team that allows the google provider (the decision model is google/gemini-decision-1) and has a credit balance.
eve conventions
- Read the relevant guide in
node_modules/eve/docs/before writing code. Don't invent framework APIs; confirm them against the docs. - Identity comes from the filesystem, never a
namefield. A tool atagent/tools/upload_asset.tsis the toolupload_asset; a connection atagent/connections/sanity.tsregisters assanity. - Authored slots:
agent/agent.ts(model),agent/instructions.md(system prompt),agent/tools/*.ts(defineTool, ordefineWorkflowToolfor durable/delegating tools),agent/connections/*.ts,agent/channels/*.ts,agent/skills/<name>/SKILL.md,agent/subagents/<id>/agent.ts(defineAgent),agent/memory/*.ts(defineMemory),agent/sandbox.ts. Evals are authored outsideagent/:evals/evals.config.ts(defineEvalConfig) andevals/**/*.eval.ts(defineEval). Shared helpers that are not slots live inagent/lib/. This repo also hasagent/subagents/<id>/skills/,agent/subagents/<id>/tools/, andagent/subagents/reviewer/sandbox.ts: subagent sandboxes don't inherit from the root, and the reviewer needs one to read its skill's reference files. - Tools run in the app runtime (full
process.env), one default export per file. Gate destructive tools withapprovalfromeve/tools/approval. A file that exportsdisableTool()fromeve/toolsremoves the built-in tool of the same name:agent/tools/bash.ts,write_file.ts, andedit_file.tsdo that for the root. Connections accept the sameapprovalfield: bothsanity.tsandnotion.tspass a policy that substring-matches the qualified tool name against anAPPROVAL_REQUIRED_TOOLSlist. Sanity gatespatch_documents,publish_documents,unpublish_documents,discard_drafts,version_discard,update_dataset,deploy_schema, anddeploy_studio; Notion gatesnotion-update-pages,notion-move-pages,notion-update-data-source, andnotion-update-view(creation is ungated). - Sanity Context is an optional connection at
agent/connections/sanity-context.ts(connection filenames allow lowercase letters, digits, and dashes only, so no underscore). It is adefineDynamicfromeve/connectionsthat returnsnullunless bothSANITY_CONTEXT_MCP_URLandSANITY_ORGANIZATION_TOKENare set, so a default deployment has no such connection. It is read-only and ungated, and it authenticates with an organization API token shared by every user.instanceKeyis required on a dynamic connection with auth. Don't mention it inagent/instructions.md: the model learns about it from the connection'sdescription, which exists only when the connection does. - Skills are load-on-demand. A packaged skill (
<name>/SKILL.md) requiresdescriptionfrontmatter; that description is the routing hint. Skills here:sanity-best-practices,content-modeling-best-practices,portable-text-conversion,portable-text-serialization,seo-aeo-best-practices,content-experimentation-best-practices, andwriting-quality. - Memory is declared under
agent/memory/<name>.ts(defineMemory).agent/memory/preferences.tsusesfileMemory()scoped withbyPrincipal, and only for aprincipalType: "user"session. eve recalls the user's document into the conversation each turn and generates thepreferences__save_memoryandpreferences__remove_memorytools, so there are no hand-written preference tools. Storage is in-process undereve dev. On Vercel it is the project's private Blob store, the same one the asset tools use, under theeve/memory/prefix. It needs no setup command: pernode_modules/eve/docs/memory/file.md,fileMemory()falls back to the project's attached store (BLOB_STORE_ID, with OIDC) whenEVE_MEMORY_BLOB_STORE_IDis unset. - Subagents are declared under
agent/subagents/<id>/agent.ts(defineAgent, requireddescription). The directory name is the identity (no namespace; it must not collide with a tool name, even when the subagent setstool: false). Both subagents here settool: false, and the root reaches them through thedefineWorkflowToolwrappersagent/tools/research.tsandagent/tools/review_draft.ts. Each wrapper'sexecutebody is marked"use workflow"and callsaskSubagent(agent/lib/subagent.ts), which runsctx.agent(<id>).send(message, { outputSchema })once and returns the validated structured result. Every call is a one-shot fresh child session that ends when the call finishes; nothing carries over between calls. Keep each subagent'sdescriptionin step with its wrapper tool's. A declared subagent inherits nothing from the root (no skills, connections, tools, or sandbox), so the caller passes everything it needs in themessage. Here:researcherandreviewer. The researcher setsdefaultTools: falseand re-adds onlyweb_search(webSearch({ provider: "parallel" })) andweb_fetchunder its owntools/, so it has no sandbox tools. Its model is routed per call withauto()fromeve/models: a decision model reads the research message and picks the deep or the standard research model, and theresearchtool's optionaldepthinput (quick,standard,deep) is prefixed to the message as a routing hint.researchrejects amessageover 15,000 characters. The reviewer setsdefaultTools: falseand re-adds onlyread_file(agent/subagents/reviewer/tools/read_file.ts), which it needs to read its skill's reference files, so it has no shell, file-write, or web tools. It carries its own copy of thewriting-qualityskill underagent/subagents/reviewer/skills/plus its ownsandbox.ts. The two reference files both copies share word for word (ai-phrases-to-avoid.md,plain-english-alternatives.md) have a single source inshared-references/;scripts/sync-shared.mjscopies them into both skills'references/folders onpredevandprebuildand aspnpm sync:shared. Edit the shared files, never the copies. The other three files (SKILL.md,web-content-specs.md,web-writing-best-practices.md) are hand-maintained in each copy and intentionally diverge where the root's references other root-only skills (seo-aeo-best-practices); when editing either copy of those, keep them in step except for that. - Models are all named in
agent/lib/models.ts(ROOT_MODEL,REVIEW_MODEL,DEEP_RESEARCH_MODEL,STANDARD_RESEARCH_MODEL,DECISION_MODEL). Change a model there, not in anagent.ts. - After editing, check LSP diagnostics /
pnpm typecheckand fix type errors before moving on.
Code style
- Linting and formatting are handled by Ultracite (a Biome preset). Run
pnpm checkbefore finishing andpnpm fixto auto-fix. Config is inbiome.jsonc; the kebab-case filename rule is disabled there because eve tools use snake_case names. - TypeScript strict; ESM with
module: esnextandmoduleResolution: bundler(seetsconfig.json). The resolver does not require it, but relative imports in this repo are written with a.jsextension; keep that.package.jsonalso maps#*to./agent/*and#evals/*to./evals/*(for example#lib/reserved-paths.js). Preferconst, arrow functions, optional chaining / nullish coalescing. - Validate tool input/output with
zodschemas. - Every dependency in
package.jsonis pinned to an exact version. Keep it that way when adding or upgrading one, and bump@biomejs/biomeandultracitetogether. - Document exported config with TSDoc (
@remarks,@param,@returns,@defaultValue,@see). Avoid inline//comments; put rationale in the TSDoc block instead. - Prose in markdown files is not hard-wrapped: write each paragraph or bullet as one line.
- Agent-facing text (instructions, skill bodies, tool and subagent descriptions) follows the "How you write" rules in
agent/instructions.md: no em dashes, no machine-made words, no bold for emphasis. The skills vendored from Sanity's Agent Toolkit (every skill underagent/skills/exceptwriting-quality) are exempt, so they stay easy to update from upstream. It carries behavior only, never framework plumbing (sign-in flows, how approvals render) or references to tools and skills the reading agent can't access.
Security
- Never ask the user for API keys, client secrets, or any other credentials.
- Never commit secrets.
.env*is gitignored. Connector UIDs are read from env (SLACK_CONNECTOR,SANITY_CONNECTOR,NOTION_CONNECTOR); Sanity and Notion auth is per-user via Vercel Connect and Blob auth is via the project's OIDC token, so there are no API keys in code. The one static credential isSANITY_ORGANIZATION_TOKEN, used only when the optional Sanity Context connection is enabled; it is read from env and never written in code. - If you ever build a
RegExpfrom data, escape it (literal match) and bound the input length. - Gate irreversible or high-impact actions behind
approval: the destructive tooldelete_assetand connection writes (thesanityandnotionconnections gate the write tools listed above). - For per-user storage, derive the scope from the resolved principal (
ctx.session.auth.current), never from model input. Seeagent/memory/preferences.ts, which scopes memory withbyPrincipaland returnsnullfor any session that is not a signed-in user. - The Blob store is private.
upload_assetalways writes withaccess: "private"and has noaccessinput,download_assetreads throughget(url, { access: "private" })from@vercel/blob, and no asset tool returns a download link. An asset's URL is an identifier for the other asset tools, not a link a person can open. - The asset tools refuse two reserved Blob prefixes (
agent/lib/reserved-paths.ts):eve/memory/, where file memory keeps its documents in the same store, anduser-preferences/, where an older store may still hold per-user preference files. That stops them being used to read or overwrite another user's preferences. download_assetonly accepts URLs on*.blob.vercel-storage.com.- Keep built-in tools to what each agent uses. Root:
read_file(skills read their reference files with it),web_fetch,web_search, andagent, withbash,write_file, andedit_filedisabled. Researcher:web_searchandweb_fetchonly. Reviewer:read_fileonly.
Before committing
pnpm validatepasses (shared-reference check, Ultracite check,tsc,eve infowith 0 errors / 0 warnings, and the offline evals).- No secrets,
node_modules, or build output (.eve,.vercel,.output) staged.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

