> For the complete documentation index, see [llms.txt](https://docs.tessl.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tessl.io/changelog-web.md).

# Web Changelog

Release notes for the Web and API surfaces.

{% updates format="full" %}
{% update date="2026-10-09" %}

## Weekly update

### New features

* **Project setup status**: The project overview page now shows a setup card covering GitHub access, your `tessl.json` manifest, configured Loops, and schedule health, with a concrete next step when something needs attention.
* **Per-environment Linear access**: Workspace environments now have a Linear access setting (none, read, or write), so a launch run's Linear access is scoped to its environment instead of a person's own token.

### Improvements

* **Activity actor filter**: The workspace Activity page now has a Who filter for eval and review runs, so you can narrow the feed to your own runs, a specific org member, or API keys.
* **Project search and grouping**: The organization Projects list is now searchable by project name, repository, or path, shows a relative last-updated time per project, and groups projects under their repository so a repository's projects no longer split across pages.
* **Clearer project creation**: Creating a project now gives specific guidance when no repository is connected, when you lack access, when a search returns nothing, or when loading fails, and lists every repository connection your workspace can see.
* **Context filters in one place**: The workspace Context page shows all its filters as a single row of pills instead of hiding most of them behind a "More filters" control.
* **Usage page on every plan**: The organization Usage page is now available to admins on every plan, not just Business and Enterprise.
* **Higher automation concurrency**: The per-project limit on concurrent automation runs has doubled, from 50 to 100.
* **New accounts get a starter workspace**: Signing up now creates a starter workspace automatically, rather than requiring you to create one during onboarding.
* **Eval scenario guidance**: The skill and plugin score page now explains how many more eval scenarios are needed for a full score, when fewer than 3 have run.

### Bug fixes

* Fixed CLI device-code sign-in saving credentials for an organization your Tessl instance doesn't serve, which made every later CLI command fail; the sign-in page and onboarding guidance also point EU accounts at the correct region and login command.
* Fixed breadcrumb navigation links occasionally flickering or misbehaving when a breadcrumb segment was added or removed.
* Fixed long reasoning text in a skill review scorecard overflowing its table cell instead of wrapping.
* Fixed adding some remote MCP servers, including GitBook, as a connection: Tessl's redirect URI included a query string that those servers' authorization flow rejects.
* Fixed inconsistent quality scoring on some skills.
* Fixed an issue where semantic search wasn't finding some private skills.
  {% endupdate %}

{% update date="2026-10-03" %}

## New features

* The `publish_plugin`, `validate_plugin_for_publish`, `list_plugin_files`, and `get_plugin_file` tools on the remote MCP server now support incremental plugin publishing: agents can apply ordered put, edit, and delete changes to an existing plugin version without re-uploading every file.
* The `archive_plugin` and `delete_plugin` tools are now available on the remote MCP, allowing publishers to archive or permanently delete plugins without leaving their coding environment.
* Projects have been moved to the Org level.
* Workspace settings no longer shows a separate Source control section; Linear and other workspace integrations now appear together under a single Integrations section alongside MCP servers.
* The sidebar navigation is reorganized into three labeled groups: Work, Manage, and Resources. The workspace selector is removed from the sidebar; a Workspaces entry under Manage links to a list page, the Activity page gains a workspace selector, and workspace Settings is accessible from each workspace card.
* Org admins now have a setting to enable or disable automatic quality reviews dispatched during inventory scans using the `automaticQualityReviewsEnabled` field. Security scans and indexing continue regardless of this setting.

### Bug fixes

* Code Review via the GitHub App now correctly reads pull-request links. The link-selection model is included in every App-managed run key, and documentation pages up to 2 MB are fetched and converted to text rather than being refused for size.
* The Last changed timestamp on the managed-requirements policy editor now correctly updates when a newer policy is saved.
* Workspace publishers can now archive, unarchive, deprecate, and undeprecate plugins from the plugin page. Previously only managers could perform these actions.
* The Automations entry is no longer shown in the workspace sidebar; existing Automations routes remain accessible via direct links.
* Skill activations now include file reads of installed `SKILL.md` files via the Read tool, `cat`, `head`, and `sed`, so eval activation counts accurately reflect all skill usage.
  {% endupdate %}

{% update date="2026-09-28" %}

## New features

* Organizations can now run up to 1,000 eval scenarios per day, up from 300.
* Workspace managers can now mark a plugin as deprecated with an optional reason and replacement. Users viewing a deprecated plugin see a warning banner on its registry page.
* The findings panel now detects and reports `SKILL.md` files that exceed 500 lines, explaining what to move to supporting files and providing remediation guidance.
* Users can now manually trigger a schedule sync for a project from the project Schedules tab. The sync re-reads and validates the `tessl.json` on the default branch and reconciles schedules, with progress polling and status feedback in the UI.
* Credit usage is now broken down by platform charges and AI token costs.
* GPT-6 Luna (`gpt-6-luna`) and GPT-6 Sol (`gpt-6-sol`) are now available as model selections for LLM key issuance and agent workflows.
* Automation trigger conditions now support recursive `not`, `any`, and `none` operator objects and a wildcard path projection for list members, enabling trigger rules that match or exclude events based on nested data.
* Eval run pages now show a redesigned layout with responsive result and metric cards, scenario comparisons and detail drawers, setup data, persisted run selection via URL, and an Activation section showing per-variant and per-scenario breakdowns of how often agents loaded each skill. The updated view is available in the workspace eval run view, public run links, and plugin eval tabs.

### Improvements

* Linear webhook deliveries are now processed exclusively through the factory trigger intake. The legacy Linear task-delegation path is removed: existing workflows built on it no longer function and must be rebuilt using factory triggers via `POST /experimental/webhooks/linear`. The `PATCH /integrations/:integrationId` and `GET /integrations/:integrationId/linear/metadata` endpoints reflect the updated integration shape.
* The deprecated `gpt-5-codex` and `gpt-5.2-codex` model IDs are no longer accepted for eval runs or agent workflows.
* The default eval model is now DeepSeek V4.1 Flash (`deepseek-v4.1-flash`), replacing DeepSeek V4 Flash, and the default review model is now GLM 5.3 (`glm-5.3`), replacing GLM 5.2. Several other deprecated model routes are removed from the catalogue.
* Workspaces can now create up to 100 active schedules by default, up from the previous limit of 20.
* When a schedule sync fails, the notifications are sent to the user who edited the schedule last, rather than routing to the workspace administrators
* Repo-defined scheduled runs now correctly reconcile the declaring manifest before installing and running the target skill.
* Launch runs can now be filtered by exact label via `GET /experimental/launch-runs`, enabling more reliable deduplication of run creation attempts.
* Skill quality and security scores are now correctly preserved across synchronizations when a skill is unchanged, preventing score regressions.
* Switching workspaces from the sidebar now keeps users on the same screen when the destination workspace supports it, carrying over stable view state.
* Users can now delete projects from the project overview page.
* Quality skill reviews no longer generate duplicate review runs when the `SKILL.md` content differs only in line endings or boundary blank lines, reducing redundant credit consumption.
* Organizations that spent their Free credit allowance and then upgraded to Team now correctly receive their full Team credit allowance.

### Bug fixes

* Disabling a skill review quality score policy (setting it to OFF) now correctly saves and displays as disabled rather than being silently converted to a score of 0.
* Visitors see a loading spinner and an accessible status message while login navigation is in progress, and the return destination is preserved correctly if the current page changes before login resolves.
  {% endupdate %}

{% update date="2026-09-21" %}

## Breaking changes

* The `snapshot` field is removed from repo-defined schedule entries in `tessl.json`. Schedules that declare `snapshot` are now rejected by schema validation. The field had no effect on schedule execution.

### New features

* Azure DevOps integration (Microsoft Entra ID) is now generally available to all entitled organizations. Connect an Azure DevOps organization to discover repositories, scan skills, rescan on demand, and manage scan policy from org integration settings.
* The login page now shows a region selector that navigates users to the correct regional login and remembers their choice in local storage.
* A new `dryRun: true` setting in `tessl.json` puts trigger automation in observation mode: conditions are traced, action fields are resolved, and each trigger logs whether it would have fired, without claiming deliveries or starting runs.
* Tessl Code Review credit usage per completed round has changed in both regions. See <https://tessl.io/pricing/> for current details.
* Org and workspace publish policies support an optional minimum skill quality score. When set, publishing a plugin version is blocked until every skill meets the configured threshold.
* The MCP server detail page shows a live 'Available tools' panel with per-tool descriptions, manual refresh, re-authorization prompts, and distinct error states for unavailability and protocol errors.
* Context improvement proposals can now target any Markdown file in the repository instead of only `AGENTS.md` and `CLAUDE.md`. Proposals go through an editor review step before being published, improving accuracy and placement. Repositories blocked by an unfinished proposal run are automatically released on the next dispatch.
* Eval run tables now show a skill activation column at the variant, scenario, and repeat levels: which skills were activated, the activation rate, and each activated skill's name in the expanded view.
* Eval runs using Codex CLI now capture per-turn tool call and token data, enabling turn-level analysis previously only available for Claude runs.
* Org admins can enable a 'Global install only' toggle in the managed dependencies policy editor to install managed plugins once per machine without per-project declarations.
* When Code Review fails because the organization has no credits, a comment is automatically posted on the pull request explaining the situation and linking to the pricing page.

### Improvements

* 'Enable reviews' on a repository row immediately saves the repository and opens settings pre-configured, without a second toggle inside the drawer.
* Scheduled runs are more reliable: duplicate fires are rejected, and a schedule targeting a deleted or archived workspace records a durable configuration failure instead of retrying indefinitely.
* `file:` skill references in nested `tessl.json` manifests now resolve relative to the manifest's own directory rather than the repository root, so multi-manifest repositories can use short relative paths without breakage.
* The integration scan history list on org settings shows 10 scans per page with a 'Load more scans' button, replacing the previous flat list.
* Quality scores and review results now reflect the selected context version: a version with no completed review returns null scores rather than stale scores from another version.
* Untracked findings now require complete first-party reference evidence before being reported; incomplete or indeterminate archive evidence is treated as unknown.
* Skill context occurrences now persist display name and description correctly on both fresh indexing and re-observation of unchanged file versions.

### Bug fixes

* Launch run resumes now expire seven days after the workspace was saved; attempts after the window receive HTTP 410. Launch runs retain their original run ID after sandbox recovery.
* The schedule detail page shows a human-readable description (e.g. 'Every Friday at 9:00 AM') instead of the raw cron expression; the raw string is still accessible on hover.
* Repo-defined schedules missing project links are automatically repaired after the next manifest sync. Schedules created from trigger-fired runs no longer inherit the original trigger event data.
* The Schedules breadcrumb on a launch run detail page now links to the owning project's Schedules tab. `GET /experimental/launch-runs/{id}` includes `scheduledRunId`.
* Multi-manifest repositories isolate each project's verifiers and context to the exact `tessl.json` that defines them.
* GitHub App accounts can request Code Review approval for pull requests they authored, restoring the address-then-approve workflow.
* Repository indexing and review dispatch follow source identity through renames and transfers.
* Authenticated users visiting private registry detail pages are no longer incorrectly redirected before authentication resolves.
* When creating an environment with conflicting GitHub access settings, the error message uses plain language and explains what to change.
* Eval runs uploading a local directory no longer fail with a fingerprint mismatch during staging.
* Launch sandboxes use a pinned, protected image, preventing run failures caused by the image being replaced during execution.
* Failed-scan alerts on the Home page link directly to the affected SCM provider's integration page and open retryable rows on arrival. Scan history appears inline in integration settings without requiring manager permissions.
  {% endupdate %}

{% update date="2026-09-14" %}

## New features

* Projects are now available at the organization level. Browse projects across your organization, filter them by their backing workspace, and open a project to view its Context, Findings, Evals, and Schedules.
* New `GET /v1/orgs/{orgId}/users` and `GET /v1/orgs/{orgId}/users/{userIdOrName}` list and look up the members of an organization you belong to, with the same response shapes as the user routes they replace. `GET /v1/users` and `GET /v1/users/{userIdOrName}` are deprecated in favor of them and remain fully supported. `GET /v1/workspaces/{workspaceIdOrName}` now includes `orgId` for callers who can view the workspace.
  {% endupdate %}

{% update date="2026-09-03" %}

## Breaking changes

* `GET /experimental/tasks` renames its link filters from `filter[link.type]` and `filter[link.value]` to `filter[linkType]` and `filter[linkValue]`. The dotted names are removed with no alias. The old spellings worked only because this route read those two query keys by hand; the shared filter parser matches field names with word characters only, so a dotted key never reaches a route that relies on the parser. The rename aligns these filters with that parser's vocabulary, so filter field names are camelCase throughout.
  {% endupdate %}

{% update date="2026-09-02" %}

## Breaking changes

* `GET /experimental/tasks/by-link` is removed. `GET /experimental/tasks` now accepts `filter[link.type]` and `filter[link.value]`, which return every task carrying the reference, newest first, with the same paging as any other task list. Each filter narrows on its own and the two compose.
* `tessl task by-link` is removed. Use `tessl task list --link-type` and `--link-value`.

### Features

* Several tasks can now link the same external reference. Previously a given pull request URL or Linear issue belonged to exactly one task per workspace, so when a later task reported the same reference it was silently dropped and never showed up in a lookup. A pull request worked on across several review rounds now lists every task that touched it.
  {% endupdate %}

{% update date="2026-08-26" %}

## New features

* Organizations now have their own Home, Context, and Findings pages that roll up every workspace in the org, so you can see context health, quality bands, and security findings across the whole organization in one place. Signed-in users now land on org Home by default, and the sidebar logo navigates there. Inventories owned directly by the org, with no workspace, now appear on these pages too.
* The organization Insights page shows organization-wide activity: active users, plugin install counts sourced from a nightly snapshot (total, daily series, and top plugins), and per-window timeframe labels on each activity graph. The `GET /experimental/orgs/{orgId}/insights` response carries an `installs` object and `window.installsThrough`.
* New scheduled runs get a plain-English schedule builder (every N hours, daily, weekly on chosen days, or monthly) with a time-of-day and a Timezone dropdown, keeping raw cron entry behind a toggle for expressions the builder cannot model. The Skill, Repository, and Environment fields become searchable comboboxes, the Agent and Model controls populate from the supported-agents endpoint, and the form links out to environment setup.
* The scheduled-run detail page shows the schedule author, a linked and summarized Skill, and each run's output as a pull request link or summary. The scheduled-runs table shows a plain-English schedule with its timezone, a Name and Description, and the last run's outcome. Scheduled runs accept an optional `description` on `POST` and `PATCH /experimental/scheduled-runs`.
* Launch runs can be cancelled through the new `POST /experimental/launch-runs/{id}/cancel` endpoint. Cancellation is idempotent, tears down the sandbox, and marks the run with a distinct `cancelled` status. Launch-run reads gain a derived `outcome` (succeeded, no-action, or failed with a reason) so an agent-reported failure is distinguishable from a completed run, plus a live `progress_phase`, `progress_message`, and `liveness` projection.
* The native remote MCP server gains a discover, validate, publish, and poll workflow for skill-backed plugins through `validate_plugin_for_publish`, `publish_plugin`, and `get_plugin_publish_status`, an optional pre-publish skill quality review through `review_skill` and `check_review_status`, and a read-only `list_workspaces` tool for workspace discovery. `validate_plugin_for_publish` now reports every detectable publishing problem in one call. The endpoint serves both the current MCP protocol (`2026-07-28`) and the legacy version (`2025-11-25`), and every authenticated tool call produces an audit event.
* Organizations can run and track a Claude marketplace sync at org scope through `POST /v1/orgs/{orgId}/claude-marketplace/sync`, `GET /v1/orgs/{orgId}/claude-marketplace/sync/latest`, and `GET /v1/orgs/{orgId}/claude-marketplace/sync/overview`. The integration settings page shows a live sync overview with per-plugin status, versions, Quality and Security columns, and run history, plus an Automatic sync toggle (`syncEnabled`) that pauses scheduled sync while keeping manual sync available.
* Workspace owners can delete eligible plugins from the plugin detail page through a Delete plugin action and confirmation, without Tessl-admin support. Policy rejections surface the exact reason.
* New `GET /v1/whoami` reports what a request is authenticated as, for both user sessions and API keys, discriminated on `data.type`. `GET /v1/users/me` is deprecated in favor of it.
* Feature availability can now be gated by region from a committed policy driven by the `TESSL_REGION` environment variable: routes marked `regionalFeature` return `404` where a feature is withheld, and the frontend hides it. The policy ships empty, so nothing is withheld yet.

### Improvements

* The BYO LLM gateway is now the *Customer Managed Gateway* throughout the product. It uses a high, medium, and low model tier selection instead of per-feature model dropdowns: `byo-provider` responses drop `featureDefaultModels` and carry `tierModels` instead, and enabling a gateway now requires a model for every tier. A gateway can be created with a connection and no models while routing is off, so you can save the connection first and add models later. The stored credential shows as a masked, read-only value with a Replace control.
* Linear can no longer be connected at organization level and is managed at workspace level only. The org-level Linear connect, callback, metadata, and config routes under `/v1/orgs/{orgId}/integrations` are removed, and Linear no longer appears in org integration listings. Existing workspace-level Linear connections keep working. In a hoisted organization with more than one source-control installation, a workspace's own connection is now preferred over the org's.
* The launch-run, scheduled-run, and task-run creation endpoints accept a GitHub repository as a bare `owner/repo` slug, an HTTPS URL, a scheme-less link, or SSH shorthand, normalize it to a canonical `https://github.com/owner/repo`, and reject unparseable or non-GitHub values with a `400`. These endpoints also let internal callers select the standard or Docker-capable sandbox image. Creating a scheduled run from an inline spec now requires an `environmentId` and rejects the request with a `400` up front instead of failing later at trigger time.
* A cloud launch that names no GitHub-token source (no uploaded env file and no workspace environment carrying a token) is now rejected with a `400` before the run, workflow, or 100-credit platform fee is created, and the error names both remedies. Checkout is blocked with a `503` unless the whole payment-to-credit pipeline is configured, so a card is never charged against a pipeline that cannot grant credits.
* Org read endpoints now include the organization `slug` on `GET /v1/orgs/{orgId}` and `GET /v1/users/{userId}/orgs`, and `/orgs` URLs accept an org id or slug with the slug canonical. `GET /experimental/launch-runs` and scheduled-run fire history include the configured `mcpServers`, `outcome`, `summary`, `pr`, and `triggerSource` fields. Workspace environments can carry MCP servers, which are applied to launch, scheduled, and task runs.
* Paginated remote MCP list tools now render an explicit page count that states it is not the total and include the exact `nextCursor`, so agents can page through every result. `list_organization_skills` and `get_skill` discover skills contained in published plugins and accept an optional `workspaceId` filter.
* Publishing a passing plugin now automatically starts finding enrichment for eligible security findings without blocking, delaying, or failing the publish. Creating an inventory now requires selecting a GitHub organization. The target-repository picker searches across every connected GitHub organization instead of one, and the scan-scope picker shows only repositories already in the policy with a searchable combobox to add more.
* The organization Home Most Installed chart ranks plugins by 30-day installs from the same source as the Skill Installs sparkline, so the two panels agree. The Active users tile is replaced by a New members tile that counts members by join date. Context score badges open a popover with the full quality, impact, and security breakdown. The Home CLI box gains a package-manager selector (`npm`, `yarn`, `pnpm`, `bun`) that updates the shown command and remembers the choice.
* During the Code Review beta, review rounds consume no credits while every round is still recorded in the usage ledger and shown at 0 credits. Support staff can grant 500 credits from the admin Grant Credits dropdown, and can reset a user's onboarding status from the admin user page.

### Bug fixes

* Free-tier organizations now reset their credit balance on a rolling monthly window anchored to their signup date, with month-end clamping, and the public credit status exposes an explicit `resetsAt`. Paid-plan organizations with no billing ledger are no longer given the free-tier allowance and resolve as unlimited instead of being wrongly blocked. Team checkout now succeeds for billing addresses outside the US and Canada that carry a state code, and legitimate Canadian territory addresses are accepted.
* A scheduled run's `nextRunAt` is now recalculated and stored when its cron or timezone changes or when a paused schedule resumes, so it is no longer blank after those operations. A completed launch run whose agent reported failure shows a distinct Agent Failed badge instead of reading as Completed.
* The "View in Context" link on a finding now lands on that finding's own Context item rather than an empty page; the findings response exposes `groupId` and the Context endpoint accepts `filter[groupId]`. Context tables gain sortable column headings and a repository filter. The org Home context-health bands are sourced from the context model over the same scope as the Context page, so the bands sum to the Total context figure.
* Charts on organization pages that had stopped drawing now render again, the org usage range no longer triggers a refetch loop, and several organization Home and Insights states now show static placeholders or a Try again control instead of flashing skeletons or asking for a full reload.

### Features

* The workspace sidebar now has an **Activity** item that replaces the separate **Eval Runs** and **Reviews** items, showing eval runs and reviews in one timeline.
* Workspace **Members** moved out of the sidebar and into **Settings**, where it is a card on the workspace Settings page.
* The organization switcher moved from the account menu at the bottom of the sidebar to a dropdown at the top of the sidebar. Organization **Members**, **Settings**, and **Admin Keys** open from that dropdown.
* The sidebar has a new collapsible **Resources** section with **Registry**, **Documentation**, and **Community**. The **Blog** link was removed.
* Search is now an icon in the sidebar header. Click it, or press `cmd-K` (`ctrl-K` on Windows and Linux), to open the search popover.
  {% endupdate %}

{% update date="2026-07-31" %}

## Features

* `POST /experimental/tasks`, `GET /experimental/tasks/{id}`, and `GET /experimental/tasks/by-link` responses now include a `links.web` field with the task's URL in the web app.
  {% endupdate %}

{% update date="2026-07-24" %}

## Features

* `GET /v1/workspaces/{workspaceNameOrID}/skill-inventories/{id}/findings` now returns a `repoActivity` field (`active`, `quiet`, or `dormant`) reflecting how recently a finding's repositories were pushed to, and accepts a `repoActivity` query parameter to filter results by one or more of these buckets.
* The canonical home banner on skill pages now shows a colored status badge (In sync, Stale, or Modified), plus when that status was last confirmed, matching the detail already shown in the "Also appears in" panel.
* `GET /experimental/tasks/{id}/runs` responses now include a `summary` field on completed runs when one is available, giving a short description of what the run did.
* The task timeline now shows a short summary of what a completed run did, alongside its existing status and links.

### Bug Fixes

* The Eval Runs pages no longer show an unrelated default-model notice banner at the top; pages now open directly with the heading and results table.
* Eval run detail pages now show an "Activation Run" label above the run heading for runs that measure activation, and the Skills Activated column shows "None" when a solution completed with confirmed zero activations; previously this looked identical to a run still in progress.
* The stale copy-state label on skill pages now reads "Last in sync {date}" instead of the contradictory "In sync until {date}", so the date shown accurately reflects when the copy last matched its source.
* Skill listings on the registry now correctly hide skills whose current review failed, and no longer hide skills based on stale historical review results for identical content.
  {% endupdate %}

{% update date="2026-07-17" %}

## Features

* Connected GitHub App integrations now show separate Manage and Remove actions in integration settings, in place of a single Remove button: Manage opens the installation's settings on GitHub, and Remove opens a confirmation dialog before disconnecting.

### Bug Fixes

* The Ignored repos picker on the inventory scans page now searches your connected provider directly, so repositories beyond the first page of previously scanned repos can be found and ignored.
  {% endupdate %}

{% update date="2026-07-09" %}

## Features

* The eval runs list now shows a single Injected Context column in place of the separate Type and Subject columns, plus a new Scenarios column showing where each run's scenarios live.

### Bug Fixes

* Removed an inconsistent focus-ring outline from breadcrumb links; other interactive elements are unaffected.
  {% endupdate %}

{% update date="2026-07-08" %}

## Features

* The eval run detail view now labels variants "Baseline" and "With context" (replacing the misleading "Without context" label) and shows a new Injected Context panel describing exactly what fixture, plugin, directory, or commit a run injected.
  {% endupdate %}

{% update date="2026-07-06" %}

## Bug Fixes

* Skill-overload warnings no longer count skills sitting in plain source directories that no agent actually loads; only genuinely root-loaded skills count toward the threshold.
  {% endupdate %}

{% update date="2026-07-03" %}

## Features

* Billing settings now show the Team plan's monthly price inline: free organizations see it next to the Upgrade to Team button before checkout, and Team organizations see it next to their plan name.
* `GET /v1/orgs/{orgId}/billing/subscription` now includes `monthlyPriceUsd` and `upgradePriceUsd` fields. `monthlyPriceUsd` is the current plan's monthly price (`null` for free or custom-priced plans); `upgradePriceUsd` is the Team plan's upgrade price (`null` once the org is already on a paid plan).
* Workspace member pages now support setting a default role that's automatically granted to every member of the workspace's organization, on top of any individual membership, useful for organizations that provision users via SSO.
* `PATCH /v1/workspaces/:id` now accepts an `orgDefaultRole` field. When set, every member of the workspace's owning organization is granted that role on the workspace (capped at `publisher`); omit it or set it to `null` to remove the default.

### Bug Fixes

* The org billing page's credit usage display now matches the sidebar meter: over-limit usage reads "You've used your credit allowance" instead of a negative remaining figure, and fractional credit amounts are floored consistently.
  {% endupdate %}

{% update date="2026-07-02" %}

## Features

* New `DELETE /v1/projects/:projectId` endpoint soft-deletes a project: it's removed from normal reads and its name and source binding are freed for reuse, while eval-run and scenario-generation history is preserved.

### Breaking Changes

* `GET /v1/orgs/{orgId}/credits` **no longer returns** the `bundles` field by default. Pass `?include=bundles` to include the purchasable credit-bundle catalogue in the response, as before.
  {% endupdate %}

{% update date="2026-07-01" %}

## Features

* Claude Sonnet 5 (`claude-sonnet-5`) is now available as an agent model for eval runs.
* The workspace Inventories Scans page has been rebuilt as a dashboard, with summary cards for estate growth, findings backlog, and scan health shown above the scans table.
  {% endupdate %}

{% update date="2026-06-29" %}

## Features

* Organizations can now subscribe to the Team plan and manage billing from organization settings: pay by card through a hosted checkout, get a monthly credit allowance, and buy additional credit bundles whenever you need them. Cancelling reverts the organization to the free plan at the end of the billing period.

### Bug Fixes

* Requests to `GET /v1/tiles/:workspaceName/:tileName/versions/:version/files/:filePath` with a malformed percent-encoded file path now return `404` instead of `500`. File paths containing a literal `%` are also served correctly.
  {% endupdate %}

{% update date="2026-06-27" %}

## Breaking Changes

* Review and fix runs that select a custom reviewer plugin or a non-default model **now require** a paid plan. An explicit reviewer or model override on `POST /experimental/review-runs` or `POST /experimental/fix-runs` now returns `403` for an organization without the entitlement; previously such requests were accepted or silently fell back to the default. Free organizations continue to run against the default reviewer and model with no change.
  {% endupdate %}

{% update date="2026-06-25" %}

## Features

* Workspace members can now start skill reviews, security reviews, and review-fix runs. Previously these required the publisher role or higher; running a review is now available at the member level.
  {% endupdate %}

{% update date="2026-06-19" %}

## Features

* Org install policies now support a git source allowlist. Under Source restrictions, admins can configure which git hosts and repository path prefixes are permitted; installs from any unlisted git source are blocked at evaluation time. Sources are specified as `github.com/org` or `github.com/org/repo` patterns.
* The install policy `sourceRestriction` rule now accepts a `gitSourceAllowlist` field: an array of `{ host, path }` objects. When present, policy evaluation blocks any git-sourced install whose source does not match a listed host and path prefix.
  {% endupdate %}

{% update date="2026-06-18" %}

## Features

* Skill inventories can now be deleted from the inventory list. Workspace managers and owners see a delete action with a confirmation dialog; deleted inventories and their scans are immediately hidden but the workspace can be re-scanned at any time.
* New `DELETE /v1/workspaces/:workspaceName/skill-inventories/:id` endpoint removes a skill inventory and hides it and all associated scans. Requires the `manage_integrations` permission.
* The inventory estate view now includes an Ignored repos panel for managing which repositories are excluded from future scans. Ignoring a repo purges its existing scan data and prevents it from being re-ingested on subsequent imports.
* New `GET`, `POST`, and `DELETE /v1/workspaces/{workspaceName}/skill-inventories/{id}/ignored-repos` endpoints let workspace admins manage which repositories are excluded from inventory scans. Ignoring a repo cascades a full data purge of its existing findings.
* The Inventories item now always appears in the workspace sidebar when the feature is enabled, even before any imports have been run. The empty state and failed-scan messages now show the `tessl inventory import` command.
* Install, publish, and dependency policies can now be set and viewed at the org, workspace, and project levels from a unified policy editor. The editor shows the effective merged policy with per-field provenance badges indicating whether each value is set at the current level or inherited from a parent.
* `GET /v1/policies/{type}/{id}/effective` now accepts a `?provenance=true` query parameter. The response includes a `policySource` field with per-field attribution showing which hierarchy level set each effective value.
* New users with pending org invitations are now shown them during sign-up, before a personal workspace is provisioned. Accepting an invite joins the invited org directly; skipping provisions a personal workspace as before.
* Eval runs now default to `deepseek-v4-flash` as the solver model (previously `glm-5.1`). Runs without an explicit `model` override pick up the new default; the scorer default remains `claude-sonnet-4-6`.

### Bug Fixes

* The plugin registry no longer shows stale installed-plugin content. Registry overview pages now always display the plugin's own declared skill documentation instead of falling back to vendored internal files.
* The managed requirements search dropdown in the policy editor now overlays the page correctly instead of pushing the save button and other form content down.
* Sending an org invitation now immediately refreshes the pending invitations list without requiring a page reload.
  {% endupdate %}

{% update date="2026-06-17" %}

## Features

* The inventory scan detail page now shows which first-party skills were added to or excluded from the index, with timestamps for added skills and reasons for excluded ones. A Re-index first-party skills button triggers a fresh indexing pass from the same page.

### Bug Fixes

* Skills submitted from repositories whose default branch is not `main` no longer get stuck in a sync error loop. The skill's source branch is now correctly recorded at submission time.
  {% endupdate %}

{% update date="2026-06-11" %}

## Features

* Review Runs now show what was reviewed: a registry-linked badge for tile skills, or the skill name for direct CLI review runs.
* Review run objects now include a `subject` field in their metadata: `{ type: "tile_skill", tileRef, registryUrl }` for tile-triggered reviews, or `{ type: "skill", name }` for CLI-initiated reviews. Runs created before this change omit the field.

### Bug Fixes

* Buttons rendered as links (navigation CTAs and similar) no longer show an underline on hover.
  {% endupdate %}

{% update date="2026-06-04" %}

## Bug Fixes

* Skill-name validation no longer rejects names containing `anthropic` or `claude` as substrings. Skills such as `claude-api` that were previously blocked now validate and score correctly.
* tile quality scores now include completed review run results. Previously, review run scores were missing from the quality calculation.
  {% endupdate %}

{% update date="2026-05-28" %}

## Features

* File downloads for tile versions with failed, errored, or pending moderation now return `403` with a `moderation_hidden` error code. Inline docs and steering are omitted from those version objects on `GET /v1/tiles`, `GET /v1/tiles/:ws/:tile/versions`, and `GET /v1/tiles/:ws/:tile/versions/:version`.
* tile pages now show a placeholder instead of inline docs and steering when a version is under moderation review, has failed moderation, or encountered a moderation error.
* Public tiles now enforce a platform-level critical-severity security threshold: publishing a version with critical-severity findings blocks moderation and prevents the version from becoming available, regardless of workspace security policy settings.
* Claude Opus 4.8 (`claude-opus-4-8`) is now available as an agent model for eval runs.

### Bug Fixes

* Security severity levels in moderation failure messages now display as 'Critical', 'High', 'Medium', and 'Low' rather than internal identifiers.
* Trend indicators on tile analytics now show 'New' when there is no baseline period to compare against, instead of an incorrect percentage.
  {% endupdate %}

{% update date="2026-05-27" %}

## Bug Fixes

* Eval-run detail pages now live under workspace-scoped URLs (`/workspaces/:workspace/eval-runs/:id`), so the sidebar shows the correct workspace navigation. Existing `/eval-runs/:id` links redirect automatically for workspace members; public run links continue to work without authentication.
  {% endupdate %}

{% update date="2026-05-22" %}

## Features

* `moderationStatus` and `moderationError` are now included in the version objects returned by `GET /v1/tiles`, `GET /v1/tiles/:ws/:tile`, `GET /v1/tiles/:ws/:tile/versions`, and `GET /v1/tiles/:ws/:tile/versions/:version`. `moderationStatus` is one of `pass`, `fail`, `error`, `pending`, or `skipped`; `moderationError` carries a safe, human-readable message when present. The deprecated `moderationPassed` boolean is unchanged; `moderationStatus` is the recommended replacement.
* The moderation status banner on tile pages now shows three distinct states: failed moderation (red), moderation error (orange), and review in progress (blue), each with copy tailored to the outcome.
  {% endupdate %}

{% update date="2026-05-21" %}

## Features

* Security review is now a required stage before a published tile version becomes available. After publishing, a version stays in `pending` moderation state until the security scan completes; a failed or errored scan results in a `fail` verdict and prevents the version from being accessible.
* tiles now show a pending moderation state immediately after publishing while security review runs; the version becomes available once review completes, and a failed scan keeps it offline.
* Workspace member pages now include a short description explaining that org membership is required before a workspace role can be assigned, with a direct link to the org members page.

### Bug Fixes

* The error toast shown after a failed skill submission now displays a close button and auto-dismisses.
  {% endupdate %}

{% update date="2026-05-14" %}

## Bug Fixes

* Publishing to a workspace where you lack the publisher role now returns `401 Unauthorized` with a message directing you to ask a workspace manager or owner (previously returned `404 Not Found`).
  {% endupdate %}

{% update date="2026-05-13" %}

## Features

* tiles and skills with no eval coverage now show an adjusted score: 80% of the review-based score at zero evals, ramping to full weight at three or more. Search ranking and score badges reflect this change.
  {% endupdate %}

{% update date="2026-05-12" %}

## Features

* The organization switcher has moved into the user menu with keyboard navigation. The workspace list now shows all workspaces across organizations, with an org badge when you belong to more than one.

### Breaking Changes

* The `allowUrlSources` and `allowFileSources` fields **have been removed** from the managed-project policy; `PUT /v1/workspaces/{workspaceId}/managed-project-policy` now returns an error if either field is sent. Existing policies are migrated automatically.

### Bug Fixes

* The workspace selector in the 'Add member to organization' form now correctly requires a selection before submitting.
  {% endupdate %}

{% update date="2026-05-11" %}

## Features

* `GET /v1/workspaces/:id` now accepts a workspace name in place of an ID.
  {% endupdate %}

{% update date="2026-05-08" %}

## Features

* Workspace settings now include toggles for public publishing, security reviews, and eval runs, accessible to workspace managers and above.
* New `GET`, `PUT`, and `DELETE /v1/workspaces/{workspaceId}/managed-project-policy` endpoints for managing workspace dependency-pinning policies.
* tiles in workspaces with security reviews disabled now show a disabled state instead of Pending on the security tab.
  {% endupdate %}

{% update date="2026-05-07" %}

## Features

* Starting an eval run or generating scenarios now returns 400 for workspaces with evals disabled.

### Bug Fixes

* Workspace created during onboarding now appears in the sidebar immediately without a page reload.
  {% endupdate %}

{% update date="2026-05-06" %}

## Features

* New /changelog page summarizing what shipped on Web and API each week.
* Onboarding now captures role and use case during signup.

### Bug Fixes

* UUID validators relaxed to accept any valid hex format.
  {% endupdate %}

{% update date="2026-05-05" %}

## Features

* Refreshed copy on workspace and org role descriptions to make permissions easier to understand at a glance.
* Creating a workspace now requires the org-admin permission.

### Bug Fixes

* Org and workspace selectors stay populated after a page refresh.
  {% endupdate %}

{% update date="2026-05-01" %}

## Features

* API endpoints are now tagged as `public` or `experimental` in the OpenAPI spec.

### Breaking Changes

* Editing workspace settings now requires the `edit_settings` permission (manager or higher).
  {% endupdate %}

{% update date="2026-04-30" %}

## Features

* Workspace Projects are now available to all customers.
* Eval-result emails redesigned with a clearer score breakdown.
* HTML files are now permitted in tile publishes.
  {% endupdate %}

{% update date="2026-04-29" %}

## Breaking Changes

* Legacy user-scoped API keys no longer accepted; switch to workspace- or org-level API keys.

### Bug Fixes

* Eval-run table rows are now real links so command-click opens them in a new tab.
  {% endupdate %}

{% update date="2026-04-28" %}

## Features

* Refreshed the favicon set across the web product.
  {% endupdate %}

{% update date="2026-04-27" %}

## Features

* Org admins can now change member roles.
* Org admins can now remove members from the organization.
  {% endupdate %}

{% update date="2026-04-24" %}

## Features

* Pending org invitations can now be listed, resent, and revoked from the UI.
* Related tiles and skills are back, now powered by semantic search.

### Bug Fixes

* Pending eval runs are now labeled "In Progress".
  {% endupdate %}

{% update date="2026-04-23" %}

## Features

* Added an organization switcher above the workspace selector.
* Workspace owners can now delete empty workspaces.
* Organizations can now be renamed directly from the UI.
* A single invitation can now add a user to multiple workspaces in an organization.
* Workspace managers can now browse organization members when adding workspace members.
* Eval-run page now renders activation results from agent runs.
  {% endupdate %}

{% update date="2026-04-21" %}

## Features

* Eval-run progress now renders as a per-scenario segmented bar.
  {% endupdate %}

{% update date="2026-04-16" %}

## Features

* New workspace settings page with a Block Public Tiles toggle.
* Email notifications are now sent on eval completion.
  {% endupdate %}

{% update date="2026-04-15" %}

## Features

* tile publishing now uses workspace-level API tokens.
  {% endupdate %}

{% update date="2026-04-13" %}

## Features

* tile lists can now be sorted by score, security, and impact.
* API-key authentication now accepted on `GET /users/me`.
  {% endupdate %}

{% update date="2026-04-09" %}

## Features

* Codex agent now available for eval runs.
  {% endupdate %}

{% update date="2026-04-08" %}

## Features

* Username now visible in the user dropdown menu.
* Login and signup pages refreshed with a new tessellated logo background.
  {% endupdate %}

{% update date="2026-04-07" %}

## Features

* Improved the error messages when tile moderation fails.

### Bug Fixes

* tiles with no score now show a Pending badge instead of a 404.
  {% endupdate %}

{% update date="2026-04-02" %}

## Features

* Authentication-provider buttons now use a consistent "Continue with" label.
* Removed the in-product tile-generation flow and the Request Docs CTAs.
  {% endupdate %}

{% update date="2026-04-01" %}

## Features

* Directory fixtures now supported in the V2 eval-run API.
  {% endupdate %}

{% update date="2026-03-31" %}

## Features

* Custom login and signup screens replace the previous hosted auth experience.
* CLI device-auth flow added so `tessl login` works from the terminal.
  {% endupdate %}

{% update date="2026-03-30" %}

## Features

* New API-key management UI rolled out.
* Failed security reviews now appear in the UI.
* Install CTA is now hidden on tiles and skills with critical-severity security findings.
* Email invitations are now rate-limited.
  {% endupdate %}
  {% endupdates %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.tessl.io/changelog-web.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
