| cli-4.0.1 | ### Security - Depend on `@latitude-data/sdk` 5.7.1, which ships promptl-ai 0.12.1 (GHSA-w66j-r3gv-h3rv). | High | 10/9/2026 |
| typescript-telemetry-4.2.0 | ### Added - Bring your own LLM cost. `capture(name, fn, { cost: { input, output } | { total } })` sets the cost (USD) of every LLM-call span inside the capture (never the capture's own wrapper span). `new Latitude({ pricing: { "<provider>/<model>": { inputPer1M, outputPer1M } } })` prices LLM calls from their token counts, and `new Latitude({ costResolver })` lets `costResolver(usage)` return a cost or `undefined` to fall back. `setLlmCost(span, { input, output, total })` sets the co | High | 10/8/2026 |
| python-sdk-9.15.0 | ### Changed - The `project_slug` parameter docs now mention `LATITUDE_PROJECT_SLUG`. That variable is read by the Latitude CLI only โ it has no effect here, where the project slug is still passed on every call. - Regenerated on Fern CLI `5.58.0` โ `5.122.0` and `fern-python-sdk` `5.15.0` โ `5.31.0`. No change to the HTTP API surface or to any method signature: every endpoint keeps the arguments it had. The runtime gains SSE reconnect handling, TCP keepalive options, and alias coercion in model | High | 10/1/2026 |
| cli-7.16.0 | ### Added - Named profiles, each with its own API key in the OS keyring, so a production key and a sandbox key can live side by side. Pick one per command with `--profile` / `-p`, per shell with `LATITUDE_PROFILE`, or as the default with `latitude profiles use`. Manage them with `latitude profiles create`, `list`, `current`, `show`, `set`, `use`, and `remove`. `latitude auth login --with-token -p <profile>` stores a key in that profile, and `latitude auth status` reports which profile is in us | High | 9/23/2026 |
| cli-7.14.0 | ### Added - `latitude annotations get`, `latitude annotations update`, and `latitude annotations delete` manage API-created annotations using their Latitude-generated IDs. | High | 9/21/2026 |
| typescript-sdk-9.13.0 | ### Added - `client.agentScore.get` โ read today's published Agent Score and its five dimensions for a project. - `client.agentScore.history` โ list a project's published Agent Scores over a date range. - `client.agentScore.causes` โ inspect the ranked evidence explaining a project's current Agent Score. | High | 9/20/2026 |
| hermes-telemetry-0.3.1 | ### Fixed - **`LATITUDE_NO_CONTENT` no longer leaks provider and tool error text.** The span's status message and `hermes.stream.error` were the two strings that escaped content gating, and a provider error routinely quotes the request it rejected, so a rejected call could put prompt text on the wire from an installation that had capture turned off. Both are gated now, and the status message also picks up the size budget and the secret redactor it was bypassing even with capture on. Failures s | High | 9/19/2026 |
| cli-7.13.0 | ### Added - `latitude agent-score get` โ read today's published Agent Score and its five dimensions for a project. - `latitude agent-score history` โ list a project's published Agent Scores over a date range. - `latitude agent-score causes` โ inspect the ranked evidence explaining a project's current Agent Score. | High | 9/12/2026 |
| hermes-telemetry-0.3.0 | ### Added - **Cross-harness trace correlation, both directions.** A tool that launches another agent can pass it the current tool span with `child_env()` (or `current_traceparent()`), so the child harness's spans land under that tool call in one trace instead of in a trace of their own โ the causal edge a shared session id alone cannot express. `LATITUDE_HERMES_EXPORT_TRACEPARENT=1` scopes those variables onto `os.environ` around each tool call instead, so any subprocess inherits them with no | High | 9/1/2026 |
| typescript-sdk-9.10.0 | ### Added - `client.signals.submitFeedback` โ record a one-time verdict on whether a flagger-detected signal is a real problem, with an optional reason, and optionally archive the signal in the same call. Only signals a flagger detected accept feedback, and the verdict cannot be changed once submitted. - `client.signals.get` now returns `feedback` with the verdict submitted for the signal (`value`, `passed`, `feedback`), or `null` when none has been submitted yet. | High | 8/18/2026 |
| cli-7.8.0 | ### Added - `latitude imports` โ import historical traces from Langfuse, LangSmith, or Braintrust into a project: `list`, `create`, `get`, `cancel`, and `retry`. An import runs in the background, newest traces first; `retry` resumes a failed, cancelled, or capped import from where it stopped. | High | 8/5/2026 |
| typescript-telemetry-4.0.0 | ### Changed - **Breaking:** `instrumentations` now accepts an array of instances created by opt-in `@latitude-data/telemetry/instrumentations/*` factories instead of an integration-name object map. - Provider instrumentations remain included with the package but are isolated behind subpath exports, preventing unused integrations and their transitive dependencies from entering consumer bundles. | High | 7/22/2026 |
| typescript-telemetry-3.6.0 | ### Added - `createCodemodeTelemetry()` wraps codemode `execute` tools and internal tool sets so tools called from inside codemode emit nested `ai.toolCall <name>` spans under the outer `execute` span. The helper stamps Latitude context, records AI SDK and GenAI tool attributes, supports input/output capture with redaction, and marks failed tool spans with exception details. - A public `@latitude-data/telemetry/cloudflare` subpath exports Cloudflare-specific helpers, starting with `createCodem | High | 7/10/2026 |
| typescript-sdk-6.2.1 | ### Fixed - Project list/get/create/update responses now strip internal-only `settings` fields (`isSample`, `onboardingType`, `onboardingCompleted`, `sampling`) that could leak from Postgres and break MCP `listProjects` output validation. | High | 6/27/2026 |
| python-telemetry-3.2.0 | ### Added - **Google ADK (Agent Development Kit) auto-instrumentation** โ new `"google_adk"` instrumentation key wires `openinference-instrumentation-google-adk` (Arize OpenInference) into the SDK. Spans cover agent runs, model generations, and tool calls. Pass `instrumentations={"google_adk": google.adk}` to `Latitude(...)` and install the `google-adk` package in your project. ### Changed - Bumped `openinference-semantic-conventions` `0.1.25` โ `0.1.30` (required by the Google ADK instrumen | High | 6/17/2026 |
| openclaw-telemetry-cli-0.0.8 | Lockstep release with `@latitude-data/openclaw-telemetry` 0.0.8, which drops the `apiKey` / `project` `required` constraint from the plugin's `configSchema`. `RUNTIME_VERSION` is bumped to `0.0.8` so `latitude-openclaw install` pins to the fixed runtime. ### Fixed - **Install, upgrade, and re-keying no longer fail on OpenClaw 2026.5+.** `openclaw plugins install <spec> --force` (this CLI's step 2) recreates `plugins.entries[id]` with an empty `config` and validates it against the plugin's `co | High | 6/9/2026 |
| pi-telemetry-0.0.2 | ### Fixed - Telemetry export no longer blocks Pi's agent lifecycle at the end of a run. Trace uploads are dispatched asynchronously after span construction so the TUI can leave the working/loading state immediately. - Failed telemetry uploads are now silent unless debug logging is enabled, avoiding direct stderr writes that can disturb Pi's interactive terminal layout. | High | 5/21/2026 |
| openclaw-telemetry-cli-0.0.7 | Initial release of the standalone installer CLI. The runtime split that landed in `@latitude-data/openclaw-telemetry` 0.0.6 ([PR #2920](https://github.com/latitude-dev/latitude-llm/pull/2920)) deleted the bundled CLI from the runtime package so that runtime would pass OpenClaw 2026.4.25+'s install-time `dangerous-exec` security scan. The 0.0.6 manual install flow asked operators to run six `openclaw config set` commands plus a hand-edited `plugins.allow` array; this package brings the one-shot | High | 4/29/2026 |
| openclaw-telemetry-0.0.1 | ### Added - Initial release. OpenClaw plugin that streams every agent run to Latitude as OTLP traces by subscribing to OpenClaw's typed `llm_input` / `llm_output` / `before_tool_call` / `after_tool_call` / `agent_end` hooks. - Per-run state accumulator keyed by `runId` that pairs LLM input/output into single calls, nests tool invocations under their parent LLM call, and handles out-of-order tool events defensively. - OTLP span tree with three span kinds โ `interaction` (per agent run), `llm_re | High | 4/24/2026 |
| claude-code-telemetry-0.0.6 | ### Fixed - **Fixed URL domain** from `app.latitude.so` to `console.latitude.so`. | High | 4/21/2026 |
| claude-code-telemetry-0.0.5 | ### Changed - **Install UX rewritten with [`@clack/prompts`](https://www.npmjs.com/package/@clack/prompts)** โ the interactive wizard now opens with a proper welcome banner, renders each prompt inside a gutter with a description line explaining the field + the relevant Latitude URL to fetch it from, masks the API key input with `โข` as you type, and ends with a "Next step" panel plus a direct link to your project's trace view. Spinners stream in as each install step completes. - **README restru | High | 4/20/2026 |
| claude-code-telemetry-0.0.4 | ### Added - **Interactive `install` wizard** โ `npx -y @latitude-data/claude-code-telemetry install` now prompts for `LATITUDE_API_KEY` and `LATITUDE_PROJECT`, merges them into `~/.claude/settings.json` under `env`, and installs the Stop-hook entry if missing. On macOS it also offers to set `BUN_OPTIONS` via `launchctl` and persist it with a `~/Library/LaunchAgents/so.latitude.claude-code-telemetry.plist`. Existing values are shown as defaults (API keys masked); a backup of `settings.json` is | High | 4/20/2026 |
| claude-code-telemetry-0.0.2 | ### Added - **Workspace and git context on every span** โ the hook now reads the Claude Code session's `cwd` and derives `workspace.name` / `workspace.path`, `git.branch` / `git.commit` / `git.repo`, `claude_code.version`, `host.user`, and `hook.event`. The workspace name is attached as a span tag (`latitude.tags`); the full set is attached as shared trace metadata (`latitude.metadata`) on every emitted span so traces can be sliced by repo, branch, or CLI version in the Latitude UI. - **Full c | High | 4/20/2026 |
| typescript-telemetry-3.0.0-alpha.5 | ### Fixed - `capture()` now starts a new Latitude root trace when called under an active non-Latitude span, so wrapper spans such as workflow-level capture names are preserved instead of being absorbed into foreign traces. - Nested Latitude `capture()` calls still reuse the existing Latitude-owned trace and merge context as before. | High | 4/17/2026 |
| claude-code-telemetry-0.0.1 | Package updates and improvements | High | 4/17/2026 |
| typescript-telemetry-3.0.0-alpha.4 | ### Fixed - **Provider SDK version coupling** โ moved provider SDK packages (`openai`, `@anthropic-ai/sdk`, etc.) from `optionalDependencies` to `devDependencies` so they are no longer installed alongside `@latitude-data/telemetry`. Users can now use any compatible version of their provider SDK without conflicts. - **Bumped all Traceloop instrumentations to `^0.25.0`** โ notably extends OpenAI support from `>=4 <6` to `>=4 <7`, fixing auto-instrumentation for users on `openai@6.x`. | Medium | 4/14/2026 |
| typescript-telemetry-3.0.0-alpha.3 | ### Added - **`serviceName` on `LatitudeSpanProcessor` and `initLatitude()`** โ optional `LatitudeSpanProcessorOptions.serviceName` / `InitLatitudeOptions.serviceName` sets OpenTelemetry **`service.name`** on each span so Latitude ingest can attribute telemetry to your service. When using `initLatitude()`, the value is also applied to the `NodeTracerProvider` resource (falling back to `npm_package_name` or `"unknown"` when omitted). | Medium | 4/7/2026 |
| typescript-telemetry-3.0.0-alpha.2 | ### Changed - OpenTelemetry peer stack upgraded to align with **@opentelemetry/sdk-trace-node 2.6** and **@opentelemetry/exporter-trace-otlp-http / instrumentation 0.213** (previously 1.x / 0.57), so `LatitudeSpanProcessor` and related types match apps using **@opentelemetry/sdk-node** 0.213+. ### Fixed - `initLatitude()` and examples now use `resourceFromAttributes()` instead of `new Resource()` (OpenTelemetry JS 2.x API). - Span filtering reads `ReadableSpan.instrumentationScope` instead o | Medium | 4/7/2026 |
| typescript-telemetry-3.0.0-alpha.1 | ### Breaking Changes - **Complete SDK re-architecture** โ monolithic `Telemetry` class replaced with modular, composable API - **New bootstrap API** โ `initLatitude()` replaces `new Telemetry()` as primary entry point - **`capture()` no longer creates spans** โ now only attaches context to spans created by auto-instrumentation - **Context propagation changed** โ uses OpenTelemetry's native Context API instead of baggage - Removed manual instrumentation (`telemetry.tracer` still available via a | Medium | 4/2/2026 |
| typescript-telemetry-3.0.0-alpha.0 | ### Breaking Changes - Constructor now requires `projectSlug` as second argument - `capture()` no longer takes `path`/`projectId` โ takes `tags`/`metadata`/`sessionId`/`userId` instead - Removed opinionated span methods (`span.completion()`, `span.tool()`, etc.) โ use `telemetry.tracer` directly - Removed `rosetta-ai` dependency - Env var renamed from `GATEWAY_BASE_URL` to `LATITUDE_TELEMETRY_URL` ### Added - `telemetry.tracer` exposes raw OTel Tracer for custom span creation - `capture()` c | Medium | 4/1/2026 |
| python-telemetry-3.0.0a0 | ### Breaking Changes - Constructor now requires `project_slug` as second argument - `capture()` no longer takes `path`/`project_id` โ takes `tags`/`metadata`/`session_id`/`user_id` instead - Removed opinionated span methods (`span.completion()`, `span.tool()`, etc.) โ use `telemetry.tracer` directly - Removed `GatewayOptions` and `InternalOptions` โ SDK reads `LATITUDE_TELEMETRY_URL` env var directly - Removed `SpanType`, `LogSources`, `SpanKind`, `SpanStatus`, `SPAN_SPECIFICATIONS` ### Added | Medium | 4/1/2026 |
| typescript-telemetry-2.0.4 | ### Changed - `capture()` now propagates `path`, `project`, `commit`, and `conversation` references through baggage so child spans inherit the same metadata. | Low | 2/26/2026 |
| python-telemetry-2.0.4 | ### Changed - `capture()` now writes prompt reference fields into baggage so child spans inherit `path`, `project`, `commit`, and `conversation` metadata. | Low | 2/26/2026 |
| typescript-sdk-5.7.0 | ### Added - Bumped PromptL to 0.11.0 | Low | 2/25/2026 |
| typescript-sdk-5.6.0 | ### Added - Added `prompts.delete(path, options?)` method to soft-delete a document/prompt from a draft project version. | Low | 2/23/2026 |
| typescript-sdk-5.5.0 | ### Added - Added `messages` parameter to `prompts.run()` method. This allows appending any kind of messages to the conversation after the compiled prompt. Note: This is not compatible with the `<step>` feature of PromptL. ### Deprecated - The `userMessage` parameter in `prompts.run()` is now deprecated. Use the `messages` parameter instead. The `userMessage` parameter will be removed in a future version. | Low | 2/17/2026 |
| typescript-telemetry-3.0.0-beta.0 | ### Changed - Marked the 3.x line as a beta prerelease so stable users stay on 2.x until 3.x is production-ready. - Added `telemetry.context.setAttributes()` to attach baggage attributes once and propagate trace metadata to child spans through context. - Latitude baggage keys are normalized to snake_case automatically (`latitude.documentUuid` -> `latitude.document_uuid`). ### Removed - Removed prompt/chat/external span option aliases (`documentLogUuid`, `promptUuid`, `versionUuid`, `source`, | Low | 2/17/2026 |
| python-telemetry-3.0.0b0 | ### Changed - Marked the 3.x line as a beta prerelease so stable users stay on 2.x until 3.x is production-ready. - Added `telemetry.context.set_attributes()` to set baggage attributes once and propagate trace metadata to child spans. ### Removed - Removed manual instrumentation option aliases for prompt/chat/external/completion spans (including `documentLogUuid`, `promptUuid`, `versionUuid`, and related fields). Pass trace metadata with `attributes` or context baggage instead. | Low | 2/17/2026 |
| typescript-telemetry-3.0.0 | ### Changed - Added `telemetry.context.setAttributes()` to attach baggage attributes once and propagate trace metadata to child spans through context. - Latitude baggage keys are normalized to snake_case automatically (`latitude.documentUuid` -> `latitude.document_uuid`). ### Removed - Removed prompt/chat/external span option aliases (`documentLogUuid`, `promptUuid`, `versionUuid`, `source`, and related fields) from manual instrumentation options; pass these via `attributes` or `context.setA | Low | 2/17/2026 |
| python-telemetry-3.0.0 | ### Changed - Added `telemetry.context.set_attributes()` to set baggage attributes once and propagate trace metadata to child spans. ### Removed - Removed manual instrumentation option aliases for prompt/chat/external/completion spans (including `documentLogUuid`, `promptUuid`, `versionUuid`, and related fields). Pass trace metadata with `attributes` or context baggage instead. | Low | 2/17/2026 |
| typescript-telemetry-2.0.2 | ### Fixed - Bump Rosetta AI version | Low | 2/9/2026 |
| typescript-telemetry-2.0.1 | ### Fixed - Move Rosetta AI to dependencies ## [2.0.0] - 2026-02-04 ### Added - Manually instrumented completions now support any provider messages - The manual instrumentation now exports compliant GenAI messages | Low | 2/9/2026 |
| typescript-telemetry-1.1.1 | ### Fixed - Disabled `enrichTokens` for OpenAI and TogetherAI instrumentations to fix failures when using `stream: true` | Low | 2/2/2026 |
| typescript-sdk-5.4.1 | ### Fixed - Re-exported `LogSources` from shared constants to keep SDK log source values aligned with the API. | Low | 2/2/2026 |
| typescript-sdk-5.4.0 | ### Changed - Replaced `node-fetch` with native `fetch`. This reduces bundle size and improves abort signal handling. Requires Node.js 18+ (which has been the minimum supported version since Node.js 16 and 17 reached EOL). ### Fixed - Fixed abort signal propagation when cancelling streaming requests. The SDK now properly cancels in-flight requests when the abort signal is triggered. | Low | 1/29/2026 |
| cli-4.0.0 | ### Changed - Prompts are now always stored as plain `.promptl` text files instead of JS/TS variables. ### Removed - Removed npm project detection and JS/TS/ESM format support. - Removed `verifyNpmProject` functionality. - Removed `npm` field from `latitude-lock.json` interface. - Removed JS/ESM import logic from `push`, `pull`, and `status` commands. | Low | 1/23/2026 |
| typescript-sdk-5.3.1 | - Quick fix: move constants dependency to dev dependency since it's transpiled at build time and it cannot be required at runtime because we do not publish it. | Low | 1/19/2026 |
| typescript-sdk-5.3.0 | ### Added - Added `mcpHeaders` parameter to `prompts.run()` and `prompts.chat()` methods for passing custom headers to MCP servers at runtime. Headers are keyed by integration name to support multiple MCP integrations per prompt. Example usage: ```typescript latitude.prompts.run('my-prompt', { parameters: { name: 'John' }, mcpHeaders: { myMcpIntegration: { 'customer-id': 'abc123' }, anotherMcp: { 'x-tenant-id': 'tenant-456' }, }, }) ``` | Low | 1/19/2026 |
| typescript-sdk-5.2.3 | - Removed deprecated span types from internal telemetry. | Low | 12/31/2025 |
| typescript-sdk-5.2.2 | - Fixed `prompts.chat()` method was not including custom tools in the request | Low | 11/13/2025 |
| typescript-sdk-5.2.1 | - Exports MessageRole enum instead of the type only | Low | 10/15/2025 |
| typescript-sdk-5.2.0 | Official release of v5.2.0. - Implements run background executions. Pass `background: true` to `prompts.run()` to run a prompt in the background. - Adds `runs.attach()` method to attach to running prompts. - Changes default stream option to true for prompts.run() and prompts.chat() methods. - Official pre-release of v5.2.0 | Low | 10/10/2025 |
| typescript-sdk-5.2.0-beta.6 | - Official pre-release of v5.2.0 | Low | 10/9/2025 |
| typescript-sdk-5.2.0-beta.5 | ### Changed - Now `prompts.run()`, `prompts.chat()` and `runs.attach()` methods, of the TypeScript SDK, have `stream` option set to `true` by default | Low | 10/2/2025 |
| typescript-sdk-5.2.0-beta.4 | ### Fixed - Fixed `prompts.run()` method return types of the TypeScript SDK | Low | 9/30/2025 |
| typescript-sdk-5.1.0 | ### Added - Add background option when running a prompt | Low | 9/19/2025 |
| cli-3.0.0 | ### Removed - Dropped CommonJS prompt support; CLI now writes `.js` default exports for npm projects. | Low | 9/17/2025 |
| cli-2.0.5 | ### Changed - Prompts are default exports instead of named in js/ts projects to avoid name conflicts. | Low | 9/9/2025 |
| typescript-sdk-5.0.1 | ### Changed Throw error if sdk fails to create version | Low | 9/9/2025 |
| cli-2.0.4 | ### Added - Adds `login` command to change the stored API key. | Low | 9/8/2025 |
| cli-2.0.3 | ### Changed - Fixes escaping of special characters in prompts when pulled into JS/TS projects. [Unreleased]: https://github.com/latitude-dev/latitude-llm/compare/cli-2.0.3...HEAD [2.0.3]: https://github.com/latitude-dev/latitude-llm/releases/tag/cli-2.0.3 | Low | 9/8/2025 |
| typescript-sdk-5.0.0 | Official release of v5. Targets the new agent runtime, which introduces several improvements to agent performance and reliability. Breaking changes: - Agents now respond as regular prompts rather than in the custom `agentResponse` key. | Low | 9/8/2025 |
| typescript-sdk-5.0.0-beta.3 | ### Added - Added `versions.getAll()` method to TypeScript SDK for retrieving all versions of a project | Low | 9/6/2025 |
| typescript-sdk-5.0.0-beta.2 | - Add userMessage to `run` method of the Typescript SDK in beta version. In the beta version of the SDK v5 we want to allow to run a prompt with a user message on it. We want this to allow prompts to be run like if in GPT where you can start asking something to a preconfigured AI. In this case could be a Latitude AI agent. | Low | 8/25/2025 |
| typescript-sdk-4.1.14 | ## What's Changed - Package updates and improvements | Low | 8/22/2025 |