[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7EE46YCRCN7GMCKHJS65P4B":3,"skill-same:01M7EE46YCRCN7GMCKHJS65P4B":46},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":13,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":29,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M7EE46YCRCN7GMCKHJS65P4B","merge",null,"antoine-tena\u002Fion-repo","antoine-tena","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F246046300?v=4","01M7EE1A7TQJKDACMM6WV5VEVY","Antoine-Tena","01M7EE1A8C65TRR9E6FKXEXBG3",3,"MIT","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Fmerge\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: merge\ndescription: Finishes work: fast linters on changed files, new duplicated code judged, merge into develop, push, delete branch and worktree, update the repo's plugin. No CI. Use at end of work or when asked to merge.\nargument-hint: \"[branch]\"\n---\n\nBranch: `$ARGUMENTS`, else current. Integration branch: per project `CLAUDE.md`, else `develop` if it exists, else `origin`'s default. Direct merge, no PR or approval ([NO-COMMIT-ON-MAIN]); an open PR turns \"Merged\" at step 4's push. Talk in the user's language.\n\n1. `git status --porcelain` must be empty, else stop and say so. Run `\u002Frepo:review \u003Cbranch>`: pushed commits are public for good. Its tidying happens before merge; what it leaves to the user: tell them, wait for their decision.\n   Fast linters in the branch's worktree, only on changed files (`git diff --name-only --diff-filter=d \u003Cintegration>...\u003Cbranch>`): `ruff check` and `ruff format --check` on Python, `eslint` on JS\u002FTS\u002FVue, the like for other languages (ion-repo: `uv run ruff check \u003Cfiles>`, `uv run ruff format --check \u003Cfiles>`). No type checker, test, `ion repo check` or `ion repo ci`: the release runs them. No such file: run nothing. Failure: fix on the branch, never merge red.\n   Then `ion repo clones` in the worktree: the duplicated code the branch brought, `copy ← original`, found without Claude (jscpd). Judge each line, the original read first: reuse it (call it instead of the copy), adapt it to serve both, or keep the copy (the two will diverge, a test's or data's repetition). A reuse or an adaptation is a commit on the branch, linters run again on what it touched; a kept copy is named in the debrief with why. Never blocks the merge.\n2. If moved into the worktree (`EnterWorktree`), leave it now with `ExitWorktree` (`action: \"keep\"`): an isolated session refuses to merge from the main tree. Then `git pull --ff-only origin \u003Cintegration>`, then `git merge --no-ff \u003Cbranch> -m \"Merge branch '\u003Cbranch>' into \u003Cintegration>\"`, from the main tree if on the integration branch, else `git -C` on a worktree that is. Never switch the main tree's branch under another session.\n3. Conflict: stop, show files, propose a resolution.\n4. `git push origin \u003Cintegration>`.\n5. Delete worktree and branches now, only if both hold, else delete nothing and say which failed and why:\n   - `git fetch -q origin`, then `git merge-base --is-ancestor \u003Cbranch> origin\u002F\u003Cintegration>` succeeds;\n   - `git -C \u003Cwt> status --porcelain` empty.\n   Then `git worktree remove .claude\u002Fworktrees\u002F\u003Cname>` (never `--force`), `git branch -d \u003Cbranch>` (never `-D`), and if on GitHub (`git ls-remote --heads origin \u003Cbranch>`) `git push origin --delete \u003Cbranch>`.\n6. Repo ships a plugin (`.claude-plugin\u002Fmarketplace.json` at root; ion-repo and every family tool): update the installed copy, else a just-merged skill stays `Unknown command` in new sessions. For each `\u003Cplugin>` listed, under catalog `name` `\u003Cmarket>` (`\u003Ctool>@\u003Ctool>` for a family tool):\n   - `claude plugin list --json`: entries with `id` `\u003Cplugin>@\u003Cmarket>`. None: not installed, do nothing.\n   - Once, after step 4's push (a GitHub marketplace reclones): `claude plugin marketplace update \u003Cmarket>`.\n   - `claude plugin update \u003Cplugin>@\u003Cmarket> --scope \u003Cscope>` for each scope found, only those: `user` from anywhere; `project`, `local` from the main tree if the entry's `projectPath` is this repo (`cd \u003CprojectPath> && …`). Another repo's `projectPath`: leave it.\n   - Tell the user to restart Claude Code: plugins load at launch.\n   Local-folder plugin (`readFromFolder`, ion-repo here): same commands, harmless if version unchanged.\n7. No CI: it runs only on the release branch (`\u002Frepo:release`). Report in the `repo` plugin's `debrief` format (`output-styles\u002Fdebrief.md`). Suggest `\u002Fclear` under its **◆ Blocked**, in one line, only after a long session or before an unrelated subject; otherwise say nothing of it.\n","Branch: `$ARGUMENTS`, else current. Integration branch: per project `CLAUDE.md`, else `develop` if it exists, else `origin`'s default. Direct merge, no PR or approval ([NO-COMMIT-ON-MAIN]); an open PR turns \"Merged\" at step 4's push. Talk in the user's language.\n\n1. `git status --porcelain` must be empty, else stop and say so. Run `\u002Frepo:review \u003Cbranch>`: pushed commits are public for good. Its tidying happens before merge; what it leaves to the user: tell them, wait for their decision.\n   Fast linters in the branch's worktree, only on changed files (`git diff --name-only --diff-filter=d \u003Cintegration>...\u003Cbranch>`): `ruff check` and `ruff format --check` on Python, `eslint` on JS\u002FTS\u002FVue, the like for other languages (ion-repo: `uv run ruff check \u003Cfiles>`, `uv run ruff format --check \u003Cfiles>`). No type checker, test, `ion repo check` or `ion repo ci`: the release runs them. No such file: run nothing. Failure: fix on the branch, never merge red.\n   Then `ion repo clones` in the worktree: the duplicated code the branch brought, `copy ← original`, found without Claude (jscpd). Judge each line, the original read first: reuse it (call it instead of the copy), adapt it to serve both, or keep the copy (the two will diverge, a test's or data's repetition). A reuse or an adaptation is a commit on the branch, linters run again on what it touched; a kept copy is named in the debrief with why. Never blocks the merge.\n2. If moved into the worktree (`EnterWorktree`), leave it now with `ExitWorktree` (`action: \"keep\"`): an isolated session refuses to merge from the main tree. Then `git pull --ff-only origin \u003Cintegration>`, then `git merge --no-ff \u003Cbranch> -m \"Merge branch '\u003Cbranch>' into \u003Cintegration>\"`, from the main tree if on the integration branch, else `git -C` on a worktree that is. Never switch the main tree's branch under another session.\n3. Conflict: stop, show files, propose a resolution.\n4. `git push origin \u003Cintegration>`.\n5. Delete worktree and branches now, only if both hold, else delete nothing and say which failed and why:\n   - `git fetch -q origin`, then `git merge-base --is-ancestor \u003Cbranch> origin\u002F\u003Cintegration>` succeeds;\n   - `git -C \u003Cwt> status --porcelain` empty.\n   Then `git worktree remove .claude\u002Fworktrees\u002F\u003Cname>` (never `--force`), `git branch -d \u003Cbranch>` (never `-D`), and if on GitHub (`git ls-remote --heads origin \u003Cbranch>`) `git push origin --delete \u003Cbranch>`.\n6. Repo ships a plugin (`.claude-plugin\u002Fmarketplace.json` at root; ion-repo and every family tool): update the installed copy, else a just-merged skill stays `Unknown command` in new sessions. For each `\u003Cplugin>` listed, under catalog `name` `\u003Cmarket>` (`\u003Ctool>@\u003Ctool>` for a family tool):\n   - `claude plugin list --json`: entries with `id` `\u003Cplugin>@\u003Cmarket>`. None: not installed, do nothing.\n   - Once, after step 4's push (a GitHub marketplace reclones): `claude plugin marketplace update \u003Cmarket>`.\n   - `claude plugin update \u003Cplugin>@\u003Cmarket> --scope \u003Cscope>` for each scope found, only those: `user` from anywhere; `project`, `local` from the main tree if the entry's `projectPath` is this repo (`cd \u003CprojectPath> && …`). Another repo's `projectPath`: leave it.\n   - Tell the user to restart Claude Code: plugins load at launch.\n   Local-folder plugin (`readFromFolder`, ion-repo here): same commands, harmless if version unchanged.\n7. No CI: it runs only on the release branch (`\u002Frepo:release`). Report in the `repo` plugin's `debrief` format (`output-styles\u002Fdebrief.md`). Suggest `\u002Fclear` under its **◆ Blocked**, in one line, only after a long session or before an unrelated subject; otherwise say nothing of it.\n",{},"develop","e6de2f79fc1da5627cbf8370c3429680899389c4","plugins\u002Frepo\u002Fskills\u002Fmerge","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo","https:\u002F\u002Fpypi.org\u002Fproject\u002Fkiln-cli\u002F","https:\u002F\u002Fgithub.com\u002Fantoine-tena","annski.fr","🚀 AI Eng | Multi-agent loops (LangGraph) | Observability: OpenTelemetry • Phoenix | Pres & Lead Dev @AnnSki - Django Ninja • Nuxt • Podman ","2026-11-15 05:35:20",{"source":7,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add antoine-tena\u002Fion-repo --skill merge",{"tool":38,"command":39},"bunx","bunx skills add antoine-tena\u002Fion-repo --skill merge",{"tool":41,"command":42},"pnpm","pnpm dlx skills add antoine-tena\u002Fion-repo --skill merge","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Fmerge\u002FSKILL.md",true,[],[47,54,61,68,75,84],{"skillNo":48,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":53,"publishedAt":18},"01M7EE5FTQ8BVEGXJ7MMBT262V","worktree","Create a work branch in a ready-to-use git worktree. The normal way to start a branch, so as not to cross another session in the main tree.","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Fworktree\u002FSKILL.md",[],[],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":18},"01M7EE5CZ7CE9S93H7JK0WKD2T","update","Update ion-repo - the ion-repo tool of the machine and its plugins, then the open repo (ion repo update, on a branch merged right away into develop). Use when the user asks to update ion-repo, or accepts the update offered at session start.","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Fupdate\u002FSKILL.md",[],[],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":18},"01M7EE59W4TMAZH6PB680GBRAK","token","Set up a service's credentials (PyPI, Stripe, an API, a host…) in a `.\u003Cservice>\u002F` folder at the repo root (`token`, chmod 600, and `config` on its scope), with one command that pastes the token unseen. Use when a task needs an API key or a token, or when the user wants to give one.","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Ftoken\u002FSKILL.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":18},"01M7EE534SWGRB6H96DBVQ7Z06","statusline","Change the look of the status line - its style, its colors, among them the chat's (the person's and Claude's) - each shown before it is chosen. Use when the user wants another status line, other colors for it, or from `\u002Frepo:look`.","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Fstatusline\u002FSKILL.md",[],[],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":79,"licenseFileUrl":80,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":18},"01M7EE4WHZ80XRXHR226AFBNSA","skill","Write or sharpen a skill of an Ion tool's plugin - intent, SKILL.md in the right craft's plugin, one trigger case, docs; tested with `claude plugin eval` only on request. Use when the user wants a new skill, to fix one, or to check one fires and does its job.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Fskill\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Fskill\u002FSKILL.md",[],[],{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":18},"01M7EE4TCY485ZC23XWTMFXQ78","review","https:\u002F\u002Fgithub.com\u002Fantoine-tena\u002Fion-repo\u002Fblob\u002Fdevelop\u002Fplugins\u002Frepo\u002Fskills\u002Freview\u002FSKILL.md",[],[]]