Skip to main content

See which AI services your code depends on, what open source can replace them, and which models are about to stop working.

uvx unrent .

unrent my-app: 3 strings attached, 3 can be cut, 1 will snap. Rows for OpenAI API, Pinecone and ElevenLabs marked cut with their open source replacements, gpt-4-turbo marked snaps with its retirement date and replacement, and faiss marked runs with its rank

What each row means

╎ cut You use a closed AI service. The best open source replacement is on the row.
│ held You use a closed AI service with no open source replacement yet.
┆ snapped Your code asks for a model the vendor has shut down. Those calls fail today.
┆ snaps Your code asks for a model the vendor shuts down on the date shown.
│ runs Open source AI you already run, and how it ranks.

Every row points to a file and line. --why shows all of them, and what to use instead:

unrent my-app --why gpt-4-turbo: main.py line 9 selects gpt-4-turbo, which retires on 2026-10-23; openai recommends gpt-5.6-sol, with the link to OpenAI's deprecations page

Install

uv tool install unrent      # or: pipx install unrent

Python 3.11+.

Use

unrent .                         # scan the current directory
unrent . --why openai            # every line behind one row
unrent . -o report.md            # a Markdown report for an issue or PR
unrent . --format json           # for scripts
unrent . --skip-tests            # ignore test code
unrent . --exclude "examples/"   # .gitignore syntax, or a .unrentignore file

unrent scan --help lists the rest.

Use it from an AI agent

As an MCP server (Claude Code, Cursor, Copilot, …):

claude mcp add unrent -- uvx --from "unrent[mcp]" unrent mcp

Other clients: command uvx, args ["--from", "unrent[mcp]", "unrent", "mcp"].

As a skill, with a workflow for what unrent can't see on its own:

npx skills add stringcutter/unrent

How it works

What it finds
  • 357 closed AI services in 21 categories: LLM APIs and gateways, embeddings, vector databases, RAG, document parsing, observability, speech, image generation, search, scraping, browser automation, sandboxes, agents and agent memory. 139 hosted model providers come from models.dev, regenerated weekly.
  • 204 model retirements from OpenAI, Anthropic and Google, with dates and the vendor's replacement, checked weekly against their deprecation pages. A model counts when the code picks it (a default, a config value, a call), not when it is only listed in a menu or price table. Azure, Bedrock and Vertex have their own schedules and are not covered.
  • 89 open source projects you may already run: vector databases, inference servers, gateways, RAG frameworks, document parsers, observability, evals, speech.
  • Unknown candidates: API hosts and keys that look like a hosted AI service the catalog doesn't know yet. Listed for you to check, never counted.

It reads packages (Python, npm, Go, Cargo, Maven, Gradle, NuGet, RubyGems, Composer, pub, SwiftPM), imports, install commands, container images, and API hosts, model ids, env vars and SDK calls in code and config.

What it ignores
  • Local servers behind a compatible SDK: OpenAI(base_url="http://localhost:11434/v1") is Ollama, not OpenAI.
  • Comments, docs, lockfiles, node_modules and anything .gitignore excludes.
  • Generic names: your perplexity.py isn't Perplexity.
  • Open-weight models: gpt-oss, deepseek-v3.2 and Ollama tags aren't closed.

Secrets in the output are masked (OPENAI_API_KEY=****). Files too large to scan are listed, never skipped silently.

How alternatives are ranked
  • Projects by GitHub stars gained in the last 90 days, from unrent's own weekly snapshots (total stars until four weeks of history exist; the report says which).
  • Models by Hugging Face trending: labs' own releases under an open licence.
  • Open source only: an OSI licence for code; Apache, MIT, BSD or CC-BY for weights. Archived projects are dropped, and open core is marked.

The CLI uses the rankings shipped with its release. The MCP server fetches the latest from this repo, cached for six hours (UNRENT_OFFLINE=1 turns that off). Only rankings come in; your code never goes out.

How accurate it is

Every rule has a test that fails without it. A golden corpus of 54 real repos, labelled by hand, runs in CI: closed services precision 0.993, recall 0.957; models that stop working precision 0.939, recall 0.886.

With ripgrep installed, a 5,500-file repo scans in about 6 s.

Metadata

Release files for unrent 0.2.2

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

Source distribution (sdist)

Source distribution for unrent 0.2.2
File Size Uploaded
unrent-0.2.2.tar.gz 181.5 kB Details

Built distribution (wheel)

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

Total release size: 306.8 kB

Release files / unrent-0.2.2.tar.gz

Download URL unrent-0.2.2.tar.gz
Size 181.5 kB
Tags Source
SHA-256 checksum
How to use checksums
7c4816f60b76d94661187fb2d353c5857cad44b170a4550a344e943e5a018a91
BLAKE2b-256 checksum
How to use checksums
f01d6243de80575bfa089d4b04851fbf543967b0db6b045645e324ce30abdc3b
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 / unrent-0.2.2-py3-none-any.whl

Download URL unrent-0.2.2-py3-none-any.whl
Size 125.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aae2f3d157a090ad7a521a4b659836e6d6218aa43145ae628673d7edf72b7f93
BLAKE2b-256 checksum
How to use checksums
8ab018cb216a6ec74d7a268fe7166d7e4e7bb0ab2615c411197eaafb07878bc6
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 history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

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