smoke

GitHub

启动本地开发环境并对当前代码变更或PR进行功能冒烟测试,覆盖桌面、浏览器及iOS客户端。验证用户可见行为,报告测试结果,不替代CI。

.agents/skills/smoke/SKILL.md nightly-labs/openbot

触发场景

用户要求进行冒烟测试 检查PR或代码变更的功能实现

安装

npx skills add nightly-labs/openbot --skill smoke -g -y
更多选项

非标准路径

npx skills add https://github.com/nightly-labs/openbot/tree/main/.agents/skills/smoke -g -y

不安装直接使用

npx skills use nightly-labs/openbot@smoke

指定 Agent (Claude Code)

npx skills add nightly-labs/openbot --skill smoke -a claude-code -g -y

安装 repo 全部 skill

npx skills add nightly-labs/openbot --all -g -y

预览 repo 内 skill

npx skills add nightly-labs/openbot --list

SKILL.md

Frontmatter
{
    "name": "smoke",
    "description": "Start one or more local OpenBot dev instances and smoke test the features that the current changes or a pull request add. Use when asked to smoke test, QA, or check a change or PR in the real app, including two-client team flows, the browser client, and the iOS simulator."
}

Smoke

Start the local dev stack for this worktree. Then drive the real app and prove that each feature in the change works. Report what passed, what failed, and what you did not check.

A smoke test does not replace tests or CI. Do not run broad checks here. AGENTS.md forbids them locally.

Before you start

  • Read AGENTS.md and the AGENTS.md of each directory in the change.
  • Run node --version. Node 24 is necessary.
  • Prefix each bun run dev* command with env -u ELECTRON_RUN_AS_NODE. An agent shell can leak this variable, and then Electron starts as Node.
  • In a fresh worktree, run bun run dev:bootstrap once. When it reports a missing .env.keys, copy the file from the main checkout. Do not create a new one.

Step 1 — Find what to test

Get the change set. Use the first source that applies:

  1. A PR number or URL: gh pr view <pr> --json title,body,headRefName,files and gh pr diff <pr> --name-only. Check out the PR branch in this worktree only when the user asks. Otherwise test the current branch.
  2. A branch: git diff --name-only $(git merge-base origin/main HEAD), plus git status --short for uncommitted work.

bun run dev:verify reads only uncommitted changes. Use it for setup and runtime state, not for the change set. Ignore the lint and typecheck entries in its commands.

Read the PR body and the diff. Write a short test plan before you start the app. Give each item a user action and an expected result:

# Feature Surface Action Expected result
1 Short name desktop / test-client / web / mobile Steps Visible result

Include the reverse action for each state change: snooze/unsnooze, pause/resume, revoke/reconnect, mute/unmute. Include a restart when the change touches persisted state or migrations.

When a change has no user-visible behavior, such as a refactor, a test, or docs only, say so and stop. Do not start the app for it.

Step 2 — Choose the stack

Choose the smallest stack that covers the plan:

Plan needs Command
Desktop renderer or main process bun run dev
Two clients: teams, invitations, sharing, Team API bun run dev:test-client
Browser client at /app or public web bun run dev:api (add bun run dev when a desktop host is also necessary)
iOS app bun run dev:mobile

Rules:

  • Run bun run dev:status first. Reuse this worktree's stack when it is live. Do not start a second stack in the same worktree.
  • Never drive a stack or an app of a different worktree.
  • Start the stack with run_in_background. Wait for the ports that the supervisor prints, or poll bun run dev:status until the service is live. Use the ports that the stack reports, never a fixed port.
  • Do not pass --shared, so that the test does not change the shared OpenBot Dev profile. A new profile gets the showcase data of bun run dev:seed.
  • Do not run dev:reset, or dev:seed without --dry-run, on a profile that you did not create. Ask first.

Step 3 — Drive the app

Use bun run dev:automation for the desktop app and the test client:

bun run dev:automation instances
bun run dev:automation pages
bun run dev:automation snapshot --wait-for=<role>,<name>
bun run dev:automation click --role=<role> --name=<name> --allow-mutations --instance=<id> --wait-for=<role>,<name>
bun run dev:automation type --role=<role> --name=<name> --text=<text> --allow-mutations --instance=<id>

Follow this loop for each plan item: snapshot → action with --wait-for → snapshot.

The accessibility snapshot is the evidence. Do not take screenshots by default: they cost more. Take one only when the user asks, when the result is visual (layout, color, animation, an image) and a snapshot cannot show it, or when the user asks for PR evidence. Then use bun run dev:automation screenshot --out=<name>.png.

  • Select elements by accessible role and name. When an element has no accessible name, record it as a finding. Do not add a test ID.
  • --page=<target-id|url-substring> selects a window or an embedded browser view. --service=test-client selects the second client.
  • Wait for a role, not for elapsed time.
  • dev:automation cannot close a window or run a script. For window lifecycle checks, use CDP on the instance's remoteDebuggingPort.
  • For the browser client, use the preview or Chrome DevTools tools on the URL that the stack reports.
  • For the iOS app, use the device tools to open the simulator. Take a simulator screenshot only when the result is visual.
  • For a restart check, stop only the stack you started with bun run dev:stop, then start it again with the same flags.

Also look for problems outside the plan: renderer console errors in the dev:automation stderr, errors in the stack log, and a UI that does not respond.

A provider turn uses the signed-in subscription. Send model turns only when the feature needs them, and keep the prompts short.

Step 4 — Clean up

  • Stop each stack you started with bun run dev:stop. Leave a stack that was live before you started.
  • Never kill by process pattern. Kill only a PID that you started.
  • Screenshots, if any, stay in .openbot-build/dev-automation/. Do not commit them.

Step 5 — Report

Give one table for the plan:

# Feature Result Evidence
1 Short name pass / fail / not checked Snapshot text, log line, or screenshot path

Then give:

  • The stack and flags you used, and the surfaces you checked.
  • Each failure with the steps to reproduce it, the expected result, and the actual result.
  • Each item you did not check, and why. Examples: a real second computer, a paid provider, a production build, Windows or Linux.

Do not fix a failure unless the user asks. When the user asks for PR evidence, give the screenshot paths for before and after. Do not commit them.

版本历史

  • ac99196 当前 2026-11-02 08:39

同 Skill 集合

.agents/skills/babysit/SKILL.md
.agents/skills/biome-anti-slop/SKILL.md
.agents/skills/openpanel/SKILL.md
.agents/skills/prototype/SKILL.md
.agents/skills/react-to-solid/SKILL.md
.agents/skills/release-upgrade-safety/SKILL.md
.agents/skills/ship/SKILL.md
.agents/skills/signal-deploy/SKILL.md
.agents/skills/smoke-and-ship/SKILL.md
.agents/skills/triage/SKILL.md
.agents/skills/zaidan/SKILL.md
marketplace/production-catalog/skills/acceptance-check/SKILL.md
marketplace/production-catalog/skills/accessibility-audit/SKILL.md
marketplace/production-catalog/skills/account-brief/SKILL.md
marketplace/production-catalog/skills/agent-chat-healthcheck/SKILL.md
marketplace/production-catalog/skills/agent-designer/SKILL.md
marketplace/production-catalog/skills/alt-text/SKILL.md
marketplace/production-catalog/skills/api-skill-builder/SKILL.md
marketplace/production-catalog/skills/bug-triage/SKILL.md
marketplace/production-catalog/skills/build-spec/SKILL.md
marketplace/production-catalog/skills/call-scorecard/SKILL.md
marketplace/production-catalog/skills/campaign-analysis/SKILL.md
marketplace/production-catalog/skills/care-log/SKILL.md
marketplace/production-catalog/skills/change-review/SKILL.md
marketplace/production-catalog/skills/competitor-comparison/SKILL.md
marketplace/production-catalog/skills/daily-brief/SKILL.md
marketplace/production-catalog/skills/data-quality-review/SKILL.md
marketplace/production-catalog/skills/decision-quality-check/SKILL.md
marketplace/production-catalog/skills/distinctive-frontend-design/SKILL.md
marketplace/production-catalog/skills/eggbot-getting-started/SKILL.md
marketplace/production-catalog/skills/evidence-brief/SKILL.md
marketplace/production-catalog/skills/hiring-scorecard/SKILL.md
marketplace/production-catalog/skills/interface-critique/SKILL.md
marketplace/production-catalog/skills/internal-communications/SKILL.md
marketplace/production-catalog/skills/launch-notes/SKILL.md
marketplace/production-catalog/skills/meeting-actions/SKILL.md
marketplace/production-catalog/skills/outreach-draft/SKILL.md
marketplace/production-catalog/skills/pr-follow-up/SKILL.md
marketplace/production-catalog/skills/project-plan/SKILL.md
marketplace/production-catalog/skills/prototype-build/SKILL.md
marketplace/production-catalog/skills/recurring-charges/SKILL.md
marketplace/production-catalog/skills/repository-threat-model/SKILL.md
marketplace/production-catalog/skills/request-scoring/SKILL.md
marketplace/production-catalog/skills/routine-healthcheck/SKILL.md
marketplace/production-catalog/skills/search-content-brief/SKILL.md
marketplace/production-catalog/skills/secure-code-guidance/SKILL.md
marketplace/production-catalog/skills/spend-audit/SKILL.md
marketplace/production-catalog/skills/support-reply/SKILL.md
marketplace/production-catalog/skills/voice-edit/SKILL.md

元信息

文件数
0
版本
ac99196
Hash
0c27904c
收录时间
2026-11-02 08:39

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-11-02 21:23
浙ICP备14020137号-1