is-gpt-nerfed

kiyoakiiMIT活跃维护

检测 OpenAI Codex 模型是否被悄悄降级(缩水)的工具,通过对比输出质量判断服务是否变差。

Shrinkflation detector for Codex

v0.5.3发布于 2026-09-29 05:55 UTC262star18fork同步于 2026-11-07 07:30 UTC

怎么上手

由 README 提炼,执行前请确认
curl -fsSL https://raw.githubusercontent.com/kiyoakii/is-gpt-nerfed/main/install-app.sh | sh
硬件要求按 README 说明

macOS 15 或更新版本;README 未说明 GPU 或显存要求,检测本身在本地 Mac 上运行,不依赖独立显卡。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

检测 Codex 是否偷偷把你选的模型换成更弱版本,本地运行不花 token

检测 OpenAI Codex 模型是否被悄悄降级(缩水)的工具,通过对比输出质量判断服务是否变差。

核心能力

  • 读取 Codex 每轮记录,标记模型、推理强度、上下文窗口的静默变化
  • 定时 fork 会话让模型生成约 300 个随机数,用 ModelTrace 指纹库比对
  • 给出 Match、Suspicious、Downgrade 等判定并推送 macOS 通知
  • 菜单栏面板列出 48 小时内会话及最近判定,可手动 Probe 或 Retry
  • 支持 halt_on_mismatch 在判定降级后阻断工具调用

容易踩的坑

应用尚未公证,首次启动需在系统设置→隐私与安全性中手动放行;需在菜单栏点 Install 注册插件并信任 hooks,否则 Codex 不会执行;需要带插件 hooks 的 Codex(桌面版或 CLI,测试于 0.154)和系统 python3;指纹库是闭集,未收录的模型会映射到最相近的模型。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.5.3
  1. v0.5.30.5.3最新正式版2026-09-29 · 2026-09-29 05:55 UTC
    • 0.5.2 picked the wrong codex: any codex on PATH won over the one inside the ChatGPT app, so a Mac with an older Homebrew or npm CLI ran every probe through it. The server refuses such a client the desktop's model ("The 'gpt-6-astra' model requires a newer version of Codex"), it cannot read the sessions the desktop now saves in its paginated format ("paginated_threads is not supported yet"), and it does not list the plugin's hooks, so the panel said to run install.sh. When several codex binaries exist, the newest one now runs the probes (issues #10, #11).
    • ChatGPT 26.924 moved the desktop app's codex from Contents/Resources/codex to Contents/Resources/codex-cli/bin/codex, so on a Mac without a codex CLI 0.5.2 found no codex at all. Both locations are known now.
    • nerfed doctor shows the codex version, the other codex binaries it found, and warns when the one in use is older than the Codex that saved your latest session. Probe reports say which codex version ran them.
    • The fresh-session probe no longer insists on the OpenAI provider: it gets whatever a new session of yours gets, so a relay set up in config.toml (for example by cc-switch) is checked as well.
    • The hook status is checked again as soon as a different codex binary is in use, instead of showing the old answer for up to 15 minutes.
  2. v0.5.20.5.22026-09-25 · 2026-09-25 09:25 UTC
    查看更新说明
    • The fingerprint bank now knows gpt-6-sol, gpt-6-luna and claude-opus-5-5 (ModelTrace's 2026-09-23 bank). Sessions on those models get a verdict instead of "Unlisted" (issues #9).
    • The app runs on macOS 15 and newer; it used to require macOS 26. The one Liquid Glass control falls back to a plain capsule on older systems, and the installer says so instead of leaving a bundle macOS refuses to open, pointing at the plugin, which never needed the app (issue #7).
    • A probe no longer fails with "thread metadata lacks model" when Codex reports a session without one: the model, reasoning effort and directory come from the session's own record, and the probe says which of them it had to fill in (issue #8).
    • Hooks are recognised whatever marketplace they were installed from; only the plugin's own name has to match, so a fork or a renamed marketplace no longer reads as "Codex does not list the plugin's hooks" (issue #8).
    • Codex's own complaints about loading the hooks are shown by nerfed hooks status, nerfed doctor and the panel, instead of being visible only inside Codex's hooks screen. Hooks Codex has switched off are reported as such.
    • The SessionEnd hook asks for 3 seconds instead of 5, which is what Codex allows: it used to clamp the value and report a hook loading problem for it.
  3. v0.5.10.5.12026-09-18 · 2026-09-18 12:18 UTC
    查看更新说明
    • The 0.5.0 app crashed at launch on every Mac except the one that built it: the localization looked its resource bundle up through SwiftPM's generated accessor, which only checks the .app root and the build machine's absolute path. The bundle is now located explicitly (Contents/Resources first) and a missing bundle falls back to English instead of trapping. Reported and fixed by JoyboyBrian (#2, #4).
    • nerfed linked into ~/.local/bin by install.sh failed with "No such file or directory": the wrapper resolved the repository from the symlink's own path. It follows the symlink first now. Reported and fixed by JoyboyBrian (#3, #5).
    • The 30-minute schedule missed sessions: the hooks only ran it at the end of a turn, so a session that went quiet before its due time (or whose last turn ended in an error, which fires no Stop hook) was never probed, and the panel showed it as "due" forever. The app now runs nerfed tick when the snapshot shows a thread that is due and active, and the tick launches the same background probe the Stop hook would. Threads quiet for more than 15 minutes are left alone.
  4. v0.5.00.5.02026-09-17 · 2026-09-17 17:36 UTC
    查看更新说明
    • The app speaks Simplified Chinese: the panel, settings, evidence lines, progress and error messages follow the system's preferred languages, with English as the fallback. Model IDs, reasoning-effort values and your own session titles stay as they are; stored records, CLI output and notifications are unchanged. A Chinese README (README.zh-CN.md) came with it. Contributed by sudoHG (#1).
    • nerfed selftest crashed on its own synthetic analysis; an analysis without candidates is now Invalid instead of an error.
    • The hooks' fallback path points at the plugin's source (the checkout or the app bundle) instead of a Codex cache directory, so hooks keep working after a version bump makes Codex delete the old cache.
  5. v0.4.40.4.42026-09-16 · 2026-09-16 03:58 UTC
    查看更新说明
    • A failed attempt no longer sends a notification; it is logged and the row offers Retry. Codex's transient "thread history projection is behind durable rollout" store error counts as transient: one retry after a pause.
    • config.json keeps only the settings you changed, so new defaults apply after an update.

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    English · 简体中文

    You pick a model in Codex. This tells you whether that model is actually the one answering. If it isn't, you get this:

    What it checks

    Everything runs on your Mac. Nothing is uploaded.

    Codex records, for every turn, which model and reasoning effort it asked for. The plugin reads those records after each turn and flags what changed without you changing it: a model swap, a lower reasoning effort, a hidden internal model such as gpt-reserve, a smaller context window. A move to a newer or larger model is reported as well, since a rollout can go either way. This costs no tokens.

    On a schedule, the plugin also forks your session three times, ephemerally, through the same app-server call the desktop uses for a side chat, with the session's own model and reasoning effort. Each fork is asked for about 300 "random" numbers. A language model picks random numbers with a bias that is characteristic of the model. ModelTrace's calibrated bank turns the three answers into a fingerprint (100 % accuracy with three answers in cross-validation), and the verdict compares that fingerprint with the model you selected:

    verdictmeaning
    Matchthe model you selected answered
    Suspiciousthe fingerprint leans elsewhere, but not confidently; it stands until the next probe
    Downgrade / Upgrade / Rerouteda confident mismatch: top candidate at 80 % or more, your model at 20 % or less, at least two answers
    DowngradedCodex's own records show a silent switch; no fingerprint needed
    UpgradedCodex's own records show a move to a newer or larger model
    Unlistedyour model is not in the fingerprint bank yet
    Invalidno usable answer (tool use, refusal, network); not a verdict, the row keeps its last one and offers Retry

    A mismatch reaches you as a macOS notification, a message in the session, and a red face in the menu bar. A match is not announced.

    Install

    macOS 15 or newer. One line in Terminal installs the latest release and opens it:

    curl -fsSL https://raw.githubusercontent.com/kiyoakii/is-gpt-nerfed/main/install-app.sh | sh
    

    You can also download the disk image from Releases and drag IsGPTNerfed to Applications. The app is not notarized yet, so macOS blocks that first launch until you allow it under System Settings → Privacy & Security.

    Click the face in the menu bar and press Install. That registers the bundled plugin with Codex and trusts its hooks. When a newer release is out, the footer says so and a notification arrives once; click it and the app downloads the new build, checks its checksum, replaces itself and relaunches.

    Without the app, on any macOS:

    git clone https://github.com/kiyoakii/is-gpt-nerfed ~/is-gpt-nerfed && cd ~/is-gpt-nerfed && ./install.sh
    

    Say yes when it asks to trust the hooks. Codex runs no hook you have not trusted, and it does not tell you.

    Requires a Codex with plugin hooks (desktop app or CLI; tested on 0.154) and the system python3. ./uninstall.sh removes everything.

    Using it

    The macOS interface supports English and Simplified Chinese, following the system's preferred languages with English as the fallback. This includes app-generated evidence, progress messages and diagnostics shown by the app. User session titles, model IDs, reasoning-effort values and unrecognized external diagnostics keep their original text. Stored records, CLI output, notifications and ModelTrace's calibrated probe prompts are unchanged.

    Every session you work in is probed in the background after 30 minutes of activity: the hooks run the schedule after each turn, and the menu bar app catches a session that goes quiet right after its due time. To probe a session right away, say $is-gpt-nerfed in it.

    The menu bar panel lists the sessions of the last 48 hours with their last verdict. Click a session for its report (fingerprint, earlier probes, evidence) and right-click for actions. Each session has Probe and Retry, and the Fresh session row probes a brand-new session to show what a new session gets right now.

    From a terminal: nerfed probe now (pick a session), nerfed report, nerfed explain <probe>, nerfed log --since 2h.

    Settings are in the app, or nerfed config set <key> <value>:

    keydefault
    frequency30mper session: every N minutes of activity (30m) or every N turns (turns:8)
    fresh_frequencymanualprobe a brand-new session every N minutes, whatever you are doing
    modeautoauto probes in the background, nudge only reminds you
    halt_on_mismatchfalseblock tools after a mismatch until you say resume
    notify_on_ok, announce_okfalsealso report Match
    hide_titlesfalsescreenshot mode: neutral session names, no account
    check_updatestrueask GitHub for a newer release every 10 minutes

    Accounts

    Sessions are shared between Codex accounts, and a downgrade may be tied to the account rather than the session. Every probe is therefore tagged with the signed-in account (a hash, never the id). After you switch accounts, older verdicts show as "another account" and those sessions are probed again.

    Limits

    • "The model you selected" is the model Codex asked for. If the server swaps the weights and keeps the name, only the fingerprint or a smaller context window can show it.
    • The bank is closed-set: a model outside it is mapped to its nearest look-alike.
    • A probe costs three short answers on your account. A fork that has not answered within five minutes is replaced once, so a slow model does not drop out of the sample.
    • A model or effort change made through Codex's own settings is shown as a question ("was that you?"), because the plugin cannot tell whether you or Codex changed it.
    • The probes run in a private app-server process that identifies itself as the client it checks for (the desktop app, or the CLI), because the service may route by client. Anything else that differs between the desktop's own connection and the probe's is invisible to it.

    Privacy

    The plugin reads ~/.codex (session records, the models cache, and auth.json only for an account hash and a masked e-mail) and writes to ~/.codex/is-gpt-nerfed (probes, verdicts, log.jsonl). The forks are ordinary Codex inference under your account. The only network request of its own is one to GitHub every ten minutes for the latest release tag, while the app is open; switch it off in Settings and it makes none.

    Credits

    ModelTrace (xqy2006, MIT) for the fingerprint bank, scorer, prompts and the fork-and-verify sequence; hlwy-ai-checker for the random-number idea; simple-term-menu (MIT) for the session picker.

    MIT license. Internals, build and contribution notes: docs/DEVELOPMENT.md.