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.2
placeholder: ipcheck 0.9.0
validations:
required: true
- type: dropdown
Expand Down
25 changes: 24 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,28 @@ All notable changes to ipcheck are documented here. The project follows

## [Unreleased]

## [0.9.0] - 2026-07-23

### Changed

- Rename the capped Cloudflare section to proxy-path reference transfers and
state directly in terminal, Markdown, JSON, and bilingual documentation that
it is not a peak-bandwidth test or AI API throughput measurement.
- Replace readiness-score rule v2 with rule v3: the measured AI service path
now supplies all positive points, while complete low Cloudflare samples can
only deduct two points per direction and incomplete samples deduct one.
- Describe Cloudflare results as high, moderate, or low samples instead of
presenting them as general-purpose fast/adequate/slow network ratings.
- Keep the existing JSON `bandwidth` object for compatibility while adding
explicit scope, method, API-path, and peak-bandwidth metadata.

### Fixed

- Rate reference samples using the same rounded Mbps value shown to users so a
displayed threshold value cannot contradict its label.
- Remove duplicate Cloudflare warnings from the primary AI-service diagnosis
and keep the auxiliary signal in its own clearly scoped section.

## [0.8.2] - 2026-07-23

### Fixed
Expand Down Expand Up @@ -149,7 +171,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.2...HEAD
[Unreleased]: https://github.com/jacklv-coder/ipcheck/compare/v0.9.0...HEAD
[0.9.0]: https://github.com/jacklv-coder/ipcheck/compare/v0.8.2...v0.9.0
[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
Expand Down
25 changes: 15 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ 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.
jitter, capped proxy-path transfer samples, and a plain-language readiness score.
No Codex or Claude login is required. It never reads API keys, sends prompts,
or makes billable model requests.

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

```bash
mkdir -p "$HOME/.local/bin"
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.8.2/bin/ipcheck \
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.9.0/bin/ipcheck \
-o "$HOME/.local/bin/ipcheck"
chmod +x "$HOME/.local/bin/ipcheck"
```
Expand All @@ -50,7 +50,7 @@ Make sure `$HOME/.local/bin` is on `PATH`.
| --- | --- |
| Speedtest | Peak bandwidth to a nearby test server |
| `ping` / `curl` | Basic reachability to one address |
| `ipcheck` | Codex/Claude routes, proxy path, TTFB, P95, jitter, failures, bandwidth, and coding readiness |
| `ipcheck` | Codex/Claude routes, proxy path, TTFB, P95, jitter, failures, capped reference transfers, and coding readiness |

For coding agents, a 500 Mbps connection can still feel slow when the first byte
takes five seconds or the proxy route is unstable. `ipcheck` measures those
Expand All @@ -62,8 +62,8 @@ interactive bottlenecks directly.
broken one.
- Understands OpenAI, Anthropic, LiteLLM-style gateways, and Alibaba Cloud
Model Studio/DashScope Anthropic-compatible routes.
- Explains whether the main problem is reachability, TTFB, P95, jitter,
download speed, or upload speed.
- Explains whether the main problem is reachability, TTFB, P95, jitter, or a
low Cloudflare reference-transfer sample.
- Produces human, Markdown, and stable versioned JSON reports.
- Shows animated progress, adapts to narrow terminals, and exits cleanly with
status `130` when cancelled with `Ctrl+C`.
Expand All @@ -87,14 +87,14 @@ or Mantle. `ipcheck` warns instead of silently testing the wrong provider.
| Command | Purpose |
| --- | --- |
| `ipcheck` | Auto-detect installed clients and run the standard check |
| `ipcheck --quick` | One sample, shorter timeout, no bandwidth transfer |
| `ipcheck --quick` | One sample, shorter timeout, no reference transfer |
| `ipcheck codex` / `ipcheck claude` | Test only one client |
| `ipcheck all` | Test Codex and Claude Code together |
| `ipcheck --explain-score` | Show every score component |
| `ipcheck --json` | Emit structured output for automation |
| `ipcheck --markdown` | Create a shareable support report |
| `ipcheck --system` | Add macOS `networkQuality` measurements |
| `ipcheck --no-bandwidth` | Skip capped Cloudflare download/upload checks |
| `ipcheck --no-bandwidth` | Skip capped Cloudflare reference transfers |

Run `ipcheck --help` for every option and environment variable.

Expand All @@ -115,8 +115,13 @@ 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
The Cloudflare samples describe small transfers from the current proxy/network
path to Cloudflare. They are not peak-bandwidth tests and do not represent
OpenAI, Anthropic, GitHub, or npm throughput.

The 0–100 score is a transparent rule, not a user percentile. The measured AI
service path supplies all positive points; low Cloudflare samples can only make
a small deduction. See
[Scoring and result rules](docs/scoring.md) for the exact calculation.

## Claude Code gateway example
Expand Down Expand Up @@ -149,7 +154,7 @@ See [SECURITY.md](SECURITY.md) for private vulnerability reporting.
## Documentation

- [Scoring and result rules](docs/scoring.md)
- [Routes, proxies, and bandwidth](docs/network.md)
- [Routes, proxies, and reference transfers](docs/network.md)
- [Reports, automation, and exit codes](docs/reporting.md)
- [Release history](CHANGELOG.md)

Expand Down
23 changes: 14 additions & 9 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
被阻断,还是走错了链路。

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

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

```bash
mkdir -p "$HOME/.local/bin"
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.8.2/bin/ipcheck \
curl -fsSL https://raw.githubusercontent.com/jacklv-coder/ipcheck/v0.9.0/bin/ipcheck \
-o "$HOME/.local/bin/ipcheck"
chmod +x "$HOME/.local/bin/ipcheck"
```
Expand All @@ -49,7 +49,7 @@ chmod +x "$HOME/.local/bin/ipcheck"
| --- | --- |
| Speedtest | 到附近测速服务器的峰值带宽 |
| `ping` / `curl` | 单个地址的基础连通性 |
| `ipcheck` | Codex/Claude 实际路径、代理、TTFB、P95、抖动、失败率、带宽和开发适配分 |
| `ipcheck` | Codex/Claude 实际路径、代理、TTFB、P95、抖动、失败率、限量参考传输和开发适配分 |

即使带宽达到 500 Mbps,只要首字节需要五秒或代理链路不稳定,AI 编程体验
仍然会很慢。`ipcheck` 直接测量这些影响交互节奏的瓶颈。
Expand All @@ -59,7 +59,8 @@ chmod +x "$HOME/.local/bin/ipcheck"
- 分别检测每个客户端,避免一条健康链路掩盖另一条异常链路。
- 兼容 OpenAI、Anthropic、LiteLLM 类网关,以及阿里云百炼/DashScope
Anthropic 兼容入口。
- 直接指出主要问题来自可达性、TTFB、P95、抖动、下载还是上传。
- 直接指出主要问题来自可达性、TTFB、P95、抖动,还是 Cloudflare 参考传输
样本偏低。
- 支持终端、Markdown 和稳定的版本化 JSON 报告。
- 提供动态进度、窄终端适配,并能通过 `Ctrl+C` 干净退出,返回状态码 `130`。

Expand All @@ -81,14 +82,14 @@ Claude Code 的 Bedrock、Vertex AI、Foundry、Mantle 等 provider 原生协议
| 命令 | 用途 |
| --- | --- |
| `ipcheck` | 自动识别客户端并执行标准检测 |
| `ipcheck --quick` | 单次采样、缩短超时、不传输测速数据 |
| `ipcheck --quick` | 单次采样、缩短超时、不运行参考传输 |
| `ipcheck codex` / `ipcheck claude` | 只检测一个客户端 |
| `ipcheck all` | 同时检测 Codex 和 Claude Code |
| `ipcheck --explain-score` | 展开全部评分依据 |
| `ipcheck --json` | 输出供自动化使用的结构化数据 |
| `ipcheck --markdown` | 生成可分享的支持报告 |
| `ipcheck --system` | 增加 macOS `networkQuality` 数据 |
| `ipcheck --no-bandwidth` | 跳过限量 Cloudflare 上下行检测 |
| `ipcheck --no-bandwidth` | 跳过限量 Cloudflare 参考传输 |

运行 `ipcheck --help` 可以查看全部选项和环境变量。

Expand All @@ -108,8 +109,12 @@ API 路径;HTTP `407` 表示请求被代理拦截。
TTFB 来自无凭据协议请求,反映 DNS、代理、TLS、网络与网关入口耗时;它不
包含认证后的模型生成时间,也不是模型首个 Token 的到达时间。

0–100 分是透明的规则评分,不代表用户百分位,并且服务可达性和交互延迟
比峰值带宽更重要。精确计算方式见[评分与结论规则](docs/scoring.zh-CN.md)。
Cloudflare 样本反映的是当前代理/网络到 Cloudflare 的小文件传输表现,不是
峰值宽带测速,也不代表 OpenAI、Anthropic、GitHub 或 npm 的吞吐。

0–100 分是透明的规则评分,不代表用户百分位。实际 AI 服务路径提供全部正向
分数,Cloudflare 样本偏低时只会小幅扣分。精确计算方式见
[评分与结论规则](docs/scoring.zh-CN.md)。

## Claude Code 网关示例

Expand Down Expand Up @@ -141,7 +146,7 @@ TTFB 来自无凭据协议请求,反映 DNS、代理、TLS、网络与网关
## 详细文档

- [评分与结论规则](docs/scoring.zh-CN.md)
- [服务路径、代理与带宽](docs/network.zh-CN.md)
- [服务路径、代理与参考传输](docs/network.zh-CN.md)
- [报告、自动化与退出码](docs/reporting.zh-CN.md)
- [版本历史](CHANGELOG.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