iOS Simulator host policy falsely blocks ordinary HTTPS fetches and reports aborted by user
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: zym
**客户端版本**: 0.1.43
---
## 现象
新增内置 iOS Simulator 能力后,Cindy 的主机策略会把普通、只读的 HTTPS 抓取命令误判为“绕过内置 iOS Simulator”,立即中止命令;对话界面同时错误显示 `aborted by user after 0.1s`。
该问题于 2026-08-11 在同一会话中连续出现两次,目标是两个不同的公开 Benchmark 网站。
## 复现步骤
1. 在普通 Cindy 工作区中使用内置 Codex。
2. 让 Agent 读取公开网页或 JSON 数据,例如:
- `https://deepswe.datacurve.ai/`
- `https://deepswe.datacurve.ai/artifacts/v1.1/leaderboard-live.json`
- `https://livebench.ai/`
3. 执行只读命令:
```sh
python3 - <<'PY'
import urllib.request
url = 'https://deepswe.datacurve.ai/artifacts/v1.1/leaderboard-live.json'
data = urllib.request.urlopen(url, timeout=20).read()
print(len(data))
PY
```
4. 命令约 0.10 秒后被中止。
命令只执行 HTTP GET 和临时数据读取,不包含 Xcode、Simulator.app、`simctl`、iOS App、设备生命周期或模拟器自动化操作。
## 期望行为
- 与 iOS Simulator 无关的普通 HTTPS 读取应按常规命令策略执行。
- iOS Simulator 防绕行策略只拦截实际尝试外部模拟器生命周期、安装、启动、交互、截图、诊断或 Simulator.app 自动化的命令。
- 如果命令因主机策略被拒绝,界面应展示真实的策略拒绝原因;只有用户实际取消时才显示 `aborted by user`。
## 实际行为
对话工具层显示:
```text
aborted by user after 0.1s
```
Cindy 会话日志记录的真实原因是:
```text
command execution interrupted by host policy
reason: Cindy blocked a shell command that would bypass the embedded iOS Simulator.
```
每次还伴随一条 `command execution denied by host policy`。用户没有停止命令,下一条消息是在命令已中止后才发送;Cindy 对话中正常发送消息也不会打断正在输出的回复。
## 复现频率
同一会话内 2 次尝试均复现,目标网站不同。
## 已尝试
- 浏览器页面读取可访问部分内容,但无法稳定取得动态加载的 JSON。
- 改用另一个普通 Python `urllib.request` 只读抓取后再次触发相同误判。
- 未尝试任何模拟器命令或绕过方式。
## 影响与初步判断
- 阻断合法的公开数据研究和只读网页检查。
- 将主机策略拒绝错误归因给用户,导致错误诊断。
- Agent 可能据此误告知用户“你的消息打断了执行”。
- 两次日志均指向新加入的 iOS Simulator 防绕行策略,疑似规则匹配范围过宽,或错误应用到了无关命令。
## 隐私
正文已脱敏,不包含个人路径、会话 ID、请求 ID、凭证、私有网址或完整本地日志;仅保留定位问题所需的错误摘要。
---
**版本区域**: CN
**OS**: darwin arm64 (25.5.0)
**界面语言**: zh-CN
Contributor guide
Research direction
Start at the iOS Simulator host-policy command interception and the command execution tool layer that maps denials to `aborted by user`; reproduce with the provided Python HTTPS GET command and inspect the accompanying policy logs. Done means ordinary read-only HTTPS commands are allowed, genuine Simulator-related commands remain blocked, and policy denials display their actual reason rather than a user-abort message.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, typescript
- Domain
- desktop, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100