Skip to main content

Probezen

Your dependencies can break without going down.

An API can keep returning 200 OK while changing a field, returning null, introducing an enum value, slowing down, or producing a much larger payload. Probezen finds the external APIs your application uses and warns when their behavior changes in ways that could affect your code.

Uptime monitoring tells you whether an API is online. Probezen tells you whether it still works for your application.

HIGH — Dependency behavior changed

  products[].price

  Previously: number
  Now:        string

  Likely affected:
  src/cart/calculateTotal.ts:42
    const total = response.price * quantity

  Reason: Used in arithmetic.
  Confidence: high

Probezen is deterministic, local-first, and does not require an account, hosted service, or AI.

GitHub Action — fastest adoption path

Catch breaking API changes before your users do. Add one workflow and Probezen will install itself, inspect the repository, publish a concise job summary, and annotate likely affected code.

name: Probezen

on:
  pull_request:
  push:
    branches: [main]
  schedule:
    - cron: "0 */6 * * *"

permissions:
  contents: read

jobs:
  probezen:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: HemVadgama/probezen@v1
        with:
          fail-on: high

No Probezen account, GitHub App, write permission, or hosted backend is required. On a repository without Probezen configuration, the first run performs safe dependency discovery and provides setup guidance without claiming drift. Commit probezen.yml and probezen.lock.json after configuring and approving monitored behavior; subsequent runs enforce that baseline.

Install

Python 3.12+ is required. Install Probezen as an isolated CLI application with uv (preferred):

uv tool install probezen

or with pipx:

pipx install probezen

Then run probezen --help. Once the package is published, a regular pip install probezen will also work, but uv tool and pipx avoid mixing a CLI application's dependencies with other Python environments.

Until the package is published to PyPI, install the current source directly:

uv tool install git+https://github.com/HemVadgama/probezen

Contributors working from a clone can use the verified development workflow:

uv sync --extra dev
uv run probezen --help

Start with your application

probezen init
probezen doctor
probezen scan
probezen check

init safely scans JavaScript and TypeScript source—it never imports or executes application code. It detects literal HTTP URLs, known SDK imports, and URL environment variables whose safe example values appear in .env.example, .env.sample, or .env.template. It writes a human-readable dependency inventory to probezen.yml.

doctor provides value immediately, before monitoring history exists. It reports dependency risk and conservative code assumptions such as numeric use, unguarded string methods, array indexing, and fixed enum comparisons. scan refreshes that analysis. status reports monitoring readiness.

Dynamic URLs, custom wrappers, and runtime-only configuration can be added manually; discovery is deliberately conservative.

Monitor behavior

The original advanced workflow remains available:

probezen add vendor https://api.vendor.example/v1/products --dependency vendor-example
probezen sample vendor --count 10 --interval 1
probezen infer vendor
probezen approve vendor --all
probezen check vendor

Observations are evidence, not expectations. infer proposes a candidate baseline only after sufficient consistent evidence. approve writes selected rules to the deterministic, commit-friendly probezen.lock.json. check enforces only approved rules.

Probezen currently detects:

  • HTTP status and JSON/content-type changes;
  • required fields, stable types, nullability, and small enums;
  • historically nonempty arrays becoming empty;
  • large latency and response-size changes after at least 10 observations;
  • additive fields as safe by default.

Operational thresholds are intentionally wide: four times the observed maximum, with floors of 1 second for latency and 1 MiB for payload size. This avoids treating ordinary variance as drift.

Code impact and severity

For discovered JavaScript/TypeScript dependencies, Probezen connects matching response-field changes to likely affected source. Unguarded arithmetic, string methods, array indexing, and enum comparisons raise impact. Nearby guards lower confidence. Logging is not treated as a fragile assumption.

Each result keeps the compatible breaking or warning contract classification and adds an explainable level (medium or high today), confidence, likely code locations, reason, and recommended action. Probezen says “likely affected,” not “definitely broken.”

Exit codes remain stable:

  • 0: healthy (warnings do not fail by default)
  • 1: approved contract violation by default, or a finding at/above --fail-on LEVEL
  • 2: configuration, network, or Probezen error

probezen check now checks all configured endpoints by default. The existing --all flag and named form remain supported.

Action reference and automation

Machine output is versioned and stable:

probezen doctor --json
probezen scan --json --no-write
probezen status --json
probezen check --json

The Marketplace-ready Action supports pull requests, pushes, and scheduled monitoring:

name: Probezen
on:
  pull_request:
  push:
    branches: [main]
  schedule:
    - cron: "0 */6 * * *"

permissions:
  contents: read

jobs:
  probezen:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - id: probezen
        uses: HemVadgama/probezen@v1
        with:
          command: check
          fail-on: high
          config: probezen.yml
          upload-results: "true"
        env:
          VENDOR_TOKEN: ${{ secrets.VENDOR_TOKEN }}

Use @v1 for compatible v1 updates or pin an exact release tag/SHA for an immutable dependency.

Inputs

Input Default Purpose
command check Run check, doctor, scan, or status.
fail-on high Fail on low, medium, high, or critical and above.
config probezen.yml Configuration path relative to the working directory.
working-directory . Application directory in a monorepo.
upload-results false Upload the versioned JSON result as an artifact.
artifact-name probezen-results Artifact name when uploads are enabled.

Outputs

Output Meaning
outcome healthy, changes-detected, setup-required, baseline-required, monitoring-error, or configuration-error.
findings Number of behavioral change findings.
highest-severity Highest observed finding or dependency-risk level.
result-file Absolute path to the versioned JSON result.

The Action writes GitHub-native annotations and a Markdown job summary. Findings with impact at or above fail-on are errors; lower-impact findings are warnings. The JSON result can be consumed by later steps or uploaded without granting repository write access.

- id: probezen
  uses: HemVadgama/probezen@v1
  with:
    fail-on: medium

- if: always()
  run: echo "Probezen outcome: ${{ steps.probezen.outputs.outcome }}"

CI behavior

Situation Outcome Step result
No changes healthy Pass
First run needs setup setup-required Pass with guidance
Baseline needs approval baseline-required Pass with warning; no drift asserted
Change below fail-on changes-detected Pass with warning annotations
Change at/above fail-on changes-detected Fail with error annotations
Dependency unavailable or response unusable monitoring-error Operational failure, explicitly not labeled drift
Invalid configuration configuration-error Configuration failure

Scheduled workflows use exactly the same deterministic baseline and exit behavior. Keep API credentials in GitHub Actions secrets and reference only environment-variable names from probezen.yml. The Action itself requests no permissions and reads no secrets unless you map them into env for a configured endpoint.

The same CLI commands and exit statuses work in any CI system.

Security and storage

Probezen stores runtime history in .probezen/history.sqlite3; it stores response metadata and structural path summaries, never raw response bodies. Authorization, cookies, API keys, and credential-like headers must reference environment variables and are never persisted or printed. Common secret fields such as token, password, and api_key retain type evidence but never their string values.

Configure additional private fields and accepted noise when adding a check:

probezen add vendor https://api.vendor.example/v1/customer \
  --header-env Authorization=VENDOR_TOKEN \
  --sensitive-path customer.email \
  --ignore-path metadata.request_id

Commit probezen.yml and probezen.lock.json. Do not commit .probezen/ or .env files. Review generated configuration before sharing it. Probezen has no telemetry.

Configuration and compatibility

Version 1 configuration and lock files remain valid. A v0.1 file with only checks is loaded unchanged; init or scan adds the optional dependencies inventory. Existing add, list, sample, infer, approve, validate, and check --all workflows continue to work.

version: 1
dependencies:
  stripe:
    name: Stripe
    type: api
    provider: stripe
    hosts: [api.stripe.com]
checks:
  stripe-prices:
    dependency: stripe
    url: https://api.stripe.com/v1/prices
    headers:
      Authorization:
        env: STRIPE_TOKEN
    sensitive_paths: [customer.email]
    ignore_paths: [metadata.request_id]

How inference stays quiet

At least three observations are required for structural candidates; small enums and operational signals need ten. IDs and highly varied strings are rejected as enums. Exact array lengths and narrow numeric ranges are not inferred. Optional new fields do not fail checks. Nothing is enforced until explicitly approved.

Limitations

  • Discovery and impact analysis target JavaScript/TypeScript; Probezen itself is a Python CLI.
  • Static analysis is lexical and conservative, not a whole-program type analysis. Aliased fields, runtime-generated URLs, and custom HTTP abstractions may require manual configuration.
  • Active monitoring currently supports JSON GET endpoints.
  • History is local; scheduled monitoring is ordinary CI rather than a hosted scheduler.
  • Probezen detects behavioral compatibility, not semantic correctness or availability SLAs.

See examples/typescript-app for realistic dependency usage and CONTRIBUTING.md for development instructions.

Metadata

Release files for probezen 1.0.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 probezen 1.0.0
File Size Uploaded
probezen-1.0.0.tar.gz 37.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for probezen 1.0.0
File Interpreter ABI Platform
probezen-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 73.7 kB

Release files / probezen-1.0.0.tar.gz

Download URL probezen-1.0.0.tar.gz
Size 37.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f8de0ad707e6ce9b545f7eff6b8b074d49b3a22452cea2b7374875b100c89baa
BLAKE2b-256 checksum
How to use checksums
e691122fd80e539b189cd7df52356968792ed13d539cdba0da821a122d737bc1
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 Aug 19, 2026.

Transparency log

Release files / probezen-1.0.0-py3-none-any.whl

Download URL probezen-1.0.0-py3-none-any.whl
Size 35.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
15ce163a0fdfbfc8c44acc82f5b1a9030fcb49842ec39d1c6bba7a9d6836733e
BLAKE2b-256 checksum
How to use checksums
1a051dd316aecf3142223d385fd4764212386746f2cee6a6914b7dfb0862cda0
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 Aug 19, 2026.

Transparency log

Release history Release notifications | RSS feed

1.2.0

2 release files

1.1.0

2 release files

This release

1.0.0 This release

2 release files

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