[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CNCAEKG46V2VFHBED6ASPQ":3,"skill-same:01M6CNCAEKG46V2VFHBED6ASPQ":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":51,"linkOnly":52,"markdownContent":53,"markdownBody":54,"frontMatter":55,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":64,"ownerHtmlUrl":65,"ownerBlogUrl":66,"ownerDescription":67,"updatedAt":68,"install":69,"resources":82},"01M6CNCAEKG46V2VFHBED6ASPQ","handoff",null,"Hand off your in-flight work to ANY other AI coding tool so you can continue exactly where you left off — works in 8+ tools (Claude Code, Codex, OpenCode, Gemini, Antigravity, Cursor, Aider, Cline\u002FRoo, Windsurf). Writes one portable, secret-scrubbed handoff document plus a full diff of your uncommitted edits, then prints the absolute path, a clickable link, and a copy-paste resume prompt. Use this skill whenever the user is running out of subscription tokens, wants to switch tools mid-task, says 'handoff', 'continue elsewhere', 'continue on another machine', 'switch to Codex\u002FOpenCode\u002FGemini\u002FCursor', or 'I'm out of tokens'. Self-contained: needs only git and a shell; uses 'specweave handoff' as an optional accelerator if it is on PATH.","anton-abyzov\u002Fvskill","anton-abyzov","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F979819?v=4","01M6CN5XDNZDM4A59WYJ1MF0DF","Anton Abyzov","01M6CN5XHVS7FXP067EJQVVZHK",47,"MIT","https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Fskills\u002Fhandoff\u002FSKILL.md",[18,23,28],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":29,"categoryName":30,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000038","人力资源",[5,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"context","windsurf","task","switch","document","opencode","only","diff","use","session","prompt","work","coding","tool","continue","Tools","git","code","gemini","2026-11-10 10:12:30",false,"---\nversion: \"1.0.0\"\nname: handoff\ndescription: \"Hand off your in-flight work to ANY other AI coding tool so you can continue exactly where you left off — works in 8+ tools (Claude Code, Codex, OpenCode, Gemini, Antigravity, Cursor, Aider, Cline\u002FRoo, Windsurf). Writes one portable, secret-scrubbed handoff document plus a full diff of your uncommitted edits, then prints the absolute path, a clickable link, and a copy-paste resume prompt. Use this skill whenever the user is running out of subscription tokens, wants to switch tools mid-task, says 'handoff', 'continue elsewhere', 'continue on another machine', 'switch to Codex\u002FOpenCode\u002FGemini\u002FCursor', or 'I'm out of tokens'. Self-contained: needs only git and a shell; uses 'specweave handoff' as an optional accelerator if it is on PATH.\"\nmetadata:\n  tags: handoff, cross-tool, portable-context, out-of-tokens, switch-tools, resume, session, git-diff, secret-scrub, continue-elsewhere\n---\n\n# \u002Fhandoff — Cross-Tool Work Handoff\n\nNo AI coding tool can read another's transcript: Claude Code locks sessions in `~\u002F.claude\u002Fprojects\u002F\u003Cmunged-cwd>\u002F\u003Cuuid>.jsonl`, Codex\u002FOpenCode in their own stores, Antigravity in encrypted `.pb`. The only thing portable across tools is a **self-contained document**. This skill writes that document — your current goal, decisions, and the EXACT uncommitted edits — so any other AI agent can pick up where you left off, without you re-explaining anything.\n\n**Use this skill when** the user is low on tokens, wants to switch tools mid-task, is moving to another machine, or says \"handoff\" \u002F \"continue elsewhere\" \u002F \"out of tokens\".\n\nThis skill is **self-contained**: it works with only `git` + a shell. It calls `specweave handoff` as an *optional accelerator* when that binary is on PATH (high-fidelity, increment-aware) — but it has **no hard dependency** on SpecWeave being installed.\n\n---\n\n## Decision: which path to take\n\n```bash\ncommand -v specweave >\u002Fdev\u002Fnull 2>&1 && echo \"ACCELERATOR\" || echo \"STANDALONE\"\n```\n\n- **ACCELERATOR** (`specweave` on PATH) → run the engine, surface its output. Go to Path A.\n- **STANDALONE** (no `specweave`) → build the doc yourself from `git` + a short interview. Go to Path B.\n\nBoth paths emit the **same doc format and the same paste-prompt** (see the canonical template below), so a handoff is continuable in any tool regardless of which path produced it.\n\n---\n\n## Path A — Accelerator (specweave on PATH)\n\nRun the engine, forwarding any short context you can supply cheaply:\n\n```bash\nspecweave handoff [incrementId] [--reason \"...\"] [--summary \"...\"] [--next \"...\"] [--gotcha \"...\"] [--decision \"...\"] [--inline]\n```\n\nThen surface its stdout **verbatim, in order** (do not reorder or paraphrase):\n\n1. absolute doc path as plain text (FIRST), 2. clickable markdown link, 3. `.diff` path,\n4. fenced copy-paste resume prompt, 5. per-tool \"find your source session\" tips.\n\nDone. The engine handled workspace detection, task\u002FAC parsing, git capture, the full-diff dump, secret scrub, and rendering.\n\n---\n\n## Path B — Standalone (no specweave)\n\nBuild a byte-compatible doc using only the shell.\n\n### B1. Capture git state (free — no tokens)\n\n```bash\nROOT=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\"\nmkdir -p \"$ROOT\u002F.handoff\"\nprintf '*\\n' > \"$ROOT\u002F.handoff\u002F.gitignore\"   # never let the handoff or its diff enter git\n\nBRANCH=\"$(git -C \"$ROOT\" rev-parse --abbrev-ref HEAD 2>\u002Fdev\u002Fnull || echo '(no git)')\"\nSHA=\"$(git -C \"$ROOT\" rev-parse --short HEAD 2>\u002Fdev\u002Fnull || echo '(no commits)')\"\nSTATUS=\"$(git -C \"$ROOT\" status --porcelain 2>\u002Fdev\u002Fnull)\"\nSTAT=\"$(git -C \"$ROOT\" diff --stat 2>\u002Fdev\u002Fnull)\"\n\n# Full uncommitted edits → sibling .diff (working tree + staged), the key fidelity artifact\n{ git -C \"$ROOT\" diff HEAD 2>\u002Fdev\u002Fnull; git -C \"$ROOT\" diff --cached 2>\u002Fdev\u002Fnull; } > \"$ROOT\u002F.handoff\u002Fhandoff.diff\"\n```\n\n### B2. Five-question interview (only the non-derivable fields)\n\nAsk the user (keep it to ~5 short strings — cheap even at token exhaustion):\n\n1. **reason** — why are you handing off? (e.g. \"out of tokens\")\n2. **summary** — one line: where do things stand?\n3. **next** — the exact next step.\n4. **gotcha** — anything the next agent must NOT do \u002F must know?\n5. **decisions** — key decisions already made (semicolon-separated).\n\n### B3. Secret scrub (before writing — over BOTH free text AND the diff)\n\nReplace matches with `[REDACTED-\u003Ctype>]` and count per pattern. Patterns (12):\n`sk-`, `ghp_`, `gho_`, `ghs_`, `AKIA`, `ASIA`, `-----BEGIN`, `vsk_`, `xox[bap]-`, `Bearer `, `password=`, `api_key=`.\n\n```bash\n# scrub the captured diff in place, e.g.:\nsed -i.bak -E \\\n  -e 's\u002Fsk-[A-Za-z0-9_-]+\u002F[REDACTED-sk]\u002Fg' \\\n  -e 's\u002Fgh[pos]_[A-Za-z0-9_-]+\u002F[REDACTED-gh-token]\u002Fg' \\\n  -e 's\u002F(A[KS]IA[0-9A-Z]{16})\u002F[REDACTED-aws-key]\u002Fg' \\\n  -e 's\u002Fvsk_[A-Za-z0-9_-]+\u002F[REDACTED-vsk]\u002Fg' \\\n  -e 's\u002Fxox[bap]-[A-Za-z0-9-]+\u002F[REDACTED-slack]\u002Fg' \\\n  -e 's\u002FBearer [A-Za-z0-9._-]+\u002FBearer [REDACTED-bearer]\u002Fg' \\\n  -e 's\u002F(password=)[^[:space:]]+\u002F\\1[REDACTED-password]\u002Fg' \\\n  -e 's\u002F(api_key=)[^[:space:]]+\u002F\\1[REDACTED-api_key]\u002Fg' \\\n  \"$ROOT\u002F.handoff\u002Fhandoff.diff\" && rm -f \"$ROOT\u002F.handoff\u002Fhandoff.diff.bak\"\n```\nScrubbing is heuristic — an empty redaction list is NOT a guarantee the file is clean.\n\n### B4. Write the doc\n\nWrite the canonical template below to `$ROOT\u002F.handoff\u002FHANDOFF.md`, filling the captured + interview fields.\n\n**Ownership sentinel**: if a root `.\u002FHANDOFF.md` already exists and does NOT contain the `Doc format v1` marker, it is a foreign file — do NOT overwrite it; write to `.handoff\u002FHANDOFF.md` instead (which is the default here anyway).\n\n### B5. Print the output — abs-path-first, in this order\n\n1. The absolute path of `.handoff\u002FHANDOFF.md` as plain text.\n2. A clickable markdown link to it.\n3. The absolute path of `.handoff\u002Fhandoff.diff`.\n4. The fenced paste-prompt (see below).\n5. The per-tool \"find your source session\" tips.\n\n---\n\n## Canonical handoff document template (INLINED — single source of truth)\n\nRender these sections **in this exact order**, ending with the `Doc format v1` footer marker. Square-bracket placeholders are filled from the captured git state + interview. This mirrors specweave's `handoff-doc-format.ts` so a doc produced here is byte-compatible with one produced by the CLI.\n\n```markdown\n# Work Handoff[: \u003Ctitle if known>]\n\n- Doc path: \u003CABSOLUTE_DOC_PATH>\n- Doc link: [\u003CABSOLUTE_DOC_PATH>](\u003CABSOLUTE_DOC_PATH>)\n- Diff file: \u003CABSOLUTE_DIFF_PATH>\n- Generated: \u003CISO_TIMESTAMP>\n- Workspace: \u003CROOT> (non-SpecWeave)\n- Git: branch `\u003CBRANCH>` @ `\u003CSHA>`\n\n## Where I Left Off\n\n**Why handing off:** \u003Creason>\n**Summary:** \u003Csummary>\n_No active SpecWeave increment — this is a git + interview handoff._\n\n## Done \u002F Pending\n\n_No increment task\u002FAC state available._\n\n## Key Decisions & Gotchas\n\n- \u003Cdecision 1>\n- \u003Cdecision 2>\n\n**Gotcha:** \u003Cgotcha>\n\n## Files Touched\n\n**UNCOMMITTED** — commit, stash, or keep editing BEFORE doing anything destructive.\n\n```\n\u003Cgit status --porcelain>\n```\n\n```\n\u003Cgit diff --stat>\n```\n\nFull uncommitted diff: `\u003CABSOLUTE_DIFF_PATH>` — read it or run `git apply --check` against it to see the exact edits.\n\n## Exact Next Steps\n\n\u003Cnext>\n\n## How To Resume\n\nIf the doc path above does NOT exist on the machine you are reading this on, STOP and ask the user to paste the handoff — do not improvise context.\n\nTo recover the ORIGINAL transcript (optional), find your source session per tool:\n\n### Claude Code\n- Find session: ls ~\u002F.claude\u002Fprojects\u002F\u003Cmunged-cwd>\u002F (munge: every non-alphanumeric char → \"-\", runs NOT collapsed; e.g. \u002FUsers\u002Fantonabyzov\u002FProjects\u002Fgithub\u002Fspecweave-umb\u002F.claude-worktrees\u002Fx → -Users-antonabyzov-Projects-github-specweave-umb--claude-worktrees-x)\n- Resume: `claude -r \u003Cuuid>`\n\n### Codex\n- Find session: ls ~\u002F.codex\u002Fsessions\u002F (newest dir = most recent session)\n- Resume: `codex resume \u003Cuuid>   (or: codex resume --last)`\n\n### OpenCode\n- Find session: opencode sessions list\n- Resume: `opencode -s \u003Cid>   (long form: opencode --session \u003Cid>)`\n\n### Gemini CLI\n- Find session: run \u002Fchat list inside the Gemini session to see saved tags\n- Resume: `\u002Fchat resume \u003Ctag>`\n\n### Antigravity\n- Find session: open the Antigravity Agent Manager and pick the prior task thread\n- Resume: `resume the thread from the Antigravity Agent Manager`\n\n### Aider\n- Find session: aider keeps .aider.chat.history.md in the repo root\n- Resume: `aider --restore-chat-history`\n\n## Redaction\n\n- \u003CN> `\u003Ctype>` strings masked\n\n_Scrubbing is heuristic (regex baseline). An empty redaction list is NOT a guarantee this file is clean — review before sharing or committing._\n\n---\n\u003C!-- Doc format v1 -->\n```\n\nNotes on the template:\n- If there are **no uncommitted changes**, replace the Files Touched body with `_Working tree clean — no uncommitted edits._` (or `_Not a git repository — no diff captured._` when there is no git).\n- If there are **no decisions**, the Key Decisions body is `_No decisions recorded._`; omit the **Gotcha:** line when no gotcha was given.\n- The Redaction body is `_No token-like strings were detected._` when nothing was masked.\n- The footer marker `\u003C!-- Doc format v1 -->` is mandatory and must be the last line — it is the ownership sentinel.\n\n---\n\n## Paste-prompt\n\n**Default (file reachable):**\n\n```\nResume my work. Read the handoff doc at: \u003CABSOLUTE_DOC_PATH>\nIf that path does NOT exist on this machine, STOP and ask me to paste the handoff — do not improvise context.\nThe exact uncommitted edits are in: \u003CABSOLUTE_DIFF_PATH>\n```\n\n**`--inline` (cross-machine, file unreachable):** embed the FULL doc body between markers so it travels in the prompt itself:\n\n```\nResume my work using the self-contained handoff below.\nThis is a full handoff doc — treat everything between the markers as ground truth. If it references a `.diff` path that does not exist on this machine, ask me to paste the diff.\n\nBEGIN HANDOFF\n\u003Cfull rendered handoff document, including the Doc format v1 footer>\nEND HANDOFF\n```\n\n---\n\n## Safety defaults\n\n- The doc + diff are **gitignored by default** (`.handoff\u002F.gitignore` = `*`) and **never auto-committed**. Do not print a `git add` hint.\n- Secret scrubbing runs over both free text and the diff **before** any write.\n- Scrubbing is heuristic — advise the user to review before sharing or committing.\n","# \u002Fhandoff — Cross-Tool Work Handoff\n\nNo AI coding tool can read another's transcript: Claude Code locks sessions in `~\u002F.claude\u002Fprojects\u002F\u003Cmunged-cwd>\u002F\u003Cuuid>.jsonl`, Codex\u002FOpenCode in their own stores, Antigravity in encrypted `.pb`. The only thing portable across tools is a **self-contained document**. This skill writes that document — your current goal, decisions, and the EXACT uncommitted edits — so any other AI agent can pick up where you left off, without you re-explaining anything.\n\n**Use this skill when** the user is low on tokens, wants to switch tools mid-task, is moving to another machine, or says \"handoff\" \u002F \"continue elsewhere\" \u002F \"out of tokens\".\n\nThis skill is **self-contained**: it works with only `git` + a shell. It calls `specweave handoff` as an *optional accelerator* when that binary is on PATH (high-fidelity, increment-aware) — but it has **no hard dependency** on SpecWeave being installed.\n\n---\n\n## Decision: which path to take\n\n```bash\ncommand -v specweave >\u002Fdev\u002Fnull 2>&1 && echo \"ACCELERATOR\" || echo \"STANDALONE\"\n```\n\n- **ACCELERATOR** (`specweave` on PATH) → run the engine, surface its output. Go to Path A.\n- **STANDALONE** (no `specweave`) → build the doc yourself from `git` + a short interview. Go to Path B.\n\nBoth paths emit the **same doc format and the same paste-prompt** (see the canonical template below), so a handoff is continuable in any tool regardless of which path produced it.\n\n---\n\n## Path A — Accelerator (specweave on PATH)\n\nRun the engine, forwarding any short context you can supply cheaply:\n\n```bash\nspecweave handoff [incrementId] [--reason \"...\"] [--summary \"...\"] [--next \"...\"] [--gotcha \"...\"] [--decision \"...\"] [--inline]\n```\n\nThen surface its stdout **verbatim, in order** (do not reorder or paraphrase):\n\n1. absolute doc path as plain text (FIRST), 2. clickable markdown link, 3. `.diff` path,\n4. fenced copy-paste resume prompt, 5. per-tool \"find your source session\" tips.\n\nDone. The engine handled workspace detection, task\u002FAC parsing, git capture, the full-diff dump, secret scrub, and rendering.\n\n---\n\n## Path B — Standalone (no specweave)\n\nBuild a byte-compatible doc using only the shell.\n\n### B1. Capture git state (free — no tokens)\n\n```bash\nROOT=\"$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\"\nmkdir -p \"$ROOT\u002F.handoff\"\nprintf '*\\n' > \"$ROOT\u002F.handoff\u002F.gitignore\"   # never let the handoff or its diff enter git\n\nBRANCH=\"$(git -C \"$ROOT\" rev-parse --abbrev-ref HEAD 2>\u002Fdev\u002Fnull || echo '(no git)')\"\nSHA=\"$(git -C \"$ROOT\" rev-parse --short HEAD 2>\u002Fdev\u002Fnull || echo '(no commits)')\"\nSTATUS=\"$(git -C \"$ROOT\" status --porcelain 2>\u002Fdev\u002Fnull)\"\nSTAT=\"$(git -C \"$ROOT\" diff --stat 2>\u002Fdev\u002Fnull)\"\n\n# Full uncommitted edits → sibling .diff (working tree + staged), the key fidelity artifact\n{ git -C \"$ROOT\" diff HEAD 2>\u002Fdev\u002Fnull; git -C \"$ROOT\" diff --cached 2>\u002Fdev\u002Fnull; } > \"$ROOT\u002F.handoff\u002Fhandoff.diff\"\n```\n\n### B2. Five-question interview (only the non-derivable fields)\n\nAsk the user (keep it to ~5 short strings — cheap even at token exhaustion):\n\n1. **reason** — why are you handing off? (e.g. \"out of tokens\")\n2. **summary** — one line: where do things stand?\n3. **next** — the exact next step.\n4. **gotcha** — anything the next agent must NOT do \u002F must know?\n5. **decisions** — key decisions already made (semicolon-separated).\n\n### B3. Secret scrub (before writing — over BOTH free text AND the diff)\n\nReplace matches with `[REDACTED-\u003Ctype>]` and count per pattern. Patterns (12):\n`sk-`, `ghp_`, `gho_`, `ghs_`, `AKIA`, `ASIA`, `-----BEGIN`, `vsk_`, `xox[bap]-`, `Bearer `, `password=`, `api_key=`.\n\n```bash\n# scrub the captured diff in place, e.g.:\nsed -i.bak -E \\\n  -e 's\u002Fsk-[A-Za-z0-9_-]+\u002F[REDACTED-sk]\u002Fg' \\\n  -e 's\u002Fgh[pos]_[A-Za-z0-9_-]+\u002F[REDACTED-gh-token]\u002Fg' \\\n  -e 's\u002F(A[KS]IA[0-9A-Z]{16})\u002F[REDACTED-aws-key]\u002Fg' \\\n  -e 's\u002Fvsk_[A-Za-z0-9_-]+\u002F[REDACTED-vsk]\u002Fg' \\\n  -e 's\u002Fxox[bap]-[A-Za-z0-9-]+\u002F[REDACTED-slack]\u002Fg' \\\n  -e 's\u002FBearer [A-Za-z0-9._-]+\u002FBearer [REDACTED-bearer]\u002Fg' \\\n  -e 's\u002F(password=)[^[:space:]]+\u002F\\1[REDACTED-password]\u002Fg' \\\n  -e 's\u002F(api_key=)[^[:space:]]+\u002F\\1[REDACTED-api_key]\u002Fg' \\\n  \"$ROOT\u002F.handoff\u002Fhandoff.diff\" && rm -f \"$ROOT\u002F.handoff\u002Fhandoff.diff.bak\"\n```\nScrubbing is heuristic — an empty redaction list is NOT a guarantee the file is clean.\n\n### B4. Write the doc\n\nWrite the canonical template below to `$ROOT\u002F.handoff\u002FHANDOFF.md`, filling the captured + interview fields.\n\n**Ownership sentinel**: if a root `.\u002FHANDOFF.md` already exists and does NOT contain the `Doc format v1` marker, it is a foreign file — do NOT overwrite it; write to `.handoff\u002FHANDOFF.md` instead (which is the default here anyway).\n\n### B5. Print the output — abs-path-first, in this order\n\n1. The absolute path of `.handoff\u002FHANDOFF.md` as plain text.\n2. A clickable markdown link to it.\n3. The absolute path of `.handoff\u002Fhandoff.diff`.\n4. The fenced paste-prompt (see below).\n5. The per-tool \"find your source session\" tips.\n\n---\n\n## Canonical handoff document template (INLINED — single source of truth)\n\nRender these sections **in this exact order**, ending with the `Doc format v1` footer marker. Square-bracket placeholders are filled from the captured git state + interview. This mirrors specweave's `handoff-doc-format.ts` so a doc produced here is byte-compatible with one produced by the CLI.\n\n```markdown\n# Work Handoff[: \u003Ctitle if known>]\n\n- Doc path: \u003CABSOLUTE_DOC_PATH>\n- Doc link: [\u003CABSOLUTE_DOC_PATH>](\u003CABSOLUTE_DOC_PATH>)\n- Diff file: \u003CABSOLUTE_DIFF_PATH>\n- Generated: \u003CISO_TIMESTAMP>\n- Workspace: \u003CROOT> (non-SpecWeave)\n- Git: branch `\u003CBRANCH>` @ `\u003CSHA>`\n\n## Where I Left Off\n\n**Why handing off:** \u003Creason>\n**Summary:** \u003Csummary>\n_No active SpecWeave increment — this is a git + interview handoff._\n\n## Done \u002F Pending\n\n_No increment task\u002FAC state available._\n\n## Key Decisions & Gotchas\n\n- \u003Cdecision 1>\n- \u003Cdecision 2>\n\n**Gotcha:** \u003Cgotcha>\n\n## Files Touched\n\n**UNCOMMITTED** — commit, stash, or keep editing BEFORE doing anything destructive.\n\n```\n\u003Cgit status --porcelain>\n```\n\n```\n\u003Cgit diff --stat>\n```\n\nFull uncommitted diff: `\u003CABSOLUTE_DIFF_PATH>` — read it or run `git apply --check` against it to see the exact edits.\n\n## Exact Next Steps\n\n\u003Cnext>\n\n## How To Resume\n\nIf the doc path above does NOT exist on the machine you are reading this on, STOP and ask the user to paste the handoff — do not improvise context.\n\nTo recover the ORIGINAL transcript (optional), find your source session per tool:\n\n### Claude Code\n- Find session: ls ~\u002F.claude\u002Fprojects\u002F\u003Cmunged-cwd>\u002F (munge: every non-alphanumeric char → \"-\", runs NOT collapsed; e.g. \u002FUsers\u002Fantonabyzov\u002FProjects\u002Fgithub\u002Fspecweave-umb\u002F.claude-worktrees\u002Fx → -Users-antonabyzov-Projects-github-specweave-umb--claude-worktrees-x)\n- Resume: `claude -r \u003Cuuid>`\n\n### Codex\n- Find session: ls ~\u002F.codex\u002Fsessions\u002F (newest dir = most recent session)\n- Resume: `codex resume \u003Cuuid>   (or: codex resume --last)`\n\n### OpenCode\n- Find session: opencode sessions list\n- Resume: `opencode -s \u003Cid>   (long form: opencode --session \u003Cid>)`\n\n### Gemini CLI\n- Find session: run \u002Fchat list inside the Gemini session to see saved tags\n- Resume: `\u002Fchat resume \u003Ctag>`\n\n### Antigravity\n- Find session: open the Antigravity Agent Manager and pick the prior task thread\n- Resume: `resume the thread from the Antigravity Agent Manager`\n\n### Aider\n- Find session: aider keeps .aider.chat.history.md in the repo root\n- Resume: `aider --restore-chat-history`\n\n## Redaction\n\n- \u003CN> `\u003Ctype>` strings masked\n\n_Scrubbing is heuristic (regex baseline). An empty redaction list is NOT a guarantee this file is clean — review before sharing or committing._\n\n---\n\u003C!-- Doc format v1 -->\n```\n\nNotes on the template:\n- If there are **no uncommitted changes**, replace the Files Touched body with `_Working tree clean — no uncommitted edits._` (or `_Not a git repository — no diff captured._` when there is no git).\n- If there are **no decisions**, the Key Decisions body is `_No decisions recorded._`; omit the **Gotcha:** line when no gotcha was given.\n- The Redaction body is `_No token-like strings were detected._` when nothing was masked.\n- The footer marker `\u003C!-- Doc format v1 -->` is mandatory and must be the last line — it is the ownership sentinel.\n\n---\n\n## Paste-prompt\n\n**Default (file reachable):**\n\n```\nResume my work. Read the handoff doc at: \u003CABSOLUTE_DOC_PATH>\nIf that path does NOT exist on this machine, STOP and ask me to paste the handoff — do not improvise context.\nThe exact uncommitted edits are in: \u003CABSOLUTE_DIFF_PATH>\n```\n\n**`--inline` (cross-machine, file unreachable):** embed the FULL doc body between markers so it travels in the prompt itself:\n\n```\nResume my work using the self-contained handoff below.\nThis is a full handoff doc — treat everything between the markers as ground truth. If it references a `.diff` path that does not exist on this machine, ask me to paste the diff.\n\nBEGIN HANDOFF\n\u003Cfull rendered handoff document, including the Doc format v1 footer>\nEND HANDOFF\n```\n\n---\n\n## Safety defaults\n\n- The doc + diff are **gitignored by default** (`.handoff\u002F.gitignore` = `*`) and **never auto-committed**. Do not print a `git add` hint.\n- Secret scrubbing runs over both free text and the diff **before** any write.\n- Scrubbing is heuristic — advise the user to review before sharing or committing.\n",{"name":5,"version":56,"metadata":57,"description":7},"1.0.0",{"tags":58},"handoff, cross-tool, portable-context, out-of-tokens, switch-tools, resume, session, git-diff, secret-scrub, continue-elsewhere","main","b198d63224f1ecec8bca1300fb21dfa996c853db","skills\u002Fhandoff",5,"https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill","https:\u002F\u002Fverified-skill.com","https:\u002F\u002Fgithub.com\u002Fanton-abyzov","https:\u002F\u002Fspecwithcode.com","Founder of SpecWithCode · Creator of SpecWeave · AI coding agents, Cloud, DevOps · 20 yrs SWE · YouTube: @AntonAbyzov","2026-11-13 00:22:51",{"source":8,"skillName":5,"commands":70,"prompt":80,"zipAvailable":81},[71,74,77],{"tool":72,"command":73},"npx","npx skills add anton-abyzov\u002Fvskill --skill handoff",{"tool":75,"command":76},"bunx","bunx skills add anton-abyzov\u002Fvskill --skill handoff",{"tool":78,"command":79},"pnpm","pnpm dlx skills add anton-abyzov\u002Fvskill --skill handoff","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Fskills\u002Fhandoff\u002FSKILL.md",true,[],[84,110,126,149,185,210],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":51},"01M6HKP9JT8CH33W7DJB544DCS","x-reply-drafts","Find live X threads where a product genuinely fits, and draft truthful, humanized replies for the owner to review and post by hand. Human pace only: max 5 replies a day, never two within 20 minutes, no automated posting. Use when the user asks to 'find threads to reply to', 'draft X replies', 'reply-guy session', 'join trending conversations', 'engage on Twitter about \u003Cproduct>', or wants a daily batch of reply drafts. Not for scheduling original posts (social-media-posting) or bulk publishing (blotato).","https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Fplugins\u002Fmarketing\u002Fskills\u002Fx-reply-drafts\u002FSKILL.md",[],[91,92,93,94,95,96,97,98,99,38,100,101,102,103,104,105,106,107,108,109],"reply","drafts","x reply drafts","review","product","batch","Media","unslop","never","humanize","social","human","join","trending","bulk","posts","threads","conversations","hand",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":51},"01M6CND903Q6E6R2XDWMFH8MAY","hello-world","A tiny test skill used by the 0853 verify-runtime harness. Says hello. No external calls. Use when the user asks for a sanity-check skill in a verify-harness fixture.","https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Ftest\u002Fverify\u002Ffixtures\u002Ftiny-skill-source\u002Fplugins\u002Ftiny-test-plugin\u002Fskills\u002Fhello-world\u002FSKILL.md",[],[117,118,119,120,121,122,123,124,125,40],"hello world","hello","world","test","Test Skill","harness","verify","check","user",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":136,"publishedAt":51},"01M6CND60H0N1CYEB6ABEW18NS","existing-skill","Lint markdown files for style and grammar issues.","https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Fsrc\u002Fcommands\u002F__tests__\u002Ffixtures\u002Fexisting-skill\u002FSKILL.md",[132,135],{"categoryNo":133,"categoryName":134,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[137,138,139,49,140,141,142,143,144,145,146,147,148],"existing skill","docs","lint","issues","markdown","grammar","read","write","edit","cursor","files","lint markdown files",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":165,"publishedAt":51},"01M6CND1JAW97FY3W50MAPNKX7","remotion-best-practices","Best practices for Remotion video creation in React — scaffolding, compositions, animations, transitions — PLUS hard-won rules for high-fidelity product-demo videos: real logos\u002Ficons, precise YouTube-reference matching, full-screen camera zooms, click-targets that actually hit, content-tight rectangle highlights, voiceover regeneration discipline, audio-level normalization (no double-boost), per-scene voice-sync math, Studio detail-page mirror patterns, bold-not-subtle connection lines, and the YouTube publication kit (chapters, description, thumbnail, hashtags) that turns a render into a shipped video.","https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Fskills\u002Fremotion-best-practices\u002FSKILL.md",[155,158,161,162],{"categoryNo":156,"categoryName":157,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":163,"categoryName":164,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000031","产品经理",[166,167,168,169,170,95,171,172,173,174,175,176,177,178,179,180,181,182,183,184],"best practices","remotion best practices","Remotion","react","sync","normalization","Video","Animation","Composition","Audio","page","math","discipline","publishing","camera","youtube","voiceover","patterns","remotion, video, react, animation, composition",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":189,"categories":190,"keywords":192,"publishedAt":51},"01M6CNCXMSB1MKQ7646AR12VXY","rea","Find out exactly how a feature is implemented in a shipped tool or app you don't have the source for (desktop apps, Electron apps like Claude desktop, native CLIs like Codex, websites, APKs, .NET assemblies) using REA - Reverse Engineer Anything (github.com\u002Fmorluto\u002Frea). Sets REA up when it is missing (CLI, MCP registration, Hopper or Ghidra), routes the target to the right REA tool, keeps evidence out of the context window, and turns findings into a clean-room spec before any rebuild. Use when the user says 'use REA', 'reverse engineer', 'how does \u003Capp> do X', 'how is this feature implemented in \u003Ctool>', 'clone this feature', 'decompile', 'look inside the app', or asks how a closed-source competitor works. Skip it when the source is available - read the repo instead.","https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Fskills\u002Frea\u002FSKILL.md",[191],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[187,193,194,195,196,197,198,199,200,201,143,32,202,203,204,205,206,207,208,209],"MCP","cli","reverse-engineering","ghidra","binary-analysis","analysis","how","reverse engineer anything","repo","evidence","up","engineer","rebuild","clean","registration","do","reverse engineer",{"skillNo":211,"name":212,"nameZh":6,"description":213,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":214,"categories":215,"keywords":224,"publishedAt":51},"01M6CNCSE0847Q1FP1GRQ75SR9","motion-graphics-promo","After Effects-style motion graphics for short product promos (15-45 s, vertical or landscape), built as code with HyperFrames + GSAP. Covers a story-first brief, motion grammar (energetic entry, one transition per task, spring settle, 2-3 s of stable proof), a 32-second promo timeline, device-frame and kinetic-type recipes, vertical-first composition, evidence rules (real UI only, no fake clicks), music licensing and encoded-frame verification. Use when the user asks for an After Effects-like animation, motion graphics, a kinetic-type promo, an app promo video, a product teaser, a Reels\u002FTikTok\u002FShorts ad, or 'animations like After Effects'. Also covers short explainers, tutorials and 15-second vertical ads: a design kit (footage beds, condensed caps in a marker box, white device frames, falling stickers, voice-over with music ducking) and HyperFrames render traps that silently break output. Pairs with hyperframes-best-practices (screencast pipeline) and remotion-best-practices.","https:\u002F\u002Fgithub.com\u002Fanton-abyzov\u002Fvskill\u002Fblob\u002Fmain\u002Fskills\u002Fmotion-graphics-promo\u002FSKILL.md",[216,219,220,221],{"categoryNo":217,"categoryName":218,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":159,"categoryName":160,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},{"categoryNo":222,"categoryName":223,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000032","设计师",[225,226,227,228,229,49,230,95,231,232,233,172,173,168,174,234,142,235,38,236],"graphics","motion graphics","motion","motion graphics promo","design","verification","ui","brief","pipeline","ads","short","tiktok"]