[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6NJ72XJYEV4VDYBZVT69E5T":3,"skill-same:01M6NJ72XJYEV4VDYBZVT69E5T":94},{"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":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":53,"ownerDescription":54,"updatedAt":55,"install":56,"resources":69},"01M6NJ72XJYEV4VDYBZVT69E5T","git",null,"Git operations with conventional commits. Use for staging, committing, pushing, PRs, merges. Auto-splits commits by type\u002Fscope. Security scans for secrets.","tinhtute\u002Fmonoharness","tinhtute","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F51282340?v=4","01M6NHYENXPR3K033S3YDA62FW","TINHTUTE","01M6NHYETDANVFY82EPKRC4JFS",5,"MIT","https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fgit\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"cm","prs","splits","for","with","scope","git operations","cp","type","conventional commits","merge","auto","use","operations","haiku","commits","secrets","code","pr","2026-11-10 10:12:30",false,"---\nname: git\nversion: \"1.5.0\"\nmodel: haiku\ndescription: \"Git operations with conventional commits. Use for staging, committing, pushing, PRs, merges. Auto-splits commits by type\u002Fscope. Security scans for secrets.\"\nargument-hint: \"cm|cp|pr|merge [args]\"\ncompatibility: Designed for Claude Code\n---\n\n`git` owns no harness entity; a missing, stale, or broken harness never blocks it, and no harness command gates it. `cm`\u002F`cp` follow the steps below. `pr`\u002F`merge`: read `{baseDir}\u002Freferences\u002Fworkflow.md` now and follow it. Load `{baseDir}\u002Freferences\u002Fbranch-management.md` or `gh-cli-guide.md` only when the task needs them.\n\n\u003Csecurity>\n- Block destructive operations without confirmation\n\u003C\u002Fsecurity>\n\n## Arguments\n\n- `cm` — stage files & create commit(s)\n- `cp` — stage, commit, and push\n- `pr [to-branch] [from-branch]` — create a pull request (defaults: the repository's resolved base branch, current branch)\n- `merge [to-branch] [from-branch]` — merge branches (defaults: the repository's resolved base branch, current branch)\n\nNo argument: ask with the agent's question tool (`AskUserQuestion` on Claude Code) (header \"Git Operation\", question \"What would you like to do?\", options `cm`, `cp`, `pr`, `merge`).\n\n## Commit (`cm`, `cp`)\n\n### Step 1: Stage + analyze\n\nReview what changed first, then stage explicit paths — never a blanket stage, which the Anti-Patterns section below forbids for catching `.env`, secrets, and `node_modules`.\n\n```bash\ngit status --porcelain\ngit add path\u002Fto\u002Ffile1 path\u002Fto\u002Ffile2\ngit diff --cached --stat && git diff --cached --name-only\n```\n\nLeave anything you did not mean to commit unstaged; if `git status --porcelain` lists a path you cannot account for, ask before staging it.\n\n### Step 2: Security check\n\nA repo with this harness's pre-commit hook blocks staged secrets itself. Elsewhere, run `{baseDir}\u002Fscripts\u002Fscan-staged.sh`. It prints `ok` (exit 0) or one `secret: file:line` \u002F `file: path` line per hit (exit 1), never the value.\n\n**Exit 1: STOP, report its lines as-is, suggest env vars or `.gitignore`, offer `git restore --staged \u003Cfile>`. Do not commit.**\n\n### Step 3: Split decision\n\nRun `{baseDir}\u002Fscripts\u002Fgroup-staged.sh`; it prints `kind: file` per staged file (`deps`, `config`, `test`, `docs`, `code`). It already keeps a manifest with its lockfile (`deps`) and a co-located test with its source (`code`), because splitting either yields a commit that was never built or tested. Treat its grouping as final unless a file is plainly misfiled.\n\n**Single commit:** same type\u002Fscope, files ≤ 3, lines ≤ 50.\n**Multiple commits:** mixed types\u002Fscopes — one commit per group (`chore(config)`, `chore(deps)`, `test`, `feat`\u002F`fix` for `code:`, `docs`). Reset and re-stage per group: `git reset && git add file1 file2 && git commit -m \"type(scope): desc\"`.\n\nSearch for related GitHub issues and note them in the commit\u002FPR body.\n\n### Step 4: Commit\n\n```bash\ngit commit -m \"type(scope): description\"\n```\n\n**Format:** `type(scope): description`, under 72 characters, present tense\u002Fimperative (\"add\" not \"added\"), no trailing period, focused on WHAT not HOW.\n\n**Types (priority order):** `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`, `perf`, `build`, `ci`.\n\nAdd no attribution of your own; when the host or the user's instructions supply attribution lines for commits or PRs, use them exactly.\n\n### Step 5: Push (`cp`, or `cm` + explicit push request only)\n\n```bash\ngit status && git log origin\u002F$(git rev-parse --abbrev-ref HEAD)..HEAD --oneline 2>\u002Fdev\u002Fnull || echo \"NO_UPSTREAM\"\ngit push origin HEAD   # or: git push -u origin HEAD if NO_UPSTREAM\n```\n\n**Never force push to `main`, `master`, `production`, `prod`, or `release\u002F*`.** On a feature branch, force push only on explicit user request, and warn: \"Force push rewrites history. Collaborators may lose work.\"\n\n## Output Format\n\nReport the summary only, never raw command output.\n\n**Console output:**\n```\n✓ staged: N files (+X\u002F-Y lines)\n✓ security: passed\n✓ commit: HASH type(scope): description\n✓ pushed: yes\u002Fno\n```\n\n## Error Handling\n\n| Error | Action |\n|---|---|\n| Secrets detected | Block commit, show files |\n| No changes | Exit cleanly |\n| `rejected - non-fast-forward` \u002F push rejected | Suggest `git pull --rebase`, resolve, push again |\n| No upstream branch | `git push -u origin HEAD` |\n| Merge conflicts | Suggest manual resolution |\n| Authentication failed | Check `gh auth status` or SSH keys |\n\n## Anti-Patterns\n\n- Staging everything with `git add -A` instead of specific files — catches `.env`, secrets, `node_modules`.\n- Single commit when changes span multiple types\u002Fscopes — \"one commit is cleaner\" produces an un-reviewable diff, impossible to revert selectively.\n- Skipping the security scan because \"it's just config\" — config files often contain secrets or tokens.\n- Force pushing without explicit user confirmation — overwrites upstream work silently.\n\nExit condition — `cm`\u002F`cp`: changes staged, security-scanned, committed (single or split by group); `cp` additionally pushed.\n\nDefer to: `check` for code review before committing.\n","`git` owns no harness entity; a missing, stale, or broken harness never blocks it, and no harness command gates it. `cm`\u002F`cp` follow the steps below. `pr`\u002F`merge`: read `{baseDir}\u002Freferences\u002Fworkflow.md` now and follow it. Load `{baseDir}\u002Freferences\u002Fbranch-management.md` or `gh-cli-guide.md` only when the task needs them.\n\n\u003Csecurity>\n- Block destructive operations without confirmation\n\u003C\u002Fsecurity>\n\n## Arguments\n\n- `cm` — stage files & create commit(s)\n- `cp` — stage, commit, and push\n- `pr [to-branch] [from-branch]` — create a pull request (defaults: the repository's resolved base branch, current branch)\n- `merge [to-branch] [from-branch]` — merge branches (defaults: the repository's resolved base branch, current branch)\n\nNo argument: ask with the agent's question tool (`AskUserQuestion` on Claude Code) (header \"Git Operation\", question \"What would you like to do?\", options `cm`, `cp`, `pr`, `merge`).\n\n## Commit (`cm`, `cp`)\n\n### Step 1: Stage + analyze\n\nReview what changed first, then stage explicit paths — never a blanket stage, which the Anti-Patterns section below forbids for catching `.env`, secrets, and `node_modules`.\n\n```bash\ngit status --porcelain\ngit add path\u002Fto\u002Ffile1 path\u002Fto\u002Ffile2\ngit diff --cached --stat && git diff --cached --name-only\n```\n\nLeave anything you did not mean to commit unstaged; if `git status --porcelain` lists a path you cannot account for, ask before staging it.\n\n### Step 2: Security check\n\nA repo with this harness's pre-commit hook blocks staged secrets itself. Elsewhere, run `{baseDir}\u002Fscripts\u002Fscan-staged.sh`. It prints `ok` (exit 0) or one `secret: file:line` \u002F `file: path` line per hit (exit 1), never the value.\n\n**Exit 1: STOP, report its lines as-is, suggest env vars or `.gitignore`, offer `git restore --staged \u003Cfile>`. Do not commit.**\n\n### Step 3: Split decision\n\nRun `{baseDir}\u002Fscripts\u002Fgroup-staged.sh`; it prints `kind: file` per staged file (`deps`, `config`, `test`, `docs`, `code`). It already keeps a manifest with its lockfile (`deps`) and a co-located test with its source (`code`), because splitting either yields a commit that was never built or tested. Treat its grouping as final unless a file is plainly misfiled.\n\n**Single commit:** same type\u002Fscope, files ≤ 3, lines ≤ 50.\n**Multiple commits:** mixed types\u002Fscopes — one commit per group (`chore(config)`, `chore(deps)`, `test`, `feat`\u002F`fix` for `code:`, `docs`). Reset and re-stage per group: `git reset && git add file1 file2 && git commit -m \"type(scope): desc\"`.\n\nSearch for related GitHub issues and note them in the commit\u002FPR body.\n\n### Step 4: Commit\n\n```bash\ngit commit -m \"type(scope): description\"\n```\n\n**Format:** `type(scope): description`, under 72 characters, present tense\u002Fimperative (\"add\" not \"added\"), no trailing period, focused on WHAT not HOW.\n\n**Types (priority order):** `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`, `perf`, `build`, `ci`.\n\nAdd no attribution of your own; when the host or the user's instructions supply attribution lines for commits or PRs, use them exactly.\n\n### Step 5: Push (`cp`, or `cm` + explicit push request only)\n\n```bash\ngit status && git log origin\u002F$(git rev-parse --abbrev-ref HEAD)..HEAD --oneline 2>\u002Fdev\u002Fnull || echo \"NO_UPSTREAM\"\ngit push origin HEAD   # or: git push -u origin HEAD if NO_UPSTREAM\n```\n\n**Never force push to `main`, `master`, `production`, `prod`, or `release\u002F*`.** On a feature branch, force push only on explicit user request, and warn: \"Force push rewrites history. Collaborators may lose work.\"\n\n## Output Format\n\nReport the summary only, never raw command output.\n\n**Console output:**\n```\n✓ staged: N files (+X\u002F-Y lines)\n✓ security: passed\n✓ commit: HASH type(scope): description\n✓ pushed: yes\u002Fno\n```\n\n## Error Handling\n\n| Error | Action |\n|---|---|\n| Secrets detected | Block commit, show files |\n| No changes | Exit cleanly |\n| `rejected - non-fast-forward` \u002F push rejected | Suggest `git pull --rebase`, resolve, push again |\n| No upstream branch | `git push -u origin HEAD` |\n| Merge conflicts | Suggest manual resolution |\n| Authentication failed | Check `gh auth status` or SSH keys |\n\n## Anti-Patterns\n\n- Staging everything with `git add -A` instead of specific files — catches `.env`, secrets, `node_modules`.\n- Single commit when changes span multiple types\u002Fscopes — \"one commit is cleaner\" produces an un-reviewable diff, impossible to revert selectively.\n- Skipping the security scan because \"it's just config\" — config files often contain secrets or tokens.\n- Force pushing without explicit user confirmation — overwrites upstream work silently.\n\nExit condition — `cm`\u002F`cp`: changes staged, security-scanned, committed (single or split by group); `cp` additionally pushed.\n\nDefer to: `check` for code review before committing.\n",{"name":5,"model":33,"version":43,"description":7,"argument-hint":44,"compatibility":45},"1.5.0","cm|cp|pr|merge [args]","Designed for Claude Code","master","00bd5271da30679f867f003d9d0b09ee174a7152","skills\u002Ftools\u002Fgit",0,"https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness","https:\u002F\u002Fharness.tinhtute.me","https:\u002F\u002Fgithub.com\u002Ftinhtute","tinhtute.me","𝙻 𝙾 𝚂 𝙴 𝚁 ✨🚀","2026-11-13 00:22:18",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add tinhtute\u002Fmonoharness --skill git",{"tool":62,"command":63},"bunx","bunx skills add tinhtute\u002Fmonoharness --skill git",{"tool":65,"command":66},"pnpm","pnpm dlx skills add tinhtute\u002Fmonoharness --skill git","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fgit\u002FSKILL.md",true,[70,76,80,84,90],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fbranch-management.md","REFERENCE","参考文档",1887,"https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fgit\u002Freferences\u002Fbranch-management.md",{"path":77,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fgh-cli-guide.md",2722,"https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fgit\u002Freferences\u002Fgh-cli-guide.md",{"path":81,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fworkflow.md",3984,"https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fgit\u002Freferences\u002Fworkflow.md",{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fgroup-staged.sh","SCRIPT","脚本",1410,"https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fgit\u002Fscripts\u002Fgroup-staged.sh",{"path":91,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fscan-staged.sh",896,"https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fgit\u002Fscripts\u002Fscan-staged.sh",[95,124,150,179,201,220],{"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":106,"publishedAt":38},"01M6NJ7YY1Q5V2JYZ401YHKJVK","read","Search the web and fetch URLs or PDFs as clean Markdown via a privacy-first cascade (local, gh, TinyFish\u002FFirecrawl\u002FExa, opt-in proxy). Use to read, cite or save a URL. Not for repo files.","https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fread\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[97,107,108,109,110,22,111,112,113,114,115,116,117,31,118,119,120,36,121,122,123],"as","fetch","PDF","proxy","repo","search","local","clean","tinyfish","gh","files","URL","exa","query","first","web","opt",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":38},"01M6WWM7Y4Q4C1NN9DRC33J6F8","mono-write","Polish a research or learn draft (EN\u002FVI) so it reads naturally, and write CHANGELOG entries and release notes from a commit list. Not for UI copy, marketing or tone changes.","https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Fmono-write\u002FSKILL.md",[],[131,132,133,22,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149],"mono write","mono","write","en","entries","release notes","learn","commit","write changelog","tone","draft","notes","changelog","research","changes","release","polish","list","marketing",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":164,"publishedAt":38},"01M6NJ76P0AMQBPZSZQB38P0TT","librarian","GitHub code research via gh CLI, no cloning. Use to investigate external repos, find where a symbol is defined, or gather cited evidence and usage examples from GitHub.","https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Ftools\u002Flibrarian\u002FSKILL.md",[156,159],{"categoryNo":157,"categoryName":158,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":160,"categoryName":161,"taxonomyType":162,"taxonomyTypeDesc":163},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[152,165,166,22,111,112,167,168,116,31,120,169,36,170,171,33,144,172,173,174,175,97,176,177,178],"usage","evidence","gh-cli","github code","Bash","examples","investigate","cli","code research","github","cloning","repos","gh cli","gather",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":38},"01M6NJ6BBWY0ZTGKE4TNA6W3KF","work","Execution orchestrator after `brainstorm` (and `to-plan` for high-risk). Runs phases wave-by-wave from locked artifacts, verifies each task, and hands off to `check`, `git`, or `handoff`.","https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Fstages\u002Fwork\u002FSKILL.md",[],[181,186,22,187,188,189,30,190,36,191,192,142,193,194,195,196,197,5,198,199,200],"risk","mode","brainstorm","execution","artifacts","task","check","plan","simple","high","orchestrator","name","full","handoff","phase",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":207,"publishedAt":38},"01M6WWM38JH25Y72M733S1WT9G","wayfinder","Chart a Goal too fogged for one session as a decision map in the active plan, settle one decision per session, then hand it to brainstorm lock. Use when grilling shows the work spans sessions.","https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Fstages\u002Fwayfinder\u002FSKILL.md",[],[203,107,22,208,188,209,210,211,212,31,213,214,215,36,216,217,218,181,193,219],"session","decision","sessions","map","settle","chart","when","file","hand","lock","resume","decision map",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":226,"publishedAt":38},"01M6NJ65CX2MAJ9RTCMMDN2ZN9","watzup","Recap: read branch state, committed + uncommitted changes, handoff context, and artifact chain — then recommend the next action.","https:\u002F\u002Fgithub.com\u002Ftinhtute\u002Fmonoharness\u002Fblob\u002Fmaster\u002Fskills\u002Fstages\u002Fwatzup\u002FSKILL.md",[],[222,227,228,145,229,230,231,22,97,232,233,234,36,235,199],"state","branch","artifact","chain","next","recommend","action","recap","context"]