Eve reference implementation for the Deepline GTM agent. This app keeps Deepline as the GTM execution backend and uses Eve for durable agent sessions, local development, evals, and Vercel deployment.
The existing Python/FastAPI broker remains the default runtime in the repository. Use this package when you want the faster Eve deployment path or want to validate Deepline GTM behavior through Eve evals.
- Node.js 24
- A Deepline API key from https://code.deepline.com
- One model path:
- Vercel AI Gateway through
npm run linkand Vercel OIDC AI_GATEWAY_API_KEYfor non-Vercel/static-key environments
- Vercel AI Gateway through
cd eve_agent
npm install
npm run infoSet DEEPLINE_API_KEY in Vercel project environment variables, or in a local ignored .env.local for development:
DEEPLINE_API_KEY=dlp_...Link Eve to a Vercel project and pull AI Gateway OIDC credentials:
npm run linkFor non-Vercel environments, use a static AI Gateway key instead:
AI_GATEWAY_API_KEY=...
EVE_MODEL=anthropic/claude-sonnet-4.6npm run devEve serves the local agent over HTTP. In another terminal, run:
npm run smoke -- --host http://127.0.0.1:3000The smoke script checks Eve health, creates a session, opens the session stream, and waits for a completed or waiting event.
npm test
npm run info
npm run typecheck
npm run buildRun deterministic evals with:
npm run eval -- smoke
npm run eval -- workflow-presetsEval execution requires model credentials. Without AI Gateway or a provider key, Eve will compile but model-backed evals will fail at runtime.
Reusable GTM recipes should come from deepline-api, not from hand-written Eve-only copies. The Eve package vendors a committed generated snapshot of deepline-api/src/lib/onboard/recipes.json at agent/lib/deepline-recipes.ts so local installs and Vercel deploys work without a second repo checkout.
Reusable agent skills should also come from Deepline's published well-known skills API. The Eve package copies the built well-known skill packages from https://code.deepline.com/.well-known/skills/index.json into agent/skills/<skill-name>/, preserving SKILL.md, references/, scripts, metadata, and recipe wrappers. The sync strips only frontmatter fields Eve does not accept, such as disable-model-invocation.
The generated skill snapshot is locked in agent/lib/deepline-skills-lock.ts. The lock records the source index URL, published index version, generated timestamp, skill file list, and SHA-256 hash for every copied file.
To refresh copied skills from the published API:
cd eve_agent
npm run sync:deeplineTo verify the committed snapshot is still current without mutating files:
npm run check:deeplineTo sync from a staging API instead, point the script at a different well-known index:
DEEPLINE_SKILLS_INDEX_URL=https://staging.example.com/.well-known/skills/index.json npm run sync:deeplineThe workflow preset tools expose shared recipes with source: deepline-api-recipe. Legacy transcript-derived presets remain available with source: legacy-transcript-preset for agent patterns that are not onboarding recipes yet.
Do not edit copied skill packages directly in Eve. Update and publish the Deepline API well-known skill artifacts, run npm run sync:deepline, then run the Eve tests. Recipe prompts are currently committed as a generated snapshot; refresh them only with an explicit DEEPLINE_RECIPES_JSON_URL or DEEPLINE_RECIPES_JSON_PATH.
cd eve_agent
npm install
npm run link
npm run deploySet production environment variables in Vercel:
| Variable | Required | Description |
|---|---|---|
DEEPLINE_API_KEY |
Yes | Deepline v2 API key |
DEEPLINE_API_BASE_URL |
Optional | Defaults to https://code.deepline.com |
AI_GATEWAY_API_KEY |
Optional | Static fallback; Vercel OIDC is preferred |
EVE_MODEL |
Optional | Overrides Eve's default model |
After deployment, verify the live URL:
npm run smoke -- --host https://<your-vercel-url>The Eve web channel includes none() explicitly so the reference app behaves like the current Python web chat and works immediately after deployment. This is the Vercel-supported anonymous route-auth helper, and it should stay as the final auth entry only when public chat is intended. For a private deployment, edit agent/channels/eve.ts and remove none() from the auth chain, or replace it with your application auth provider ahead of localDev() and vercelOidc().
The Eve port preserves the important Deepline GTM behavior:
- full Deepline v2 agent/chat streaming through the
deepline_chattool - direct Deepline v2 tool execution through
deepline_execute_tool - GTM guidance around evidence, uncertainty, CRM safety, and bounded action
- workflow presets for enrichment, account digests, support, web research, bounded tool action, closed-loop GTM, and Snowflake query agents
- deterministic eval coverage for smoke behavior, workflow presets, enrichment guidance, account research, and approval rules
Slack remains on the Python broker for now. The Eve package is structured so an Eve Slack channel can be added later without blocking the faster Vercel deployment path.