Work safely on Eve-specific internals in the Eve chat template. Use when changing the Eve agent, withEve routes, eveChannel auth, useEveAgent, ClientSession/SessionState, persisted event logs, stream/resume behavior, connection authorization, Vercel Connect MCP connections, local Eve tools, or upstream Eve API assumptions.
84%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Use this skill to preserve the Eve protocol and durable-session invariants while changing the chat template.
AGENTS.md first. It requires reading the relevant guide under node_modules/eve/dist/docs/public/ before writing code.docs/how-the-chatbot-works.md for architecture changes and docs/setup-and-deploy.md for setup, auth, storage, or deployment changes.rg "useEveAgent|ClientSession|SessionState|content.delta|interaction.opened|eveSession|chat_event|streamIndex|continuationToken|defineMcpClientConnection|defineTool".agent/ defines agent behavior; app/_components/agent-chat.tsx bridges Eve to the web UI; lib/db/* persists app state.pendingUserMessage, stored eveSession, and event rows. Eve owns the remote durable session and stream cursor.chat_event.eventIndex with SessionState.streamIndex. The first orders local Postgres rows; the second resumes /eve/v1/session/:sessionId/stream.withEve(nextConfig): POST /eve/v1/session, POST /eve/v1/session/:sessionId, and GET /eve/v1/session/:sessionId/stream?startIndex=n.betterAuthEveAuth, localDev(), and vercelOidc() in the Eve channel unless deliberately changing local, browser, or Vercel auth behavior.SessionState immediately after Eve returns sessionId and continuationToken; do not wait for the stream to finish.eventIndex; on final snapshot, delete rows beyond the final event length.pendingUserMessage for interruption recovery. Mark it before sending, consume it once in the session page, hide it after a settled event, and clear it after snapshot or authorization skip.JSON.stringify key order.useEveAgent reduces Eve events into renderable messages; the template wraps it with a custom ClientSession to persist and resume sessions.content.delta.data.delta as the new text for its partId. Treat reduced message text and rendered parts as cumulative; content.completed carries a part's whole value.endsTurn from eve/client accepts: turn.settled, session.ended, or a turn.paused awaiting a person. Treat a sign-in interaction.opened (request.kind: "sign-in") as a blocked state for normal text input.turn.paused awaiting only calls as progress, not a settled turn: the turn waits on its tasks and resumes with turn.resumed for the same turnId. Keep following the stream until one of the settling events above.activeChat.session and layer resumed events until the final snapshot catches up.agent/tools/<snake_case>.ts with defineTool(...). Tool filenames become runtime tool names, so keep them ASCII snake_case.agent/connections/<name>.ts with defineMcpClientConnection(...) and connect(process.env.ENV_NAME ?? "local-name").interaction.opened and interaction.settled events.interaction.settled plus a cancelled turn.settled, apply those local events to the chat, persist them, and clear pending input. The chat's next message starts a new session.onSessionStarted(session), hook-level resume APIs, durable event persistence adapters, authorization continuation helpers, structured connection policy, and stream debug helpers.pnpm typecheck for protocol/type changes and pnpm build before opening a PR that touches runtime, routes, or docs examples.vercel/eve
db78500
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.