Changelog

New features, improvements, and fixes from the Supersimple team.

Agent skills

Skills are reusable instruction packs Supersimple's AI agent can load for specific kinds of work. When relevant to the current question, the AI pulls in the skill's full instructions on-demand.

Agent skills in account settings

This keeps your base system instructions focused and clear while still giving the agent deep, task-specific guidance where needed. Use skills to capture how your team writes a weekly report, finds the latest contract for a vendor, or any other recurring or complex workflow.

Skills can also be permissioned based on user attributes. Keep in mind that data access permissions still always apply, so the agent will only be able to pull in information from sources and data models the user has access to.

Agent loading a prebuilt skill mid-conversation

Manage skills under account settings → AI → Agent skills.

Auto-tidied AI responses

AI now collapses steps like intermediary outputs, debug queries, and more. This means you still see everything it did, while keeping the clean, final output front and center.

Accepting the AI's response drops these intermediary steps by default.

Array functions in custom formulas

Custom formulas now include a dedicated set of array functions for working with list values:

FunctionDescription
array_contains(array, value)Returns true if the array contains the given value.
array_length(array)Returns the number of elements in the array.
array_to_string(array, delimiter)Joins the elements of the array into a string with the given delimiter.
array_get(array, index)Returns the element at the given position (1-based index).
array_any(array1, array2)Returns true if the two arrays share any common element.
array_all(array1, array2)Returns true if all elements of the second array are present in the first.
array_intersect(array1, array2)Returns an array of elements present in both arrays.
array_union(array1, array2)Returns an array of unique elements from both arrays combined.
array_diff(array1, array2)Returns elements from the first array that are not in the second.

Read more in the custom formulas reference.

Date range variables

Date Range variables let you use a single Variable for both the start and end date of a filter. Pick a Dynamic range like "this month", or use Specific dates for things like "January 4th" or "all of February 2026".

You can also type the date range you're looking for in plain English, and see a real-time preview of how we interpreted your input.

Applying the Date Range variables to queries is as easy as filtering for some field "is" and then picking your Date Range variable from the dropdown.

User groups and more flexible permissions

User groups

User groups allow setting parameters for multiple users at once. Define groups with specific parameters and assign users to them. This way, you can manage permissions for teams or departments without configuring each user individually. User groups can be configured by account admins under settings.

Model-level permissions

Model-level permissions control who can see and query a data model. Hide entire models from users based on their parameters like properties given via user groups or their email.

Define an access block on the model and combine conditions with AND/OR logic to match departments, regions, specific emails, or anything else on the user.

models:
  salaries:
    name: Salaries
 
    table: hr.salaries
 
    access:
      user_parameters:
        department: hr
        data_level: sensitive
 
    properties:
      employee_id:
        name: Employee ID
        type: String
      salary:
        name: Salary
        type: Number

Row-level permissions

You can now also use custom user parameters in addition to the user's email to filter rows within a model.

Row-level permissions filter which rows a user can access within a model, using {{user_parameters.<key>}} placeholders injected into SQL at query time. Reference the placeholder in the model's sql and each user sees only the rows matching their own parameters.

models:
  orders:
    name: Orders
 
    sql: |-
      SELECT * FROM orders
      WHERE region IN ({{user_parameters.region}})
 
    properties:
      order_id:
        name: Order ID
        type: String
      region:
        name: Region
        type: String

Read more in the documentation.

Server-side Python blocks

Python blocks now run in configurable sandboxes, instead of using Pyodide in your browser. This means support for any Python package and removes the memory limits of your browser tab.

Sandboxes are isolated between customers, and the default Docker image and machine resources (CPU, memory, and disk) are all configurable.

To use Python blocks inside dashboards, alongside other native blocks, you can now set them to auto-run on exploration load, and hide the code so only the output is shown – both from the right-hand sidebar.

Server-side Python blocks

Per-column SQL in data models

You can now define individual columns on a table-based model using a SQL expression, right where you define other column metadata.

properties:
  name:
    name: Name
    type: String
    sql: "case when {is_internal} then concat('(INTERNAL) ', {name}) else name end"
  name_upper:
    name: Name (uppercase)
    type: String
    sql: "upper({name})"
    description: "The name column, but in uppercase"

Use {column_name} to reference another column, whether from the source table or computed under properties using sql.

You can also use these sql-defined properties in any operations on the same data model, including filters.

Read more in the docs.

Multi-sort

Improved multi-sorting of tables. Go to "Edit Sort" in the block options menu to set the columns and their exact order in the sort.

Conditional formatting

Apply conditional formatting to tables to visually highlight individual values or entire rows based on rules you define.

Dashboards-as-code and exporting via CLI

You can now export your models, metrics, and saved explorations to YAML files using Supersimple's CLI. Run supersimple export to try it out!

The import and validate commands have also been upgraded to support glob patterns and directories.

# Export models, metrics, and explorations:
supersimple export -o my-config/
 
# Export just the explorations:
supersimple export --explorations -o my-config/
 
# Import all explorations from a directory:
supersimple import explorations/
 
# Import using glob patterns:
supersimple import models/user-*.yaml
 
# See available flags:
supersimple export --help
supersimple import --help

This is particularly useful for managing large bulk changes, including refactoring your data model. You can export your current configuration, make changes in the YAML files, and then re-import everything to apply the updates. On your own, or by letting your coding agent use the CLI.

Read more in the CLI docs.

GitHub integration

Semantic layers are great, but it's impossible for them to cover everything. One of the most useful sources for additional context is your codebase itself!

That's why we're pumped to announce Supersimple's native GitHub agent for finding definitions and gotchas from code – things that the analytics agent needs to know about.

Supersimple's GitHub integration spawns powerful coding agents to roam around your repos and pull requests. Pick the repos you'd like to include when setting up the integration, and we'll take care of everything else.

Bringing the context of your codebase into BI is a huge unlock. We can't wait to hear what you think, and all the use cases this unlocks!

Light mode

Supersimple's been in dark-mode-only from (almost) day one, and we know many of you love it that way.

We know some do prefer light mode for various reasons, though – and we want to give everyone a delightful experience. So – here you go!

Find the new "App appearance" toggle under your account settings.

Light mode Light mode

percentile() custom formula function

Custom formulas now support percentile(field, percentile) for nearest-rank percentile calculations.

Example: percentile(prop("Duration (ms)"), 90) returns the p90 duration (meaning 90% of data points are at or below the p90 value).

Read more in the custom formulas reference.

SQL block autocomplete

For whenever you really need some custom SQL: schema-aware SQL autocomplete now makes that a smoother experience.

Suggestions include field names, schemas/datasets, and database functions and keywords.

Reuse citations across conversation

AI can now reference and cite information from earlier messages in the conversation without re-searching. This makes responses faster and more context-aware.

Reuse citations across conversation

Giving the AI agent access to database query results

Supersimple's AI can now choose to query data in addition to simply operating with model and exploration metadata.

This makes the agent significantly more capable of debugging data issues, cross-referencing things, and jumping back-and-forth between structured and unstructured data sources.

You have full control over which data models the AI may access. Currently available under Research mode for select accounts.

Pin explorations to sidebar

You can now pin your favorite explorations to the sidebar for quick access. Pinning is personal and doesn't affect other team members.

Pin explorations to sidebar Pin explorations to sidebar

Auto-scroll when resizing blocks

The page now automatically scrolls when you drag a block's resize handle near the edge, making it easier to resize blocks that extend beyond the viewport.

Export blocks as images

Any block can now be exported as a PNG image, either by copying to clipboard or downloading directly.

Multi-source AI agent revamp

This is the biggest upgrade to Supersimple's AI agent since its inception in 2023 – a result of months of effort.

The agent is now significantly stronger at picking and choosing among enabled data sources, and iterating based on intermediary findings.

Drag blocks between tabs

You can now drag and drop blocks between tabs using the table of contents for easier exploration organization.

Slack channel selection for alerts

Instead of messing with Slack webhooks, you can now directly select between Slack channels to send Alerts to.

Note: this requires you to install the Supersimple Slack bot under account settings.