eve / eve-software-factory-template
AGENTS.md5.9k starsChanged 2 days agoApache-2.0View on GitHub
Guidance for AI coding agents working in this repository. The eve Software Factory template: Foreman, an orchestrator agent built on the eve framework that turns work items into reviewed draft pull requests on the configured repository (FACTORY_REPO). Work arrives from GitHub (an issue labeled factory can run unattended once, guarded by a persistent private Blob claim; retries require a trusted explicit @mention; @Foreman mentions from API-verified writers on FACTORY_REPO run attended) and from Linear Agent Sessions. The orchestrator moves every…
- Reads credentials
- Installs packages
Trending
More talk lately.about the whole repository
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
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-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/sanity-copilot-eve-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
3 rules. About 0 are common, 0 are distinctive, and 3 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.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 44
After editing, check LSP diagnostics / pnpm typecheck and fix type errors before moving on.
- Very specific: line 60
If you ever build a RegExp from data, escape it (literal match) and bound the input length.
- 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
The eve Software Factory template: Foreman, an orchestrator agent built on the eve framework that turns work items into reviewed draft pull requests on the configured repository (FACTORY_REPO). Work arrives from GitHub (an issue labeled factory can run unattended once, guarded by a persistent private Blob claim; retries require a trusted explicit @mention; @Foreman mentions from API-verified writers on FACTORY_REPO run attended) and from Linear Agent Sessions. The orchestrator moves every item through four declared subagent stations in order: classifier (triage, fast model) → analyst (plan + acceptance criteria, own repo checkout) → implementer (codes, verifies, pushes a feature branch from its own checkout) → reviewer (independent verdict on the pushed branch, different model vendor, max 2 revision cycles). The orchestrator then opens a draft PR; marking it ready parks on human approval, closing or reopening issues runs as reversible triage, and merging is not in the tool surface. Per-user preferences live in Vercel Blob, alongside a shared, per-repo factory brain (durable notes about the target repository) under a reserved Blob prefix, readable by every run but writable only by trusted callers, and handoff artifacts: long Markdown documents (research memos, analysis detail) that stations pass to each other by id under the reserved artifacts/ prefix instead of inlining them through the orchestrator. The pipeline lives in agent/instructions.ts.
The whole agent is defined under agent/. eve discovers capabilities from the filesystem. See ARCHITECTURE.md for the component map, data flow, trust model, and boundaries.
Setup & commands
pnpm install # install dependencies (Node 24.x)
pnpm dev # eve dev — local TUI; run /model once to link 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
pnpm eval # eve eval — run the evals suite (see tags below; costs real tokens)
eve deploy # deploy to Vercel production (use this, not raw `vercel deploy`)
npx eve info # print the discovered surface + discovery diagnostics
pnpm validate # check + typecheck + eve info in one commandVerify changes with pnpm validate (lint, typecheck, and discovery diagnostics must all report 0 errors / 0 warnings), then exercise the agent in the pnpm dev TUI. The evals suite (pnpm eval --tag fast) guards routing and safety behavior; pnpm eval pipeline/full-pipeline runs the whole line and pushes a real branch, so run it deliberately and against a scratch repo.
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/agent.tsis the toolagent; a connection atagent/connections/linear.tsregisters aslinear; a subagent directoryagent/subagents/classifier/lowers into the toolclassifier. - Authored slots:
agent/agent.ts(model + session budget),agent/instructions.ts(defineInstructions, the orchestrator prompt; resolved at build time, injectingFACTORY_REPO),agent/tools/*.ts(defineTool),agent/connections/*.ts,agent/extensions/*.ts,agent/channels/*.ts,agent/skills/<name>/SKILL.md,agent/subagents/<id>/agent.ts(defineAgent), per-agentsandbox.ts. - Model assignments are centralized in
agent/lib/models.ts(theMODELSmap). Everyagent.tsreads its entry from there (model: MODELS.<agent>) instead of hardcoding a gateway id, so a model swap is a one-line edit in that file. One split is deliberate:implementerruns the strongest coding model on a different vendor thanreviewer, so the review stays independent; keep those two on different vendors. - Extensions:
agent/extensions/<ns>.tsmounts a prebuilt eve extension; the filename is the namespace and its tools appear to the model as<ns>__<tool>(here:github__*from@github-tools/eve-extension). Config keys (include,requireApproval) use bare tool names. - Channels:
github(eve GitHub channel via Vercel Connect, botName resolved from the connector's app slug;onCommentkeeps the mention/ignore rules, resolves the canonicalFACTORY_REPOidentity, verifies sender write permission via GitHub, and stamps repository-bound trust;onIssueacceptslabeledevents whose current labels includefactory, verifies the sender holds at least triage permission, and atomically claimsissue-intake/<lowercase-owner>/<lowercase-repo>/<issue-number>.mdbefore unattended dispatch; published eve does not expose the changed label, so an unrelated label on an unclaimed factory issue can initiate its first run; claims are permanent, storage failures fail closed, and requeue or clarification requires a trusted explicit @mention (see README for delivery limitations);onCheckSuitedispatches only for failed suites onfactory/*pull requests, unattended, with the fix loop capped by counting attempt comments on the PR thread;onPullRequestnever dispatches; public summaries need a separate restricted agent),linear(Agent Sessions; only identified members ofLINEAR_WORKSPACE_IDare accepted and stamped trusted), plus theeveroute-auth channel. - Subagents are the stations. Declared under
agent/subagents/<id>/;descriptionis required (the routing hint) and each station setstool: false, sincedefineAgentno longer carries anoutputSchema. AdefineWorkflowToolatagent/tools/run_<id>.tsis what the orchestrator actually calls: it blocks onctx.agent(id).send(message, { outputSchema })and thenresponse.result(), attaching the schema fromagent/lib/stations/schemas.tsper call. The wrapper can't share the station's own name (run_classifier, notclassifier): eve's compiler rejects a tool and a local subagent with the same public identity,tool: falsenotwithstanding. A declared subagent runs in a fresh child session and inherits nothing from the root (no instructions, skills, connections, tools, or sandbox), so the orchestrator packs everything into themessage, and any capability a station needs lives in the station's own directory (itssandbox.ts, itstools/). Long documents travel between stations as handoff artifacts: the researcher and analyst save them withsave_artifact, downstream stations open them withread_artifact, and the orchestrator relays only the id (the factories live inagent/lib/artifacts/). - Approval-gated tools must not live inside a station. A declared subagent can request input, but nothing is watching a station's own card, so a station tool that returned
user-approvalwould strand the run. Anything needing approval belongs on the root (thegithubextension); station side effects must be inert by construction, likepush_branch(one validated factory feature ref, actual default/protected branches refused, authenticated transfer in a fresh disposable sandbox). agent/lib/trust.tsis the single trust authority. Channels stamp trust at dispatch; approval policies inagent/lib/github/approval.tsread the stamps and returnnot-applicable/user-approval/denied. A new capability never invents its own caller check; gate on the existing predicates.- Station sandboxes share their environment and init logic via
agent/lib/github/repo-sandbox.ts(createFactoryEnvironment,factoryInit): each station'sdefineSandbox(...)opens that environment, thenfactoryInitclones the factory repository and runsFACTORY_SETUP_COMMAND, once per session. All authenticated Git runs in a fresh disposable transfer sandbox throughagent/lib/github/git-transfer.ts; only bounded object bundles enter a station. The GitHub channel's built-in credentialed checkout is disabled. Every environment (root included) passes the sharedFACTORY_SANDBOX_CREATE_OPTIONSfrom that module: one kept snapshot and a 14-day expiration, so template snapshots survive quiet stretches without accumulating. Remote operations target the literal URL with firewall-brokered credentials only in the isolated transfer sandbox; no station ever receives a credentialed policy. - Tools run in the app runtime (full
process.env), one default export per file; station git tools run their commands in the station's sandbox viactx.getSandbox(environment), importing that station's ownenvironmentexport from itssandbox.ts(the barectx.getSandbox()handle has nosetNetworkPolicy). Gate destructive root tools withapprovalfromeve/tools/approval(here:clear_user_preferences), or with a trust policy fromagent/lib/github/approval.tswhen the gate depends on the caller (here:update_factory_brain, gated byfactoryBrainPolicyso unattended runs can't write shared context). - Connections are MCP servers:
linear(https://mcp.linear.app/mcp, app-scoped auth shared throughlinearAuthinagent/lib/constants.ts). Its connection-wideapprovalpredicate denies all tools, including reads, except trusted member sessions from the configuredLINEAR_WORKSPACE_ID. - Skills are load-on-demand. A packaged skill (
<name>/SKILL.md) requiresdescriptionfrontmatter; that description is the routing hint. The skills here arewriting-quality,triaging-issues, andgithub-linear-bridging. Skills are per-agent: stations don't see the root's skills. - Evals live in
evals/(defineEval, one file per case;evals.config.tsholds run-wide config;t.judgeuses eve's default evaluation model,typesafe-ai/jev). Category directories are the failure taxonomy (routing/,safety/,pipeline/);helpers.tscarries the shared write-tool list so read-only evals assert deny-by-default (notCalledToolover the whole list). Tags:fast(cheap loop),slow,needs-connect(asserts calls that must succeed against real Connect auth),pipeline(pushes a real branch; opt-in). - 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
NodeNextresolution (relative imports need a.jsextension). Preferconst, arrow functions, optional chaining / nullish coalescing. - Validate tool input/output with
zodschemas. - 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.ts: no em dashes, no machine-made words, no bold for emphasis. It carries behavior only, never framework plumbing (how approvals render, sign-in flows) or references to tools and skills the reading agent can't access — station instructions especially, since stations see none of the root's surface.
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 (GITHUB_CONNECTOR,LINEAR_CONNECTOR); GitHub and Linear auth is brokered by Vercel Connect (tokens resolved per call, never exposed to the model) and Blob auth is via the project's OIDC token.FACTORY_REPOis required at module load (requireEnv), so a missing value fails discovery;FACTORY_SETUP_COMMANDis optional. - Git safety is structural; keep it that way. Authenticated Git must run in a new transfer VM, never a station or station-derived snapshot. Import only object bundles, never environment, configuration, hooks, executables, or processes. Use the literal factory URL, clean environment and Git configuration, explicit refspec, and disabled hooks.
pushBranchalso verifies the actual default branch and protection through GitHub, enforces the factory prefix, and never force-pushes. Do not restore the default GitHub channel checkout or station-wide credential policies. - Respect the trust model. Trust is stamped at dispatch by the channels; unattended runs are denied writes (except labels, comments scoped to their stamped intake issue, close/reopen, and draft PRs) rather than parked. When adding a tool or connection, pick its policy from
agent/lib/github/approval.ts(or the trust predicates) instead of hardcoding"never". - If you ever build a
RegExpfrom data, escape it (literal match) and bound the input length. - Gate irreversible or high-impact actions behind
approval(here:clear_user_preferences, plus the ship-gate policies on the GitHub extension). - Every reserved Blob prefix is declared in the namespace registry in
agent/lib/blob.ts, alongside the shared read/write/delete document helpers all Blob tools go through. Any general-purpose Blob tool added later must consult the registry's guards before acting, so a managed document can't be reached through a generic file operation; add a namespace there, never as a loose constant in a feature module. - For per-user storage, derive the key from the resolved principal (
ctx.session.auth.current), never from model input — seeagent/lib/user-preferences.ts. The preference files live under the reserveduser-preferences/Blob prefix, reachable only through the principal-scoped preference tools. - The shared factory brain derives its key from
FACTORY_REPO, never from model input or a caller principal — seeagent/lib/factory-brain.ts. It lives under the reservedfactory-brain/Blob prefix, reachable only throughread_factory_brain/update_factory_brain; writes are gated byfactoryBrainPolicy(unattended runs denied, trusted callers direct, everyone else parks) so an untrusted issue body can't poison the context every future run reads. - Handoff artifacts live under the reserved
artifacts/Blob prefix, reachable only throughsave_artifact/read_artifact— seeagent/lib/artifacts/config.ts. Ids are model-supplied on read, so every id must pass the anchoredARTIFACT_ID_PATTERN(no dots or slashes) before it is interpolated into a Blob key; that is what keeps a station from addressing the brain or a preference file through the artifact tools. Saves never overwrite and are size-bounded, which keeps both tools inert enough to live ungated inside a station.
Before committing
pnpm validatepasses (Ultracite check,tsc, andeve infowith 0 errors / 0 warnings).- 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.

