[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HWTS8DTXZGA2PFXC1RSNF1":3,"skill-same:01M6HWTS8DTXZGA2PFXC1RSNF1":73},{"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":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6HWTS8DTXZGA2PFXC1RSNF1","GitLearn",null,"Mines durable LTM memories from past git commits through the git-learner agent (no API key needed). Use when the user says 'learn from our git history', 'mine the last N commits', 'backfill memories since \u003Cdate>', 'onboard this repo into LTM', or wants to harvest patterns after a sprint.","RohiRIK\u002FOpenLtm","RohiRIK","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F108658615?v=4","01M6HWTC7929WJNW4TQKGA8RDF","Rohi Rikman","01M6HWTCBBCQZ3M6RAWRMRNCHB",30,"MIT","https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fskills\u002FGitLearn\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"patterns","past","last","mm","learner","sprint","mine","harvest","memories","learn","use","user","repo","history","onboard","commits","api","dd","git","2026-11-10 10:12:30",false,"---\nname: GitLearn\ndescription: \"Mines durable LTM memories from past git commits through the git-learner agent (no API key needed). Use when the user says 'learn from our git history', 'mine the last N commits', 'backfill memories since \u003Cdate>', 'onboard this repo into LTM', or wants to harvest patterns after a sprint.\"\nargument-hint: \"[--commits N | --since YYYY-MM-DD]\"\nversion: 1.4.0\n---\n\n# GitLearn — Retroactive Git Commit Learning\n\nExtract durable LTM memories from past git commits by delegating the read-and-extract\nwork to the dedicated **`git-learner`** agent (shipped with this plugin). The agent\nreads the diffs and stores memories via the `learn` MCP tool, so this path needs\n**no API key** and keeps the main thread's context clean (raw diffs stay in the agent).\n\n## Scope\n\n| Argument or request | Commits processed |\n|----------------|-------------------|\n| *(none)* | last 10 |\n| `--commits N` | last N |\n| `--since YYYY-MM-DD` | all commits since that date |\n\n## When to Use\n\n- Onboarding a new project into LTM — seed memories from existing commit history.\n- Backfilling history after enabling `gitLearnEnabled` for the first time.\n- Harvesting reusable patterns after a productive sprint.\n\n## How It Works\n\nThe background post-commit hook (`GitCommit.ts`) calls an LLM API directly and needs\na configured key. This skill runs interactively instead, so it spawns the\n**`git-learner`** agent via the Agent tool. Spawning an agent is valid here because\nskills execute in the live Claude Code session, which has the Agent tool available.\nThe agent carries its own extraction rubric (signal-to-noise rules, category mapping,\nstorage fields), so this skill only has to supply the scope.\n\n## Instructions for Claude\n\n### Step 1 — Resolve scope\n\nDetermine the commit range from the arguments or the user's wording (default: last 10). Capture the\nrepo root so the subagent runs git in the right directory:\n\n```bash\ngit rev-parse --show-toplevel\ngit log --pretty=format:'%H %s' -\u003CN>   # or --since=\"\u003Cdate>\"\n```\n\n### Step 2 — Spawn the `git-learner` agent once\n\nCall the Agent tool once with `subagent_type: \"openltm:git-learner\"` (plugin agents are namespaced by plugin name). A single agent processes\nthe whole batch — do not spawn one per commit. The agent's system prompt already holds\nthe extraction rubric, so the spawn prompt only supplies a `\u003Cscope>` block:\n\n```xml\n\u003Cscope>\nREPO_ROOT: \u003Crepo root from git rev-parse --show-toplevel>\nPROJECT_NAME: \u003Crepo directory basename>\nCOMMITS:\n\u003Cone commit hash per line, from Step 1>\n\u003C\u002Fscope>\n```\n\nPass nothing else — no rubric, no instructions. The agent knows what to keep, what to\nskip, how to map categories, and which fields to store.\n\n### Step 3 — Report\n\nRelay the subagent's table and total. Memories are tagged `git-commit:\u003Chash>` and\nanchored to the changed files (so later commits flag them stale), queryable via\n`mcp__plugin_openltm_memory__recall`. Tool names and categories: the **Ltm** skill\n([..\u002FLtm\u002FSKILL.md](..\u002FLtm\u002FSKILL.md)).\n\n## Memory Integration\n\n- Before: `mcp__plugin_openltm_memory__recall query=\"git commit patterns\"` — check what's\n  already stored, so the subagent reinforces rather than duplicates.\n- After: confirm new rows with a recall scoped to the project.\n","# GitLearn — Retroactive Git Commit Learning\n\nExtract durable LTM memories from past git commits by delegating the read-and-extract\nwork to the dedicated **`git-learner`** agent (shipped with this plugin). The agent\nreads the diffs and stores memories via the `learn` MCP tool, so this path needs\n**no API key** and keeps the main thread's context clean (raw diffs stay in the agent).\n\n## Scope\n\n| Argument or request | Commits processed |\n|----------------|-------------------|\n| *(none)* | last 10 |\n| `--commits N` | last N |\n| `--since YYYY-MM-DD` | all commits since that date |\n\n## When to Use\n\n- Onboarding a new project into LTM — seed memories from existing commit history.\n- Backfilling history after enabling `gitLearnEnabled` for the first time.\n- Harvesting reusable patterns after a productive sprint.\n\n## How It Works\n\nThe background post-commit hook (`GitCommit.ts`) calls an LLM API directly and needs\na configured key. This skill runs interactively instead, so it spawns the\n**`git-learner`** agent via the Agent tool. Spawning an agent is valid here because\nskills execute in the live Claude Code session, which has the Agent tool available.\nThe agent carries its own extraction rubric (signal-to-noise rules, category mapping,\nstorage fields), so this skill only has to supply the scope.\n\n## Instructions for Claude\n\n### Step 1 — Resolve scope\n\nDetermine the commit range from the arguments or the user's wording (default: last 10). Capture the\nrepo root so the subagent runs git in the right directory:\n\n```bash\ngit rev-parse --show-toplevel\ngit log --pretty=format:'%H %s' -\u003CN>   # or --since=\"\u003Cdate>\"\n```\n\n### Step 2 — Spawn the `git-learner` agent once\n\nCall the Agent tool once with `subagent_type: \"openltm:git-learner\"` (plugin agents are namespaced by plugin name). A single agent processes\nthe whole batch — do not spawn one per commit. The agent's system prompt already holds\nthe extraction rubric, so the spawn prompt only supplies a `\u003Cscope>` block:\n\n```xml\n\u003Cscope>\nREPO_ROOT: \u003Crepo root from git rev-parse --show-toplevel>\nPROJECT_NAME: \u003Crepo directory basename>\nCOMMITS:\n\u003Cone commit hash per line, from Step 1>\n\u003C\u002Fscope>\n```\n\nPass nothing else — no rubric, no instructions. The agent knows what to keep, what to\nskip, how to map categories, and which fields to store.\n\n### Step 3 — Report\n\nRelay the subagent's table and total. Memories are tagged `git-commit:\u003Chash>` and\nanchored to the changed files (so later commits flag them stale), queryable via\n`mcp__plugin_openltm_memory__recall`. Tool names and categories: the **Ltm** skill\n([..\u002FLtm\u002FSKILL.md](..\u002FLtm\u002FSKILL.md)).\n\n## Memory Integration\n\n- Before: `mcp__plugin_openltm_memory__recall query=\"git commit patterns\"` — check what's\n  already stored, so the subagent reinforces rather than duplicates.\n- After: confirm new rows with a recall scoped to the project.\n",{"name":5,"version":48,"description":7,"argument-hint":49},"1.4.0","[--commits N | --since YYYY-MM-DD]","main","4d24e9c5d547f33883581d9153af3d70fb8307bd","skills\u002FGitLearn",2,"https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm","https:\u002F\u002Fgithub.com\u002FRohiRIK","https:\u002F\u002FCloudJourneyBlog.rohi-lab.org","Cloud security & infrastructure engineer. M365, Azure, GCP, Docker. I build the tools I wish existed, then publish what broke.","2026-11-10 01:34:10",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add RohiRIK\u002FOpenLtm --skill GitLearn",{"tool":65,"command":66},"bunx","bunx skills add RohiRIK\u002FOpenLtm --skill GitLearn",{"tool":68,"command":69},"pnpm","pnpm dlx skills add RohiRIK\u002FOpenLtm --skill GitLearn","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fskills\u002FGitLearn\u002FSKILL.md",true,[],[74,99,123,142,158,174],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":43},"01M6HWV9N0VAH3S0R73X665PGA","Spec","Writes a grounded spec: recalls prior decisions from LTM, explores the affected code, then writes testable acceptance criteria to specs\u002F\u003Cfeature>.md. Use when the user asks to 'spec this', 'write a spec', 'define what to build', or 'write requirements \u002F acceptance criteria' before planning or implementing a feature or bug fix.","https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fskills\u002FSpec\u002FSKILL.md",[],[81,82,83,84,85,86,87,88,89,90,91,92,34,93,35,94,95,96,97,98],"spec","bug","Ltm","implementing","affected","false","feature","define","requirements","acceptance criteria","build","code","fix","write","decisions","bug fix","acceptance","planning",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":106,"publishedAt":43},"01M6HWV3QNVQYQSVSVMKKK6N80","MemoryReview","Curation pass over OpenLTM memory: triage pending session-end proposals, stale-flagged memories, conflicting or superseded entries, and low-value duplicates, then accept, revalidate, relate, or forget them with the user's approval. Use when the user says 'review memories', 'clean up memory', 'curate LTM', 'what's pending', 'any memory proposals', 'prune stale memories', or after a refactor that may have invalidated what LTM knows.","https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fskills\u002FMemoryReview\u002FSKILL.md",[105],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[101,107,33,108,109,110,111,32,112,113,114,115,34,116,117,118,119,120,121,122],"up","with","end","admin","entries","clean","forget","duplicates","audit","plugin","session","proposals","read","review","MCP","memory",{"skillNo":124,"name":83,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":43},"01M6HWTZ80H2RGVVYGBK7EZN6R","OpenLTM long-term memory: tool names, the recall-before \u002F learn-after ritual, categories, project context, and what the hooks already inject. Use when the user says 'remember this', 'save this gotcha', 'what do we know about X', 'did we decide on Y before', 'forget that memory', 'link these memories', 'restore project context', 'set the project goal' — or before non-trivial work that may touch past decisions.","https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fskills\u002FLtm\u002FSKILL.md",[],[83,129,33,130,122,131,132,133,134,135,32,136,113,137,138,34,95,139,140,141],"touch","remember","SET","do","categories","long","project","what the","restore","hooks","decide","work","tool",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":149,"publishedAt":43},"01M6HWTPKAWJ7XK8VCKK4RBJ23","secret-safe-handling","USE WHEN handling credentials, env vars, logs, tests, or docs safely.","https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fpackages\u002Fopenltm-core\u002Fassets\u002Fopencode\u002Fskills\u002FSecretSafeHandling\u002FSKILL.md",[148],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[150,151,152,153,154,34,155,156,157],"secret safe handling","safe","docs","env","tests","credentials","env vars","logs",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":43},"01M6HWTJP9C0CGSPFRMNY7XYSR","command-path-safety","USE WHEN hardening command execution, path handling, or installer boundaries.","https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fpackages\u002Fopenltm-core\u002Fassets\u002Fopencode\u002Fskills\u002FCommandPathSafety\u002FSKILL.md",[164],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[166,167,168,169,170,171,34,172,173],"path","command path safety","command","Safety","path safety","installer","execution","hardening",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":181,"publishedAt":43},"01M6HWTEC222W46TD16S70XJ4W","agent-trust-boundaries","USE WHEN separating trusted instructions from untrusted content or tool output.","https:\u002F\u002Fgithub.com\u002FRohiRIK\u002FOpenLtm\u002Fblob\u002Fmain\u002Fpackages\u002Fopenltm-core\u002Fassets\u002Fopencode\u002Fskills\u002FAgentTrustBoundaries\u002FSKILL.md",[180],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[182,183,184,34,185,141,186],"agent trust boundaries","trust","output","instructions","content"]