Skip to content

Architecture: the eve agent runtime on port 2000 writes workflow events to Postgres on port 5433 running in Docker, executes code in per-session Docker sandbox containers, and exports OTLP traces to the dashboard on port 4000, which also reads run state directly from Postgres over SQL.

Run AI agents on your own machine.

One command sets it all up, then offers to start it for you.

agent
:2000
dashboard
:4000
postgres
:5433
evestack

npx evestack create

… asks a few questions, saves your settings, installs everything

docker compose up -d postgres

✓ evestack-postgres-1 | database system is ready to accept connections

npm run db:bootstrap

✓ Schema created.

npm run dev

✓ eve dev ready on http://localhost:2000

✓ [world-postgres] Re-enqueued 2 active run(s) on startup

evestack

Which sessions failed in the last hour?

None. Every session completed cleanly. The longest ran 41.0s with 13 tool calls.

What did the deploy email session cost?

Deploy summary email ran 3 turns with 5 tool calls in 18.2s, costing $0.0034 in model spend. Infrastructure: $0.00.

Everything you need, already wired together

  • Nothing gets lost

    35 run_created

    36 step_started

    37 ai.streamText

    38 step_completed

  • No hosting bill

    $0.00infrastructure / month

  • Your prompts stay private

    EVESTACK_TRACE_CONTENT=off

    prompt: ••••••••••••

    result: ••••••••

  • See every step it took

    agent.session

    └ agent.turn

    └ agent.step

    └ ai.streamText

    └ ai.streamText.doStream

  • It asks before it acts

    send_email wants approval

    approvedeny
  • Runs while you sleep

    heartbeat0 * * * *

    last run 41m ago ok

    next in 19m

Watch your agents. Step in when it matters.

Observability/Monitors

Runs

Error 0%

Session duration

p5015.8sp7520.8sp9536.6sp9940.1s

41.0speak

p95

Session

Tokens

Duration

Cost

Write a detailed 1500-word essay about the history of database indexing.

8,827

41.0s

$0.0077

Use your agent tool to delegate this subtask to a subagent…

15,926

28.4s

$0.0021

Deploy summary email to the team

15,011

18.2s

$0.0034

Draft release notes for v0.4.0

13,531

16.9s

$0.0031

evestack observability: 8 runs in the last 12 hours, 0 errors. Median session duration 15.8s, p95 36.6s, peak 41.0s (the 1500-word essay session). Span tree: agent.session → agent.turn → agent.step → ai.streamText → ai.streamText.doStream → agent.turn.terminal.

read from your own database, 100% yours

It waits for you

send_email

{ "to": "team@…", "subject": "Deploy done" }

requested

send_email

{ "to": "team@…", "subject": "Deploy done" }

approved

send_email

{ "to": "team@…", "subject": "Deploy done" }

executed

Connect the tools you already use

Connected tools: Gmail, GitHub, Notion, Linear, Google Calendar, Stripe, HubSpot, Jira. The agent executes Composio tool calls such as GMAIL_SEND_EMAIL, GITHUB_CREATE_AN_ISSUE, GMAIL_FETCH_EMAILS, GITHUB_SEARCH_REPOS.

agent:2000
  • GmailGitHubNotionStripeFigmaAsanaJiraLinearDropboxZendeskTrelloHubSpotGoogle DriveTodoistAirtableMailchimpShopifyZoomRedditDiscord

Four pieces, all on your machine

Architecture: the eve agent runtime on port 2000 writes workflow events to Postgres on port 5433 running in Docker, executes code in per-session Docker sandbox containers, and exports OTLP traces to the dashboard on port 4000, which also reads run state directly from Postgres over SQL.

docker-compose.yml
name: evestack

services:
  postgres:
    image: pgvector/pgvector:pg17
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-evestack}
    ports:

  dashboard:
    build:
      context: .
    depends_on:
      postgres:
        condition: service_healthy
agent/agent.ts
import { openai } from "@ai-sdk/openai";
import { defineAgent } from "eve";

const workflow =
  process.env.WORKFLOW_POSTGRES_URL
    ? { world: "@workflow/world-postgres" }
    : undefined;

const model = openai(
  modelId,
);

export default defineAgent({
  model,
  experimental: { workflow },
});
agent/instrumentation.ts
import { registerOTel } from "@vercel/otel";
import {
  defineInstrumentation,
} from "eve/instrumentation";

export default defineInstrumentation({
  setup: ({ agentName }) => {
    registerOTel({
      serviceName: agentName,
      traceExporter:
        new OTLPHttpJsonTraceExporter({
          url: endpoint,
        }),
    });
});

Run it yourself, or pay someone to run it

A hosted service

evestack on your hardware

  • Runs on

    A hosted service
    Someone else's servers
    evestack on your hardware
    Your machine, server, or cluster
  • Where conversations are stored

    A hosted service
    Their platform
    evestack on your hardware
    A Postgres database you own
  • How long history is kept

    A hosted service
    Set by the provider
    evestack on your hardware
    As long as you keep the rows
  • Dashboard

    A hosted service
    Included, and it watches
    evestack on your hardware
    Included, and it can also act
  • Who can reach your data

    A hosted service
    You and the provider
    evestack on your hardware
    You
  • Setup

    A hosted service
    Deploy to their platform
    evestack on your hardware
    One command, then four more

Your agents, on your hardware.