Concepts 导读
Mantis:先把底下那条暗线看见
Mantis 这页在补地图,不是在发操作说明。看完你应该能指出它埋在系统哪一层、为什么会牵动后面的动作,以及最容易把哪几件事想反。原文最响的一记鼓点,其实是:Mantis is the OpenClaw end-to-end verification system for bugs that need a real runtime…。
先听这页的人话版
Mantis
这一页不是在堆术语,它像把“Mantis”这台小机器搬到桌上,当着你的面拆开给你看。你先不用全记住,先抓住它到底在忙什么:Mantis is the OpenClaw end-to-end verification system for bugs that need a real runtime, a real…。
如果把这页当成“给普通人看的版本”,你最应该带走的是:它到底在教你一件什么事、什么时候要这样做、以及哪里最容易踩坑。
第 1 站
Start Here
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis is the OpenClaw end-to-end verification system for bugs that need a real runtime, a real transport, and visible…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis is the OpenClaw end-to-end verification system for bugs that need a real runtime, a real transport, and visible…。
Mantis is the OpenClaw end-to-end verification system for bugs that need a real runtime, a real transport, and visible proof. It runs a scenario against a known bad ref, captures evidence, runs the same scenario against a candidate ref, and publishes the comparison as artifacts that a maintainer can inspect from a PR or from a local command.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis starts with Discord because Discord gives us a high-value first lane: real bot auth, real guild 消息通道s, reactions…。
Mantis starts with Discord because Discord gives us a high-value first lane: real bot auth, real guild channels, reactions, threads, native commands, and a browser UI where humans can visually confirm what the transport showed.
第 2 站
Goals
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:see. read or 消息通道 transcript check. provider auth gets stuck. needs manual VNC help, or finishes.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:see.
see.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:read or 消息通道 transcript check.
read or channel transcript check.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:provider auth gets stuck.
provider auth gets stuck.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:needs manual VNC help, or finishes.
needs manual VNC help, or finishes.
这一串条目别硬背,把它当成“Goals”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Reproduce a bug from a GitHub issue or PR…、Capture a **before** artifact on the base…、Capture an **after** artifact on the cand…、Use a deterministic oracle whenever possi…。
- Reproduce a bug from a GitHub issue or PR with the same transport shape users
- Capture a **before** artifact on the baseline ref before applying the fix.
- Capture an **after** artifact on the candidate ref after applying the fix.
- Use a deterministic oracle whenever possible, such as a Discord REST reaction
- Capture screenshots when the bug has a visible UI surface.
- Run locally from an agent-controlled CLI and remotely from GitHub.
- Preserve enough machine state for VNC rescue when login, browser automation, or
- Post concise status to an operator Discord channel when the run is blocked,
第 3 站
Non goals
这一节主要在解释“Non goals”到底是干什么的,以及你什么时候会遇到它。
这一节主要在解释“Non goals”到底是干什么的,以及你什么时候会遇到它。
如果你是第一次接触 OpenClaw,这一节最值得看的不是术语本身,而是它背后的使用场景和限制。
真正动手时,先看它有没有默认值、有没有必须打开的选项、以及会不会影响安全边界。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:a smaller regression test after the fix is understood. is reserved for bugs where the live environment matters. path, n…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:a smaller regression test after the fix is understood.
a smaller regression test after the fix is understood.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:is reserved for bugs where the live environment matters.
is reserved for bugs where the live environment matters.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:path, not the happy path.
path, not the happy path.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:reports, or PR comments.
reports, or PR comments.
这一串条目别硬背,把它当成“Non goals”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Mantis is not a replacement for unit test…、Mantis is not the normal fast CI gate. It…、Mantis should not require a human for nor…、Mantis does not store raw secrets in arti…。
- Mantis is not a replacement for unit tests. A Mantis run should usually become
- Mantis is not the normal fast CI gate. It is slower, uses live credentials, and
- Mantis should not require a human for normal operation. Manual VNC is a rescue
- Mantis does not store raw secrets in artifacts, logs, screenshots, Markdown
第 4 站
Ownership
这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。
这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。
很多文档看起来长,其实是在防你漏掉前置条件。
真正照做时,先找前置条件,再找必填项,最后看验证方法。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis lives in the OpenClaw QA stack. local CLI under pnpm openclaw qa mantis. artifact writers. dispatching the workf…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis lives in the OpenClaw QA stack.
Mantis lives in the OpenClaw QA stack.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:local CLI under pnpm openclaw qa mantis.
local CLI under pnpm openclaw qa mantis.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:artifact writers.
artifact writers.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:dispatching the workflow, and posting the final PR comment.
dispatching the workflow, and posting the final PR comment.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:debugging, or stuck-state reporting.
debugging, or stuck-state reporting.
这一串条目别硬背,把它当成“Ownership”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:OpenClaw owns the scenario runtime, trans…、QA Lab owns the live transport harness pi…、Crabbox owns warmed Linux machines when a…、GitHub Actions owns the remote workflow e…。
- OpenClaw owns the scenario runtime, transport adapters, evidence schema, and
- QA Lab owns the live transport harness pieces, browser capture helpers, and
- Crabbox owns warmed Linux machines when a remote VM is needed.
- GitHub Actions owns the remote workflow entrypoint and artifact retention.
- ClawSweeper owns GitHub comment routing: parsing maintainer commands,
- OpenClaw agents drive Mantis through Codex when a scenario needs agentic setup,
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:This boundary keeps transport knowledge in OpenClaw, machine scheduling in Crabbox, and maintainer workflow glue in Cla…。
This boundary keeps transport knowledge in OpenClaw, machine scheduling in Crabbox, and maintainer workflow glue in ClawSweeper.
第 5 站
魔法口令 shape
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first local 魔法口令 verifies the Discord bot, guild, 消息通道, 小纸条消息 send, reaction send, and artifact path: The local bef…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first local 魔法口令 verifies the Discord bot, guild, 消息通道, 小纸条消息 send, reaction send, and artifact path:。
The first local command verifies the Discord bot, guild, channel, message send, reaction send, and artifact path:
这是一串终端口令,像你站在控制台前,一下下按按钮让机器醒过来。
- 这一句像在终端上按下启动钮:“pnpm openclaw qa mantis discord-smoke \”。它会让电脑去请求、安装或者把东西搭起来。
- 这一行“--output-dir .artifacts/qa-e2e/mantis/discord-smoke”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
pnpm openclaw qa mantis discord-smoke \
--output-dir .artifacts/qa-e2e/mantis/discord-smoke
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The local before and after runner accepts this shape:。
The local before and after runner accepts this shape:
这是一串终端口令,像你站在控制台前,一下下按按钮让机器醒过来。
- 这一句像在终端上按下启动钮:“pnpm openclaw qa mantis run \”。它会让电脑去请求、安装或者把东西搭起来。
- 这一行“--transport discord \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“--scenario discord-status-reactions-tool-only \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
pnpm openclaw qa mantis run \
--transport discord \
--scenario discord-status-reactions-tool-only \
--baseline origin/main \
--candidate HEAD \
--output-dir .artifacts/qa-e2e/mantis/local-discord-status-reactions
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The runner creates detached baseline and candidate worktrees under the output directory, installs dependencies, builds…。
The runner creates detached baseline and candidate worktrees under the output directory, installs dependencies, builds each ref, runs the scenario with --allow-failures, then writes baseline/, candidate/, comparison.json, and mantis-report.md. For the first Discord scenario, a successful verification means baseline status is fail and candidate status is pass.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The second Discord before/after probe targets thread attachments:。
The second Discord before/after probe targets thread attachments:
这是一串终端口令,像你站在控制台前,一下下按按钮让机器醒过来。
- 这一句像在终端上按下启动钮:“pnpm openclaw qa mantis run \”。它会让电脑去请求、安装或者把东西搭起来。
- 这一行“--transport discord \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“--scenario discord-thread-reply-filepath-attachment \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
pnpm openclaw qa mantis run \
--transport discord \
--scenario discord-thread-reply-filepath-attachment \
--baseline <bug-ref> \
--candidate <fix-ref> \
--output-dir .artifacts/qa-e2e/mantis/local-discord-thread-attachment
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:That scenario posts a parent 小纸条消息 with the driver bot, creates a real Discord thread, calls OpenClaw's 小纸条消息.thread-re…。
That scenario posts a parent message with the driver bot, creates a real Discord thread, calls OpenClaw's message.thread-reply action with a repo-local filePath, then polls the thread for the SUT reply and attachment filename. The baseline screenshot shows the reply with no attachment; the candidate screenshot shows the expected mantis-thread-report.md attachment.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first VM/browser primitive is the desktop smoke:。
The first VM/browser primitive is the desktop smoke:
这是一串终端口令,像你站在控制台前,一下下按按钮让机器醒过来。
- 这一句像在终端上按下启动钮:“pnpm openclaw qa mantis desktop-browser-smoke \”。它会让电脑去请求、安装或者把东西搭起来。
- 这一行“--output-dir .artifacts/qa-e2e/mantis/desktop-browser”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
pnpm openclaw qa mantis desktop-browser-smoke \
--output-dir .artifacts/qa-e2e/mantis/desktop-browser
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:It leases or reuses a Crabbox desktop machine, starts a visible browser inside the VNC session, captures the desktop, p…。
It leases or reuses a Crabbox desktop machine, starts a visible browser inside the VNC session, captures the desktop, pulls artifacts back to the local output directory, and writes the reconnect command into the report. The command defaults to the Hetzner provider because it is the first provider with working desktop/VNC coverage in the Mantis lane. Override it with --provider, --crabbox-bin, or OPENCLAW_MANTIS_CRABBOX_PROVIDER when running against another Crabbox fleet.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Useful desktop smoke flags:。
Useful desktop smoke flags:
这一串条目别硬背,把它当成“Command shape”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:--lease-id <cbx_...> or OPENCLAW_MANTIS_C…、--browser-url <url> changes the page open…、--html-file <path> renders a repo-local H…、--browser-profile-dir <remote-path> reuse…。
--lease-id <cbx_...>orOPENCLAW_MANTIS_CRABBOX_LEASE_IDreuses a warmed desktop.--browser-url <url>changes the page opened in the visible browser.--html-file <path>renders a repo-local HTML artifact in the visible browser. Mantis uses this to capture the generated Discord status-reaction timeline through a real Crabbox desktop.--browser-profile-dir <remote-path>reuses a remote Chrome user-data-dir so a persistent Mantis desktop can stay logged in between runs. Use this for the long-lived Discord Web viewer profile.--browser-profile-archive-env <name>restores a base64.tgzChrome user-data-dir archive from the named environment variable before launching the browser. Use this for logged-in witnesses such as Discord Web. The default env var isOPENCLAW_MANTIS_BROWSER_PROFILE_TGZ_B64.--video-duration <seconds>controls the MP4 capture length. Use a longer duration for slow logged-in web apps that need time to settle.--keep-leaseorOPENCLAW_MANTIS_KEEP_VM=1keeps a newly created passing lease open for VNC inspection. Failed runs keep the lease by default when one was created so an operator can reconnect.--class,--idle-timeout, and--ttltune machine size and lease lifetime.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:For Discord Web evidence, Mantis uses a dedicated viewer account instead of a bot token. The live Discord 对话接口 scenario…。
For Discord Web evidence, Mantis uses a dedicated viewer account instead of a bot token. The live Discord API scenario remains the oracle: it creates the real thread, sends the SUT thread-reply, and checks the attachment through Discord REST. When OPENCLAW_QA_DISCORD_CAPTURE_UI_METADATA=1 is set, the scenario also writes a Discord Web URL artifact. When OPENCLAW_QA_DISCORD_KEEP_THREADS=1 is set, it leaves that thread available long enough for a logged-in browser to open and record it.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The GitHub workflow opens the candidate thread URL in Discord Web, captures a screenshot, records an MP4, and generates…。
The GitHub workflow opens the candidate thread URL in Discord Web, captures a screenshot, records an MP4, and generates a trimmed GIF preview when Crabbox media tooling is available. Prefer a persistent viewer profile path configured through MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR, because full Chrome profile archives can outgrow GitHub's secret-size limit. For small/bootstrap profiles, the workflow can also restore a base64 .tgz archive from MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64. If neither profile source is configured, the workflow still publishes the deterministic baseline/candidate attachment screenshots and logs a notice that the logged-in Discord Web witness was skipped.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first full desktop transport primitive is the Slack desktop smoke:。
The first full desktop transport primitive is the Slack desktop smoke:
这是一串终端口令,像你站在控制台前,一下下按按钮让机器醒过来。
- 这一句像在终端上按下启动钮:“pnpm openclaw qa mantis slack-desktop-smoke \”。它会让电脑去请求、安装或者把东西搭起来。
- 这一行“--output-dir .artifacts/qa-e2e/mantis/slack-desktop \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“--gateway-setup \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
pnpm openclaw qa mantis slack-desktop-smoke \
--output-dir .artifacts/qa-e2e/mantis/slack-desktop \
--gateway-setup \
--scenario slack-canary \
--keep-lease
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:It leases or reuses a Crabbox desktop machine, syncs the current checkout into the VM, runs pnpm openclaw qa slack insi…。
It leases or reuses a Crabbox desktop machine, syncs the current checkout into the VM, runs pnpm openclaw qa slack inside that VM, opens Slack Web in the VNC browser, captures the visible desktop, and copies both the Slack QA artifacts and the VNC screenshot back to the local output directory. This is the first Mantis shape where the SUT OpenClaw gateway and the browser both live inside the same Linux desktop VM.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:With --门口的小门卫-setup, the 魔法口令 prepares a persistent disposable OpenClaw home at $HOME/.openclaw-mantis/slack-openclaw,…。
With --gateway-setup, the command prepares a persistent disposable OpenClaw home at $HOME/.openclaw-mantis/slack-openclaw, patches Slack Socket Mode configuration for the selected channel, starts openclaw gateway run on port 38973, and keeps Chrome running in the VNC session. This is the "leave me a Linux desktop with Slack and a claw running" mode; the bot-to-bot Slack QA lane remains the default when --gateway-setup is omitted.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Required inputs for --credential-source env:。
Required inputs for --credential-source env:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:OPENAI_对话接口_KEY is set locally, Mantis maps it to OPENCLAW_LIVE_OPENAI_KEY before invoking Crabbox so Crabbox's OPENCLA…。
OPENAI_API_KEY is set locally, Mantis maps it to OPENCLAW_LIVE_OPENAI_KEY before invoking Crabbox so Crabbox's OPENCLAW_* env forwarding can carry it into the VM.
这一串条目别硬背,把它当成“Command shape”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:OPENCLAW_QA_SLACK_消息通道_ID、OPENCLAW_QA_SLACK_DRIVER_BOT_TOKEN、OPENCLAW_QA_SLACK_SUT_BOT_TOKEN、OPENCLAW_QA_SLACK_SUT_APP_TOKEN。
OPENCLAW_QA_SLACK_CHANNEL_IDOPENCLAW_QA_SLACK_DRIVER_BOT_TOKENOPENCLAW_QA_SLACK_SUT_BOT_TOKENOPENCLAW_QA_SLACK_SUT_APP_TOKENOPENCLAW_LIVE_OPENAI_KEYfor the remote model lane. If only
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:With --门口的小门卫-setup --credential-source convex, Mantis leases the Slack SUT credential from the shared pool before crea…。
With --gateway-setup --credential-source convex, Mantis leases the Slack SUT credential from the shared pool before creating the VM and forwards the leased channel id, Socket Mode app token, and bot token as the OPENCLAW_MANTIS_SLACK_* runtime env inside the desktop. That keeps GitHub workflows thin: they only need the Convex broker secret, not raw Slack bot or app tokens.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Useful Slack desktop flags:。
Useful Slack desktop flags:
这一串条目别硬背,把它当成“Command shape”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:--lease-id <cbx_...> reruns against a mac…、--门口的小门卫-setup starts a persistent OpenCl…、--keep-lease keeps the 门口的小门卫 VM open for…、--slack-url <url> opens a specific Slack…。
--lease-id <cbx_...>reruns against a machine where an operator already logged in to Slack Web through VNC.--gateway-setupstarts a persistent OpenClaw Slack gateway in the VM instead of only running the bot-to-bot QA lane.--keep-leasekeeps the gateway VM open for VNC inspection after success;--no-keep-leasestops it after collecting artifacts.--slack-url <url>opens a specific Slack Web URL. Without it, Mantis deriveshttps://app.slack.com/client/<team>/<channel>from Slackauth.testwhen the SUT bot token is available.--slack-channel-id <id>controls the Slack channel allowlist used by gateway setup.OPENCLAW_MANTIS_SLACK_BROWSER_PROFILE_DIRcontrols the persistent Chrome profile inside the VM. The default is$HOME/.config/openclaw-mantis/slack-chrome-profile, so a manual Slack Web login survives reruns on the same lease.--credential-source convex --credential-role ciuses the shared credential pool instead of direct Slack env tokens.--provider-mode,--model,--alt-model, and--fastpass through to the Slack live lane.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Approval checkpoint runs render Slack 对话接口 小纸条消息 snapshots into checkpoint PNGs for CI-safe visual proof. slack-desktop…。
Approval checkpoint runs render Slack API message snapshots into checkpoint PNGs for CI-safe visual proof. slack-desktop-smoke.png is only proof of Slack Web when the lease uses a warm browser profile that is already logged in.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The GitHub smoke workflow is Mantis Discord Smoke. The before and after GitHub workflow for the first real scenario is…。
The GitHub smoke workflow is Mantis Discord Smoke. The before and after GitHub workflow for the first real scenario is Mantis Discord Status Reactions. It accepts:
这一串条目别硬背,把它当成“Command shape”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:baseline_ref: the ref expected to reprodu…、candidate_ref: the ref expected to show q…。
baseline_ref: the ref expected to reproduce queued-only behavior.candidate_ref: the ref expected to showqueued -> thinking -> done.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:It checks out the workflow harness ref, builds separate baseline and candidate worktrees, runs discord-status-reactions…。
It checks out the workflow harness ref, builds separate baseline and candidate worktrees, runs discord-status-reactions-tool-only against each worktree, and uploads baseline/, candidate/, comparison.json, and mantis-report.md as Actions artifacts. It also renders each lane's timeline HTML in a Crabbox desktop browser and publishes those VNC screenshots beside the deterministic timeline PNGs in the PR comment. The same PR comment embeds lightweight motion-trimmed GIF previews generated by crabbox media preview, links to the matching motion-trimmed MP4 clips, and keeps the full desktop MP4 files for deep inspection. Screenshots stay inline for quick review. The workflow builds the Crabbox CLI from openclaw/crabbox main so it can use the current desktop/browser lease flags before the next Crabbox binary release is cut.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis Scenario is the generic manual entrypoint. It takes a scenario_id, candidate_ref, optional baseline_ref, and opt…。
Mantis Scenario is the generic manual entrypoint. It takes a scenario_id, candidate_ref, optional baseline_ref, and optional pr_number, then dispatches the scenario-owned workflow. The wrapper is intentionally thin: scenario workflows still own their transport setup, credentials, VM class, expected oracle, and artifact manifest.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis Slack Desktop Smoke is the first Slack VM workflow. It checks out the trusted candidate ref in a separate worktr…。
Mantis Slack Desktop Smoke is the first Slack VM workflow. It checks out the trusted candidate ref in a separate worktree, leases a Crabbox Linux desktop, runs pnpm openclaw qa mantis slack-desktop-smoke --gateway-setup against that candidate, opens Slack Web in the VNC browser, records the desktop, generates a motion-trimmed preview with crabbox media preview, uploads the full artifact directory, and optionally posts the inline evidence comment on the target PR. It defaults to AWS for the desktop lease and exposes a manual provider input so operators can switch to Hetzner when AWS capacity is slow or unavailable. Use this lane when you want "a Linux desktop with Slack and a claw running" instead of only a bot-to-bot Slack transcript.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis Telegram Live wraps the existing Telegram live QA lane in the same PR evidence pipeline. It checks out the trust…。
Mantis Telegram Live wraps the existing Telegram live QA lane in the same PR evidence pipeline. It checks out the trusted candidate ref in a separate worktree, runs pnpm openclaw qa telegram --credential-source convex --credential-role ci, writes a mantis-evidence.json manifest from the Telegram QA summary and observed-message artifact, renders the redacted transcript HTML through a Crabbox desktop browser, generates a motion-trimmed GIF with crabbox media preview, and posts the inline PR evidence comment when a PR number is available. This lane is transcript-visual rather than logged-in Telegram Web proof: the Telegram Bot API gives stable live message evidence, but Telegram Web login state is not required for normal Mantis automation.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis Telegram Desktop Proof is the 机器人朋友ic native Telegram Desktop before/after wrapper. A maintainer can trigger it…。
Mantis Telegram Desktop Proof is the agentic native Telegram Desktop before/after wrapper. A maintainer can trigger it from a PR comment with @openclaw-mantis telegram desktop proof, from the Actions UI with freeform instructions, or through the generic Mantis Scenario dispatcher. The workflow hands the PR, baseline ref, candidate ref, and maintainer instructions to Codex. The agent reads the PR, decides what Telegram-visible behavior proves the change, runs the real-user Crabbox Telegram Desktop proof lane for baseline and candidate, iterates until the native GIFs are useful, writes paired motionPreview artifacts into mantis-evidence.json, uploads the bundle, and posts a 2-column PR evidence table when a PR number is available.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:For human-in-the-loop Telegram desktop setup, use the scenario builder:。
For human-in-the-loop Telegram desktop setup, use the scenario builder:
这是一串终端口令,像你站在控制台前,一下下按按钮让机器醒过来。
- 这一句像在终端上按下启动钮:“pnpm openclaw qa mantis telegram-desktop-builder \”。它会让电脑去请求、安装或者把东西搭起来。
- 这一行“--credential-source convex \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“--credential-role maintainer \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
pnpm openclaw qa mantis telegram-desktop-builder \
--credential-source convex \
--credential-role maintainer \
--keep-lease
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The builder leases or reuses a Crabbox desktop, installs the native Linux Telegram Desktop binary, optionally restores…。
The builder leases or reuses a Crabbox desktop, installs the native Linux Telegram Desktop binary, optionally restores a user-session archive, configures OpenClaw with the leased Telegram SUT bot token, starts openclaw gateway run on port 38974, posts a driver-bot readiness message to the leased private group, then captures a screenshot and MP4 from the visible VNC desktop. A bot token never logs Telegram Desktop in; it only configures OpenClaw. The desktop viewer is a separate Telegram user session restored from --telegram-profile-archive-env <name> or created manually through VNC and kept alive with --keep-lease.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Useful Telegram desktop builder flags:。
Useful Telegram desktop builder flags:
这一串条目别硬背,把它当成“Command shape”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:--lease-id <cbx_...> reruns against a VM…、--telegram-profile-archive-env <name> rea…、--telegram-profile-dir <remote-path> cont…、--no-门口的小门卫-setup installs and opens Tele…。
--lease-id <cbx_...>reruns against a VM where an operator already logged in to Telegram Desktop.--telegram-profile-archive-env <name>reads a base64.tgzTelegram Desktop profile archive from that env var and restores it before launch.--telegram-profile-dir <remote-path>controls the remote Telegram Desktop profile directory. The default is$HOME/.local/share/TelegramDesktop.--no-gateway-setupinstalls and opens Telegram Desktop without configuring OpenClaw.--credential-source convex --credential-role ciuses the shared credential broker instead of direct Telegram env tokens.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Every PR-publishing scenario writes mantis-evidence.json next to its report. This schema is the handoff between scenari…。
Every PR-publishing scenario writes mantis-evidence.json next to its report. This schema is the handoff between scenario code and GitHub comments:
这段不是对白,而是一叠设置卡片,像在给系统贴门牌、路线和规矩。
- 大括号像两只手把同一组设置拢住,意思是“这些东西算一伙”。
- 这里在给“schemaVersion”挂牌子,告诉系统它该指向“1”。
- 这里在给“id”挂牌子,告诉系统它该指向“discord-status-reactions”。
{
"schemaVersion": 1,
"id": "discord-status-reactions",
"title": "Mantis Discord Status Reactions QA",
"summary": "Human-readable top summary for the PR comment.",
"scenario": "discord-status-reactions-tool-only",
"comparison": {
"baseline": { "sha": "...", "status": "fail", "expected": "queued-only" },
"candidate": { "sha": "...", "status": "pass", "expected": "queued -> thinking -> done" },
"pass": true
},
"artifacts": [
{
"kind": "timeline",
"lane": "baseline",
"label": "Baseline queued-only",
"path": "baseline/timeline.png",
"targetPath": "baseline.png",
"alt": "Baseline Discord timeline",
"width": 420
}
]
}
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Artifact path values are relative to the manifest directory. targetPath values are relative paths under the 设置说明书ured M…。
Artifact path values are relative to the manifest directory. targetPath values are relative paths under the configured Mantis R2/S3 artifact prefix. The publisher rejects path traversal and skips entries marked "required": false when optional previews or videos are unavailable.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Supported artifact kinds:。
Supported artifact kinds:
这一串条目别硬背,把它当成“Command shape”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:timeline: deterministic scenario screensh…、desktopScreenshot: VNC/browser desktop sc…、motionPreview: inline animated GIF genera…、motionClip: motion-trimmed MP4 that remov…。
timeline: deterministic scenario screenshot, usually before/after.desktopScreenshot: VNC/browser desktop screenshot.motionPreview: inline animated GIF generated from the desktop recording.motionClip: motion-trimmed MP4 that removes static lead-in and tail.fullVideo: full MP4 recording for deep inspection.metadata: JSON/log sidecar.report: Markdown report.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The reusable publisher is scripts/mantis/publish-pr-evidence.mjs. Workflows call it with the manifest, target PR, artif…。
The reusable publisher is scripts/mantis/publish-pr-evidence.mjs. Workflows call it with the manifest, target PR, artifact target root, comment marker, Actions artifact URL, run URL, and request source. It uploads declared artifacts to the configured Mantis R2/S3 bucket, builds a summary-first PR comment with inline images/previews and linked videos, then updates the existing marker comment or creates one. The workflows publish to openclaw-crabbox-artifacts with public URLs under https://artifacts.openclaw.ai. They provide bucket, region, and public URL values directly. The reusable publisher requires:
这一串条目别硬背,把它当成“Command shape”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:MANTIS_ARTIFACT_R2_ACCESS_KEY_ID、MANTIS_ARTIFACT_R2_SECRET_ACCESS_KEY、MANTIS_ARTIFACT_R2_BUCKET、MANTIS_ARTIFACT_R2_ENDPOINT。
MANTIS_ARTIFACT_R2_ACCESS_KEY_IDMANTIS_ARTIFACT_R2_SECRET_ACCESS_KEYMANTIS_ARTIFACT_R2_BUCKETMANTIS_ARTIFACT_R2_ENDPOINTMANTIS_ARTIFACT_R2_REGIONMANTIS_ARTIFACT_R2_PUBLIC_BASE_URL
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:You can also trigger the status-reactions run directly from a PR comment:。
You can also trigger the status-reactions run directly from a PR comment:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“@openclaw-mantis discord status reactions”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
@openclaw-mantis discord status reactions
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The comment trigger is intentionally narrow. It only runs on pull request comments from users with write, maintain, or…。
The comment trigger is intentionally narrow. It only runs on pull request comments from users with write, maintain, or admin access, and it only recognizes Discord status-reaction requests. By default it uses the known bad baseline ref and the current PR head SHA as the candidate. Maintainers can override either ref:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“@openclaw-mantis discord status reactions baseline=origin/main candidate=HEAD”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
@openclaw-mantis discord status reactions baseline=origin/main candidate=HEAD
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Telegram live QA can also be triggered from a PR comment:。
Telegram live QA can also be triggered from a PR comment:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“@openclaw-mantis telegram”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“@openclaw-mantis telegram scenario=telegram-status-command”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-reply”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
@openclaw-mantis telegram
@openclaw-mantis telegram scenario=telegram-status-command
@openclaw-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-reply
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:By default it uses the current PR head SHA as the candidate and runs telegram-status-魔法口令. Maintainers can override can…。
By default it uses the current PR head SHA as the candidate and runs telegram-status-command. Maintainers can override candidate=..., provider=aws|hetzner, and lease=<cbx_...> when they need a specific ref or a pre-warmed Crabbox desktop.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:ClawSweeper 魔法口令 examples:。
ClawSweeper command examples:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“@clawsweeper mantis discord discord-status-reactions-tool-only”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“@clawsweeper verify e2e discord”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
@clawsweeper mantis discord discord-status-reactions-tool-only
@clawsweeper verify e2e discord
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first 魔法口令 is explicit and scenario-focused. The second can later map a PR or issue to recommended Mantis scenarios…。
The first command is explicit and scenario-focused. The second can later map a PR or issue to recommended Mantis scenarios from labels, changed files, and ClawSweeper review findings.
第 6 站
Run lifecycle
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Acquire credentials. 2. Allocate or reuse a VM. 3. Prepare the desktop/browser profile when the scenario needs UI ev…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:1. Acquire credentials. 2. Allocate or reuse a VM. 3. Prepare the desktop/browser profile when the scenario needs UI ev…。
1. Acquire credentials. 2. Allocate or reuse a VM. 3. Prepare the desktop/browser profile when the scenario needs UI evidence. 4. Prepare a clean checkout for the baseline ref. 5. Install dependencies and build only what the scenario needs. 6. Start a child OpenClaw Gateway with an isolated state directory. 7. Configure the live transport, provider, model, and browser profile. 8. Run the scenario and capture baseline evidence. 9. Stop the gateway and preserve logs. 10. Prepare the candidate ref in the same VM. 11. Run the same scenario and capture candidate evidence. 12. Compare the oracle results and visual evidence. 13. Write Markdown, JSON, logs, screenshots, and optional trace artifacts. 14. Upload GitHub Actions artifacts. 15. Post a concise PR or Discord status message.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The scenario should be able to fail in two different ways:。
The scenario should be able to fail in two different ways:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:provider failed before the bug oracle was meaningful.
provider failed before the bug oracle was meaningful.
这一串条目别硬背,把它当成“Run lifecycle”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:**Bug reproduced**: baseline failed in th…、**Harness failure**: environment setup, c…。
- **Bug reproduced**: baseline failed in the expected way.
- **Harness failure**: environment setup, credentials, Discord API, browser, or
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The final report must separate these cases so maintainers do not confuse a flaky environment with product behavior.
The final report must separate these cases so maintainers do not confuse a flaky environment with product behavior.
第 7 站
Discord MVP
这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。
这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。
很多文档看起来长,其实是在防你漏掉前置条件。
真正照做时,先找前置条件,再找必填项,最后看验证方法。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first scenario should target Discord status reactions in guild 消息通道s where the source reply delivery mode is 小纸条消息_…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first scenario should target Discord status reactions in guild 消息通道s where the source reply delivery mode is 小纸条消息_…。
The first scenario should target Discord status reactions in guild channels where the source reply delivery mode is message_tool_only.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Why it is a good Mantis seed:。
Why it is a good Mantis seed:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:source reply delivery mode, status reaction state, and 聪明脑袋模型 turn lifecycle.
source reply delivery mode, status reaction state, and model turn lifecycle.
这一串条目别硬背,把它当成“Discord MVP”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:It is visible in Discord as reactions on…、It has a strong REST oracle through Disco…、It exercises a real OpenClaw 门口的小门卫, Disc…、It is narrow enough to keep the first imp…。
- It is visible in Discord as reactions on the triggering message.
- It has a strong REST oracle through Discord message reaction state.
- It exercises a real OpenClaw Gateway, Discord bot auth, message dispatch,
- It is narrow enough to keep the first implementation honest.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Expected scenario shape:。
Expected scenario shape:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这里在给“id”挂牌子,告诉系统它该指向“discord-status-reactions-tool-only”。
- 这里在给“transport”挂牌子,告诉系统它该指向“discord”。
- 这里在给“baseline”挂牌子,告诉系统它该指向“”。
id: discord-status-reactions-tool-only
transport: discord
baseline:
expect:
reproduced: true
candidate:
expect:
fixed: true
config:
messages:
ackReaction: "👀"
ackReactionScope: "group-mentions"
groupChat:
visibleReplies: "message_tool"
statusReactions:
enabled: true
timing:
debounceMs: 0
discord:
requireMention: true
notifyChannel: operator-notify
evidence:
rest:
messageReactions: true
browser:
screenshotMessageRow: true
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Baseline evidence should show the queued acknowledgement reaction but no lifecycle transition in 工具小帮手-only mode. Candi…。
Baseline evidence should show the queued acknowledgement reaction but no lifecycle transition in tool-only mode. Candidate evidence should show lifecycle status reactions running when messages.statusReactions.enabled is explicitly true.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The executable first slice is the opt-in Discord live QA scenario:。
The executable first slice is the opt-in Discord live QA scenario:
这是一串终端口令,像你站在控制台前,一下下按按钮让机器醒过来。
- 这一句像在终端上按下启动钮:“pnpm openclaw qa discord \”。它会让电脑去请求、安装或者把东西搭起来。
- 这一行“--scenario discord-status-reactions-tool-only \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“--provider-mode live-frontier \”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
pnpm openclaw qa discord \
--scenario discord-status-reactions-tool-only \
--provider-mode live-frontier \
--model openai/gpt-5.4 \
--alt-model openai/gpt-5.4 \
--fast \
--output-dir .artifacts/qa-e2e/mantis/discord-status-reactions-candidate
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:It 设置说明书ures the SUT with always-on guild handling, visibleReplies: "小纸条消息_工具小帮手", ackReaction: "👀", and explicit stat…。
It configures the SUT with always-on guild handling, visibleReplies: "message_tool", ackReaction: "👀", and explicit status reactions. The oracle polls the real Discord triggering message and expects the observed sequence 👀 -> 🤔 -> 👍. Artifacts include discord-qa-reaction-timelines.json, discord-status-reactions-tool-only-timeline.html, and discord-status-reactions-tool-only-timeline.png.
第 8 站
Existing QA pieces
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis should build on the existing private QA stack instead of starting from zero: SUT bots. artifacts under .artifact…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis should build on the existing private QA stack instead of starting from zero:。
Mantis should build on the existing private QA stack instead of starting from zero:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:SUT bots.
SUT bots.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:artifacts under .artifacts/qa-e2e/.
artifacts under .artifacts/qa-e2e/.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:transport credentials.
transport credentials.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:headless managed profiles, and remote CDP profiles.
headless managed profiles, and remote CDP profiles.
这一串条目别硬背,把它当成“Existing QA pieces”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:pnpm openclaw qa discord already runs a l…、The live transport runner already writes…、Convex credential leases already provide…、The browser control service already suppo…。
pnpm openclaw qa discordalready runs a live Discord lane with driver and- The live transport runner already writes reports and observed-message
- Convex credential leases already provide exclusive access to shared live
- The browser control service already supports screenshots, snapshots,
- QA Lab already has a debugger UI and bus for transport-shaped testing.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first Mantis implementation can be a thin before/after runner over these pieces, plus one visual evidence layer.
The first Mantis implementation can be a thin before/after runner over these pieces, plus one visual evidence layer.
第 9 站
Evidence 聪明脑袋模型
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Every run writes a stable artifact directory: mantis-summary.json should be the machine-readable source of truth. The M…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Every run writes a stable artifact directory:。
Every run writes a stable artifact directory:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“.artifacts/qa-e2e/mantis/<run-id>/”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“mantis-report.md”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这一行“mantis-summary.json”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
.artifacts/qa-e2e/mantis/<run-id>/
mantis-report.md
mantis-summary.json
baseline/
summary.json
discord-message.json
screenshot-message-row.png
gateway-debug/
candidate/
summary.json
discord-message.json
screenshot-message-row.png
gateway-debug/
comparison.json
run.log
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:mantis-summary.json should be the machine-readable source of truth. The Markdown report is for PR comments and human re…。
mantis-summary.json should be the machine-readable source of truth. The Markdown report is for PR comments and human review.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The summary must include:。
The summary must include:
这一串条目别硬背,把它当成“Evidence model”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:refs and SHAs tested、transport and scenario id、machine provider and machine id or lease…、credential source without secret values。
- refs and SHAs tested
- transport and scenario id
- machine provider and machine id or lease id
- credential source without secret values
- baseline result
- candidate result
- whether the bug reproduced on baseline
- whether the candidate fixed it
- artifact paths
- sanitized setup or cleanup issues
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Screenshots are evidence, not secrets. They still need redaction discipline: private 消息通道 names, user names, or 小纸条消息 c…。
Screenshots are evidence, not secrets. They still need redaction discipline: private channel names, user names, or message content may appear. For public PRs, prefer GitHub Actions artifact links over inline images until the redaction story is stronger.
第 10 站
Browser and VNC
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The browser lane has two modes: Playwright or OpenClaw browser control captures screenshots. or visual debugging needs…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The browser lane has two modes:。
The browser lane has two modes:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Playwright or OpenClaw browser control captures screenshots.
Playwright or OpenClaw browser control captures screenshots.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:or visual debugging needs a human.
or visual debugging needs a human.
这一串条目别硬背,把它当成“Browser and VNC”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:**Headless 自动小闹钟**: default for CI. Chrom…、**VNC rescue**: enabled on the same VM wh…。
- **Headless automation**: default for CI. Chrome runs with CDP enabled, and
- **VNC rescue**: enabled on the same VM when login, MFA, Discord anti-automation,
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The Discord ob大房子服务器 browser profile should be persistent enough to avoid logging in for every run, but isolated from p…。
The Discord observer browser profile should be persistent enough to avoid logging in for every run, but isolated from personal browser state. A profile belongs to the Mantis machine pool, not to a developer laptop.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:When Mantis gets stuck, it posts a Discord status 小纸条消息 with:。
When Mantis gets stuck, it posts a Discord status message with:
这一串条目别硬背,把它当成“Browser and VNC”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:run id、scenario id、machine provider、artifact directory。
- run id
- scenario id
- machine provider
- artifact directory
- VNC or noVNC connection instructions if available
- short blocker text
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The first private deployment can post these 小纸条消息s to the existing operator 消息通道 and move to a dedicated Mantis 消息通道 la…。
The first private deployment can post these messages to the existing operator channel and move to a dedicated Mantis channel later.
第 11 站
Machines
这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。
这一节更像安装或配置步骤,重点不是概念,而是“按什么顺序做才不会卡住”。
很多文档看起来长,其实是在防你漏掉前置条件。
真正照做时,先找前置条件,再找必填项,最后看验证方法。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis should prefer AWS through Crabbox for the first remote implementation. Crabbox gives us warmed machines, lease t…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis should prefer AWS through Crabbox for the first remote implementation. Crabbox gives us warmed machines, lease t…。
Mantis should prefer AWS through Crabbox for the first remote implementation. Crabbox gives us warmed machines, lease tracking, hydration, logs, results, and cleanup. If AWS capacity is too slow or unavailable, add a Hetzner provider behind the same machine interface.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Minimum VM requirements:。
Minimum VM requirements:
这一串条目别硬背,把它当成“Machines”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Linux with a desktop-capable Chrome or Ch…、CDP access for browser 自动小闹钟、VNC or noVNC for rescue、Node 22 and pnpm。
- Linux with a desktop-capable Chrome or Chromium install
- CDP access for browser automation
- VNC or noVNC for rescue
- Node 22 and pnpm
- OpenClaw checkout and dependency cache
- Playwright Chromium browser cache when Playwright is used
- enough CPU and memory for one OpenClaw Gateway, one browser, and one model run
- outbound access to Discord, GitHub, model providers, and the credential broker
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The VM should not keep long-lived raw secrets outside the expected credential or browser profile stores.
The VM should not keep long-lived raw secrets outside the expected credential or browser profile stores.
第 12 站
Secrets
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Secrets live in GitHub organization or repository secrets for remote runs, and in a local operator-controlled secret fi…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Secrets live in GitHub organization or repository secrets for remote runs, and in a local operator-controlled secret fi…。
Secrets live in GitHub organization or repository secrets for remote runs, and in a local operator-controlled secret file for local runs.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Recommended secret names:。
Recommended secret names:
这一串条目别硬背,把它当成“Secrets”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:OPENCLAW_QA_DISCORD_MANTIS_BOT_TOKEN、OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN、OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN、OPENCLAW_QA_DISCORD_GUILD_ID。
OPENCLAW_QA_DISCORD_MANTIS_BOT_TOKENOPENCLAW_QA_DISCORD_DRIVER_BOT_TOKENOPENCLAW_QA_DISCORD_SUT_BOT_TOKENOPENCLAW_QA_DISCORD_GUILD_IDOPENCLAW_QA_DISCORD_CHANNEL_IDOPENCLAW_QA_DISCORD_NOTIFY_CHANNEL_IDOPENCLAW_QA_REDACT_PUBLIC_METADATA=1for public GitHub artifact uploadsOPENCLAW_QA_CONVEX_SITE_URLOPENCLAW_QA_CONVEX_SECRET_CIOPENCLAW_QA_MANTIS_CRABBOX_COORDINATOROPENCLAW_QA_MANTIS_CRABBOX_COORDINATOR_TOKEN
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Long term, the Convex credential pool should remain the normal source for live transport credentials. GitHub secrets bo…。
Long term, the Convex credential pool should remain the normal source for live transport credentials. GitHub secrets bootstrap the broker and fallback lanes. The Discord status-reactions workflow maps the Mantis Crabbox secrets back to the CRABBOX_COORDINATOR and CRABBOX_COORDINATOR_TOKEN environment variables that the Crabbox CLI expects. The plain CRABBOX_* GitHub secret names remain accepted as a compatibility fallback.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The Mantis runner must never print:。
The Mantis runner must never print:
这一串条目别硬背,把它当成“Secrets”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Discord bot tokens、provider 对话接口 keys、browser cookies、auth profile contents。
- Discord bot tokens
- provider API keys
- browser cookies
- auth profile contents
- VNC passwords
- raw credential payloads
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Public artifact uploads should also redact Discord target metadata such as bot, guild, 消息通道, and 小纸条消息 ids. The GitHub…。
Public artifact uploads should also redact Discord target metadata such as bot, guild, channel, and message ids. The GitHub smoke workflow enables OPENCLAW_QA_REDACT_PUBLIC_METADATA=1 for this reason.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:If a token is accidentally pasted into an issue, PR, chat, or log, rotate it after the new secret has been stored.
If a token is accidentally pasted into an issue, PR, chat, or log, rotate it after the new secret has been stored.
第 13 站
GitHub artifacts and PR comments
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis workflows should upload the full evidence bundle as a short-lived Actions artifact. When the workflow is run for…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Mantis workflows should upload the full evidence bundle as a short-lived Actions artifact. When the workflow is run for…。
Mantis workflows should upload the full evidence bundle as a short-lived Actions artifact. When the workflow is run for a bug report or fix PR, it should also publish redacted inline media to the configured Mantis R2/S3 bucket and upsert a comment on that bug or fix PR with inline before/after screenshots. Do not post the primary proof only on a generic QA automation PR. Raw logs, observed messages, and other bulky evidence stay in the Actions artifact.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Production workflows should post those comments with the Mantis GitHub App, not with github-actions[bot]. Store the app…。
Production workflows should post those comments with the Mantis GitHub App, not with github-actions[bot]. Store the app id and private key as MANTIS_GITHUB_APP_ID and MANTIS_GITHUB_APP_PRIVATE_KEY GitHub Actions secrets. The workflow uses a hidden marker as the upsert key, updates that comment when the token can edit it, and creates a new Mantis-owned comment when an older bot-owned marker cannot be edited.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:The PR comment should be short and visual:。
The PR comment should be short and visual:
这段像放在桌上的操作卡,谁来照着做,现场就会动起来。
- 这一行“Mantis Discord Status Reactions QA”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
- 这里在给“Summary”挂牌子,告诉系统它该指向“Mantis reran the reported Discord status-reaction bug against the known”。
- 这一行“bad baseline and the candidate fix. The baseline reproduced the bug, while the”是在给电脑递一张小纸条,告诉它眼下该做哪一步。
Mantis Discord Status Reactions QA
Summary: Mantis reran the reported Discord status-reaction bug against the known
bad baseline and the candidate fix. The baseline reproduced the bug, while the
candidate showed the expected queued -> thinking -> done sequence.
- Scenario: `discord-status-reactions-tool-only`
- Run: <workflow run link>
- Artifact: <artifact link>
- Baseline: `<status>` at `<sha>`
- Candidate: `<status>` at `<sha>`
| Baseline | Candidate |
| ------------------- | ------------------- |
| <inline screenshot> | <inline screenshot> |
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:When the run fails because the harness failed, the comment must say that instead of implying the candidate failed.
When the run fails because the harness failed, the comment must say that instead of implying the candidate failed.
第 14 站
Private deployment notes
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:A private deployment may already have a Mantis Discord application. Reuse that application instead of creating another…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:A private deployment may already have a Mantis Discord application. Reuse that application instead of creating another…。
A private deployment may already have a Mantis Discord application. Reuse that application instead of creating another app when it has the right bot permissions and can be safely rotated.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Set the initial operator notification 消息通道 through secrets or deployment 设置说明书uration. It can point at an existing main…。
Set the initial operator notification channel through secrets or deployment configuration. It can point at an existing maintainer or operations channel first, then move to a dedicated Mantis channel once one exists.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Do not put guild ids, 消息通道 ids, bot tokens, browser cookies, or VNC 秘密口令s in this document. Store them in GitHub secret…。
Do not put guild ids, channel ids, bot tokens, browser cookies, or VNC passwords in this document. Store them in GitHub secrets, the credential broker, or the operator's local secret store.
第 15 站
Adding a scenario
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这一节在讲规则和边界:什么默认允许、什么必须显式打开、什么被禁止。
这种内容决定了 OpenClaw 是“能做”还是“现在还不能做”,读懂它比记术语更重要。
你可以把这一节当成权限说明书,真正配置时优先盯住 default、required、allow、deny 这几个词。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:A Mantis scenario should declare: Scenarios should prefer small, typed oracles: Vision checks should be additive. If a…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:A Mantis scenario should declare:。
A Mantis scenario should declare:
这一串条目别硬背,把它当成“Adding a scenario”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:id and title、transport、required credentials、baseline ref policy。
- id and title
- transport
- required credentials
- baseline ref policy
- candidate ref policy
- OpenClaw config patch
- setup steps
- stimulus
- expected baseline oracle
- expected candidate oracle
- visual capture targets
- timeout budget
- cleanup steps
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Scenarios should prefer small, typed oracles:。
Scenarios should prefer small, typed oracles:
这一串条目别硬背,把它当成“Adding a scenario”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Discord reaction state for reaction bugs、Discord 小纸条消息 references for threading bu…、Slack thread ts and reaction 对话接口 state f…、email 小纸条消息 ids and headers for email bugs。
- Discord reaction state for reaction bugs
- Discord message references for threading bugs
- Slack thread ts and reaction API state for Slack bugs
- email message ids and headers for email bugs
- browser screenshots when UI is the only reliable observable
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Vision checks should be additive. If a platform 对话接口 can prove the bug, use the 对话接口 as the pass/fail oracle and keep s…。
Vision checks should be additive. If a platform API can prove the bug, use the API as the pass/fail oracle and keep screenshots for human confidence.
第 16 站
Provider expansion
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:After Discord, the same runner can add: enough. Each transport should have one cheap smoke scenario and one or more bug…。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:After Discord, the same runner can add:。
After Discord, the same runner can add:
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:enough.
enough.
这一串条目别硬背,把它当成“Provider expansion”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Slack: reactions, threads, app mentions,…、Email: Gmail auth and 小纸条消息 threading usi…、WhatsApp: QR login, re-identification, 小纸…、Telegram: 大家一起的房间 mention gating, 魔法口令s,…。
- Slack: reactions, threads, app mentions, modals, file uploads.
- Email: Gmail auth and message threading using
gogwhere connectors are not - WhatsApp: QR login, re-identification, message delivery, media, reactions.
- Telegram: group mention gating, commands, reactions where available.
- Matrix: encrypted rooms, thread or reply relations, restart resume.
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:Each transport should have one cheap smoke scenario and one or more bug-class scenarios. Expensive visual scenarios sho…。
Each transport should have one cheap smoke scenario and one or more bug-class scenarios. Expensive visual scenarios should stay opt-in.
第 17 站
Open questions
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
这一节在讲一类能力是怎么工作的:它能做什么、不能做什么、适合在什么场景下调用。
你理解的是能力边界,不只是功能名字。
如果这节里同时出现命令、配置和例子,优先先看例子,再回头看配置。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:existing Mantis bot is reused? or only bot-readable REST evidence for the first phase? maintainer 魔法口令? ---。
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:existing Mantis bot is reused?
existing Mantis bot is reused?
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:or only bot-readable REST evidence for the first phase?
or only bot-readable REST evidence for the first phase?
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:maintainer 魔法口令?
maintainer command?
这一串条目别硬背,把它当成“Open questions”门口贴出来的几张便签就行。它们在提醒你先备好什么、别漏掉什么、哪里最容易走错:Which Discord bot should be the driver, a…、Should the ob大房子服务器 browser login use a h…、How long should GitHub retain Mantis arti…、When should ClawSweeper automatically rec…。
- Which Discord bot should be the driver, and which should be the SUT, when the
- Should the observer browser login use a human Discord account, a test account,
- How long should GitHub retain Mantis artifacts for PRs?
- When should ClawSweeper automatically recommend Mantis instead of waiting for a
- Should screenshots be redacted or cropped before upload for public PRs?
如果把这一段摆成一个小场景,你会看到几样东西正在互相打招呼、拦路或者传东西。别急着记名词,先抓住它此刻到底在发生什么:---。
---
AdSense 连接验证已经放在页面头部;广告单元等站点审批通过后再启用。
google-adsense-account: ca-pub-3833673520933536