[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5ADE2Z04R8N9Y99MFZAFS":3,"skill-same:01M6C5ADE2Z04R8N9Y99MFZAFS":53},{"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":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":6,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M6C5ADE2Z04R8N9Y99MFZAFS","ops-learn",null,"Extract durable patterns and persist them to the right memory sink.","Lyther\u002Fagent-surface","Lyther","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F29906124?v=4","01M6C587M9T34T0SAGJSRK043Y","Enderaoe","01M6C587R0TXH3MFR8SRFPV61G",65,"MIT","https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fops-learn\u002FSKILL.md",[],[19,20,21,22,23,24,25],"learn","ops","ops learn","memory","extract","patterns","persist","2026-11-10 10:12:30",false,"---\nname: ops-learn\ndescription: \"Extract durable patterns and persist them to the right memory sink.\"\n---\n\n## Objective\n\nAfter a concrete incident, extract the pattern behind it, classify its durability, and persist it to the right memory sink, so the same tactical bug does not recur and the same stable preference is not re-taught. `ops-learn` is the manual, immediate fast path; the continual-learning plugin mines transcripts and keeps `AGENTS.md` current over time.\n\n## Sinks\n\n| Kind | Sink |\n|---|---|\n| Durable user preference: a stable user correction or preference | `AGENTS.md`, `## Learned User Preferences` |\n| Durable workspace fact: a stable repo or tooling fact | `AGENTS.md`, `## Learned Workspace Facts` |\n| Tactical lesson: repeat bug pattern, local gotcha or anti-pattern, short-lived engineering heuristic | `.cursor\u002Flessons.md` |\n| Transient one-off incident detail | do not persist |\n\nTactical bug mechanics never go in `AGENTS.md`. When a lesson is both tactical and durable, write one concise tactical bullet to `.cursor\u002Flessons.md` and one durable bullet to the correct `AGENTS.md` learned section. Never edit the plugin-owned state `.cursor\u002Fhooks\u002Fstate\u002Fcontinual-learning*.json` (`continual-learning.json`, `continual-learning-index.json`); the plugin owns transcript mining and index refresh.\n\n## Procedure\n\n1. Find the root cause, not the surface: \"the build failed\" becomes \"production code imported a type from development dependencies\". Record the anti-pattern, not the stack trace.\n2. Choose the sink first.\n3. Classify the failure mode: knowledge gap (\"didn't know API X changed\"), process failure (\"forgot to run tests before commit\"), or tooling gap (\"linter didn't catch it\").\n4. Write the lesson in under 2 lines, general rather than specific (\"don't hardcode IDs\", not \"don't hardcode ID 123\"): \"Always use Optional Chaining (`?.`) on nullable relations\", not \"We forgot to check if the user was null before accessing the id property in the service.\" Skip it when an equivalent lesson already exists.\n5. Tactical: add it to `.cursor\u002Flessons.md` in the file's existing sectioned bullet style, as `- [Topic] Lesson learned (Context)` or tighter, e.g. `- [Docker] Always pin base images to SHA, not tags.`\n6. Durable: if `AGENTS.md` does not exist, create it with only `## Learned User Preferences` and `## Learned Workspace Facts`. Add plain bullets only inside those two sections, e.g. `- Prefer exact, verifiable file counts in plans — do not estimate.` Deduplicate semantically similar bullets, keep each section to at most 12 bullets, and preserve the generated rule content above them. Never move durable facts into `rules\u002F*.mdc`; those files are policy source, not learned memory.\n\n## Output\n\n```markdown\n# LESSON LEARNED\n\n## The Incident\n- **What**: Production crash on null user.\n- **Why**: We assumed `req.user` is always present after auth middleware, but it's optional.\n\n## The Classification\n- **Memory Type**: Tactical lesson\n- **Failure Mode**: Knowledge gap\n- **Target**: `.cursor\u002Flessons.md`\n\n## The Lesson\n- **Category**: TypeScript \u002F Express\n- **Rule**: \"Treat `req.user` as `User | undefined`, even in protected routes.\"\n\n## Action\n- ✅ Added to `.cursor\u002Flessons.md`\n- ⚠️ Recommended adding lint rule `strict-null-checks`.\n- ➖ No durable `AGENTS.md` update needed.\n```\n","## Objective\n\nAfter a concrete incident, extract the pattern behind it, classify its durability, and persist it to the right memory sink, so the same tactical bug does not recur and the same stable preference is not re-taught. `ops-learn` is the manual, immediate fast path; the continual-learning plugin mines transcripts and keeps `AGENTS.md` current over time.\n\n## Sinks\n\n| Kind | Sink |\n|---|---|\n| Durable user preference: a stable user correction or preference | `AGENTS.md`, `## Learned User Preferences` |\n| Durable workspace fact: a stable repo or tooling fact | `AGENTS.md`, `## Learned Workspace Facts` |\n| Tactical lesson: repeat bug pattern, local gotcha or anti-pattern, short-lived engineering heuristic | `.cursor\u002Flessons.md` |\n| Transient one-off incident detail | do not persist |\n\nTactical bug mechanics never go in `AGENTS.md`. When a lesson is both tactical and durable, write one concise tactical bullet to `.cursor\u002Flessons.md` and one durable bullet to the correct `AGENTS.md` learned section. Never edit the plugin-owned state `.cursor\u002Fhooks\u002Fstate\u002Fcontinual-learning*.json` (`continual-learning.json`, `continual-learning-index.json`); the plugin owns transcript mining and index refresh.\n\n## Procedure\n\n1. Find the root cause, not the surface: \"the build failed\" becomes \"production code imported a type from development dependencies\". Record the anti-pattern, not the stack trace.\n2. Choose the sink first.\n3. Classify the failure mode: knowledge gap (\"didn't know API X changed\"), process failure (\"forgot to run tests before commit\"), or tooling gap (\"linter didn't catch it\").\n4. Write the lesson in under 2 lines, general rather than specific (\"don't hardcode IDs\", not \"don't hardcode ID 123\"): \"Always use Optional Chaining (`?.`) on nullable relations\", not \"We forgot to check if the user was null before accessing the id property in the service.\" Skip it when an equivalent lesson already exists.\n5. Tactical: add it to `.cursor\u002Flessons.md` in the file's existing sectioned bullet style, as `- [Topic] Lesson learned (Context)` or tighter, e.g. `- [Docker] Always pin base images to SHA, not tags.`\n6. Durable: if `AGENTS.md` does not exist, create it with only `## Learned User Preferences` and `## Learned Workspace Facts`. Add plain bullets only inside those two sections, e.g. `- Prefer exact, verifiable file counts in plans — do not estimate.` Deduplicate semantically similar bullets, keep each section to at most 12 bullets, and preserve the generated rule content above them. Never move durable facts into `rules\u002F*.mdc`; those files are policy source, not learned memory.\n\n## Output\n\n```markdown\n# LESSON LEARNED\n\n## The Incident\n- **What**: Production crash on null user.\n- **Why**: We assumed `req.user` is always present after auth middleware, but it's optional.\n\n## The Classification\n- **Memory Type**: Tactical lesson\n- **Failure Mode**: Knowledge gap\n- **Target**: `.cursor\u002Flessons.md`\n\n## The Lesson\n- **Category**: TypeScript \u002F Express\n- **Rule**: \"Treat `req.user` as `User | undefined`, even in protected routes.\"\n\n## Action\n- ✅ Added to `.cursor\u002Flessons.md`\n- ⚠️ Recommended adding lint rule `strict-null-checks`.\n- ➖ No durable `AGENTS.md` update needed.\n```\n",{"name":5,"description":7},"main","bb71e1631303bd27cb8ac18dc04830c97db8ac4d","skills\u002Fops-learn",0,"https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface","https:\u002F\u002Fgithub.com\u002FLyther","Why so serious?","2026-11-07 23:04:38",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add Lyther\u002Fagent-surface --skill ops-learn",{"tool":45,"command":46},"bunx","bunx skills add Lyther\u002Fagent-surface --skill ops-learn",{"tool":48,"command":49},"pnpm","pnpm dlx skills add Lyther\u002Fagent-surface --skill ops-learn","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fops-learn\u002FSKILL.md",true,[],[54,80,94,108,127,138],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":65,"publishedAt":26},"01M6C5CQAHK34J7RNHEJE1G366","workflow-runtime","Prove skill or workflow discovery, full-autonomy tool execution, and task-shaped materialization before assigning a CLI, extension, provider, or model to a workflow role.","https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow-runtime\u002FSKILL.md",[60],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[66,67,68,69,70,71,72,73,74,75,76,77,78,79],"workflow","workflow runtime","runtime","execution","cli","discovery","tool","model","autonomy","provider","task","full","extension","role",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":26},"01M6C5CNCTDS39453E66MQYTTQ","workflow-reviewer","Review batched implementation output against the BOSS spec and evidence.","https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow-reviewer\u002FSKILL.md",[],[87,88,66,89,90,91,92,93],"workflow reviewer","reviewer","spec","review","evidence","implementation","output",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":101,"publishedAt":26},"01M6C5CKVKQF6NE9263HGRB2K3","workflow-rescue","Resolve repeated workflow failures with a single decisive action.","https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow-rescue\u002FSKILL.md",[100],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},[66,102,103,104,105,106,107],"workflow rescue","rescue","single","decisive action","with","action",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":115,"publishedAt":26},"01M6C5CHCW474Y5F49WME2G12H","workflow-orchestrator","Run risk-adaptive development, review, multi-agent, and release workflows with runtime preflight, bounded retries, liveness checks, isolated writers, and evidence-backed handoffs.","https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow-orchestrator\u002FSKILL.md",[114],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},[116,117,66,106,118,90,119,120,121,122,123,124,91,68,125,126],"orchestrator","workflow orchestrator","development","workflows","run","release","risk","preflight","multi-agent","multi","retries",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":26},"01M6C5CFCYEW1J4ETBNDD4EQPK","workflow-judger","Arbitrate repeated task failures and decide merge, rework, or escalation.","https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow-judger\u002FSKILL.md",[],[134,66,135,136,137,76],"workflow judger","merge","escalation","decide",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":145,"publishedAt":26},"01M6C5CDADZX0YM26H2QWWDJMF","workflow-doctor","Validate active workflow state before any role acts on it.","https:\u002F\u002Fgithub.com\u002FLyther\u002Fagent-surface\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow-doctor\u002FSKILL.md",[144],{"categoryNo":61,"categoryName":62,"taxonomyType":63,"taxonomyTypeDesc":64},[66,146,147,148,149,150,151,79],"workflow doctor","doctor","validate","state","active","it"]