adam is a production-shaped starting point for eve agents — observability, evals, dependency automation, and a 95% coverage gate already wired together. Fork it and delete what you do not need, instead of assembling it a second time.
Quick Start · Configuration · Observability · Capabilities · Contributing · eve docs
Requires Node.js 24.x and pnpm 11.x.
Click Use this template above, or clone it:
git clone https://github.com/ahcarpenter/adam.git
cd adam
pnpm installFill in the environment — startup validates every variable, in every mode:
cp env.example .env.localEvery variable without a default must be filled: OPENAI_API_KEY and
OPENAI_MODEL, the Upstash Redis URL and token, BRAINTRUST_API_KEY, and
POSTHOG_PROJECT_TOKEN. See Configuration for the
full table.
Then start the agent:
pnpm dev # TUI at http://127.0.0.1:2000- Agent runtime — eve with the AI SDK, model configured through a single validated environment variable.
- Memory, RAG, and chat history — Upstash Redis via AgentKit, plus per-caller rate limiting and a tool cache. See capabilities.
- Observability — structured winston logs to PostHog, AI traces to Braintrust and PostHog LLM analytics, OTel metrics to any OTLP collector. The design, the three alerts worth paging on, and how to verify the pipeline are in docs/observability.md.
- Quality gates in CI — Biome, Prettier,
tsc, a realeve build, Knip, and Vitest at 95% project and patch coverage through Codecov. - Dependency automation — Renovate, with the eve/AgentKit contract pairing already
encoded so a bump cannot silently break
eve build. - Evals — deterministic eval suites under
evals/, reporting to their own Braintrust project.
- Fails fast, everywhere. An incomplete environment stops the process at module load — in local dev too, not only in production.
- Instrumentation cannot take down the agent. Every hook runs inside
neverThrow, because eve escalates a thrown hook to a failed turn. - Signals earn their place. Each metric and log line maps to a question on-call actually has to answer; cardinality stays in logs and traces, not in metric labels.
- CI builds, not just typechecks.
tscdoes not run eve's compiler, so CI runseve build— otherwise extension contract breaks are invisible until deploy. - The reasoning is written down. Comments and docs say why a decision was made, not what the line does.
pnpm dev # eve dev (TUI at http://127.0.0.1:2000)
pnpm build # eve build
pnpm typecheck # tsc
pnpm lint # biome lint --write . (auto-fix)
pnpm lint:check # biome lint . (no writes)
pnpm lint:ci # biome ci . (lint + format, CI mode)
pnpm format # biome check --write + prettier --write (md/yml/css)
pnpm format:check # biome check + prettier --check
pnpm test # vitest run
pnpm test:coverage # vitest run --coverage (95% thresholds)
pnpm eval # eve eval
pnpm knip # dead code / unused dependency scan- Configuration — environment variables and one-time setup
- Observability design — signals, alerts, verification
- Upstash capabilities — memory, RAG, rate limiting, tool cache
- Spec, plan, and task history
- eve documentation
Contributions are welcome — see CONTRIBUTING.md to get started, and SUPPORT.md for where to ask questions.
This project follows the Contributor Covenant. Security vulnerabilities go through SECURITY.md, never the issue tracker.
MIT — see LICENSE.