Codex · App Store Connect

Write What's New in every language with Codex

Codex already knows what changed in this release. Ask it to turn that into What's New, translate it, and stage it for every language on your listing. MetaRun holds each one to Apple's limits and shows the before and after per language.

Setup checked October 2026 against Codex MCP docs, non-interactive mode

01 · Uplink

Connect Codex once

01 · Add the server

Codex sees that MetaRun offers sign-in and starts it straight away, in your browser. Pick read-only or read and change.

codex mcp add metarun --url https://metarun.dev/api/mcp

02 · Sign in again later

If the sign-in expires or you disconnected it in MetaRun's settings. --no-browser prints the link instead, for SSH sessions.

codex mcp login metarun

03 · Or edit ~/.codex/config.toml

The Codex CLI, the IDE extension and Codex in the ChatGPT desktop app read the same file, so one entry covers all three.

[mcp_servers.metarun]
url = "https://metarun.dev/api/mcp"
Prefer a personal access token (scripts, CI)?

Add the server with a token

Mint a personal access token in MetaRun under Settings, MCP. It's shown once and can be revoked any time. Codex reads it from the environment variable you name.

export METARUN_TOKEN="mr_pat_..."
codex mcp add metarun --url https://metarun.dev/api/mcp --bearer-token-env-var METARUN_TOKEN

Or in config.toml

[mcp_servers.metarun]
url = "https://metarun.dev/api/mcp"
bearer_token_env_var = "METARUN_TOKEN"
02 · Briefing

What Codex handles here

Release notes are the last thing anyone writes. By then the version is ready, the build is processed, and twelve languages still say last month's text. Copying translations into App Store Connect one locale at a time takes longer than writing them.

Through MetaRun, Codex writes and translates, and MetaRun does the parts that must be exact: it reads the live version, checks What's New against Apple's 4,000-character limit, stages one change per language, and reports which languages are still missing it.

03 · Preflight

Before you start

  • An update, not a first release: What's New only exists after the app has shipped once.
  • The version still editable (being prepared, ready for review, or rejected).
  • Something to work from: a changelog, the commit log, or your own notes.
04 · Execution

How it runs

  1. 01

    Gather what changed

    Codex works from what it can see: your changelog, merged pull requests, the commit log since the last tag, or what you tell it.

  2. 02

    Read the version in every language

    MetaRun returns the version's localizations so the agent knows which languages exist and what they say now.

  3. 03

    Stage one change per language

    Each language gets its own preview with the old and new text. Anything over 4,000 characters is refused at preview, not by Apple after submission.

  4. 04

    Confirm coverage

    Before calling the job done, Codex reads listing coverage, which lists any language still missing What's New.

05 · Session

An example session in Codex

Write What's New for 2.4 from CHANGELOG.md, under 500 characters, friendly but plain. Stage it in English, then translate it into every language on the listing.

  1. apple_list_version_localizationsVersion 2.4 has 12 languages. What's New is empty in each.
  2. apple_preview_set_version_localizationPreview: English (U.S.) What's New, 412 of 4,000 characters.
  3. Codex asks before running apple_apply_set_version_localization. You read the preview above and approve.
  4. apple_apply_set_version_localizationApplied for English (U.S.).
  5. apple_get_listing_coverage11 languages still missing What's New. Codex continues with those.

Illustrative: your apps, versions and numbers will differ. The tool names and their order are real.

06 · Tools

The MetaRun tools Codex calls

ToolWhat it does
apple_list_version_localizationsreadEvery language on the version with its current What's New, description and keywords.
apple_preview_set_version_localizationpreview + applyStage What's New (or description, keywords, URLs) for one language.
apple_get_listing_coveragereadWhich languages are still missing which fields, so the job isn't declared done early.
apple_get_listing_editabilityreadWhether the version's text is editable right now.
aso_lint_metadatareadChecks copy against App Store rules before it's staged.
apple_preview_set_promotional_textpreview + applyThe 170-character line above the description that changes live, without review.
aso_schedule_promo_textMetaRunSchedule promotional text to switch at a set time, for example on launch day.

Each preview has an apply twin (the same name with apply instead of preview) that only runs with the confirm token from a fresh preview, and refuses if App Store Connect changed in between. MetaRun tools save to your MetaRun workspace only (studio projects, tracked keywords), never to Apple.

07 · Apple rules

What Apple enforces, and how MetaRun handles it

No What's New on a first version

Apple has no What's New field until the app has shipped once. The API rejects it and App Store Connect hides it, so MetaRun only asks for it on updates.

4,000 characters per language

What's New and the description each allow 4,000 characters. Promotional text allows 170 and is the only one of the three that changes without review.

Text locks once the version is in review

What's New is editable while the version is being prepared or after a rejection. apple_get_listing_editability tells the agent which fields are locked and why, instead of a write failing.

Adding a language creates rows Apple fills in

When a new language is added, Apple creates that language's other localization rows on its own. MetaRun's confirm token is keyed on the language, not Apple's row id, so your approved change doesn't fail as drift.

08 · Comms

What to ask Codex

  • Ask Codex: Write What's New for 2.4 from CHANGELOG.md, under 500 characters, friendly but plain. Stage it in English, then translate it into every language on the listing.
  • Ask Codex: Summarize git log v2.3..HEAD into release notes users would care about. Skip refactors.
  • Ask Codex: Which languages on 2.4 are still missing What's New?
09 · Unattended

Run it from a script with Codex

codex exec runs one request without an interactive session and with its approval policy set to never. MetaRun's reads and previews still run, because they're marked read-only; anything that would ask is refused.

Read-only check, safe to schedule

codex exec "List every language on the editable version of com.example.app that is missing What's New. Read only."

Applies are refused in codex exec by design. Don't set MetaRun's approval mode to approve just to make them pass; keep App Store changes in an interactive session.

10 · Safety

How Codex asks before a change

Codex decides per tool from the hints MetaRun sends with each one. In its default mode it runs tools marked read-only, which covers MetaRun's reads and previews, and asks before the rest, which covers every apply. You can change that per server with default_tools_approval_mode, or per tool with tools.<name>.approval_mode in config.toml; keep the apply tools on prompt.

Apple key stays on MetaRun, encryptedPreview before every writeRecorded, revertible from history
11 · FAQ

Frequently asked questions

Who writes the translations, Codex or MetaRun?

Codex does. MetaRun reads the live listing, checks the limits, and stages one change per language for you to approve. Translations through your own agent don't use MetaRun's AI translation budget.

Can Codex update release notes after the app is live?

Not What's New: it locks with the version. Promotional text is the exception and changes the live listing immediately, so that's what to use for a post-launch message.

How many languages can it handle at once?

Every language on your listing. Each one is its own preview, so you can approve some and skip others.

Will it overwrite my description by accident?

Only fields the agent names are touched, and each preview shows the field's old and new text before anything is applied.

How do I connect Codex to App Store Connect?

Run codex mcp add metarun --url https://metarun.dev/api/mcp; Codex detects MetaRun's sign-in and opens it in your browser. After that, ask for "release notes" in plain words and Codex picks the MetaRun tools.

Does Codex see my App Store Connect key?

No. Your App Store Connect API key stays envelope-encrypted on MetaRun's servers and is decrypted per request. Codex holds a MetaRun token that you can revoke in Settings at any time.

More with Codex

In depth: Listing translation

Agent access

14-day free trial with agent access. No credit card. Your Apple key stays encrypted on MetaRun.