[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openclaw-openclaw-.agents-skills-parallels-discord-roundtrip":3},{"error":4,"detail":5,"metadata":23,"markdownContent":24,"rawMarkdown":20},false,{"repo_full_name":6,"owner":7,"repo_name":7,"repo_forks":8,"skill_path":9,"repo_stars":10,"name":11,"category_id":12,"description":13,"file_tree":14,"skill_md_content":20,"skill_id":21,"skill_key":22},"openclaw/openclaw","openclaw",62342,".agents/skills/parallels-discord-roundtrip",323486,"parallels-discord-roundtrip",1,"Run the macOS Parallels smoke harness with Discord end-to-end roundtrip verification, including guest send, host verification, host reply, and guest readback.",[15],{"name":16,"path":17,"size":18,"type":19},"SKILL.md",".agents/skills/parallels-discord-roundtrip/SKILL.md",2816,"file","---\nname: parallels-discord-roundtrip\ndescription: Run the macOS Parallels smoke harness with Discord end-to-end roundtrip verification, including guest send, host verification, host reply, and guest readback.\n---\n\n# Parallels Discord Roundtrip\n\nUse when macOS Parallels smoke must prove Discord two-way delivery end to end.\n\n## Goal\n\nCover:\n\n- install on fresh macOS snapshot\n- onboard + gateway health\n- guest `message send` to Discord\n- host sees that message on Discord\n- host posts a new Discord message\n- guest `message read` sees that new message\n\n## Inputs\n\n- host env var with Discord bot token\n- Discord guild ID\n- Discord channel ID\n- `OPENAI_API_KEY`\n\n## Preferred run\n\n```bash\nexport OPENCLAW_PARALLELS_DISCORD_TOKEN=\"$(\n  ssh peters-mac-studio-1 'jq -r \".channels.discord.token\" ~/.openclaw/openclaw.json' | tr -d '\\n'\n)\"\n\npnpm test:parallels:macos \\\n  --discord-token-env OPENCLAW_PARALLELS_DISCORD_TOKEN \\\n  --discord-guild-id 1456350064065904867 \\\n  --discord-channel-id 1456744319972282449 \\\n  --json\n```\n\n## Notes\n\n- Snapshot target: closest to `macOS 26.3.1 fresh`.\n- Snapshot resolver now prefers matching `*-poweroff*` clones when the base hint also matches. That lets the harness reuse disk-only recovery snapshots without passing a longer hint.\n- If Windows/Linux snapshot restore logs show `PET_QUESTION_SNAPSHOT_STATE_INCOMPATIBLE_CPU`, drop the suspended state once, create a `*-poweroff*` replacement snapshot, and rerun. The smoke scripts now auto-start restored power-off snapshots.\n- Harness configures Discord inside the guest; no checked-in token/config.\n- Use the `openclaw` wrapper for guest `message send/read`; `node openclaw.mjs message ...` does not expose the lazy message subcommands the same way.\n- Write `channels.discord.guilds` in one JSON object (`--strict-json`), not dotted `config set channels.discord.guilds.\u003Csnowflake>...` paths; numeric snowflakes get treated like array indexes.\n- Avoid `prlctl enter` / expect for long Discord setup scripts; it line-wraps/corrupts long commands. Use `prlctl exec --current-user /bin/sh -lc ...` for the Discord config phase.\n- Full 3-OS sweeps: the shared build lock is safe in parallel, but snapshot restore is still a Parallels bottleneck. Prefer serialized Windows/Linux restore-heavy reruns if the host is already under load.\n- Harness cleanup deletes the temporary Discord smoke messages at exit.\n- Per-phase logs: `/tmp/openclaw-parallels-smoke.*`\n- Machine summary: pass `--json`\n- If roundtrip flakes, inspect `fresh.discord-roundtrip.log` and `discord-last-readback.json` in the run dir first.\n\n## Pass criteria\n\n- fresh lane or upgrade lane requested passes\n- summary reports `discord=pass` for that lane\n- guest outbound nonce appears in channel history\n- host inbound nonce appears in `openclaw message read` output\n","30df3f07-180f-5390-8409-27bf33dcae64","openclaw-openclaw-.agents-skills-parallels-discord-roundtrip",{"name":11,"description":13},"\u003Ch1>Parallels Discord Roundtrip\u003C/h1>\n\u003Cp>Use when macOS Parallels smoke must prove Discord two-way delivery end to end.\u003C/p>\n\u003Ch2>Goal\u003C/h2>\n\u003Cp>Cover:\u003C/p>\n\u003Cul>\n\u003Cli>install on fresh macOS snapshot\u003C/li>\n\u003Cli>onboard + gateway health\u003C/li>\n\u003Cli>guest \u003Ccode>message send\u003C/code> to Discord\u003C/li>\n\u003Cli>host sees that message on Discord\u003C/li>\n\u003Cli>host posts a new Discord message\u003C/li>\n\u003Cli>guest \u003Ccode>message read\u003C/code> sees that new message\u003C/li>\n\u003C/ul>\n\u003Ch2>Inputs\u003C/h2>\n\u003Cul>\n\u003Cli>host env var with Discord bot token\u003C/li>\n\u003Cli>Discord guild ID\u003C/li>\n\u003Cli>Discord channel ID\u003C/li>\n\u003Cli>\u003Ccode>OPENAI_API_KEY\u003C/code>\u003C/li>\n\u003C/ul>\n\u003Ch2>Preferred run\u003C/h2>\n\u003Cdiv class=\"md-code-block\">\u003Cdiv class=\"md-code-lang\">bash\u003C/div>\u003Cpre>\u003Ccode class=\"hljs language-bash\">\u003Cspan class=\"hljs-built_in\">export\u003C/span> OPENCLAW_PARALLELS_DISCORD_TOKEN=\u003Cspan class=\"hljs-string\">&quot;\u003Cspan class=\"hljs-subst\">$(\n  ssh peters-mac-studio-1 &#x27;jq -r \u003Cspan class=\"hljs-string\">&quot;.channels.discord.token&quot;\u003C/span> ~/.openclaw/openclaw.json&#x27; | tr -d &#x27;\\n&#x27;\n)\u003C/span>&quot;\u003C/span>\n\npnpm \u003Cspan class=\"hljs-built_in\">test\u003C/span>:parallels:macos \\\n  --discord-token-env OPENCLAW_PARALLELS_DISCORD_TOKEN \\\n  --discord-guild-id 1456350064065904867 \\\n  --discord-channel-id 1456744319972282449 \\\n  --json\u003C/code>\u003C/pre>\u003C/div>\u003Ch2>Notes\u003C/h2>\n\u003Cul>\n\u003Cli>Snapshot target: closest to \u003Ccode>macOS 26.3.1 fresh\u003C/code>.\u003C/li>\n\u003Cli>Snapshot resolver now prefers matching \u003Ccode>*-poweroff*\u003C/code> clones when the base hint also matches. That lets the harness reuse disk-only recovery snapshots without passing a longer hint.\u003C/li>\n\u003Cli>If Windows/Linux snapshot restore logs show \u003Ccode>PET_QUESTION_SNAPSHOT_STATE_INCOMPATIBLE_CPU\u003C/code>, drop the suspended state once, create a \u003Ccode>*-poweroff*\u003C/code> replacement snapshot, and rerun. The smoke scripts now auto-start restored power-off snapshots.\u003C/li>\n\u003Cli>Harness configures Discord inside the guest; no checked-in token/config.\u003C/li>\n\u003Cli>Use the \u003Ccode>openclaw\u003C/code> wrapper for guest \u003Ccode>message send/read\u003C/code>; \u003Ccode>node openclaw.mjs message ...\u003C/code> does not expose the lazy message subcommands the same way.\u003C/li>\n\u003Cli>Write \u003Ccode>channels.discord.guilds\u003C/code> in one JSON object (\u003Ccode>--strict-json\u003C/code>), not dotted \u003Ccode>config set channels.discord.guilds.&lt;snowflake&gt;...\u003C/code> paths; numeric snowflakes get treated like array indexes.\u003C/li>\n\u003Cli>Avoid \u003Ccode>prlctl enter\u003C/code> / expect for long Discord setup scripts; it line-wraps/corrupts long commands. Use \u003Ccode>prlctl exec --current-user /bin/sh -lc ...\u003C/code> for the Discord config phase.\u003C/li>\n\u003Cli>Full 3-OS sweeps: the shared build lock is safe in parallel, but snapshot restore is still a Parallels bottleneck. Prefer serialized Windows/Linux restore-heavy reruns if the host is already under load.\u003C/li>\n\u003Cli>Harness cleanup deletes the temporary Discord smoke messages at exit.\u003C/li>\n\u003Cli>Per-phase logs: \u003Ccode>/tmp/openclaw-parallels-smoke.*\u003C/code>\u003C/li>\n\u003Cli>Machine summary: pass \u003Ccode>--json\u003C/code>\u003C/li>\n\u003Cli>If roundtrip flakes, inspect \u003Ccode>fresh.discord-roundtrip.log\u003C/code> and \u003Ccode>discord-last-readback.json\u003C/code> in the run dir first.\u003C/li>\n\u003C/ul>\n\u003Ch2>Pass criteria\u003C/h2>\n\u003Cul>\n\u003Cli>fresh lane or upgrade lane requested passes\u003C/li>\n\u003Cli>summary reports \u003Ccode>discord=pass\u003C/code> for that lane\u003C/li>\n\u003Cli>guest outbound nonce appears in channel history\u003C/li>\n\u003Cli>host inbound nonce appears in \u003Ccode>openclaw message read\u003C/code> output\u003C/li>\n\u003C/ul>\n"]