Skip to content

fix(cli): detect codex in codex ci environments#15412

Merged
Grappeggia merged 2 commits intomainfrom
codex-detect
Mar 9, 2026
Merged

fix(cli): detect codex in codex ci environments#15412
Grappeggia merged 2 commits intomainfrom
codex-detect

Conversation

@Grappeggia
Copy link
Contributor

@Grappeggia Grappeggia commented Mar 8, 2026

Summary

  • detect Codex when CODEX_CI or CODEX_THREAD_ID is present, in addition to CODEX_SANDBOX
  • add unit coverage for both Codex env variants

Why

Codex-driven Vercel CLI invocations in this environment expose CODEX_CI / CODEX_THREAD_ID, but not CODEX_SANDBOX, so they currently fall through to human/unknown attribution.

Testing

  • pnpm --filter @vercel/detect-agent exec vitest run -c ../../vitest.config.mts
  • pnpm dlx @biomejs/biome@2.4.4 format --write packages/detect-agent/src/index.ts packages/detect-agent/test/unit/determine-agent.test.ts
  • pnpm dlx @biomejs/biome@2.4.4 lint packages/detect-agent/src/index.ts packages/detect-agent/test/unit/determine-agent.test.ts

Note

The local Husky pre-commit hook failed to execute biome from its hook environment, so I ran the equivalent formatting/linting manually before committing.

Note

Low Risk Change

This PR adds additional environment variable checks for Codex agent detection and corresponding unit tests, with no security, auth, or database changes.

  • Adds CODEX_CI and CODEX_THREAD_ID env checks to existing agent detection logic
  • Adds unit tests covering new Codex environment variants
  • Includes changeset for patch version bump

Risk assessment for commit 8e0bb2a.

@Grappeggia Grappeggia requested review from a team as code owners March 8, 2026 18:39
@changeset-bot
Copy link

changeset-bot bot commented Mar 8, 2026

🦋 Changeset detected

Latest commit: 8e0bb2a

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@vercel/detect-agent Patch
vercel Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions
Copy link
Contributor

github-actions bot commented Mar 8, 2026

📦 CLI Tarball Ready

The Vercel CLI tarball for this PR is now available!

Quick Test

You can test this PR's CLI directly by running:

npx https://vercel-6h626apv8.vercel.sh/tarballs/vercel.tgz --help

Use in vercel.json

To use this CLI version in your project builds, add to your vercel.json:

{
  "build": {
    "env": {
      "VERCEL_CLI_VERSION": "vercel@https://vercel-6h626apv8.vercel.sh/tarballs/vercel.tgz"
    }
  }
}

Python Runtime Wheel

A vercel-runtime wheel was also built for this PR.
To use in your Python project builds, also set this environment variable:

VERCEL_RUNTIME_PYTHON="vercel-runtime @ https://vercel-6h626apv8.vercel.sh/tarballs/vercel_runtime-0.6.0.dev1772995811+8e0bb2a-py3-none-any.whl"

Python Workers Wheel

A vercel-workers wheel was also built for this PR.
To use in your Python project builds, also set this environment variable:

VERCEL_WORKERS_PYTHON="vercel-workers @ https://vercel-6h626apv8.vercel.sh/tarballs/vercel_workers-0.1.0.dev1772995811+8e0bb2a-py3-none-any.whl"

@github-actions
Copy link
Contributor

github-actions bot commented Mar 8, 2026

🧪 Unit Test Strategy

Comparing: 813f3d38e0bb2a (view diff)

Strategy: Affected packages only

✅ Only testing packages that have been modified or depend on modified packages.

Affected packages - 2 (5%)
  1. @vercel/detect-agent
  2. vercel
Unaffected packages - 38 (95%)
  1. @vercel-internals/get-package-json
  2. @vercel/backends
  3. @vercel/build-utils
  4. @vercel/cervel
  5. @vercel/cli-auth
  6. @vercel/client
  7. @vercel/config
  8. @vercel/edge
  9. @vercel/elysia
  10. @vercel/error-utils
  11. @vercel/express
  12. @vercel/fastify
  13. @vercel/firewall
  14. @vercel/frameworks
  15. @vercel/fs-detectors
  16. @vercel/functions
  17. @vercel/gatsby-plugin-vercel-builder
  18. @vercel/go
  19. @vercel/h3
  20. @vercel/hono
  21. @vercel/hydrogen
  22. @vercel/koa
  23. @vercel/nestjs
  24. @vercel/next
  25. @vercel/node
  26. @vercel/oidc
  27. @vercel/oidc-aws-credentials-provider
  28. @vercel/python
  29. @vercel/python-analysis
  30. @vercel/redwood
  31. @vercel/related-projects
  32. @vercel/remix-builder
  33. @vercel/routing-utils
  34. @vercel/ruby
  35. @vercel/rust
  36. @vercel/static-build
  37. @vercel/static-config
  38. examples

Results

  • Unit tests: Only affected packages will run unit tests
  • E2E tests: Running in parallel via E2E Tests workflow
  • Type checks: Only affected packages will run type checks

This comment is automatically generated based on the affected testing strategy

@Grappeggia Grappeggia requested a review from tknickman March 8, 2026 18:45
@Grappeggia Grappeggia merged commit c6f5ac6 into main Mar 9, 2026
179 checks passed
@Grappeggia Grappeggia deleted the codex-detect branch March 9, 2026 15:17
ztanner pushed a commit that referenced this pull request Mar 9, 2026
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @vercel/build-utils@13.7.0

### Minor Changes

- [python] add support for module-based entrypoints for cron jobs
([#15393](#15393))

- For the django frontend, dynamically load settings.py instead of
parsing it ([#15367](#15367))

### Patch Changes

- Updated dependencies
\[[`83e804013528fc54de31082960ae31f58339bd71`](83e8040),
[`921314f958c4ec85adb09e020310a5becb7f866c`](921314f)]:
    -   @vercel/python-analysis@0.9.0

## vercel@50.29.0

### Minor Changes

- Add interactive mode to `webhooks create` and change warning prefix
from `WARN!` to `WARNING!`
([#15406](#15406))

### Patch Changes

- Updated dependencies
\[[`32e8ba5f593fdeddeb63d241d7806d6c12fffe76`](32e8ba5),
[`83e804013528fc54de31082960ae31f58339bd71`](83e8040),
[`0f1fa86770a35d0192d64d36cb46d932e1d2a12a`](0f1fa86),
[`813f3d324404237e3806530b465625ea33816370`](813f3d3),
[`0a78892b1e155eb4b587a8b84c4e6814f750697f`](0a78892),
[`9a973a704b7350e19d0c3ac8e110ce55eea795b2`](9a973a7),
[`c6f5ac6c11fb7f431b5fb634a7fb321b10c829af`](c6f5ac6),
[`921314f958c4ec85adb09e020310a5becb7f866c`](921314f)]:
    -   @vercel/next@4.15.42
    -   @vercel/build-utils@13.7.0
    -   @vercel/python@6.21.0
    -   @vercel/detect-agent@1.1.1
    -   @vercel/static-build@2.8.46
    -   @vercel/backends@0.0.42
    -   @vercel/elysia@0.1.45
    -   @vercel/express@0.1.54
    -   @vercel/fastify@0.1.48
    -   @vercel/go@3.4.3
    -   @vercel/h3@0.1.54
    -   @vercel/hono@0.2.48
    -   @vercel/hydrogen@1.3.5
    -   @vercel/koa@0.1.28
    -   @vercel/nestjs@0.2.49
    -   @vercel/node@5.6.12
    -   @vercel/redwood@2.4.9
    -   @vercel/remix-builder@5.6.0
    -   @vercel/ruby@2.3.2
    -   @vercel/rust@1.0.5

## @vercel/fs-detectors@5.9.0

### Minor Changes

- [python] add support for module-based entrypoints for cron jobs
([#15393](#15393))

### Patch Changes

- [python] add support for Python worker services with Django tasks
([#15396](#15396))

## @vercel/python@6.21.0

### Minor Changes

- [python] add support for module-based entrypoints for cron jobs
([#15393](#15393))

- Avoid doing entry point detection on every request to a python dev
server ([#15365](#15365))

- For the django frontend, dynamically load settings.py instead of
parsing it ([#15367](#15367))

### Patch Changes

- speed up python entrypoint detection
([#15402](#15402))

- Add Python builder cache preparation for Build Output API v3 cache
globs, the builder virtualenv, and the repo-local uv cache.
([#15407](#15407))

- Updated dependencies
\[[`83e804013528fc54de31082960ae31f58339bd71`](83e8040),
[`921314f958c4ec85adb09e020310a5becb7f866c`](921314f)]:
    -   @vercel/python-analysis@0.9.0

## @vercel/python-analysis@0.9.0

### Minor Changes

- [python] add support for module-based entrypoints for cron jobs
([#15393](#15393))

- For the django frontend, dynamically load settings.py instead of
parsing it ([#15367](#15367))

## @vercel/backends@0.0.42

### Patch Changes

- Updated dependencies
\[[`83e804013528fc54de31082960ae31f58339bd71`](83e8040),
[`921314f958c4ec85adb09e020310a5becb7f866c`](921314f)]:
    -   @vercel/build-utils@13.7.0

## @vercel/cervel@0.0.29

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/backends@0.0.42

## @vercel/client@17.2.54

### Patch Changes

- Updated dependencies
\[[`83e804013528fc54de31082960ae31f58339bd71`](83e8040),
[`921314f958c4ec85adb09e020310a5becb7f866c`](921314f)]:
    -   @vercel/build-utils@13.7.0

## @vercel/config@0.0.38

### Patch Changes

- Fix type generation
([#15386](#15386))

## @vercel/detect-agent@1.1.1

### Patch Changes

- Add Antigravity agent detection via `ANTIGRAVITY_AGENT` environment
variable ([#15413](#15413))

- Detect Codex when `CODEX_CI` or `CODEX_THREAD_ID` is present.
([#15412](#15412))

## @vercel/elysia@0.1.45

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.12

## @vercel/express@0.1.54

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.12
    -   @vercel/cervel@0.0.29

## @vercel/fastify@0.1.48

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.12

## @vercel/gatsby-plugin-vercel-builder@2.0.144

### Patch Changes

- Updated dependencies
\[[`83e804013528fc54de31082960ae31f58339bd71`](83e8040),
[`921314f958c4ec85adb09e020310a5becb7f866c`](921314f)]:
    -   @vercel/build-utils@13.7.0

## @vercel/h3@0.1.54

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.12

## @vercel/hono@0.2.48

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.12

## @vercel/koa@0.1.28

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.12

## @vercel/nestjs@0.2.49

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/node@5.6.12

## @vercel/next@4.15.42

### Patch Changes

- Revert "[next] vary fallback allowQuery for partial fallback shells"
([#15418](#15418))

## @vercel/node@5.6.12

### Patch Changes

- Updated dependencies
\[[`83e804013528fc54de31082960ae31f58339bd71`](83e8040),
[`921314f958c4ec85adb09e020310a5becb7f866c`](921314f)]:
    -   @vercel/build-utils@13.7.0

## @vercel/static-build@2.8.46

### Patch Changes

-   Updated dependencies \[]:
    -   @vercel/gatsby-plugin-vercel-builder@2.0.144

## @vercel/python-runtime@0.6.0

### Minor Changes

- [python] add support for Python worker services with Django tasks
([#15396](#15396))

- [python] add support for module-based entrypoints for cron jobs
([#15393](#15393))


<!-- VADE_RISK_START -->
> [!NOTE]
> Low Risk Change
>
> This PR is an automated Changesets release that only updates version
numbers in package.json files, CHANGELOG.md files, and deletes changeset
markdown files — no functional code changes.
> 
> - Version bumps across ~30 packages (patch/minor)
> - Changelog and changeset file updates only
> - Single constant update: VERCEL_RUNTIME_VERSION = '0.6.0'
>
> <sup>Risk assessment for [commit
d3cf7ea](https://github.com/vercel/vercel/commit/d3cf7ea8deab73a058f4228f0346317fcf3e3dbc).</sup>
<!-- VADE_RISK_END -->

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants