Skip to main content

lkml-blastradius

The blast radius of every Looker change. Every morning: what changed (LookML deploys, Looker upgrades, Google releases), and which dashboards, Looks, explores and Conversational Analytics agents it hits.

pip install lkml-blastradius
lkblast init    # writes blastradius.yaml + a daily GitHub Actions workflow
lkblast run     # snapshot Looker, compare with yesterday, write the report

Each run takes a metadata snapshot through the Looker API and compares it with the previous one:

It tracks From
Every explore and field: SQL, type, label, description, synonyms, joins, sql_table_name, always filters lookml_models, lookml_model_explore
Every dashboard tile and filter, Look, and merged query, with each field it uses (including filters, sorts, pivots, custom fields) dashboards, looks, queries, merge_queries
Conversational Analytics agents in Looker: explores, golden queries, fields named in instructions agents (beta API)
CA API data agents (optional) geminidataanalytics.googleapis.com dataAgents
Broken content, whatever the cause Looker content validator
Looker version and the deployed LookML commit of every project, including imported ones versions, projects/{id}/git_branch
What Google shipped Looker release-notes feed, CA API release notes

Then it reports what changed, old → new, which content it touches, how badly, and why:

Severity Meaning
Breaking A field, join or explore that the content uses was removed, or the content validator found a new error
Numbers may change SQL, type, measure filters, joins, table or always-filters changed for a field the content uses
AI agents may answer differently Descriptions, labels, synonyms, hidden flags or new fields changed in an explore an agent can use. Dashboards ignore these changes, but agents read them.
Cosmetic Labels or formats on dashboards and Looks

Every change is attributed to one of three causes: a LookML deploy in a named project (old → new commit), a Looker upgrade (old → new version) with no deploy, or neither. Changes from Google come from the upgrade line, the matching release notes, and the content validator.

Try it offline

lkblast demo    # two days on a fake Looker (fictional Harborline Supply Co.)
open lkblast-demo/reports/blastradius.html
  2 breaking, 3 numbers may change, 1 cosmetic
  2 new content error(s), 2 open
  Looker upgraded 26.14.2 → 26.16.1
  LookML deployed in core_project, finance_project
  3 new Google release note(s), 2 need attention
Content Severity Why Cause
Executive revenue / Revenue by region (tile) Breaking customers.region removed LookML deploy in finance_project
Executive revenue / Region (filter) Breaking customers.region removed LookML deploy in finance_project
Executive revenue / Net revenue by month Numbers may change orders.net_revenue SQL now also subtracts discounts LookML deploy in core_project (imported)
Collections / Amount due vs net revenue (merged query) Numbers may change same same
Finance assistant (Looker CA agent) Numbers may change its golden query uses orders.net_revenue same
Executive revenue / Order volume Cosmetic orders.order_count label same

The Refund watch Look and the Logistics helper agent are not listed because nothing they use changed.

Run it daily (GitHub Actions + Slack)

  1. lkblast init in any repo (it can be an otherwise empty repo).
  2. Add repository secrets: LOOKER_BASE_URL, LOOKER_CLIENT_ID, LOOKER_CLIENT_SECRET, and optionally SLACK_WEBHOOK_URL.
  3. Push. The workflow runs at 06:00 UTC daily (change the cron in .github/workflows/lkml-blastradius.yml) or on demand from the Actions tab.

Every run writes reports/blastradius.{md,html,json}. The Markdown goes to the job summary, the reports are uploaded as an artifact, and a short summary with a link to the run is posted to Slack. Snapshot history lives in the Actions cache. Each run refreshes it, so it doesn't expire while the job runs daily.

The first run saves a baseline. Impact is reported from the second run on.

API user. Use API credentials of a user that can see all content (an admin, or a role with see_lookml, see_user_dashboards, see_looks, access_data on all models). Content the user can't see is not analyzed. Reading deployed commits needs see_lookml/develop; without it, the report still works but can't tell a LookML deploy from a Looker upgrade.

Options

blastradius.yaml (written by lkblast init; every key is optional):

looker:   {models: [], workers: 8, timeout_seconds: 120}
content:  {dashboards: true, looks: true, looker_agents: true, content_validator: true}
ca_api:   {enabled: false, locations: [global]}   # + GOOGLE_CLOUD_PROJECT, GOOGLE_OAUTH_ACCESS_TOKEN
releases: {enabled: true, lookback_days: 7}
storage:  {dir: .lkblast, keep: 30}
report:   {dir: reports}
lkblast run --fail-on breaking          # exit 1 when something breaks (for alerting)
lkblast compare OLD.json.gz NEW.json.gz # report between any two saved snapshots

To include CA API data agents, set ca_api.enabled: true and provide GOOGLE_CLOUD_PROJECT and an access token in GOOGLE_OAUTH_ACCESS_TOKEN. In Actions, get one with google-github-actions/auth (token_format: access_token). Agents that point at another Looker instance are ignored.

What it does not do

  • It reports changes after they reach production (daily). It doesn't check a LookML branch before merge.
  • It never runs queries and stores no row data. It can't see a number change that comes from the warehouse data itself.
  • It can't see a Google change that alters behavior but not metadata, such as how an agent picks fields. That shows up only as an upgrade line and release notes. Agent answer regression testing is what lookml-agentops does.

API sources

Every Looker endpoint and attribute used is checked against Looker's OpenAPI spec (looker-open-source/sdk-codegen, spec/Looker.4.0.oas.json, 4.0.26.12). The list is in the docstring of looker.py. /agents is marked beta by Looker. CA API fields come from the v1 REST reference. Release-note formats were checked on 2026-10-03 (see releases.py). If Google changes the page layout, the run records a warning and continues.

Development

uv sync && uv run pytest && uv run ruff check src tests && uv run mypy

Apache-2.0. Not affiliated with or endorsed by Google. Looker is a trademark of Google LLC.

Metadata

Release files for lkml-blastradius 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lkml-blastradius 0.1.0
File Size Uploaded Provenance
lkml_blastradius-0.1.0.tar.gz 75.3 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for lkml-blastradius 0.1.0
File Interpreter ABI Platform
lkml_blastradius-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 118.7 kB

Release files / lkml_blastradius-0.1.0.tar.gz

Download URL lkml_blastradius-0.1.0.tar.gz
Size 75.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a408c7fa8073bb7cef249ce9b47128baa25f700bcaa618735370e587c08dcaf5
BLAKE2b-256 checksum
How to use checksums
01b0e540e5b6f39a92f6c7fe73ecb7b9a78c4b355084466f60bff6e4137dc69e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / lkml_blastradius-0.1.0-py3-none-any.whl

Download URL lkml_blastradius-0.1.0-py3-none-any.whl
Size 43.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a242232aded7d66a63a563b724597f1925dcc1cf7c3fec550aacb2e69b8e56b9
BLAKE2b-256 checksum
How to use checksums
fb6d61b93ac18090630ea4a0e21ad789611516d878d53d8a35862c1ad88f2d8b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Security for lkml-blastradius 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for lkml_blastradius-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page