基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/ccwq/ccwq-skill-list --skill chatgpt-web-skill命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
使用渐进式披露结构创建、改写或审查中文技术文章。适用于需要同时服务快速阅读与深度阅读的技术科普、教程、调查、对比、架构分析、事故复盘和观点文章。
显式调用的工程方法论选择器:根据目标、上下文、阶段、产物、质量属性与风险,诊断问题并组合推荐可验证的工程方法。
用于本机、SSH、容器、CI/CD、服务器、云服务、代码与接口的联调排障。 先识别执行环境,再选择最小只读 probe;统一生成脱敏 debug_report,优先复制到剪切板, 不可用时回退到终端和临时文件。支持动态轮次、风险分级授权、截图补证和内部并行复核。
| name | chatgpt-web-skill |
| description | 通过 ChatGPT Web 进行信息搜集、Deep Research、图片生成编辑、结构化视觉审查和统一经验整理。 |
| license | MIT |
| metadata | {"version":"1.15.1","tags":["chatgpt","chatgpt-web","agent-browser","image-generation","image-editing","visual-review","research"],"related_skills":["agent-browser"]} |
本 skill 依赖 agent-browser skill 与其 CLI 操作 ChatGPT Web UI;不提供独立的浏览器自动化实现。agents-op 指 ChatGPT Web Project,不是本地 Git/workspace 项目;它是图片生成与编辑的指定工作区,也可用于聊天、图片审阅、网页研究和讨论。
优先通过 scripts/run_agent_browser.py 调用 agent-browser CLI,统一传递 session 和 CDP 配置。ChatGPT Web 任务只连接已登录的既有浏览器,不启动新的浏览器会话。CDP 优先级固定为:调用期 --cdp/-c > AGENT_BROWSER_CDP_PORT > 用户级 agent-browser 配置文件的 cdp > 9222。--cdp/-c 接受端口(如 9222)或完整 http(s) URL(如 http://192.168.1.8:9222);两种形式都先通过 /json/version 发现目标 WebSocket,再由 agent-browser connect 建立当前 session 并核验目标,避免静默落回默认浏览器。用户级配置路径为 Windows %USERPROFILE%\.agent-browser\config.json、macOS/Linux ~/.agent-browser/config.json,内容示例为 { "cdp": 9222 }。连接失败时,报告该优先级与配置方式,不创建新浏览器。会话名默认取当前项目绝对路径去除 / 后的字符串(非 CDP 默认 daemon 场景),截图保存到 %temp%\agent-browser-captures\。先枚举现有 tabs;目标 URL 已打开时复用该 tab,不要重复打开。tab ID 只在当前 daemon 生命周期内有效:看到 daemon version mismatch、daemon restart 或 tab 切换失败时,立刻重新执行 tab list,废弃旧 ID 与旧 lease,不按编号猜测替代 tab。例如:
python scripts/run_agent_browser.py tab list
python scripts/run_agent_browser.py -c <port-or-url> snapshot -i
此 skill 的全部业务动作都在 ChatGPT Web 对话内完成;不把它用作直接浏览、抓取或自动化外部网站的通用工具。普通讨论可直接在 chat 中进行。只有确有必要使用 ChatGPT Web 的 Search 或 Deep Research 时,发送前先向用户说明理由并取得本次明确授权;未获授权则继续普通对话,或报告信息边界。
每次触发此 Skill 后、任何浏览器操作前,都通过 experience_memory.py read 读取统一经验库。文件永久位于 Windows %USERPROFILE%\.config\chatgpt-web-skill\experience.md 或 macOS/Linux ~/.config/chatgpt-web-skill/experience.md;文件不存在时返回有效空库且不创建文件。禁止枚举、读取、迁移、重命名或删除旧临时经验文件,也不得手动编辑统一经验库。
经验文件由脚本独占维护,固定头为:
# chatgpt-web-skill 经验库
Skill-Version: 1.15.0
Entry-Count: 0
仅在任务结论已验证后、最终汇报前运行 append --group <group> 追加脱敏条目;每条经验只能属于一个分组。脚本 warning 使用稳定 code 与上下文:version_mismatch 或 experience_limit_exceeded(实际条数大于 50)只提示 trim,不阻断任务;entry_count_mismatch 会拒绝普通追加,需 trim 修复。Agent 收到任一 warning 必须立即向用户给出中文友好提醒。不记录 prompt、图片、chat 内容、账户标识、cookie、私有 URL 或凭据。
-t 和 --trim使用 -t 或 --trim 时,整理统一经验库;可追加主题,裸参数处理全部经验。此模式只处理既有经验,不新增条目。
experience_memory.py read --full,读取全量经验,并核验本地 SKILL.md、scripts/ 与 references/。默认可接入已有 CDP 浏览器,复用现有 ChatGPT tab 做实时 snapshot 的只读核验。ok 后,生成含全部原始条目处理结果的 JSON 计划,并通过脚本原子写回。删除、改写和合并必须带已验证证据;改写或合并保留最早“首次记录日”,并写入“最近核验”。# 仅在用户确认最终计划后执行;计划中每个 source_indexes 必须恰好出现一次。
python scripts/experience_memory.py trim --plan <confirmed-plan.json> --confirm ok
完成条件:全库的每条原始经验都被恰好归为保留、改写、合并、删除或本轮未证实;改写、合并和删除必须附非空 evidence。只有全库 trim 成功才更新文件 Skill-Version 并重算 Entry-Count。
把每条已验证经验按稳定性分流,避免以自然语言反复执行机械步骤:
scripts/ 增加标准库 Python 辅助逻辑和离线单元测试,再在 skill 中调用脚本。SKILL.md。当前可直接复用的辅助脚本:
# 返回至少两条 Project 实时归属证据,否则退出码为 1。
python scripts/runtime_checks.py -c <port-or-url> --tab <tab-id> project --name agents-op
# 每轮先检查快照;一旦图片已可见就立即截图并返回,不再空等尺寸轮询。
python scripts/runtime_checks.py -c <port-or-url> --tab <tab-id> images --min-width 1000 --screenshot <temp-path>
# 确认 marker 已离开 composer 并渲染;认证中断会以退出码 2 停止。
python scripts/runtime_checks.py -c <port-or-url> --tab <tab-id> message --marker <unique-marker>
# 由当前 sidebar 的真实 Project 行定位并点击主页,再返回实时 URL 和双证据;不拼接 URL 或请求 backend-api。
python scripts/project_locator.py -c <port-or-url> --tab <tab-id> --name agents-op
# 无可复用 ChatGPT tab 时,通过 agent-browser 新建任务 tab 后定位;终态必须 release 输出的 lease。
python scripts/project_locator.py -c <port-or-url> --new-tab --name agents-op
# 读取、原子追加或按已确认计划整理统一的脱敏经验。
python scripts/experience_memory.py read
python scripts/experience_memory.py status
python scripts/experience_memory.py append --group <group> --topic <topic> --scene <scene> --conclusion <conclusion> --boundary <boundary>
python scripts/experience_memory.py trim --plan <confirmed-plan.json> --confirm ok
任务 tab 的稳定生命周期使用 browser_task.py:
python scripts/browser_task.py acquire <url> [--force-new]
python scripts/browser_task.py status <lease-path>
python scripts/browser_task.py action <lease-path> -- click '@e123'
python scripts/browser_task.py release <lease-path> [--purge]
acquire 默认只复用规范化后完整 URL 精确匹配的 tab;回归测试使用 --force-new。lease 记录 session、可选 CDP、稳定 tab ID 和是否由本次创建;它不跨 daemon restart 生效。release 只关闭 created=true 的 tab,并重新执行 tab list 确认其消失;复用 tab 不关闭。action 允许透传任意 agent-browser 子命令,但会在动作前后重新选择 lease tab 并保存 snapshot。动作后的 snapshot 失败会标记 lease 为 uncertain,不会覆盖动作本身的退出码。发生 daemon restart 或 status 返回 stale 时,终止旧 lease、重新获取并重新验证 Project,不能把新 tab 的数字 ID 写回旧 lease。lease、snapshot 和截图保存到 %temp%\agent-browser-captures\chatgpt-web-skill\;默认不清理证据,只有显式 --purge 才删除已验证的专用 lease 目录。
runtime_checks.py 只机械判定 Project 证据、消息提交状态和图片可见性/尺寸;它不能授权持久化操作、选择动态控件或替代截图质量审阅。
每次任务按以下顺序执行;每项完成后才进入下一项:
project_locator.py --new-tab --name agents-op 创建。它经 browser_task.acquire(... --force-new) 调用 agent-browser tab new,在 skill .env 的 CHATGPT_PROJECT_LOCATOR_NEW_TAB_TIMEOUT_SECONDS=30 共享总预算内依次等待 sidebar 与 Project 证据渲染;超时或失败会释放本次新建 tab,成功才返回稳定 tab_id、created_tab=true 和 lease。把该 ID 传给每个 run_agent_browser.py --tab 与 runtime_checks.py --tab 调用,终态用 browser_task.py release <lease> 关闭新建 tab。
对需要跨多条命令的任务,优先通过 browser_task.py acquire 获取 lease;真实回归使用 --force-new,普通任务按精确 URL 复用。project_locator.py --name agents-op:它从当前 sidebar 的实时 DOM 精确匹配 Project 行、点击同一行的 Open project home,再读取浏览器实际导航得到的 URL。不得预存、拼接或从 /backend-api/* 推导 Project URL。随后运行 runtime_checks.py project --name agents-op 并结合实时 snapshot,确认页面是 ChatGPT Web 且 Project 名为 agents-op。禁止相信旧 tab ID、旧 URL 或记忆中的页面文本。agents-op 不存在时,先报告并请求创建 Project 的持久化状态授权;存在时直接使用,名称重复也以实时证据选择正确 Project。agents-op 内新建 chat;以当前 session 和 tab 作为本次任务的最小隔离边界。可接受的 Project 实时证据至少两项:页面 title 含 agents-op、Project 首页 URL 以 /project 结尾、composer 标注/placeholder 为 New chat in agents-op、页面内容表明该 Project 的 chats/sources。Project 内既有对话通常为同一路径下的 /c/<chat-id>,不能要求其以 /project 结尾。无法确认归属时,诊断并报告,不在普通 Chat 或其他 Project 静默执行。
以下会改变持久化 ChatGPT 状态,未获本次明确授权时停止并书面报告:编辑/清空 Project instructions(textarea#instructions)、切换 Library access/Memory 等设置、重命名/分享/置顶/删除 Project 或 chat、批准付费/权限/订阅弹窗、上传到当前项目 chat 以外的位置。visual-review 调用仅授权在当前任务 chat 上传本次指定的一张图片和发送固定审查提示词;不授权删除或修改任何 chat。只读页面探测与视觉核验默认允许。
不把未文档化的 /backend-api/* 当成稳定自动化 API;只用浏览器 UI/CDP DOM 与当前页面已渲染资源。不得输入凭证、处理付款订阅或批准权限;遇到平台 policy/block 如实报告,不尝试绕过。
当任务需要理解 ChatGPT Web 自身的后台请求时,只在已登录、已打开的 ChatGPT tab 上观察浏览器真实发出的网络记录;不对 /backend-api/* 使用 open、fetch、curl、重放或构造独立请求。先清空当前 tab 的日志,执行对应的可见 UI 操作,再读取 network requests 并按路径确认请求、方法、状态和触发动作;响应体、cookie、授权头、用户内容和完整私有 URL 都不落盘、不汇报。
例如,/backend-api/gizmos/snorlax/sidebar?owned_only=true&conversations_per_gizmo=5&limit=20 只有在展开 ChatGPT sidebar 的 Projects/自定义 GPT 列表或其“Show more”分页时,且网络日志实际出现该路径后,才能把它记录为 sidebar 数据加载请求。参数语义仅作运行时线索:owned_only=true 倾向筛选当前用户拥有的条目,conversations_per_gizmo=5 倾向为每项附带最多 5 个会话摘要,limit=20 倾向限制本页条目数;必须由本次请求和页面渲染共同验证,不能据此推断稳定接口契约。
ChatGPT UI 会变化。DOM selector 与 agent-browser ref(如 @e123)都可能随页面更新失效;每次点击、输入或提交前后都必须取得实时 snapshot 验证控件与页面状态,绝不跳过验证。Python 入口仅固化 CLI 参数、Project 证据和图片尺寸轮询,不能替代 DOM 的实时发现。下列 selector 仅为线索,不是永久契约:
在 PowerShell 中把 ref 作为字符串传入,例如 click '@e123';PowerShell 不支持 &&,需要顺序执行的命令改为独立命令或使用 ;。
Enter 不一定会提交 prompt。提交后先运行 runtime_checks.py message --marker <unique-marker>;未发送时重新发现并点击当前页面的 Send prompt,再运行该检查。若仍为 pending,不要盲目重复提交;若为 interrupted,报告认证/导航中断并停止。
Project home 中普通 ref click 无效时,不猜测或复用旧 ref。在同一 agent-browser session 内通过实时 DOM 定位 agents-op 的对应控件并触发 click;进入 Project 首页后,同时以 /project URL 和 New chat in agents-op 作为归属证据。Project 内既有对话通常为同一路径下的 /c/<chat-id>,不把它误判为 URL 证据缺失。
Create image 菜单项;选择后同时确认图片模式 pill(已观察到 data-id="picture_v2")与 placeholder 变为 Describe or edit an image。仅出现文字 Create image 不是模式成功证据。
图片上传:#upload-photos[accept="image/*"];通用文件上传:#upload-files。
Project options:button[aria-label="Open project options for agents-op"],菜单应含 Share project、Rename project、Project settings、Delete project。
对 composer:先聚焦 [aria-label="Add files and more"],确认可见 .ProseMirror.ProseMirror-focused,再向 ProseMirror 写入。常用可靠写入方式为 document.execCommand('insertText', false, prompt);在该 editor 上分派 Enter 的 keydown。已有工具 pill 时,只向 ProseMirror 追加 prompt,不能 selectAll 或清空 editor,否则会移除工具模式。通过 CDP eval 以 base64 写入中文时,先将 atob() 结果转为 Uint8Array,再用 TextDecoder 按 UTF-8 解码后 insertText。不要对激活后的 inert textarea 直接设值或按 Enter。
不强制创建本地任务目录、prompt 文件、候选图副本或评审记录。用户沟通、Project Instructions 与 visual-review 的固定 prompt 默认中文;用户明确指定其他语言时才切换。发送前在当前对话中确认意图、要求、排除项与验收标准。
agents-op chat,选择 Create image;确认图片模式 pill 与实时 placeholder 后,向保留 pill 的 ProseMirror 追加执行 prompt。runtime_checks.py images --min-width 1000;每轮先检查 snapshot,已出现 Generated image 时立即保存截图并结束检查,不再空等尺寸轮询。随后结合 composer 状态和截图确认。Save/下载按钮;如无按钮,只有当前页能访问的已渲染资源才可经页面内 fetch/canvas 导出。下载完成条件是目标文件已落盘且非空;通用 download 命令返回 canceled、按钮点击成功或浏览器提示都不能单独作为成功证据。用户指定桌面时,先确认下载文件后再移动/命名到桌面。不要用 host curl 直取 ChatGPT CDN(常见 403)。图像导出辅助脚本:
python scripts/image_exporter.py -c <port-or-url> --tab <tab-id> --selector 'img[alt^="Generated image"]' --output 'E:\exports\image.png'
python scripts/image_exporter.py -c <port-or-url> --tab <tab-id> --url 'https://example.com/image.png' --output 'E:\exports\image.png'
--selector 和 --url 都只在当前 Tab 的浏览器上下文读取资源;两者互斥且必须指定 --output。selector 匹配多张图时,先排除已滚出视口的候选,再选择与聊天输入框垂直距离最近的可见图;没有聊天框才回退到最后一个可见候选。脚本校验 image/*、非空响应并原子落盘,不使用宿主机 curl,从而保留当前 Tab 的登录态、Cookie 和 Referer。
优先使用用户手动放入 agents-op 的来源,不爬取历史 chat。上传用当前实时发现的图片控件。可主动改善构图、光线、色彩、材质、清理与整体连贯性,但不得违背需求。涉及身份关键人物、IP 或品牌时,在建档中记录 protected anchors 与允许改动;会明显影响 anchor 的最终 prompt 发送前,先让用户确认。
若页面 HTTPS 阻止 file:// 或 localhost fetch,不把本地路径暴露给页面;使用浏览器原生文件上传能力。若必须 CDP 注入,读取本地文件后以 base64 构造 File、放入 DataTransfer、赋给当前 file input 并分派 change,然后核验 React UI 已接收文件。
默认最多 3 个图片生成/编辑轮次,首张也计入。用户明确给出 N 轮验证/测试预算时,以 N 为硬上限:每次状态改变的 CDP 调用、导航或额外扩展均算一轮;工具/格式失败也消耗预算。预算接近耗尽时停止,汇总已验证证据并交回控制权。
每个候选都检查:主体/关键物体/姿态/风格、构图/裁切/比例/清晰度/伪影/边距、要求显示的文字、以及参考任务的 identity/layout/palette/protected anchors。剩余轮次内自动修复明显失败或重大质量缺口;最终向用户指出推荐候选及依据。
对于 wx-publish-workflow 的微信文章图片,封面与每张内文图是独立图片任务,各自享有 3 轮上限。封面验收以 2.35:1 消息列表显示为准;另查 1:1 分享/头像裁切,若后者丢失主题元素,记录为已知限制,而非在 2.35:1 已通过且用户未要求全端适配时继续生成。
visual-reviewvisual-review 是单图图像识别评价门槛。调用方提供一张通过 ChatGPT Web 附件控件上传的图片、带 S 编号的审查标准文本及期望的完美结果文本;本 skill 不验证上游重试、页面静态门禁或发布策略。完整固定提示词、中文 YAML 契约和状态规则见 references/visual-review.md。
上传前确认当前页面已接收该图片;图片不存在、不可上传、标准为空或期望结果为空时,不发送审查请求并失败关闭。每次操作前后都先取得实时 snapshot。模型只能返回一个中文 yaml 代码块,且只能包含 审查结论、结论依据、标准检查、缺陷和改进建议;代码块外文本、未知字段、重复键、tag、anchor、alias、多文档或类型错误均拒绝。
模型按每个 S 标准输出 达标、不达标或无法可靠判断,缺陷等级只允许 critical、major、minor。模型不能决定最终状态;本地严格计算:
critical 或 major 缺陷:VISUAL_BLOCKED;critical 或 major 缺陷:VISUAL_PASSED;无法可靠判断:VISUAL_PENDING。只有 VISUAL_PASSED 可继续后续流程;minor 缺陷必须保留但不阻断。visual-review 不删除或修改 chat,结束时仅按现有 lease 规则关闭本次创建的 tab。
fetch(img.src) 或 canvas 可能成功,外部 curl 通常被会话认证拦截。canvas.toDataURL() 因跨域失败时,改用可见下载按钮;不得尝试跨域绕过。Project instructions 是用户可见持久化配置,默认先用中文拟稿;将候选文本发给用户确认后才写入。React 受控 textarea 必须通过 prototype descriptor 设置并分派 input 与 change,写入后另做一次新的 evaluate 读回,并向用户报告读回结果。
agents-op 内新建 chat;辅助脚本均已通过 --tab 锁定任务 tab。project_locator.py 的实时 sidebar 行匹配和点击取得浏览器实际 URL;未拼接或缓存 Project URL。browser_task.py 记录 lease;结束时只释放本次创建的 tab,并重新枚举确认。agents-op Project 归属。visual-review 时,仅上传本次指定的一张图片;模型只返回一个中文 YAML 代码块,且每个 S 标准均有有效检查结果。critical、major、minor 和失败关闭规则计算视觉状态;仅 VISUAL_PASSED 可继续后续流程。visual-review 未删除或修改任何 chat、Project 或其他持久设置。/backend-api/* 请求数据。