Imported from Noelle20233/MediaAccessGuard (
AGENTS.md). Install upstream withnpx skills add Noelle20233/MediaAccessGuard. Copyright stays with the author.
命令执行与环境使用规范
1. Windows 命令执行环境优先级
在 Windows 环境下执行命令时,根据任务复杂度选择环境。
1.1 简单、少量命令:默认使用 PowerShell 7
对于以下情况,默认使用 PowerShell 7(pwsh):
- 单条或少量命令
- 查看文件、目录、环境变量
- 简单的文件复制、移动、删除
- 简单的 Git、Node、Python、包管理器命令
- 不需要复杂 shell 语法的临时操作
- 一次执行即可完成的短命令
默认优先使用系统默认安装的 PowerShell 7,不要主动切换到 Windows PowerShell 5.1。
PowerShell 7 默认可执行文件路径:
C:\Program Files\PowerShell\7\pwsh.exe
优先通过该路径启动:
& "C:\Program Files\PowerShell\7\pwsh.exe" -NoProfile -Command "..."
如果当前环境已经直接提供 pwsh,可以直接使用:
pwsh -NoProfile -Command "..."
1.2 PowerShell 7 遇到兼容性/执行问题:切换 Git Bash
当使用 PowerShell 7 出现以下问题时,优先切换到 Git Bash:
- shell 语法不兼容
- Unix 命令行为与预期差异较大
- 路径、通配符、管道等行为导致脚本无法正常运行
- 某个命令明确要求 Bash 环境
- Git Bash 可以明显更直接地完成任务
不要为了简单命令强行启动 WSL。
1.3 Git Bash 仍有问题:切换 WSL
只有在 PowerShell 7 和 Git Bash 都无法可靠完成任务时,再使用 WSL。
例如:
- Linux 工具链要求
- Bash / GNU 工具行为必须与 Linux 一致
- Linux 文件系统、编译环境或依赖
- Windows shell 对任务存在明显限制
2. 复杂或较多脚本:直接同步到 WSL
当任务属于以下情况时,不要在 PowerShell / Git Bash 中逐条执行,而是直接将脚本或相关工作目录同步到 WSL 后执行:
- 命令数量较多
- 多步骤自动化
- 较长的 Bash/Python/Node/Rust 脚本
- 需要大量循环、递归或文件处理
- 需要频繁创建子进程
- 大量读取/写入文件
- 编译、构建、批处理等计算密集型或 I/O 密集型任务
- 需要连续执行很多命令
- 预计会产生较大的 Windows ↔ Linux 文件系统访问开销
核心原则:
复杂任务优先让脚本整体在 WSL 中执行,而不是在 Windows shell 和 WSL 之间反复切换。
尤其要避免将大量 Linux 工具操作直接放在:
/mnt/c/...
上反复执行。
如果性能可能受到 Windows/Linux 文件系统跨界访问影响,应优先:
-
将项目或脚本同步到 WSL Linux 文件系统,例如:
~/workspace/<project> -
在 WSL 内完成整个任务;
-
只有最终结果需要给 Windows 使用时,再同步回 Windows。
不要因为单个命令很简单,就把整个复杂工作流拆成大量 Windows → WSL → Windows 的往返操作。
3. 环境选择的总体决策顺序
按照以下优先级判断:
简单少量命令
↓
PowerShell 7
↓ 失败/不兼容
Git Bash
↓ 仍然失败
WSL
复杂、多步骤、脚本较多、性能敏感
↓
直接同步到 WSL
↓
整个脚本/任务在 WSL 中执行
不要无理由跨环境执行。
4. ADB 真机实验规则
4.1 默认假设
进行 Android 真机实验、ADB 调试、设备状态检查等操作时:
默认假设 ADB 当前没有连接真机。
不要默认设备已经连接,也不要因为任务需要 ADB 就自行等待设备出现。
如果当前任务需要访问真实 Android 设备,而 ADB 尚未确认连接,应使用 question 向用户请求。
请求时说明需要:
- 连接 Android 真机
- 开启 USB 调试/无线调试(视实际情况)
- 确认授权
- 然后再继续实验
不要偷偷把“等待设备连接”作为无限循环任务。
4.2 ADB shell 权限模型
假设连接成功后的:
adb shell
存在可用的 su 提权通道。
因此允许通过以下方式进行提权:
adb shell su
或者:
adb shell su -c "..."
但 ADB + su 不代表可以无条件执行任何命令。
必须严格遵守下面的权限规则。
5. ADB 允许直接执行的操作
默认允许执行:
5.1 只读命令
只读取设备状态、文件、系统信息,不修改设备状态。
例如:
adb shell getprop
adb shell uname -a
adb shell id
adb shell ls
adb shell cat
adb shell stat
adb shell df
adb shell mount
adb shell ps
adb shell top
adb shell dumpsys
adb shell cmd package list packages
adb shell cat /proc/...
adb shell cat /sys/...
包括通过 su 执行的只读操作:
adb shell su -c 'cat /proc/mounts'
adb shell su -c 'getprop'
前提是命令本身只读。
5.2 向 /tmp 写入
允许创建、修改、删除实验性临时文件,例如:
/tmp/...
包括通过 su 执行:
adb shell su -c 'echo test > /tmp/test.txt'
5.3 向 /sdcard 写入
允许将实验文件、日志、测试输出等写入:
/sdcard/...
例如:
adb push test.txt /sdcard/
adb shell cp file /sdcard/
用于:
- 实验文件
- 测试数据
- 日志导出
- 临时脚本
- 测试 APK/资源
- 中间结果
6. 其他所有 ADB 写操作必须先询问用户
除:
只读操作
/tmp 写入
/sdcard 写入
之外的操作,一律视为需要用户批准的设备修改操作。
包括但不限于:
- 修改
/system - 修改
/vendor - 修改
/product - 修改
/data - 修改
/metadata - 修改
/dev - 修改
/sys - 修改
/proc - 修改 SELinux 状态
- 修改系统属性
- 修改启动项
- 修改系统分区
- 修改 boot / init
- 安装、卸载、禁用系统组件
- 修改应用数据
- 修改权限
- chmod/chown 等影响设备状态的操作
- mount/umount
- 创建或修改持久化配置
- 修改 Magisk / KernelSU / APatch 等 Root 环境
- 修改内核相关状态
- 写入 sysfs/procfs
- 刷写镜像
- 重启 / 关机 / bootloader / recovery 操作
- 清除数据
- 修改网络、防火墙、DNS、代理等持久状态
- 任何可能导致设备异常、失效、数据丢失或无法启动的操作
即使该命令可以通过 su 成功执行,也不能因此跳过询问。
7. ADB 高权限命令的询问格式
遇到需要用户批准的操作时,使用 question。
必须先解释:
- 要执行什么操作;
- 为什么需要;
- 会修改什么;
- 影响范围;
- 是否可能导致风险;
- 使用的具体命令。
例如:
需要通过
su修改/data/...中的文件。该操作不是只读,也不属于/tmp或/sdcard临时写入,因此需要你的明确批准。它会修改 XXX,可能影响 XXX。计划执行:adb shell su -c '...'是否允许?
不要只问:
“可以执行吗?”
必须让用户知道具体修改内容和风险。
8. 安全边界优先于任务便利性
即使任务目标明确,也不能因为“只是测试”而绕过上述 ADB 权限规则。
特别是以下情况:
“顺便改一下”
“这个应该没风险”
“直接 root 执行就行”
“先执行看看”
都不能作为跳过用户确认的理由。
9. 执行命令时的额外原则
9.1 优先一次完成
对于简单任务,尽量组合成少量命令,而不是产生大量 shell 往返。
9.2 遇到错误先判断环境问题
优先判断:
- 当前 shell 是否正确
- PATH 是否正确
- 当前目录是否正确
- Windows/Unix 路径格式是否混用
- 权限是否足够
- 命令是否实际存在
不要一看到错误就盲目重复执行。
9.3 不要无意义切换环境
如果 PowerShell 7 已经可以稳定完成任务,不要主动切 Git Bash。
如果 Git Bash 已经可以完成任务,不要为了“看起来更 Linux”而切 WSL。
复杂任务、性能敏感任务除外:直接放到 WSL 中整体执行。
9.4 脚本优先于命令堆叠
当任务已经变成较长的多步骤操作时,优先生成一个脚本,例如:
script.ps1
script.sh
script.py
然后在合适的环境中一次运行,而不是让 Agent 不断发送几十条独立命令。
10. 最终执行原则
始终遵循:
简单命令:
PowerShell 7
↓
Git Bash
↓
WSL
复杂脚本 / 大量命令 / 性能敏感:
直接同步到 WSL
↓
在 WSL 内整体执行
ADB 真机:
默认无设备
↓
需要真机时使用 question 请求用户连接
设备命令权限:
只读 → 可直接执行
/tmp 写入 → 可直接执行
/sdcard 写入 → 可直接执行
其他任何修改 → 先 question + 解释具体影响
以上规则优先于“为了方便而直接执行”的倾向。