[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698T5PV5PG00K72HB00R5HH":3,"skill-same:01M698T5PV5PG00K72HB00R5HH":60},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":42,"ownerHtmlUrl":43,"ownerBlogUrl":42,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M698T5PV5PG00K72HB00R5HH","cloud-image-bake",null,"Bake, select, prove, and safely retire a Cloud Worker image with crabbox and config one-liners.","openclaw\u002Fopenclaw","openclaw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F252820863?v=4","01M698P3FSAZ6B4R928ZF19KPT","01M698PDMDRVH56MV30D253NFP",394352,"MIT","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fcustodian-skills\u002Fcloud-image-bake\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31],"image","cloud image bake","cloud","crabbox","config","select","worker","with","prove","2026-11-10 10:12:30",false,"---\nname: cloud-image-bake\ndescription: Bake, select, prove, and safely retire a Cloud Worker image with crabbox and config one-liners.\n---\n\n# Bake a Cloud Worker image\n\nNever print or persist secret values; provider credentials stay in their stores. Never hand-edit config files on disk — profile changes go through `openclaw config`. Every run ends with the observable Prove result or an exact explanation of why it could not be proven. Snapshots are cheap; unmanaged snapshot sprawl is not. Never delete a provider image without hard operator confirmation.\n\n## Gather\n\n```\nopenclaw config get cloudWorkers --json\ncrabbox config show --json\ncrabbox doctor --provider \u003Cbackend> --json\ncrabbox checkpoint list --json\n```\n\nRecord the current provider, class, image selection, setup command, and the id of the image being superseded. Confirm the requested tooling and a secret-free bake source.\n\n## Mutate\n\nLease from the current profile, install and smoke-test the tooling:\n\n```\ncrabbox warmup --provider \u003Cbackend> --class \u003Cclass> --keep --timing-json\ncrabbox run --provider \u003Cbackend> --id \u003Clease> --no-sync -- bash -lc '\u003Cinstall commands> && \u003Ctool> --version'\n```\n\nSnapshot per backend:\n\n- AWS: `crabbox checkpoint create --provider aws --id \u003Clease> --mode native --strategy image --wait`, inspect it, then `crabbox image promote \u003Cami-id>` with the matching scope. AWS image selection is owned by the promote catalog.\n- Hetzner: `hcloud image create --type snapshot --server \u003Cserver-id> --description \u003Cname>`; there is no crabbox create\u002Fpromote lifecycle for Hetzner yet, so record the snapshot id explicitly.\n- Firecracker: rebuild and republish the rootfs template through the host's template pipeline; do not snapshot a running microVM as a substitute.\n\nPoint the profile at the new selection only through validated config writes — confirm the exact key first, dry-run, then write (example for a backend whose settings carry an image field):\n\n```\nopenclaw config schema --json | jq '.properties.cloudWorkers'\nopenclaw config set cloudWorkers.profiles.\u003Cprofile>.settings.\u003CimageKey> \"\u003Cimage-id>\" --dry-run\nopenclaw config set cloudWorkers.profiles.\u003Cprofile>.settings.\u003CimageKey> \"\u003Cimage-id>\"\n```\n\nThe bundled crabbox profile currently has no `image` settings key — AWS selection lives in `crabbox image promote`; never invent a config field. Preserve the old image until proof passes.\n\n## Repair\n\n```\nopenclaw doctor --lint\ncrabbox doctor --provider \u003Cbackend> --json\n```\n\n`doctor --lint` can exit `1` for findings: read the report and continue the remaining checks. Ordinary `doctor` and `doctor --non-interactive` can write config\u002Fstate; do not use them for diagnosis before approval. Apply `openclaw doctor --fix --non-interactive` only after explicit approval, then re-read the profile and provider inventory.\n\n## Prove\n\nLease once from the new image and verify the baked tooling is present and fast:\n\n```\ncrabbox warmup --provider \u003Cbackend> --class \u003Cclass> --timing-json\ncrabbox run --provider \u003Cbackend> --id \u003Clease> --no-sync -- bash -lc '\u003Ctool> --version'\ncrabbox stop --provider \u003Cbackend> --id \u003Clease>\n```\n\nRecord warmup total and compare against the pre-bake timing. Then confirm the OpenClaw path end to end: dispatch one session to the profile from a client (Cloud destination) and verify the placement reaches active. If any step fails, roll back the image selection and report the exact blocker.\n\n## Report\n\nReport the profile, backend, new and previous image ids, tooling smoke result, timed warmup before\u002Fafter, and rollback state. Only after successful proof, show the exact deletion target and get hard operator confirmation, then delete only that superseded snapshot (`crabbox image delete \u003Cid>` or `hcloud image delete \u003Cid>`) and verify it is gone. Without confirmation, leave it intact and report cleanup pending.\n\nFurther reference: https:\u002F\u002Fdocs.openclaw.ai\u002Fgateway\u002Fcloud-workers\n","# Bake a Cloud Worker image\n\nNever print or persist secret values; provider credentials stay in their stores. Never hand-edit config files on disk — profile changes go through `openclaw config`. Every run ends with the observable Prove result or an exact explanation of why it could not be proven. Snapshots are cheap; unmanaged snapshot sprawl is not. Never delete a provider image without hard operator confirmation.\n\n## Gather\n\n```\nopenclaw config get cloudWorkers --json\ncrabbox config show --json\ncrabbox doctor --provider \u003Cbackend> --json\ncrabbox checkpoint list --json\n```\n\nRecord the current provider, class, image selection, setup command, and the id of the image being superseded. Confirm the requested tooling and a secret-free bake source.\n\n## Mutate\n\nLease from the current profile, install and smoke-test the tooling:\n\n```\ncrabbox warmup --provider \u003Cbackend> --class \u003Cclass> --keep --timing-json\ncrabbox run --provider \u003Cbackend> --id \u003Clease> --no-sync -- bash -lc '\u003Cinstall commands> && \u003Ctool> --version'\n```\n\nSnapshot per backend:\n\n- AWS: `crabbox checkpoint create --provider aws --id \u003Clease> --mode native --strategy image --wait`, inspect it, then `crabbox image promote \u003Cami-id>` with the matching scope. AWS image selection is owned by the promote catalog.\n- Hetzner: `hcloud image create --type snapshot --server \u003Cserver-id> --description \u003Cname>`; there is no crabbox create\u002Fpromote lifecycle for Hetzner yet, so record the snapshot id explicitly.\n- Firecracker: rebuild and republish the rootfs template through the host's template pipeline; do not snapshot a running microVM as a substitute.\n\nPoint the profile at the new selection only through validated config writes — confirm the exact key first, dry-run, then write (example for a backend whose settings carry an image field):\n\n```\nopenclaw config schema --json | jq '.properties.cloudWorkers'\nopenclaw config set cloudWorkers.profiles.\u003Cprofile>.settings.\u003CimageKey> \"\u003Cimage-id>\" --dry-run\nopenclaw config set cloudWorkers.profiles.\u003Cprofile>.settings.\u003CimageKey> \"\u003Cimage-id>\"\n```\n\nThe bundled crabbox profile currently has no `image` settings key — AWS selection lives in `crabbox image promote`; never invent a config field. Preserve the old image until proof passes.\n\n## Repair\n\n```\nopenclaw doctor --lint\ncrabbox doctor --provider \u003Cbackend> --json\n```\n\n`doctor --lint` can exit `1` for findings: read the report and continue the remaining checks. Ordinary `doctor` and `doctor --non-interactive` can write config\u002Fstate; do not use them for diagnosis before approval. Apply `openclaw doctor --fix --non-interactive` only after explicit approval, then re-read the profile and provider inventory.\n\n## Prove\n\nLease once from the new image and verify the baked tooling is present and fast:\n\n```\ncrabbox warmup --provider \u003Cbackend> --class \u003Cclass> --timing-json\ncrabbox run --provider \u003Cbackend> --id \u003Clease> --no-sync -- bash -lc '\u003Ctool> --version'\ncrabbox stop --provider \u003Cbackend> --id \u003Clease>\n```\n\nRecord warmup total and compare against the pre-bake timing. Then confirm the OpenClaw path end to end: dispatch one session to the profile from a client (Cloud destination) and verify the placement reaches active. If any step fails, roll back the image selection and report the exact blocker.\n\n## Report\n\nReport the profile, backend, new and previous image ids, tooling smoke result, timed warmup before\u002Fafter, and rollback state. Only after successful proof, show the exact deletion target and get hard operator confirmation, then delete only that superseded snapshot (`crabbox image delete \u003Cid>` or `hcloud image delete \u003Cid>`) and verify it is gone. Without confirmation, leave it intact and report cleanup pending.\n\nFurther reference: https:\u002F\u002Fdocs.openclaw.ai\u002Fgateway\u002Fcloud-workers\n",{"name":5,"description":7},"main","f1c93577085244aa96aa87b53a2df9b59d293bd7","custodian-skills\u002Fcloud-image-bake",82861,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw","https:\u002F\u002Fopenclaw.ai","https:\u002F\u002Fgithub.com\u002Fopenclaw","Your personal, open source AI assistant.","2026-11-12 03:01:25",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add openclaw\u002Fopenclaw --skill cloud-image-bake",{"tool":52,"command":53},"bunx","bunx skills add openclaw\u002Fopenclaw --skill cloud-image-bake",{"tool":55,"command":56},"pnpm","pnpm dlx skills add openclaw\u002Fopenclaw --skill cloud-image-bake","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fcustodian-skills\u002Fcloud-image-bake\u002FSKILL.md",true,[],[61,67,90,107,129,150],{"skillNo":62,"name":63,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":32},"01M698VP84FNM6G9MR1HPX7MF7","lobster","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fextensions\u002Flobster\u002FSKILL.md",[],[63],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":73,"publishedAt":32},"01M698YY8QGQ7S8TJNKJG6VTPH","xurl","xurl CLI for authenticated X posts, replies, reads\u002Fsearch, DMs, media upload, followers, auth status, or raw v2 API calls.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fxurl\u002FSKILL.md",[],[69,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89],"for","api","calls","replies","posts","upload","tap","install","brew","node","Media","search","npm","status","auth","cli",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":32},"01M698YWT1CJ0WK88WB909R9RT","weather","Current weather and forecasts with web_fetch, falling back to wttr.in curl for locations, rain, temperature, travel planning.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fweather\u002FSKILL.md",[],[92,97,98,81,99,82,100,101,102,103,104,105,74,106,30],"travel planning","travel","fetch","curl","https","help","planning","web","back","temperature",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":118,"publishedAt":32},"01M698YV2Q0R0JJKAWGFS21K0N","visualize","Create inline visuals for code and explanations, or author persistent OpenClaw dashboard widgets with show_widget.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Fvisualize\u002FSKILL.md",[113],{"categoryNo":114,"categoryName":115,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[109,119,120,121,122,74,30,123,124,125,126,127,9,128],"widgets","openclaw dashboard","author","inline","show","code","create","visuals","dashboard","widget",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":141,"publishedAt":32},"01M698YS2TRJH9ENG28HD9CD87","trello","Manage Trello boards, lists, and cards via the Trello REST API.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftrello\u002FSKILL.md",[135,138],{"categoryNo":136,"categoryName":137,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":139,"categoryName":140,"taxonomyType":116,"taxonomyTypeDesc":117},"01JBSEEDCAT000000000000030","开发工程师",[131,101,25,142,143,144,145,146,81,82,147,100,75,148,149],"manage","via","rest api","token","atlassian","jq","REST","developer",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":32},"01M698YQ9Q3M4W78EWV2KSCSVW","tmux","Control tmux sessions\u002Fpanes for interactive CLIs: list, capture output, send keys, paste text, monitor prompts.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fopenclaw\u002Fblob\u002Fmain\u002Fskills\u002Ftmux\u002FSKILL.md",[],[152,81,157,158,74,159,160,161,162,163,164,165,82,166,167,168,169,170,171],"send","darwin","keys","paste","output","control","prompts","interactive","list","capture","panes","text","monitor","sessions","linux"]