Evergreen

io.github.arminazimi由 GitHub 帳號 arminazimi 發布v0.7.3更新於 Nov 7, 2026

Evidence-backed deprecation and end-of-life checks for dependencies, runtimes, and Actions.

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

本機 MCP 伺服器,讓助理掃描儲存庫中已終止支援的執行環境、已棄用的套件與已退役的 GitHub Actions,並附上依據與遷移步驟。

可以做什麼
  • 掃描儲存庫中的生命週期風險,列出問題所在的檔案、行號與嚴重程度
  • 解釋單一問題,提供權威來源、替代方案與遷移步驟
  • 產生遷移情境包並驗證遷移結果
  • 在加入相依套件前單獨檢查某個套件或 Action 的狀態
  • 涵蓋 npm、Python、Go、Rust、Java/Kotlin、.NET、Ruby、PHP、Dart/Flutter、Elixir、Scala、Swift、容器映像、CI 執行器映像、Kubernetes API、Terraform 與無伺服器執行環境
適用情境
適合讓編碼助理在建置失敗前找出儲存庫中已棄用或已終止支援的相依套件、執行環境與 Actions,或在引入某個套件前先確認其生命週期狀態。
執行需求
透過 npx 從 evergreen-deprecation npm 套件以 stdio 方式在本機執行,需要 Node.js 22 或更新版本。未宣告需要帳號、API 金鑰或環境變數。掃描具確定性且離線進行,生命週期資料可從簽章資料包更新。
安裝前請注意
結果僅供參考:沒有對應規則的套件會回報為 no-data,並不代表安全,部分宣告也會列為未分類。伺服器會讀取儲存庫檔案,只應對願意被檢查的程式碼使用。它不會上傳儲存庫內容,建議的遷移指令也不會自動執行。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Evergreen,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Evergreen

[Evergreen — Know what breaks next.]

[CI] [Coverage] [npm] [Evergreen] [OpenSSF Scorecard] [OpenSSF Best Practices] [Slipway] [Seaworthy] [CodeQL] [skills.sh]

Evergreen finds end-of-life and deprecated runtimes, packages, and GitHub Actions in your repository, shows the exact file and line, and backs every finding with an authoritative source, a replacement, and migration steps. It runs on your machine as a CLI, a local MCP server, a GitHub Action (with SARIF for code scanning), and an Agent Skill, so people and coding agents can find lifecycle risk before it breaks a build, and check a dependency before adding it. Scans are deterministic and offline, and need no account.

Read this in: English · فارسی.

Read the public documentation, run the 90-second demo, or inspect the validation report. For AI tools, the docs are also published as llms.txt and llms-full.txt.

For coding agents

bash
npx evergreen-deprecation check pkg:npm/[email protected]   # before adding a dependency: prints a status (affected or no-data) with its sourcenpx evergreen-deprecation scan                           # in a repository: prints each lifecycle risk with its file, line, and sourcenpx --yes --package evergreen-deprecation evergreen-mcp  # start the local MCP server over stdio for an agent host

What it covers

EcosystemWhat Evergreen readsWhat it reports
Container base imagesDockerfile, *.Dockerfile, Containerfile, compose.yaml, docker-compose.yml: base images of official node, python, postgres, mysql, and rubyImage release lines that are end of life. Variables, latest, and floating tags are listed as unclassified, never guessed. See Container base images
.NETglobal.json, *.csproj/*.fsproj/*.vbproj, Directory.Build.props, Directory.Packages.props, packages.lock.json: the pinned SDK, target frameworks, and direct NuGet packages.NET release lines past end of support, and direct packages their publisher deprecated, with the C# files that use them. .NET Framework, netstandard, MSBuild properties, floating versions, and ranges are not judged. See .NET
Gogo.mod and go.work: go and toolchain directives, and direct require entriesGo release lines that no longer receive fixes, and direct modules with a lifecycle rule. Versions Evergreen cannot read are listed as unclassified. See Go
GitHub Actions.github/workflows/*.yml: uses: references to actions, including full-SHA pins resolved through a trailing version comment or a bundled release mapActions on retired runtimes (such as Node.js 20) and retired or deprecated majors, at the exact line
C and C++CMakeLists.txt, conanfile.txt, conanfile.py, and vcpkg.jsonCMake policy compatibility removals and deprecations, at the exact declaration. Other declarations require a matching reviewed rule. See C and C++
CI runner images.gitlab-ci.yml image and services, .circleci/config.yml docker.image, machine.image, and orbs, and azure-pipelines.yml pool.vmImageAzure hosted-image labels a reviewed rule covers, at the exact line. GitLab images and CircleCI orbs, variables, and floating aliases are unclassified. A literal CircleCI image is not judged. See CI runner images
Java and Kotlin (JVM)pom.xml, build.gradle, build.gradle.kts, .java-version, .sdkmanrc, .tool-versions: the JDK a project pins or targets, and direct Maven dependencies. See Java and KotlinJDK feature releases that are out of support, and dependencies whose POM says they moved. Property references and expressions are listed as unclassified
Kubernetes APIs (beta)*.yaml, *.yml manifests, Helm chart templates/, and kustomization.yaml: the literal apiVersion and kind, and kustomize patches. See Kubernetes APIsAPI versions the Kubernetes project says are no longer served. Helm values, cluster-guarded templates, and anything it cannot read literally are skipped
Node.jsengines.node, volta, .nvmrc, .node-versionRuntime versions that are end of life or out of support
npmpackage.json dependencies, package-lock.json, npm-shrinkwrap.json, yarn.lock, pnpm-lock.yaml, and the imports and calls that use each packageDeprecated or unmaintained packages, with the replacement and where the package is used
Deno and Bun (experimental)deno.json, deno.jsonc, bunfig.toml, .bun-version: exact runtime pinsDeno and Bun release lines past end of life. Version ranges, floating aliases, and environment variables are not matched. See Deno and Bun
Pythonpyproject.toml, requirements*.txt, .python-version, runtime.txt, .tool-versions, poetry.lock, uv.lock, Pipfile.lockPython versions that are end of life, and deprecated or obsolete packages
Dart and Flutterpubspec.yaml, pubspec.lock, .fvmrc, .fvm/fvm_config.json: SDK constraints, direct dependencies, resolved packages, and the pinned Flutter versionDart SDK releases that no longer receive security updates when pinned exactly, and discontinued pub packages with the files that use them. Constraint ranges such as >=3.8.0 <4.0.0 are not judged. See Dart and Flutter
Elixir and Mix.tool-versions, mix.exs, mix.lock: pinned Elixir and Erlang/OTP versions, the project elixir: constraint, direct Hex dependencies, and resolved packagesElixir and OTP release lines past end of support and retired Hex packages. See Elixir and Mix
Scala and sbt.scala-version, build.sbt, project/build.properties: pinned Scala versions, literal scalaVersion settings, and the sbt versionScala 2.11, frozen Scala 3.0–3.2 lines, and sbt 0.13. See Scala and sbt
Database runtimes (experimental)compose.yaml / docker-compose.yml image tags (postgres, mysql, mariadb, redis, mongo) and engine_version on AWS managed database resources in *.tfPostgreSQL 11–13 and MySQL 5.7 and 8.0 past end of life. Floating tags, variables, module blocks, and Compose files with YAML aliases are not judged. See Database runtimes
Shell and PowerShell#Requires -Version in *.ps1 / *.psm1, PowerShellVersion in *.psd1, and pinned mcr.microsoft.com/powershell image tags in .github/workflowsPowerShell 6.x and 7.0–7.3 past end of support. Windows PowerShell 5.1, shell names, Bash images, dynamic values, and directives with extra options are not judged. See Shell and PowerShell
Terraform (experimental)*.tf (required_version, required_providers), .terraform.lock.hcl, .terraform-version, .tool-versions: constraints, locked providers, and the pinned Terraform CLITerraform CLI release lines that no longer receive support when pinned exactly or by a ~> X.Y.Z constraint. Ranges such as >= 1.5 are not judged. See Terraform
RustCargo.toml, Cargo.lock, rust-toolchain(.toml): the pinned toolchain and direct crate dependenciesToolchains older than the newest stable release, and direct dependencies on unmaintained crates with the files that use them. edition, rust-version, stable, and anything it cannot read literally are not judged. See Rust
Swift.swift-version, .xcode-version, Package.swift, Package.resolved, and the application-target IPHONEOS_DEPLOYMENT_TARGET in project.pbxprojXcode and iOS releases App Store Connect no longer accepts, Swift toolchain lines with a lifecycle rule, and packages with a rule. Libraries and platforms: minimums are not judged. See Swift
Serverless runtimes (beta)Runtime in AWS SAM and CloudFormation templates, provider.runtime and runtime in serverless.yml, and runtime in Terraform aws_lambda_function, Google Cloud Functions, and Azure function appsLambda and Cloud Functions runtimes their vendor lists as end of life. See Serverless runtimes
Ruby.ruby-version, .tool-versions, Gemfile, Gemfile.lockRuby release lines past end of support and yanked gems, with the Ruby files that use a gem. See Compatibility
PHP.php-version, .tool-versions, composer.json, composer.lockPHP release lines past end of support and abandoned Composer packages. See Compatibility
Androidbuild.gradle(.kts), settings.gradle(.kts), libs.versions.toml: SDK levels, Android Gradle Plugin, Kotlin plugin, and Maven dependenciesDeclarations that a reviewed rule names, such as Google Play Billing Library majors 5 through 9. See Compatibility

The level in parentheses is the detector's maturity; the full list with each level is the ecosystem coverage matrix, and earned precision and recall per detector are on the accuracy dashboard. Each finding carries its rule's sources, review date, and migration steps; see Lifecycle rules. Other ecosystems are not guessed at: Evergreen reports a package it has no rule for as no-data, never as safe, and new ecosystems start from a generated detector skeleton. The compatibility matrix lists supported environments and hosts.

Why not just Renovate?

Renovate, Dependabot, and endoflife.date each answer a question Evergreen does not, and Evergreen answers one none of them does: what is ending in this repository, and where is it used. Most repositories gain from running one of them with Evergreen, so the table states what each covers and what it does better, and links the source of every claim. Details and sources per tool are in Evergreen compared with other tools.

ToolWhat it coversWhat it does betterEvidence
RenovateDependency updates across the package managers it supports, as automated pull requestsOpens the update pull requests Evergreen never writes, and reports npm deprecation notices for packages this registry has no rule forCompared with Renovate; the differential report measures both directions on pinned repositories and links the evidence for every disagreement
DependabotVersion updates and security updates on GitHub, each as a pull requestVersion updates keep dependencies current even when nothing is vulnerable; security pull requests and alerts draw on the GitHub Advisory DatabaseCompared with Dependabot
endoflife.dateEOL dates and support lifecycles for many products, served through a public APIProduct breadth beyond one reviewed rule set, and a date you can check without installing anythingCompared with endoflife.date
EvergreenThe lifecycle status of what the repository's files declare and use — end-of-life runtimes, deprecated packages, retired APIs — at file and line, offlineReports that a version is out of support, not only that a newer one exists, and names the usage a migration has to touchWhat it covers, validation, compatibility matrix

Product principles

  • Local-first: source code stays on the user's machine or CI runner.
  • Deterministic core: findings do not require an LLM.
  • Evidence-backed: every deprecation claim links to an authoritative source.
  • Agent-ready: every human-readable report has a machine-readable equivalent.
  • Extensible: ecosystems are added through detectors rather than core rewrites.

Quickstart

The five-step quickstart has copy-paste commands and expected output for each step.

Requirements: Node.js 22 or newer.

bash
npx evergreen-deprecation scan .

For coding agents, install the Agent Skill with one command. It teaches your agent to find, explain, and migrate these findings, and it is listed on skills.sh:

bash
npx skills add arminazimi/evergreen

Give an agent a short answer instead of the full report: one line per finding with its id, location, severity, and replacement, most severe first, capped at 25 findings (the rest are counted) and under 8 KiB:

bash
npx evergreen-deprecation scan . --format compact

Verify that the CLI, local MCP server, Agent Skill, plugin foundations, and CI workspace are ready without changing configuration or uploading repository data:

bash
npx evergreen-deprecation doctor .npx evergreen-deprecation doctor . --json

See the public compatibility matrix for supported, experimental, and unsupported combinations.

Discover Evergreen's versioned capabilities and entry points programmatically:

bash
npx evergreen-deprecation capabilities --json

The auto-discovery contract defines the shared identifiers used by the CLI, MCP server, Agent Skill, plugins, and CI integrations.

Create a baseline for accepted existing findings, then report only new lifecycle regressions:

bash
npx evergreen-deprecation baseline .npx evergreen-deprecation scan . --baseline .evergreen-baseline.json

Check a single dependency before adding it, without scanning a repository:

bash
npx evergreen-deprecation check pkg:npm/[email protected]npx evergreen-deprecation check pkg:github/actions/checkout@v4 --json

The command prints the lifecycle problem, replacement, and evidence, and exits 1 when a rule at or above --fail-on (default high) applies, 0 otherwise, 2 for a wrong command line, and 4 for a Package URL that cannot be parsed (see exit codes). A package Evergreen has no rule for reports no-data, which is not a claim that it is safe. Without a version, a package whose rules only cover some versions reports version-dependent; add a version to get a definite answer.

Lifecycle rules can be refreshed between releases from signed bundles, and scans stay offline unless you ask:

bash
npx evergreen-deprecation data statusnpx evergreen-deprecation data update

See Lifecycle data for the signing and trust model, pinning, and what happens when a download cannot be verified.

Inspect the evidence and migration direction for one result:

bash
npx evergreen-deprecation explain '<finding-id>' .

Generate portable migration context for a human or coding agent:

bash
npx evergreen-deprecation context '<finding-id>' . --json

Migration packets contain rule-specific constraints and steps, exact affected files and usages, authoritative sources, and suggested verification commands. Evergreen never executes those commands automatically. See the migration packet guide.

Tell the coding agents working in a repository to check dependencies before adding them. This adds (or refreshes) a clearly marked section in AGENTS.md, or CLAUDE.md if that is the file you have; running it again changes nothing, and nothing outside the markers is touched:

bash
npx evergreen-deprecation init --agents --dry-run   # show the changenpx evergreen-deprecation init --agents

To do this for every coding agent a repository is already set up for, run setup. It detects Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and Kilo Code configuration, shows the change for each host's instruction file, and writes only after you confirm (or pass --yes). It uses the same marked section as init --agents, so existing rules are never overwritten:

bash
npx evergreen-deprecation setup --dry-run   # print the plannpx evergreen-deprecation setup             # ask, then writenpx evergreen-deprecation setup --yes       # no prompt (CI, scripts)

Connect a coding agent through the local MCP server:

bash
npx --yes --package evergreen-deprecation evergreen-mcp

The stdio server exposes scan_repository, list_deprecations, explain_deprecation, create_migration_context, verify_migration, and check_dependency (check one package before adding it). See the local MCP guide for host configuration, the intended workflow, and privacy guarantees.

Agent Skill

Install the vendor-neutral Agent Skill from the monorepo:

bash
npx skills add arminazimi/evergreen

Pull future revisions with:

bash
npx skills update evergreen-deprecation

The evergreen-deprecation Skill teaches discovery, explanation, migration, and verification while leaving detection and migration logic inside Evergreen. It is discoverable on skills.sh and has been install-validated for Codex, Claude Code, Cursor, GitHub Copilot, and Gemini CLI. See the Agent Skill guide for evaluation, compatibility, limits, and security assumptions.

Codex and Claude plugin packages are generated from that same Skill and MCP workflow. Their packaging architecture keeps host manifests thin and fails CI when either package drifts from the canonical sources. The cross-host evaluation publishes shared-corpus results, context budgets, permission behavior, and security limitations; the same checks block release regressions in npm run check.

Evergreen runs locally and does not upload repository contents. Which commands read the filesystem, read the environment, spawn processes, or use the network is spelled out in the command and surface access table (also summarized in SECURITY.md).

Development

bash
npm installnpm run check

The initial detector reports unsupported major versions of five first-party actions with exact file and line locations:

  • actions/checkout
  • actions/setup-node
  • actions/cache
  • actions/upload-artifact
  • actions/download-artifact

Pinned commit SHAs and dynamic expressions are intentionally left unclassified until Evergreen can resolve them without guessing.

The npm detector also reads package.json, npm/pnpm/Yarn lockfiles, Node.js runtime declarations, and a small evidence-backed registry of deprecated direct dependencies. Use evergreen explain <finding-id> to inspect a finding and its sources. If a finding is wrong, evergreen report-issue <finding-id> prints a Markdown report with the rule, its evidence, and a few redacted lines of the declaring file, and never opens an issue or uses the network.

The Python detector reads PEP 621 and Poetry metadata from pyproject.toml, requirements*.txt, common runtime-version files, and uv/Poetry/PDM/Pipenv lockfiles. It reports unsupported Python declarations and lifecycle risks in direct dependencies while ignoring transitive-only lockfile entries.

Source usage analysis

Package lifecycle findings now include the concrete imports, calls, and configuration keys that make a migration necessary. Matching is language-aware and alias-aware for JavaScript, TypeScript, and Python, with configuration-key support for JSON, YAML, TOML, INI, and Python settings. Each match includes its exact file, line, column, and source excerpt, plus a migration-impact estimate based on affected usages and files.

The analyzer scans the repository once for a batch of detector contracts and ignores generated, dependency, build, and environment directories. Run the repeatable accuracy and scan-time benchmark with:

bash
npm run benchmark:usage

See the benchmark notes for the corpus and interpretation.

GitHub Action

Evergreen can annotate pull requests, suppress accepted findings with a baseline, fail on a chosen severity, and upload the complete JSON report:

yaml
permissions:  contents: read
steps:  - uses: actions/checkout@v7  - uses: arminazimi/[email protected]    with:      baseline: .evergreen-baseline.json      fail-on-severity: high

Pin a full commit SHA instead of a version tag when your threat model requires immutable third-party action references. See the GitHub Action guide for setup, inputs, permissions, artifacts, and privacy boundaries.

Detector SDK

External detectors can use the versioned interface exported by evergreen-deprecation/sdk. The scan engine composes compatible detectors without importing any built-in implementation.

See the detector authoring guide and the minimal detector example.

Initial product shape

The CLI is the product. Detectors extend it, GitHub Actions automate it, and the local MCP server exposes it to agents. A hosted backend is intentionally outside the roadmap; lifecycle data updates through a signed, offline-verifiable data channel instead.

See the roadmap, architecture, brand guide, contribution guide, and security policy.

Community

Questions, ideas, and things you built with Evergreen belong in GitHub Discussions: use Q&A to ask, Ideas to propose, and Show and tell to share. Use issues for bugs, lifecycle rule requests, and ecosystem requests. How decisions are made, who reviews what, and what happens when a detector loses its owner is in GOVERNANCE.md. Who owns each detector is in MAINTAINERS.md.

License and brand

Evergreen source code is licensed under the Apache License 2.0. The lifecycle dataset in packages/data (published as evergreen-data) is licensed under CC BY 4.0; its attribution notice is in packages/data/ATTRIBUTION.md. The Evergreen name, logo, and files in brand/ are proprietary brand assets and are covered by separate brand asset terms.

來源:README.md,提交 7cdd0e5

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

7
  1. v0.7.3最新Nov 7, 2026
  2. v0.7.2Nov 3, 2026
  3. v0.7.1Oct 29, 2026
  4. v0.6.0Oct 25, 2026
  5. v0.5.0Oct 25, 2026
  6. v0.3.0Oct 18, 2026
  7. v0.2.0Oct 18, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分