makecindy / makecindy/cindy

iOS Simulator host policy falsely blocks ordinary HTTPS fetches and reports aborted by user

Open
#2,404 2 comments 0 reactions 0 assignees View on GitHub
bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.