Open provider-change event feed for AI platform teams and agents.
Project description
AI Provider Watch
AI Provider Watch is an open, factual provider-change event feed for AI platform teams, coding-agent maintainers, and FinOps dashboards.
It tracks provider changes that can affect developer cost, quotas, token accounting, model availability, default models, deprecations, incidents, API contracts, and migration risk. The project is founded by Ottto, but the feed, schemas, CLI, and docs are usable without an Ottto account.
What This Is
- A reviewed machine-readable event feed, not a static model catalog.
- A CLI and Python package for validating, indexing, diffing, and explaining provider-change events.
- A source registry for official provider docs, status pages, pricing pages, blogs, and repositories.
- Agent-readable contracts for Codex, Claude Code, MCP clients, GitHub Actions, and downstream repo impact checks.
What This Is Not
- Not an Ottto customer telemetry product.
- Not a scraper of authenticated provider consoles or billing dashboards.
- Not legal, purchasing, tax, or migration advice.
- Not a replacement for LiteLLM, models.dev, Langfuse, Helicone, or OpenLIT.
Current Status
This repository is in pre-release foundation work. Current merged work establishes:
- community, governance, security, and mixed-license files;
- root/path-scoped agent instructions;
- event/source/observation/release JSON Schemas;
- provider, surface, model, and agent-app registries;
- deterministic
apw validate,apw index,apw latest,apw diff, andapw explaincommands; - deterministic
apw candidate generatecommand for review-only findings derived from source observations; - deterministic candidate-review PR body generation for daily source changes;
- optional model-pluggable LLM review request packets for candidate PRs;
- downstream repository impact reports through
apw repo checkand a composite GitHub Action; - schema-backed generic webhook and Slack-compatible notification payloads
through
apw notify; - ecosystem mapping payloads for LiteLLM, models.dev, Langfuse, Helicone, and
OpenLIT through
apw ecosystem render; - a repo-root Codex plugin package with APW skills and read-only MCP config;
- public maintainer roles, source-owner mapping, release-manager gates, and a roadmap for v0.1 through v1.0;
- a first reviewed canonical event seed set for OpenAI, Anthropic, Google Vertex AI, AWS Bedrock, and Azure OpenAI;
- synthetic parser fixtures for status feeds, Statuspage-style status pages, model-doc identifiers, pricing signals, and AWS Bedrock model-card display refs;
- tested read-only MCP adapter helpers;
- CI and schema-backed data-release dry-run verification.
Install From Checkout
uv sync --all-extras
uv lock --check
uv run apw validate
uv run apw index --check
uv run apw source test
uv run apw release dry-run --output .apw/release-dry-run
uv run apw candidate generate --observations tests/fixtures/observations/candidate-observations.json --output .apw/candidates --created-at 2026-05-31T20:15:00Z
uv run apw candidate review-pr-body --observations tests/fixtures/observations/candidate-observations.json --candidates .apw/candidates
uv run apw review request --candidates .apw/candidates --reviewer codex --created-at 2026-05-31T20:15:00Z
uv run apw repo check --repo . --since 3650d --risk low
uv run apw notify webhook --since 7d --risk medium --output .apw/apw-webhook.json
uv run apw notify slack --since 7d --risk medium --output .apw/apw-slack.json
uv run apw ecosystem render --target litellm --since 30d --risk medium --output .apw/litellm-mapping.json
uv run apw latest
Python package publication uses PyPI Trusted Publishing through the protected
pypi environment. See
docs/operations/python-package-release.md.
The npm package remains deferred until the schema/feed contract is stable enough
to justify a JavaScript distribution.
Feed Artifacts
Generated artifacts live under data/:
data/events/*.jsondata/feeds/events.jsondata/feeds/events.ndjsondata/feeds/latest.jsondata/feeds/rss.xmldata/indexes/provider/*.jsondata/indexes/kind/*.jsondata/releases/dev/manifest.json
Release dry runs use CalVer IDs such as data-2026.06.01, build
release-shaped artifacts under ignored .apw/, verify manifest checksums,
license layout, dependency lock presence, workflow token boundaries, source
ownership, maintainer release docs, and required GitHub CI,
CodeQL/code-scanning, Dependency Review, branch-protection, artifact-review,
and attestation gates without publishing a tag.
The normalized factual event data and generated feed artifacts are dedicated to the public domain under CC0-1.0. Code, schemas, docs, tests, and tooling are Apache-2.0.
Source Refresh
Official source packages can be checked locally:
uv run apw source test
uv run apw source fetch --source openai.status
The scheduled source-refresh workflow fetches enabled official sources, stores only fingerprints, generates review candidates when parser claims exist, and opens a draft candidate-review PR when source state or candidate files change. It does not publish provider events or commit raw source content.
Source descriptors declare explicit graduation posture. enabled_deterministic
sources are fetched by automation; blocked_pending_parser sources need parser
fixtures before unattended refresh; manual_review_only sources can support
reviewed events but remain maintainer-triggered.
Broad lifecycle pages can additionally declare content_scope so APW hashes and
parses only a maintainer-owned HTML heading range.
Review candidates are separate from published events:
uv run apw candidate generate \
--observations .apw/source-observations.json \
--output .apw/candidates \
--created-at 2026-05-31T20:15:00Z
Candidate files are maintainer-review input. Promotion to data/events/ remains
manual. The initial seed events are reviewed by maintainers from official
provider-controlled sources and do not copy raw provider page prose.
Current parser output is conservative by design: changed official sources create generic maintainer-review claims; Atom and Statuspage-style status sources expose hashes/timestamps instead of copied incident text; model-doc parsers extract only bounded model identifiers; lifecycle-doc parsers extract bounded model identifiers and dates; and pricing parsers emit bounded pricing/model signals such as input/output, cached input, batch, priority, regional, and provisioned-throughput markers. Surrounding headings, descriptions, issue bodies, PR comments, social text, and page prose remain untrusted and are not copied.
Render the same draft PR body used by automation:
uv run apw candidate review-pr-body \
--observations .apw/source-observations.json \
--candidates data/candidates/review \
--validation-output .apw/candidate-review-validation.txt
Render a bounded optional LLM review request for Codex or Vertex Gemini Flash:
uv run apw review request \
--candidates data/candidates/review \
--reviewer codex \
--created-at 2026-05-31T20:15:00Z \
--output .apw/llm-review-request.json
The review request omits candidate claim text, treats all source/candidate text
as untrusted data, and gives the reviewer no merge, publish, source-write, tag,
release-token, or OIDC authority. Reviewer outputs can be checked with
apw review eval, which validates the result schema and scores recall,
curation precision, faithfulness to request evidence refs, and prompt-injection
safety.
First Providers
The initial official-source registry covers:
- OpenAI
- Anthropic
- Google Gemini / Vertex AI
- AWS Bedrock
- Azure OpenAI
Community, social, and third-party sources can create review candidates, but they do not publish canonical events without maintainer review.
Core Model
APW uses a stable ProviderEvent envelope plus a typed EventDetail payload and
repeatable ImpactAssessment rows. This avoids one giant nullable event model
and keeps pricing, quota, model lifecycle, token accounting, status, and API
contract changes precise.
See:
- Architecture
- Event Schema
- Agent Consumption
- Plugin Contract
- Read-Only MCP Contract
- Downstream GitHub Action
- Webhook And Slack Payloads
- Ecosystem Mappings
- Codex Plugin
Contributing
Use pull requests for every code, schema, source, data, docs, and workflow change. Start with CONTRIBUTING.md.
For source packages, see docs/contributors/source-packages.md. Source ownership is tracked in SOURCE_OWNERS.md, release settings are tracked in docs/operations/repository-settings.md, and roadmap priorities are tracked in ROADMAP.md.
License
| Asset | License |
|---|---|
| Code, schemas, docs, tests, CLI, MCP shell | Apache-2.0 |
| Normalized factual data and generated feeds | CC0-1.0 |
| Provider names and trademarks | Owned by their respective owners |
See DATA_LICENSE.md, TRADEMARKS.md, and
LICENSES/.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_provider_watch-0.1.0a0.tar.gz.
File metadata
- Download URL: ai_provider_watch-0.1.0a0.tar.gz
- Upload date:
- Size: 80.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8765259ec6ccd68d703c3d06ccbad94c3da8026f9b6498de9d89a69f2aa0e967
|
|
| MD5 |
89ce8a78cb24b6c1d874ceec9bd3c466
|
|
| BLAKE2b-256 |
76a676875fb46afcc1e7ab8c4770ce0dd8a9fc4e36c35a2c2b98fc61748a0b34
|
Provenance
The following attestation bundles were made for ai_provider_watch-0.1.0a0.tar.gz:
Publisher:
publish-python.yml on ottto-ai/ai-provider-watch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_provider_watch-0.1.0a0.tar.gz -
Subject digest:
8765259ec6ccd68d703c3d06ccbad94c3da8026f9b6498de9d89a69f2aa0e967 - Sigstore transparency entry: 1722584809
- Sigstore integration time:
-
Permalink:
ottto-ai/ai-provider-watch@7a7865ad337bff7ff9294e041959ab04e3f7ba0f -
Branch / Tag:
refs/tags/v0.1.0a0 - Owner: https://github.com/ottto-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@7a7865ad337bff7ff9294e041959ab04e3f7ba0f -
Trigger Event:
push
-
Statement type:
File details
Details for the file ai_provider_watch-0.1.0a0-py3-none-any.whl.
File metadata
- Download URL: ai_provider_watch-0.1.0a0-py3-none-any.whl
- Upload date:
- Size: 69.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8efd7a175992edbbca2334dc530cccb61534b44d1b1211fb89cf3fa0739cfeca
|
|
| MD5 |
30136a677be7edd0217dccf988ce9aac
|
|
| BLAKE2b-256 |
80184662a1c31d5f932903496cc6c566abccc6d53c6f5974a4c7aad0d61d815c
|
Provenance
The following attestation bundles were made for ai_provider_watch-0.1.0a0-py3-none-any.whl:
Publisher:
publish-python.yml on ottto-ai/ai-provider-watch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_provider_watch-0.1.0a0-py3-none-any.whl -
Subject digest:
8efd7a175992edbbca2334dc530cccb61534b44d1b1211fb89cf3fa0739cfeca - Sigstore transparency entry: 1722584898
- Sigstore integration time:
-
Permalink:
ottto-ai/ai-provider-watch@7a7865ad337bff7ff9294e041959ab04e3f7ba0f -
Branch / Tag:
refs/tags/v0.1.0a0 - Owner: https://github.com/ottto-ai
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@7a7865ad337bff7ff9294e041959ab04e3f7ba0f -
Trigger Event:
push
-
Statement type: