[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698RR7FCM03FP4QX4D38ECP":3,"skill-same:01M698RR7FCM03FP4QX4D38ECP":69},{"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":17,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":6,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M698RR7FCM03FP4QX4D38ECP","team-handoff",null,"Hand local work to a shared OpenClaw Gateway: start a worktree session there as yourself in one request, seeded with a handoff, and get the session URL back.","openclaw\u002Fagent-skills","openclaw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F252820863?v=4","01M698P3FSAZ6B4R928ZF19KPT","01M698R9TBKA3SKB6WVC50J9NJ",1118,"MIT","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fteam-handoff\u002FSKILL.md",[],[18,19,20,21,9,22,23,24,25,26,27,28,29,30,31,32,33,34],"handoff","team handoff","team","request","hand","URL","with","as","get","shared","local","back","session","work","start","gateway","worktree","2026-11-10 10:12:30",false,"---\nname: team-handoff\ndescription: \"Hand local work to a shared OpenClaw Gateway: start a worktree session there as yourself in one request, seeded with a handoff, and get the session URL back.\"\n---\n\n# Team Handoff\n\nUse when the user says \"open a session on the team server for this\", \"hand this\noff to \u003Cteam agent>\", or \"summarize this for a new agent and start it on\n\u003Cgateway>\", and the target is a shared OpenClaw Gateway behind an identity-aware\nproxy (Cloudflare Access).\n\nOne Gateway request, as the operator's own identity. No browser automation, no\nSSH, no polling.\n\nResolve `HANDOFF_SKILL_DIR` to the directory containing this `SKILL.md`.\nInvoke that installation without changing the consumer's working directory.\n\n## Setup (once per machine)\n\n1. Operator config, outside any repo:\n   `${XDG_CONFIG_HOME:-~\u002F.config}\u002Fopenclaw\u002Fteam-handoff.env`\n\n   ```sh\n   OPENCLAW_HANDOFF_URL=https:\u002F\u002Fgateway.example      # the shared Gateway's public origin\n   OPENCLAW_HANDOFF_AGENT=main                        # default agent id on that Gateway\n   OPENCLAW_HANDOFF_PROJECT=example-project           # default projects.list id\n   # optional:\n   # OPENCLAW_HANDOFF_CLI=\u002Fpath\u002Fto\u002Fopenclaw           # installed OpenClaw CLI (default: openclaw on PATH)\n   # OPENCLAW_HANDOFF_PROFILE_DIR=~\u002F.openclaw\u002Fprofiles\u002Fteam\n   # OPENCLAW_HANDOFF_SSH_HOST=gateway-host           # operator fallback only; see below\n   ```\n\n2. Isolated CLI profile so the local Gateway config is never touched. The script\n   writes it on first `probe` when missing: `OPENCLAW_STATE_DIR` and\n   `OPENCLAW_CONFIG_PATH` point at the profile dir, whose `openclaw.json` holds\n   only `gateway.mode: \"remote\"`, `gateway.remote.url`, and an `exec` secret\n   provider that runs `cloudflared access token -app=\u003Curl>` for the\n   `Cf-Access-Token` header (`gateway.remote.edgeAuth`, see the OpenClaw\n   docs page \"Remote access\", section \"Gateway behind an identity-aware proxy\").\n   The provider `command` must be the real `cloudflared` binary, not a symlink.\n\n3. The human logs in once per Access session lifetime (agents cannot):\n\n   ```sh\n   cloudflared access login https:\u002F\u002Fgateway.example\n   ```\n\n   `probe` prints `ok` when the chain works. `Exec provider \"cloudflare-access\"\n   exited with code 1` or an HTTP 302 on upgrade means the login lapsed: ask the\n   human to run it again; do not switch to the SSH fallback on your own.\n\nWhy there is no token to mint: with `gateway.auth.mode: \"trusted-proxy\"` the\nproxy authenticates the user and the Gateway maps the identity header to scopes;\nfirst connection auto-pairs a CLI device with the proxy's `deviceAutoApprove`\nscopes, which cover `sessions.create`.\n\n## Use\n\n```sh\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" probe\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" create \\\n  --label \"Installed-package entry cap durable fix\" \\\n  --name tree-cap-fix --base origin\u002Fmain \\\n  --message-file \u002Fpath\u002Fto\u002Fhandoff.md\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" status \u003CsessionKey>\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" archive \u003CsessionKey> \u003CsessionId>\n```\n\n`create` prints `url:` in the Control UI form\n`\u003Corigin>\u002Fchat\u002F\u003Cagent>\u002F\u003Clabel-slug>-\u003Csession-key-uuid-without-dashes>`, plus the\nsession key and run id. Hand the human that URL. Creation returns before the\nworktree is prepared; `running` with `worktree: null` right after is normal, and\nthe agent's first turn starts once the checkout binds. Read status once; do not\nloop.\n\n## Payload\n\n- Branch first. Push the work, pass `--base \u003Cbranch>`, keep the long handoff in\n  the branch (for example `.openclaw\u002Fhandoff.md`); the message is then three\n  lines: what the branch is, what to do first, what not to do. Local files are\n  unreachable from the Gateway; commit them or summarize the numbers.\n- Without a branch, the whole handoff goes in `--message-file`: a one-line title\n  first (it becomes the session title and URL slug), then goal, verified facts\n  with numbers, owner files, the agreed plan and order, proof expectations, and\n  explicit non-goals.\n- Name scope boundaries when a local session keeps part of the work, so two\n  agents do not open duplicate PRs.\n\n## Failure modes\n\n- `managed worktree allocation lease ...\u002Fcapacity was lost`: the Gateway lost\n  its worktree capacity lease during a slow project refetch. A retry in the same\n  session then fails with `branch already exists: openclaw\u002F\u003Cname>` because the\n  failed attempt leaked its branch. Create a new session with a different\n  `--name`; archive the dead one.\n- `chat.send` requires `idempotencyKey`; `sessions.patch` lifecycle changes\n  require `expectedSessionId`.\n\n## SSH operator fallback\n\n`--via ssh` runs the same `sessions.create` on the Gateway host as the Gateway's\nservice user (`OPENCLAW_HANDOFF_SSH_HOST`, `OPENCLAW_HANDOFF_REMOTE_CLI`,\n`OPENCLAW_HANDOFF_REMOTE_USER`). The session is then owned by the operator\nidentity, not the human. Use only when the human asks for it; never change\nGateway config or restart anything from this path.\n\n## Don'ts\n\n- Do not drive the Gateway's web UI from an agent browser or sign in to the\n  identity provider.\n- Do not point the machine's primary `openclaw.json` at the shared Gateway.\n- Do not poll session history in a loop.\n","# Team Handoff\n\nUse when the user says \"open a session on the team server for this\", \"hand this\noff to \u003Cteam agent>\", or \"summarize this for a new agent and start it on\n\u003Cgateway>\", and the target is a shared OpenClaw Gateway behind an identity-aware\nproxy (Cloudflare Access).\n\nOne Gateway request, as the operator's own identity. No browser automation, no\nSSH, no polling.\n\nResolve `HANDOFF_SKILL_DIR` to the directory containing this `SKILL.md`.\nInvoke that installation without changing the consumer's working directory.\n\n## Setup (once per machine)\n\n1. Operator config, outside any repo:\n   `${XDG_CONFIG_HOME:-~\u002F.config}\u002Fopenclaw\u002Fteam-handoff.env`\n\n   ```sh\n   OPENCLAW_HANDOFF_URL=https:\u002F\u002Fgateway.example      # the shared Gateway's public origin\n   OPENCLAW_HANDOFF_AGENT=main                        # default agent id on that Gateway\n   OPENCLAW_HANDOFF_PROJECT=example-project           # default projects.list id\n   # optional:\n   # OPENCLAW_HANDOFF_CLI=\u002Fpath\u002Fto\u002Fopenclaw           # installed OpenClaw CLI (default: openclaw on PATH)\n   # OPENCLAW_HANDOFF_PROFILE_DIR=~\u002F.openclaw\u002Fprofiles\u002Fteam\n   # OPENCLAW_HANDOFF_SSH_HOST=gateway-host           # operator fallback only; see below\n   ```\n\n2. Isolated CLI profile so the local Gateway config is never touched. The script\n   writes it on first `probe` when missing: `OPENCLAW_STATE_DIR` and\n   `OPENCLAW_CONFIG_PATH` point at the profile dir, whose `openclaw.json` holds\n   only `gateway.mode: \"remote\"`, `gateway.remote.url`, and an `exec` secret\n   provider that runs `cloudflared access token -app=\u003Curl>` for the\n   `Cf-Access-Token` header (`gateway.remote.edgeAuth`, see the OpenClaw\n   docs page \"Remote access\", section \"Gateway behind an identity-aware proxy\").\n   The provider `command` must be the real `cloudflared` binary, not a symlink.\n\n3. The human logs in once per Access session lifetime (agents cannot):\n\n   ```sh\n   cloudflared access login https:\u002F\u002Fgateway.example\n   ```\n\n   `probe` prints `ok` when the chain works. `Exec provider \"cloudflare-access\"\n   exited with code 1` or an HTTP 302 on upgrade means the login lapsed: ask the\n   human to run it again; do not switch to the SSH fallback on your own.\n\nWhy there is no token to mint: with `gateway.auth.mode: \"trusted-proxy\"` the\nproxy authenticates the user and the Gateway maps the identity header to scopes;\nfirst connection auto-pairs a CLI device with the proxy's `deviceAutoApprove`\nscopes, which cover `sessions.create`.\n\n## Use\n\n```sh\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" probe\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" create \\\n  --label \"Installed-package entry cap durable fix\" \\\n  --name tree-cap-fix --base origin\u002Fmain \\\n  --message-file \u002Fpath\u002Fto\u002Fhandoff.md\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" status \u003CsessionKey>\nbash \"$HANDOFF_SKILL_DIR\u002Fscripts\u002Fteam-handoff.sh\" archive \u003CsessionKey> \u003CsessionId>\n```\n\n`create` prints `url:` in the Control UI form\n`\u003Corigin>\u002Fchat\u002F\u003Cagent>\u002F\u003Clabel-slug>-\u003Csession-key-uuid-without-dashes>`, plus the\nsession key and run id. Hand the human that URL. Creation returns before the\nworktree is prepared; `running` with `worktree: null` right after is normal, and\nthe agent's first turn starts once the checkout binds. Read status once; do not\nloop.\n\n## Payload\n\n- Branch first. Push the work, pass `--base \u003Cbranch>`, keep the long handoff in\n  the branch (for example `.openclaw\u002Fhandoff.md`); the message is then three\n  lines: what the branch is, what to do first, what not to do. Local files are\n  unreachable from the Gateway; commit them or summarize the numbers.\n- Without a branch, the whole handoff goes in `--message-file`: a one-line title\n  first (it becomes the session title and URL slug), then goal, verified facts\n  with numbers, owner files, the agreed plan and order, proof expectations, and\n  explicit non-goals.\n- Name scope boundaries when a local session keeps part of the work, so two\n  agents do not open duplicate PRs.\n\n## Failure modes\n\n- `managed worktree allocation lease ...\u002Fcapacity was lost`: the Gateway lost\n  its worktree capacity lease during a slow project refetch. A retry in the same\n  session then fails with `branch already exists: openclaw\u002F\u003Cname>` because the\n  failed attempt leaked its branch. Create a new session with a different\n  `--name`; archive the dead one.\n- `chat.send` requires `idempotencyKey`; `sessions.patch` lifecycle changes\n  require `expectedSessionId`.\n\n## SSH operator fallback\n\n`--via ssh` runs the same `sessions.create` on the Gateway host as the Gateway's\nservice user (`OPENCLAW_HANDOFF_SSH_HOST`, `OPENCLAW_HANDOFF_REMOTE_CLI`,\n`OPENCLAW_HANDOFF_REMOTE_USER`). The session is then owned by the operator\nidentity, not the human. Use only when the human asks for it; never change\nGateway config or restart anything from this path.\n\n## Don'ts\n\n- Do not drive the Gateway's web UI from an agent browser or sign in to the\n  identity provider.\n- Do not point the machine's primary `openclaw.json` at the shared Gateway.\n- Do not poll session history in a loop.\n",{"name":5,"description":7},"main","c7cde4a7bc4b419f3f3869390a5e06c341fae07b","skills\u002Fteam-handoff",123,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills","https:\u002F\u002Fgithub.com\u002Fopenclaw","https:\u002F\u002Fopenclaw.ai","Your personal, open source AI assistant.","2026-11-10 17:52:00",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add openclaw\u002Fagent-skills --skill team-handoff",{"tool":55,"command":56},"bunx","bunx skills add openclaw\u002Fagent-skills --skill team-handoff",{"tool":58,"command":59},"pnpm","pnpm dlx skills add openclaw\u002Fagent-skills --skill team-handoff","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fteam-handoff\u002FSKILL.md",true,[63],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"scripts\u002Fteam-handoff.sh","SCRIPT","脚本",9861,"https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fteam-handoff\u002Fscripts\u002Fteam-handoff.sh",[70,89,107,124,145,167],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":35},"01M698RP6WVCYC38YPEECMADB5","session-viewer","Render Codex, Claude Code, OpenClaw, or Pi session JSONL transcripts as a searchable, shareable single-file HTML viewer.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsession-viewer\u002FSKILL.md",[],[77,30,78,79,80,81,82,83,9,84,85,25,86,87,88],"session viewer","viewer","single","html","code","file","transcripts","render","jsonl","single-file","codex","pi",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":35},"01M698RN1Q9WRY11XB9CBEY6JN","readme-standard","House README standard: structure, badge row, tone, per-archetype templates, and verification gates for steipete\u002Fopenclaw repos.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Freadme-standard\u002FSKILL.md",[],[96,97,98,9,99,100,101,102,103,104,105,106],"readme standard","README","standard","verification","structure","for","repos","templates","verification gates","tone","gates",{"skillNo":108,"name":18,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":117,"publishedAt":35},"01M698RM0PA5ZM69GGT4ABAV92","Clipboard-ready handoff prompt for another agent to investigate or continue a task.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fhandoff\u002FSKILL.md",[112],{"categoryNo":113,"categoryName":114,"taxonomyType":115,"taxonomyTypeDesc":116},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[18,118,119,120,121,101,122,123],"continue","clipboard","prompt","task","ready","investigate",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":35},"01M698RJKDRFJJT0755672M39N","crabbox","Crabbox\u002FTestbox remote proof: portable provider routing, untrusted isolation, Linux\u002FmacOS\u002FWindows\u002FWSL2, live E2E, diagnostics, cleanup.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fcrabbox\u002FSKILL.md",[],[126,131,132,133,134,135,136,137,138,139,140,141,142,143,144],"macos","routing","windows","provider","linux","remote","e2e","cleanup","proof","live","diagnostics","isolation","portable","provider routing",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":156,"publishedAt":35},"01M698RHA9XNH7TEX0BKY9SJ0E","behavior-validator","Source-blind user behavior validation against a prewritten contract for apps, CLIs, APIs, and generated artifacts.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbehavior-validator\u002FSKILL.md",[151],{"categoryNo":152,"categoryName":153,"taxonomyType":154,"taxonomyTypeDesc":155},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[157,158,159,101,160,161,162,163,164,165,166],"behavior","behavior validator","validator","validation","contract","generated","source","apps","artifacts","user",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":35},"01M698RFQVT9KDH7HHBGCD6C50","beam","Share a redacted coding session or hand its logical conversation to an authenticated OpenClaw Gateway.","https:\u002F\u002Fgithub.com\u002Fopenclaw\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbeam\u002FSKILL.md",[],[169,30,174,33,175,9,22,176],"coding","conversation","share"]