Skip to content

Quickstart

Pulse now ships as one app: pulse-server serves both the API and the dashboard.

Terminal window
curl -fsSL https://raw.githubusercontent.com/EK-LABS-LLC/trace-service/main/scripts/install.sh | bash -s -- pulse-server

This installs both pulse-server (trace service) and pulse (CLI integrations).

To upgrade an existing local install, run the same command again. It replaces the binaries and dashboard assets in place and preserves your existing ~/.pulse data, including stored traces.

Use this when you want one local command path and a background server managed by the CLI.

Terminal window
pulse setup --local
pulse up

Then verify:

Terminal window
pulse status

Daily use after the first setup:

Terminal window
pulse up
pulse status

Open the dashboard at http://localhost:3000/ or run:

Terminal window
pulse dashboard

Use this when a Pulse instance already exists at a URL you can reach.

Terminal window
pulse connect \
--api-url https://pulse.example.com \
--api-key pulse_sk_... \
--project-id my-project

Then verify:

Terminal window
pulse status

Re-run the server installer:

Terminal window
curl -fsSL https://raw.githubusercontent.com/EK-LABS-LLC/trace-service/main/scripts/install.sh | bash -s -- pulse-server

This upgrades:

  • pulse-server
  • dashboard assets
  • pulse CLI

It does not erase ~/.pulse, so local trace data and config are preserved.

If you only need the CLI locally, re-run the CLI installer:

Terminal window
curl -fsSL https://raw.githubusercontent.com/EK-LABS-LLC/trace-cli/main/install.sh | sh

If you are operating pulse-server directly, choose single for local SQLite or scale for Postgres-backed higher-throughput ingest.

See Single vs Scale Modes for the full environment and deployment guidance.

Single mode example:

Terminal window
export PULSE_MODE=single
export BETTER_AUTH_SECRET="$(openssl rand -hex 32)"
export ENCRYPTION_KEY="$(openssl rand -hex 32)"
export BETTER_AUTH_URL='http://localhost:3000'

Scale mode example:

Terminal window
export PULSE_MODE=scale
export DATABASE_URL='postgresql://pulse:pulse@localhost:5432/pulse'
export BETTER_AUTH_SECRET="$(openssl rand -hex 32)"
export ENCRYPTION_KEY="$(openssl rand -hex 32)"
export BETTER_AUTH_URL='http://localhost:3000'
Terminal window
bun add @eklabs/pulse-sdk

Works with Bun, Node, or any JavaScript/Python runtime.

CLI integrations (Claude Code, Opencode, OpenClaw)

Section titled “CLI integrations (Claude Code, Opencode, OpenClaw)”

If you want Pulse to capture coding-agent events in addition to SDK traces:

Terminal window
# Local managed Pulse
pulse setup --local
pulse up
# Or connect to a shared Pulse instance:
# pulse connect --api-url https://pulse.example.com --api-key pulse_sk_... --project-id my-project
# Verify config, connectivity, and integration status
pulse status

See CLI Reference for full command and config details.

Call initPulse() once at application startup using the API key created during pulse setup or pulse connect.

import { initPulse } from "@eklabs/pulse-sdk";
initPulse({
apiKey: "pulse_sk_...",
});

This starts background trace batches and registers shutdown handlers to flush remaining traces on exit.

Use observe() to wrap your LLM client. The returned client behaves identically and tracing is captured as a side effect.

import { initPulse, observe, Provider } from "@eklabs/pulse-sdk";
import OpenAI from "openai";
initPulse({ apiKey: "pulse_sk_..." });
const client = observe(
new OpenAI({ apiKey: "sk-..." }),
Provider.OpenAI
);
const res = await client.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "Hello" }],
});
FieldDescription
Request and response bodiesFull prompt and completion
Token countsInput and output tokens
LatencyEnd-to-end request duration in milliseconds
CostProvider-reported or SDK-estimated when model pricing is available
ModelRequested and actual model used
Statussuccess or error
Provideropenai, anthropic, or openrouter
ProviderClientEnum
OpenAIopenaiProvider.OpenAI
Anthropic@anthropic-ai/sdkProvider.Anthropic
OpenRouteropenaiProvider.OpenRouter

See Providers for detailed usage.