VES AI is a local-first session replay analysis runtime for agent workflows.
curl -fsSL https://ves.ai/install | bashThe installer clones VES AI to ~/.vesai/app/vesai, installs dependencies, links vesai, and runs vesai quickstart.
Every vesai command syncs the installed CLI with the latest origin/main before execution.
gitbungcloudffmpeg
Before quickstart:
gcloud auth login
gcloud auth application-default login
gcloud config set project <project-id>VES AI now has two setup steps:
vesai quickstartconfigures global machine-level runtime.vesai initconfigures the current repository as a VES AI project.
vesai quickstartThis sets:
- Global Google Cloud + Vertex config
- Global bucket config for rendered artifacts
- Global machine render memory budget (
runtime.maxRenderMemoryMb) - Local render runtime dependencies (Chromium)
Render services scale dynamically up/down based on current free RAM, capped by your configured memory budget.
Example:
vesai quickstart --max-render-memory-mb 8192Global config is stored in ~/.vesai/core.json.
Run this inside your product repo:
vesai initThis creates and configures project-local artifacts:
.vesai/project.json.vesai/workspace/{sessions,users,groups,research}.vesai/jobs,.vesai/cache,.vesai/logs
vesai init also:
- Generates a UUID
projectIdby default (or uses--project-id) - Prompts for PostHog project settings
- Prompts for
lookbackDays(default180) - Adds
.vesai/to repository.gitignore - Throws a descriptive error if
.gitignorecannot be updated (locked/read-only)
Example:
vesai init --lookback-days 180vesai user <useremail>
vesai group <group_id>
vesai research "<question>"
vesai daemon start
vesai daemon watch
vesai daemon status
vesai daemon stop
vesai quickstart
vesai init
vesai config show
vesai doctorData commands return JSON by default. Use --no-json for readable text.
Examples:
vesai user bryce@company.com
vesai group acme-co
vesai research "What drives checkout abandonment?"- Finds all sessions for the user
- Ensures those sessions are rendered and analyzed
- Produces one aggregate user story
- Resolves users under the group ID (PostHog group key mapping)
- Builds each user story from all their sessions
- Produces one aggregate group story
- Uses only already analyzed sessions in
.vesai/workspace/sessions - Selects relevant sessions as context
- Sends context to Gemini and returns a research answer
vesai daemon is project-scoped and runs against the current repo’s .vesai directory.
Behavior:
- First run performs backfill from
now - lookbackDaysto now. - Heartbeat then continuously pulls sessions from
lastPulledAtto now. - New sessions are queued for render + analysis.
- After session jobs complete, affected user and group stories are re-run.
- Machine-level memory budget (
maxRenderMemoryMb) - Render service/runtime dependencies
- GCloud bucket/project/model settings
- Shared cross-process render slot locks (
~/.vesai/render-locks)
- Project UUID
- PostHog API key/project/domain/group config
- Session/user/group/research markdown artifacts
- Daemon state, job queue, cache, logs
Rendered artifacts are prefixed by VES AI project UUID:
projects/<project-uuid>/events/<session-id>.jsonprojects/<project-uuid>/videos/<session-id>.webm
This keeps all project artifacts isolated under top-level project folders in one bucket.
vesai config show
vesai config validate
vesai config set core.runtime.maxRenderMemoryMb 8192
vesai config set project.daemon.lookbackDays 180Use core. paths for global config and project. paths for repo-local config.
bun install
bun run lint
bun run typecheck
bun run test