Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ body:
id: version
attributes:
label: ipcheck version
placeholder: ipcheck 0.8.1
placeholder: ipcheck 0.8.2
validations:
required: true
- type: dropdown
Expand Down
20 changes: 19 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,23 @@ All notable changes to ipcheck are documented here. The project follows

## [Unreleased]

## [0.8.2] - 2026-07-23

### Fixed

- Probe the current ChatGPT Codex and OpenAI Responses protocol routes instead
of generic website/model-list endpoints, choosing the primary route from the
detected Codex login mode when possible.
- Remove unsafe `eval` use while reading proxy environment variables.
- Skip misleading OpenAI/Anthropic probes when Codex or Claude Code uses a
provider-native protocol (including Bedrock, Vertex AI, Foundry, and Mantle)
unless an explicit provider endpoint is supplied; report it as unavailable
instead of scoring the wrong route.
- Clarify that probe TTFB excludes authenticated model generation, document the
P95/jitter calculation, and align `NO_PROXY` handling with current Claude Code.
- Bump JSON `schema_version` to 2 for the new `SKIPPED` service and
`UNAVAILABLE` overall result values.

## [0.8.1] - 2026-07-23

### Changed
Expand Down Expand Up @@ -132,7 +149,8 @@ All notable changes to ipcheck are documented here. The project follows
- Homebrew and direct-download packaging.
- Median/P95 TTFB, jitter, reference bandwidth, and macOS `networkQuality`.

[Unreleased]: https://github.com/jacklv-coder/ipcheck/compare/v0.8.1...HEAD
[Unreleased]: https://github.com/jacklv-coder/ipcheck/compare/v0.8.2...HEAD
[0.8.2]: https://github.com/jacklv-coder/ipcheck/compare/v0.8.1...v0.8.2
[0.8.1]: https://github.com/jacklv-coder/ipcheck/compare/v0.8.0...v0.8.1
[0.8.0]: https://github.com/jacklv-coder/ipcheck/compare/v0.7.0...v0.8.0
[0.7.0]: https://github.com/jacklv-coder/ipcheck/compare/v0.6.1...v0.7.0
Expand Down
18 changes: 15 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ proxy before it breaks your coding flow.
`ipcheck` is a zero-dependency Bash CLI that tests the real service routes used
by AI coding clients. It reports reachability, median/P95 time to first byte,
jitter, reference download/upload speed, and a plain-language readiness score.
It never reads API keys, sends prompts, or makes billable model requests.
No Codex or Claude login is required. It never reads API keys, sends prompts,
or makes billable model requests.

![Animated ipcheck terminal demo showing healthy and limited networks](assets/ipcheck-demo.gif)

Expand All @@ -34,7 +35,7 @@ brew upgrade ipcheck

```bash
mkdir -p "$HOME/.local/bin"
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.8.1/bin/ipcheck \
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.8.2/bin/ipcheck \
-o "$HOME/.local/bin/ipcheck"
chmod +x "$HOME/.local/bin/ipcheck"
```
Expand Down Expand Up @@ -71,10 +72,16 @@ interactive bottlenecks directly.

| Client | Configuration detected | Route tested |
| --- | --- | --- |
| Codex | `$CODEX_HOME/config.toml`, `model`, `openai_base_url`, custom provider | ChatGPT/OpenAI defaults or configured `/v1/responses` |
| Codex | `$CODEX_HOME/config.toml`, login mode, `model`, `openai_base_url`, custom provider | ChatGPT Codex or OpenAI `/responses`, matching the detected login when possible |
| Claude Code | `settings.json`, `ANTHROPIC_BASE_URL`, `ANTHROPIC_MODEL` | Configured `${ANTHROPIC_BASE_URL}/v1/messages` |
| Custom | `--endpoint`, `IPCHECK_ENDPOINTS` | User-provided HTTP/HTTPS endpoint |

Direct OpenAI/ChatGPT, Anthropic, and compatible gateway routes are auto-probed.
Provider-native routes need an explicit credential-free endpoint: use
`CODEX_NETWORK_ENDPOINTS` for Codex on Bedrock, or `CLAUDE_NETWORK_ENDPOINTS`
for Claude Code provider-native protocols such as Bedrock, Vertex AI, Foundry,
or Mantle. `ipcheck` warns instead of silently testing the wrong provider.

## Common commands

| Command | Purpose |
Expand All @@ -99,10 +106,15 @@ Run `ipcheck --help` for every option and environment variable.
| `FAIR` | Usable, but delayed, intermittent, rate-limited, or temporarily unhealthy |
| `POOR` | Very slow, unstable, mostly unavailable, or using an invalid API route |
| `BLOCKED` | No service response, or the proxy rejected the request first |
| `UNAVAILABLE` | A provider-specific route was not measured without an explicit safe endpoint |

HTTP `401` and `403` count as reachable because DNS, proxying, TLS, and HTTP
reached the API route. HTTP `407` means the proxy blocked the request.

TTFB is measured from a credential-free protocol request. It reflects DNS,
proxy, TLS, network, and gateway ingress—not authenticated model generation or
time to the model's first token.

The 0–100 score is a transparent rule, not a user percentile. It prioritizes
service reachability and latency over peak bandwidth. See
[Scoring and result rules](docs/scoring.md) for the exact calculation.
Expand Down
16 changes: 13 additions & 3 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@

`ipcheck` 是一个零依赖 Bash CLI,检测 AI 编程客户端实际使用的服务路径,
提供可达性、TTFB 中位数/P95、抖动、参考上下行速度和直白的开发适配分。
它不会读取 API Key、发送 Prompt,也不会产生模型调用费用。
无需登录 Codex 或 Claude;它不会读取 API Key、发送 Prompt,也不会产生
模型调用费用。

![ipcheck 健康网络与受限网络动态演示](assets/ipcheck-demo-zh.gif)

Expand All @@ -33,7 +34,7 @@ brew upgrade ipcheck

```bash
mkdir -p "$HOME/.local/bin"
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.8.1/bin/ipcheck \
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.8.2/bin/ipcheck \
-o "$HOME/.local/bin/ipcheck"
chmod +x "$HOME/.local/bin/ipcheck"
```
Expand Down Expand Up @@ -66,10 +67,15 @@ chmod +x "$HOME/.local/bin/ipcheck"

| 客户端 | 自动识别的配置 | 检测路径 |
| --- | --- | --- |
| Codex | `$CODEX_HOME/config.toml`、`model`、`openai_base_url`、自定义 provider | ChatGPT/OpenAI 默认路径或 `/v1/responses` |
| Codex | `$CODEX_HOME/config.toml`、登录方式、`model`、`openai_base_url`、自定义 provider | 尽可能按登录方式选择 ChatGPT Codex 或 OpenAI `/responses` |
| Claude Code | `settings.json`、`ANTHROPIC_BASE_URL`、`ANTHROPIC_MODEL` | `${ANTHROPIC_BASE_URL}/v1/messages` |
| 自定义 | `--endpoint`、`IPCHECK_ENDPOINTS` | 用户指定的 HTTP/HTTPS 地址 |

OpenAI/ChatGPT、Anthropic 直连与兼容网关会自动探测。provider 原生路径需要
明确提供无凭据检测地址:Codex on Bedrock 使用 `CODEX_NETWORK_ENDPOINTS`;
Claude Code 的 Bedrock、Vertex AI、Foundry、Mantle 等 provider 原生协议使用
`CLAUDE_NETWORK_ENDPOINTS`。`ipcheck` 会给出警告,而不是静默检测错误的 provider。

## 常用命令

| 命令 | 用途 |
Expand All @@ -94,10 +100,14 @@ chmod +x "$HOME/.local/bin/ipcheck"
| `FAIR` | 可以使用,但有延迟、波动、限流或临时服务异常 |
| `POOR` | 非常慢、不稳定、多数不可用,或 API 路径配置错误 |
| `BLOCKED` | 没有服务响应,或请求先被代理拒绝 |
| `UNAVAILABLE` | provider 专用路径因缺少明确的安全检测地址而未被测量 |

HTTP `401` 和 `403` 代表链路可达,因为 DNS、代理、TLS 和 HTTP 已经到达
API 路径;HTTP `407` 表示请求被代理拦截。

TTFB 来自无凭据协议请求,反映 DNS、代理、TLS、网络与网关入口耗时;它不
包含认证后的模型生成时间,也不是模型首个 Token 的到达时间。

0–100 分是透明的规则评分,不代表用户百分位,并且服务可达性和交互延迟
比峰值带宽更重要。精确计算方式见[评分与结论规则](docs/scoring.zh-CN.md)。

Expand Down
Binary file modified assets/ipcheck-demo-zh.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/ipcheck-demo.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/ipcheck-preview-zh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/ipcheck-preview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading