[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C46D6AE5JDVJTFTXH9RZ5Q":3,"skill-same:01M6C46D6AE5JDVJTFTXH9RZ5Q":65},{"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":18,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":12,"updatedAt":51,"install":52,"resources":64},"01M6C46D6AE5JDVJTFTXH9RZ5Q","worktree",null,"Create, reuse, and clean up git worktrees under $VIBE_HOME\u002Fworktrees. Use when the user wants to work in an isolated git worktree, create a worktree for a task, or list\u002Fremove existing worktrees.","mistralai\u002Fmistral-vibe","mistralai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F132372032?v=4","01M6C456ET86MBBTS4RMX0NDRS","Mistral","01M6C456K44X5W8TJX4T023KRV",5376,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fworktree\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"up","home","when","Existing","for","true","reuse","task","clean","worktrees","create","use","remove","git worktrees","user","list","work","git worktree","git","2026-11-10 10:12:30",false,"---\nname: worktree\ndescription: Create, reuse, and clean up git worktrees under $VIBE_HOME\u002Fworktrees. Use when the user wants to work in an isolated git worktree, create a worktree for a task, or list\u002Fremove existing worktrees.\nuser-invocable: true\n---\n\n# Worktree Management\n\nGit worktrees live under `$VIBE_HOME\u002Fworktrees\u002F` (default `~\u002F.vibe\u002Fworktrees\u002F`),\neach in a per-repository bucket named `\u003Crepo_root.name>-\u003Csha256(common_git_dir)[:12]>`\nso worktrees from different repos never collide.\n\n```\n$VIBE_HOME\u002Fworktrees\u002F\n  .claims\u002F\u003Cbucket>\u002F\u003Cname>\u002F          # claim records and holder markers\n    record.json                     # metadata: branch, base_commit, branch_created, claimed_at\n    recovery.json                   # snapshot metadata for a retained chat\n    holders\u002F                        # one empty file per live session\n  \u003Cbucket>\u002F\u003Cname>\u002F                  # the actual git worktree checkout\n```\n\n## Creating a worktree\n\n1. Compute the bucket from the repo root and common git dir.\n2. Validate the name (single portable path segment; no `\u003C>:\"\u002F\\|?*`, no\n   trailing space or dot, no Windows reserved names like `CON`\u002F`PRN`\u002F`NUL`\u002F\n   `COM1`-`COM9`\u002F`LPT1`-`LPT9`, not `.` or `..`).\n3. Reserve the directory with `mkdir` (atomic claim — fails if taken).\n4. For a new branch, start from the remote's default branch (fetch first,\n   best-effort). For an existing branch, check it out into the worktree.\n5. `git worktree add -b \u003Cname> \u003Cpath> \u003Cstart_point>` (or without `-b` for reuse).\n6. Record the worktree's own HEAD as `base_commit` — this is the baseline for\n   cleanup, not the invoking checkout's HEAD.\n7. Write `record.json` under `.claims\u002F\u003Cbucket>\u002F\u003Cname>\u002F`.\n\nWhen no name is given, derive one by slugifying the prompt: NFKD-normalize,\nlowercase, replace non-`[a-z0-9]+` with `-`, take the first 6 words, trim to\n40 chars, drop trailing stop words. Branch gets a `vibe\u002F` prefix. Append\n`-2`, `-3`, etc. on collision (up to 100). Fall back to a random slug if empty.\n\nReuse an existing worktree only after validating: no symlinks in the path,\n`.git` is a file (not a directory), same common git dir, matching branch.\n\n## Holding\n\nA session using a worktree must register as a holder to prevent the\nbackground cleanup from removing it. Holder files are locked for the lifetime\nof the session; an unlocked marker left by a crashed process is stale and may\nbe removed. A temporary holder protects a worktree while a session attaches.\n\n## Cleaning up\n\nBefore removal, inspect the worktree state:\n- Uncommitted changes or untracked files: `git -c core.fsmonitor= status --porcelain --untracked-files=all`\n- New commits since start: `git rev-list --count \u003Cbase_commit>..HEAD`\n\nThe worktree is clean only if all three are absent. If dirty, confirm with\nthe user before proceeding — removal discards uncommitted work, untracked\nfiles, and new commits.\n\nIf the branch pre-existed (not created by this session), confirm separately\nbefore deleting it. Re-check holders — if another session still holds the\nworktree, keep it. `cd` out of the worktree before removing (Windows refuses\nto delete a process's cwd).\n\nRemove: `git worktree remove --force \u003Cpath>`, then `git branch -D \u003Cname>` if\nthe branch was created this session or the user confirmed. Delete the claim\nrecord and `rmdir` empty directories (never `rmtree` — a surviving holder\nmust not be lost).\n\n## Snapshotting\n\nBefore retention removes an inactive worktree, save its state to a ref: stage\nall files (including untracked, excluding ignored) and commit to\n`refs\u002Fvibe\u002Freaped\u002F\u003Cname>`. Use a separate index file so the worktree's own\nindex is untouched. Keep `recovery.json` after removing the active claim so\nreopening a chat can recreate the checkout automatically.\n\n## Retention\n\nKeep the newest configured number of managed worktrees across repositories.\nSkip active worktrees. Snapshot each inactive excess worktree before removal;\nif snapshotting fails, keep it. Reservations without a `base_commit` are\ndiscarded only if empty and no creation process still holds their marker.\n\nCreation, attachment, and retention transitions use a cross-process lock so a\nworktree cannot be removed while another process is claiming or attaching it.\n\n## Gotchas\n\n- Disable `core.fsmonitor` when reading someone else's working tree:\n  `git -c core.fsmonitor= status`.\n- New branches start from the remote default branch, not the current\n  checkout's HEAD.\n- Symlink paths are rejected — not a stable worktree path.\n- `git worktree add` cannot distinguish a taken path from an invalid ref\n  (both exit 128), so `mkdir` reserves the path first.\n- Worktrees are implicitly trusted for the session only, not persisted.\n","# Worktree Management\n\nGit worktrees live under `$VIBE_HOME\u002Fworktrees\u002F` (default `~\u002F.vibe\u002Fworktrees\u002F`),\neach in a per-repository bucket named `\u003Crepo_root.name>-\u003Csha256(common_git_dir)[:12]>`\nso worktrees from different repos never collide.\n\n```\n$VIBE_HOME\u002Fworktrees\u002F\n  .claims\u002F\u003Cbucket>\u002F\u003Cname>\u002F          # claim records and holder markers\n    record.json                     # metadata: branch, base_commit, branch_created, claimed_at\n    recovery.json                   # snapshot metadata for a retained chat\n    holders\u002F                        # one empty file per live session\n  \u003Cbucket>\u002F\u003Cname>\u002F                  # the actual git worktree checkout\n```\n\n## Creating a worktree\n\n1. Compute the bucket from the repo root and common git dir.\n2. Validate the name (single portable path segment; no `\u003C>:\"\u002F\\|?*`, no\n   trailing space or dot, no Windows reserved names like `CON`\u002F`PRN`\u002F`NUL`\u002F\n   `COM1`-`COM9`\u002F`LPT1`-`LPT9`, not `.` or `..`).\n3. Reserve the directory with `mkdir` (atomic claim — fails if taken).\n4. For a new branch, start from the remote's default branch (fetch first,\n   best-effort). For an existing branch, check it out into the worktree.\n5. `git worktree add -b \u003Cname> \u003Cpath> \u003Cstart_point>` (or without `-b` for reuse).\n6. Record the worktree's own HEAD as `base_commit` — this is the baseline for\n   cleanup, not the invoking checkout's HEAD.\n7. Write `record.json` under `.claims\u002F\u003Cbucket>\u002F\u003Cname>\u002F`.\n\nWhen no name is given, derive one by slugifying the prompt: NFKD-normalize,\nlowercase, replace non-`[a-z0-9]+` with `-`, take the first 6 words, trim to\n40 chars, drop trailing stop words. Branch gets a `vibe\u002F` prefix. Append\n`-2`, `-3`, etc. on collision (up to 100). Fall back to a random slug if empty.\n\nReuse an existing worktree only after validating: no symlinks in the path,\n`.git` is a file (not a directory), same common git dir, matching branch.\n\n## Holding\n\nA session using a worktree must register as a holder to prevent the\nbackground cleanup from removing it. Holder files are locked for the lifetime\nof the session; an unlocked marker left by a crashed process is stale and may\nbe removed. A temporary holder protects a worktree while a session attaches.\n\n## Cleaning up\n\nBefore removal, inspect the worktree state:\n- Uncommitted changes or untracked files: `git -c core.fsmonitor= status --porcelain --untracked-files=all`\n- New commits since start: `git rev-list --count \u003Cbase_commit>..HEAD`\n\nThe worktree is clean only if all three are absent. If dirty, confirm with\nthe user before proceeding — removal discards uncommitted work, untracked\nfiles, and new commits.\n\nIf the branch pre-existed (not created by this session), confirm separately\nbefore deleting it. Re-check holders — if another session still holds the\nworktree, keep it. `cd` out of the worktree before removing (Windows refuses\nto delete a process's cwd).\n\nRemove: `git worktree remove --force \u003Cpath>`, then `git branch -D \u003Cname>` if\nthe branch was created this session or the user confirmed. Delete the claim\nrecord and `rmdir` empty directories (never `rmtree` — a surviving holder\nmust not be lost).\n\n## Snapshotting\n\nBefore retention removes an inactive worktree, save its state to a ref: stage\nall files (including untracked, excluding ignored) and commit to\n`refs\u002Fvibe\u002Freaped\u002F\u003Cname>`. Use a separate index file so the worktree's own\nindex is untouched. Keep `recovery.json` after removing the active claim so\nreopening a chat can recreate the checkout automatically.\n\n## Retention\n\nKeep the newest configured number of managed worktrees across repositories.\nSkip active worktrees. Snapshot each inactive excess worktree before removal;\nif snapshotting fails, keep it. Reservations without a `base_commit` are\ndiscarded only if empty and no creation process still holds their marker.\n\nCreation, attachment, and retention transitions use a cross-process lock so a\nworktree cannot be removed while another process is claiming or attaching it.\n\n## Gotchas\n\n- Disable `core.fsmonitor` when reading someone else's working tree:\n  `git -c core.fsmonitor= status`.\n- New branches start from the remote default branch, not the current\n  checkout's HEAD.\n- Symlink paths are rejected — not a stable worktree path.\n- `git worktree add` cannot distinguish a taken path from an invalid ref\n  (both exit 128), so `mkdir` reserves the path first.\n- Worktrees are implicitly trusted for the session only, not persisted.\n",{"name":5,"description":7,"user-invocable":43},true,"main","338ad4bf0f73c4dd879d667cf7ab011555ae1751","vibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fworktree",796,"https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe","https:\u002F\u002Fgithub.com\u002Fmistralai","mistral.ai","2026-11-11 00:56:57",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":43},[54,57,60],{"tool":55,"command":56},"npx","npx skills add mistralai\u002Fmistral-vibe --skill worktree",{"tool":58,"command":59},"bunx","bunx skills add mistralai\u002Fmistral-vibe --skill worktree",{"tool":61,"command":62},"pnpm","pnpm dlx skills add mistralai\u002Fmistral-vibe --skill worktree","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fworktree\u002FSKILL.md",[],[66,95,120,140,160,166],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":77,"publishedAt":38},"01M71709JBNSMH1MJ71NRGRBFM","import","Import the user's setup from other coding CLIs (Claude Code, Codex, OpenCode) into Vibe — instructions, skills, subagents, commands, hooks, MCP servers, permissions, and plugins. Load when the user wants to switch to Vibe, import or reuse another CLI's configuration, or asks whether a file from another CLI works in Vibe.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fimport\u002FSKILL.md",[72],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[68,78,79,25,80,81,21,82,83,84,85,86,87,88,89,90,91,92,93,94],"switch","hooks","MCP","load","file","code","permissions","codex","cli","opencode","instructions","commands","plugins","servers","mcp servers","configuration","setup",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":102,"publishedAt":38},"01M6C46A11K3H7D6F7ATSBRYKJ","vibe","Authoritative reference for Mistral Vibe — the CLI agent you (the model) are running inside.\n\nLOAD when the user:\n- asks anything about Vibe itself, even by indirect name (\"this CLI\", \"this tool\", \"you\");\n- wants to change, inspect, or reset their setup;\n- asks why the agent did or did not act;\n- asks how to make the CLI do X, where X lives, or what a flag\u002Fcommand\u002Fsetting does;\n- asks any meta question about your own behavior;\n- is unsure whether a command, flag, env var, or file is in scope — this skill is the source of truth.\n\nSCOPE: config under `~\u002F.vibe\u002F` and project-local `.vibe\u002F`; `VIBE_*` and `LOG_*` env vars; models and providers; agents and subagents; skills; tools and their permission model; every slash command and CLI flag; hooks; MCP servers; connectors; plugins; trusted folders; `@`-file mentions; logs; themes; voice.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fvibe\u002FSKILL.md",[101],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},[97,103,104,80,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,23],"Meta","question","logs","change","command","how","why","config","subagents","project","inspect","local","themes","you","log","act","do",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":38},"01M6C467E56WQ8PXEZT1Q0VP23","skill-creator","Load this skill before creating, updating, or deleting a Vibe skill, or whenever you plan to add or modify SKILL.md files under a skills directory. It explains Vibe's SKILL.md frontmatter, discovery order, support files, and the permission flow.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fskill-creator\u002FSKILL.md",[126],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},[128,129,130,131,132,133,134,135,136,81,137,116,138,139,97],"skill creator","creator","flow","plan","support","discovery","directory","permission","files","frontmatter","it","add",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":147,"publishedAt":38},"01M6C464DMPVA3RTXG0RGGZB3T","create-plugin","Create a Vibe plugin package — the Agent Plugins 1.0 format with optional Vibe extensions for skills, MCP servers, hooks, knowledge, agents, libraries, and connectors. Use when the user wants to create, scaffold, or author a plugin for Mistral Vibe.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fplugins\u002Fbuiltins\u002Fvibe\u002Fskills\u002Fcreate-plugin\u002FSKILL.md",[146],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},[29,148,149,150,151,79,90,152,92,80,153,30,12,33,154,155,23,156,21,157,158,159,91],"plugin","create plugin","libraries","format","knowledge","package","scaffold","connectors","agent plugins","author","extensions","with",{"skillNo":161,"name":162,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":38},"01M6C4620AT7K4999KR0YY86KH","prompts","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002Fvibe\u002Fcore\u002Ftools\u002Fbuiltins\u002Fprompts\u002Fskill.md",[],[162],{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":179,"publishedAt":38},"01M6C45Z8KES5ZQ0RA198EVMPA","write-vibe-tests","Write or refactor Mistral Vibe tests with proper decoupling. Use when adding behavior coverage, testing ports\u002Fadapters, replacing brittle mocks, creating fakes, adding characterization tests before refactors, or changing tests under tests\u002F for vibe\u002Fcore, vibe\u002Fapp_server, vibe\u002Facp, tools, config, sessions, skills, hooks, MCP, or setup.","https:\u002F\u002Fgithub.com\u002Fmistralai\u002Fmistral-vibe\u002Fblob\u002Fmain\u002F.vibe\u002Fskills\u002Fwrite-vibe-tests\u002FSKILL.md",[172,175,178],{"categoryNo":173,"categoryName":174,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":176,"categoryName":177,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},[180,181,182,97,183,184,185,186,187,188,110,189,79,190,80,30,191,94,192,12,193,23,194,21,159],"write","write vibe tests","tests","coverage","ports","server","core","behavior","acp","testing","sessions","refactor","Tools","app","decoupling"]