[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74PTC2AB29KDTKC28BJP7TV":3,"skill-same:01M74PTC2AB29KDTKC28BJP7TV":46},{"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":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":14,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":29,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M74PTC2AB29KDTKC28BJP7TV","forensics",null,"Post-mortem a failed auto-mode run. Traces from symptom to root cause using `.otto\u002Fworkflow\u002Factivity\u002F*.jsonl`, `.otto\u002Fworkflow\u002Fjournal\u002FYYYY-MM-DD.jsonl`, `.otto\u002Fworkflow\u002Fmetrics.json`, and `.otto\u002Fworkflow\u002Fauto.lock`. Produces a filing-ready bug report with file:line references and a concrete fix suggestion. Use when asked to \"forensics\", \"post-mortem\", \"why did auto-mode fail\", \"trace the stuck loop\", \"debug the crash\", after `\u002Fotto forensics` is invoked, or when a session ended in an unexpected terminal state. Reads existing artifacts — does NOT re-run anything.","cmetech\u002Fotto-cli","cmetech","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F118027304?v=4","01M74PNNHCP8T9GH9NWAWHK66N","Corey Ellis","01M74PNNJ1JR5BJQG3JK95RVFT",0,"MIT","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fforensics\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: forensics\ndescription: Post-mortem a failed auto-mode run. Traces from symptom to root cause using `.otto\u002Fworkflow\u002Factivity\u002F*.jsonl`, `.otto\u002Fworkflow\u002Fjournal\u002FYYYY-MM-DD.jsonl`, `.otto\u002Fworkflow\u002Fmetrics.json`, and `.otto\u002Fworkflow\u002Fauto.lock`. Produces a filing-ready bug report with file:line references and a concrete fix suggestion. Use when asked to \"forensics\", \"post-mortem\", \"why did auto-mode fail\", \"trace the stuck loop\", \"debug the crash\", after `\u002Fotto forensics` is invoked, or when a session ended in an unexpected terminal state. Reads existing artifacts — does NOT re-run anything.\n---\n\n\u003Cobjective>\nTurn scattered agent runtime artifacts into one coherent cause chain. The deliverable is a GitHub-issue-ready report that names the file and line where the bug lives, cites the evidence, and proposes a fix. Forensics is archaeology, not re-run — no modifying state, no triggering commands, just reading the paper trail.\n\u003C\u002Fobjective>\n\n\u003Ccontext>\nthe workflow persists a lot of runtime evidence under `.otto\u002Fworkflow\u002F`:\n\n- `activity\u002F{seq}-{unitType}-{unitId}.jsonl` — full tool-call and message stream per unit\n- `journal\u002FYYYY-MM-DD.jsonl` — iteration-level events. Orchestrator path emits `orchestrator-*` events (`orchestrator-dispatch-match`, `orchestrator-guard-block`, `orchestrator-terminal`, etc.); legacy loop events (`dispatch-match`, `stuck-detected`, `guard-block`, `unit-start\u002Fend`, `terminal`) can still appear on non-orchestrator paths.\n- `metrics.json` — token\u002Fcost ledger; duplicate `type\u002Fid` entries indicate a stuck loop\n- `auto.lock` — JSON snapshot of the currently-owning PID; stale lock = crash mid-unit\n- `forensics\u002F` — saved prior reports\n- `debug\u002F` — debug logs if enabled\n- `runtime\u002Fpaused-session.json` — serialized session when auto-mode paused\n- `doctor-history.jsonl` — doctor check history\n\nThe `\u002Fotto forensics` command pre-computes a forensic report with anomalies flagged. This skill is the manual investigation that goes deeper, or runs when the automated report isn't enough.\n\nInvocation points:\n- `\u002Fotto forensics` has been run and user wants deeper analysis\n- Auto-mode exited unexpectedly, no obvious cause\n- Same unit dispatched multiple times (stuck loop suspected)\n- A session crashed and `auto.lock` is stale\n- User reports \"it just stopped\" or \"it did the wrong thing\"\n\u003C\u002Fcontext>\n\n\u003Ccore_principle>\n**READ-ONLY.** Forensics touches no live state. Non-mutating inspection commands (e.g., `ps`, `top -b`, `cat \u002Fproc\u002F*`) are allowed for checking process status or reading system files. Strictly prohibited: `otto_*` writes, commands that modify state, executing binaries that produce side effects, writing to files (outside the final report), or re-running the failed unit. The evidence must stay pristine for future investigations.\n\n**SYMPTOM → ROOT CAUSE, WITH CITATIONS.** Every claim in the report is backed by an artifact path and either a line number or a JSONL field. \"The loop got stuck because of a race\" is not useful; \"`.otto\u002Fworkflow\u002Fjournal\u002F2026-04-19.jsonl:142` shows `stuck-detected` with flowId X, caused by `dispatch-guard.ts:87` returning the same unit after `unit-end`\" is.\n\n**PRE-PARSED LEADS, NOT CONCLUSIONS.** If `\u002Fotto forensics` has surfaced anomalies, treat them as hypotheses to verify, not answers.\n\u003C\u002Fcore_principle>\n\n\u003Cprocess>\n\n## Step 1: Locate the evidence\n\nRead what's in `.otto\u002Fworkflow\u002F`:\n\n1. `auto.lock` — is it stale? Check PID against `ps` (read-only inspection, allowed). Stale = crash.\n2. Most recent `.otto\u002Fworkflow\u002Factivity\u002F*.jsonl` — sort by mtime, newest first. That's the last unit that ran.\n3. Today's `.otto\u002Fworkflow\u002Fjournal\u002FYYYY-MM-DD.jsonl` — the iteration-level view.\n4. `.otto\u002Fworkflow\u002Fmetrics.json` — does any `type\u002Fid` appear more than once? (stuck loop signal)\n5. `.otto\u002Fworkflow\u002Fruntime\u002Fpaused-session.json` — if present, what was the pause reason?\n\n## Step 2: Reconstruct the failure from the activity log\n\nActivity JSONL format:\n- Each line is `{type: \"message\", message: {...}}`.\n- `message.role: \"assistant\"` → `content[]` with `type: \"text\"` reasoning and `type: \"toolCall\"` invocations.\n- `message.role: \"toolResult\"` → `{toolCallId, toolName, isError, content}`.\n- `usage` on assistant messages tracks tokens and cost.\n\nTo trace a failure:\n1. Search for `isError: true` tool results in the last activity log. That's usually the proximate symptom.\n2. Walk backwards to the assistant message that made the call. Read the `text` content — that's the agent's reasoning at the moment of failure.\n3. Keep walking back. Find where the agent's model of the state diverged from reality.\n\n## Step 3: Cross-reference the journal\n\nFor each symptom from the activity log, find the matching journal events:\n- `stuck-detected` + same `flowId` → the loop detected repetition. `data.reason` says why.\n- `guard-block` → a dispatch guard refused to run a unit. Check `data.reason` and trace to `dispatch-guard.ts` logic.\n- `unit-end` followed by another `unit-start` for the same `unitId` → re-dispatch. If tied to `stuck-detected`, the artifact verification failed after the unit succeeded.\n- `terminal` → auto-mode decided to stop. `data.reason` tells you why.\n\nUse `flowId` to reconstruct one iteration; use `causedBy` to follow causal chains across iterations.\n\n## Step 4: Name the root cause\n\nA good root cause is:\n- Specific: a function, a state transition, a missing guard.\n- Falsifiable: if we changed X, would the failure go away?\n- Sourced: cites a file and (where applicable) a line number.\n\nBad root cause: \"Auto-mode got stuck in a loop.\" Good root cause: \"After slice completion, `auto-unit-closeout.ts` emits `unit-end` before `auto-post-unit.ts` updates the roadmap checkbox. The next `iteration-start` finds the same unit `[ ]` and re-dispatches — `dispatch-guard.ts:42` has no check against the freshly-ended `unitId`.\"\n\nConsult the source map in `src\u002Fresources\u002Fextensions\u002Fotto\u002Fprompts\u002Fforensics.md` to map symptoms to the likely domain files.\n\n## Step 5: Propose a fix\n\nFor the root cause:\n- Which file and function holds the bug?\n- What minimal change would eliminate it?\n- What test would have caught it? Can one be added?\n- Is this a regression from a recent commit? (Run `git log -- path\u002Fto\u002Ffile.ts` mentally; do NOT run git commands that could modify state.)\n\n## Step 6: Write the report\n\nFormat the output as a GitHub-issue-ready report:\n\n```markdown\n## Symptom\n\n\u003Cwhat the user saw — quote the error or describe the observed behavior>\n\n## Evidence Trail\n\n1. `.otto\u002Fworkflow\u002Fauto.lock` — \u003Cstate: stale \u002F fresh>\n2. `.otto\u002Fworkflow\u002Factivity\u002F042-slice-S02.jsonl:128` — \u003CisError: true from `otto_task_complete`>\n3. `.otto\u002Fworkflow\u002Fjournal\u002F2026-04-19.jsonl:87` — \u003Cstuck-detected flowId 7a3c…>\n4. `.otto\u002Fworkflow\u002Fmetrics.json` — \u003Cunit type\u002Fid \"slice\u002FS02\" appears 3 times>\n\n## Root Cause\n\n\u003Cspecific named cause — file, function, state transition>\n\n`src\u002Fresources\u002Fextensions\u002Fotto\u002Fauto-unit-closeout.ts:\u003Cline>`: \u003Cexactly what goes wrong>\n\n## Proposed Fix\n\n\u003Cminimal change — file, function, what to change>\n\n## Test\n\n\u003Cwhat test would have caught this; whether one should be added>\n\n## Confidence\n\n\u003Chigh \u002F medium \u002F low> — \u003Cwhat would change this confidence>\n```\n\nOffer to file this as a GitHub issue via `mcp__github__issue_write` — explicit confirmation required per the outward-action rule. Also save a copy to `.otto\u002Fworkflow\u002Fforensics\u002F\u003Cslug>.md` for future reference.\n\n\u003C\u002Fprocess>\n\n\u003Canti_patterns>\n\n- **Running any `otto_*` write tool during forensics.** Evidence stays pristine.\n- **Re-running the auto-mode loop to \"reproduce.\"** That overwrites the activity log. Read the existing one.\n- **Vague root cause.** \"There's a race\" is not a root cause. Name the race.\n- **No citations.** Every claim gets an artifact path.\n- **Skipping the journal.** The journal is the only view that shows dispatch-level decisions.\n- **Auto-filing the GitHub issue.** Outward actions need confirmation.\n\n\u003C\u002Fanti_patterns>\n\n\u003Csuccess_criteria>\n\n- [ ] The symptom is quoted, not paraphrased.\n- [ ] Every claim in the evidence trail cites a file and a line or field.\n- [ ] The root cause names a specific file, function, or state transition.\n- [ ] The proposed fix is minimal and falsifiable.\n- [ ] Confidence is stated honestly.\n- [ ] Report is saved under `.otto\u002Fworkflow\u002Fforensics\u002F` even if not filed as an issue.\n\n\u003C\u002Fsuccess_criteria>\n","\u003Cobjective>\nTurn scattered agent runtime artifacts into one coherent cause chain. The deliverable is a GitHub-issue-ready report that names the file and line where the bug lives, cites the evidence, and proposes a fix. Forensics is archaeology, not re-run — no modifying state, no triggering commands, just reading the paper trail.\n\u003C\u002Fobjective>\n\n\u003Ccontext>\nthe workflow persists a lot of runtime evidence under `.otto\u002Fworkflow\u002F`:\n\n- `activity\u002F{seq}-{unitType}-{unitId}.jsonl` — full tool-call and message stream per unit\n- `journal\u002FYYYY-MM-DD.jsonl` — iteration-level events. Orchestrator path emits `orchestrator-*` events (`orchestrator-dispatch-match`, `orchestrator-guard-block`, `orchestrator-terminal`, etc.); legacy loop events (`dispatch-match`, `stuck-detected`, `guard-block`, `unit-start\u002Fend`, `terminal`) can still appear on non-orchestrator paths.\n- `metrics.json` — token\u002Fcost ledger; duplicate `type\u002Fid` entries indicate a stuck loop\n- `auto.lock` — JSON snapshot of the currently-owning PID; stale lock = crash mid-unit\n- `forensics\u002F` — saved prior reports\n- `debug\u002F` — debug logs if enabled\n- `runtime\u002Fpaused-session.json` — serialized session when auto-mode paused\n- `doctor-history.jsonl` — doctor check history\n\nThe `\u002Fotto forensics` command pre-computes a forensic report with anomalies flagged. This skill is the manual investigation that goes deeper, or runs when the automated report isn't enough.\n\nInvocation points:\n- `\u002Fotto forensics` has been run and user wants deeper analysis\n- Auto-mode exited unexpectedly, no obvious cause\n- Same unit dispatched multiple times (stuck loop suspected)\n- A session crashed and `auto.lock` is stale\n- User reports \"it just stopped\" or \"it did the wrong thing\"\n\u003C\u002Fcontext>\n\n\u003Ccore_principle>\n**READ-ONLY.** Forensics touches no live state. Non-mutating inspection commands (e.g., `ps`, `top -b`, `cat \u002Fproc\u002F*`) are allowed for checking process status or reading system files. Strictly prohibited: `otto_*` writes, commands that modify state, executing binaries that produce side effects, writing to files (outside the final report), or re-running the failed unit. The evidence must stay pristine for future investigations.\n\n**SYMPTOM → ROOT CAUSE, WITH CITATIONS.** Every claim in the report is backed by an artifact path and either a line number or a JSONL field. \"The loop got stuck because of a race\" is not useful; \"`.otto\u002Fworkflow\u002Fjournal\u002F2026-04-19.jsonl:142` shows `stuck-detected` with flowId X, caused by `dispatch-guard.ts:87` returning the same unit after `unit-end`\" is.\n\n**PRE-PARSED LEADS, NOT CONCLUSIONS.** If `\u002Fotto forensics` has surfaced anomalies, treat them as hypotheses to verify, not answers.\n\u003C\u002Fcore_principle>\n\n\u003Cprocess>\n\n## Step 1: Locate the evidence\n\nRead what's in `.otto\u002Fworkflow\u002F`:\n\n1. `auto.lock` — is it stale? Check PID against `ps` (read-only inspection, allowed). Stale = crash.\n2. Most recent `.otto\u002Fworkflow\u002Factivity\u002F*.jsonl` — sort by mtime, newest first. That's the last unit that ran.\n3. Today's `.otto\u002Fworkflow\u002Fjournal\u002FYYYY-MM-DD.jsonl` — the iteration-level view.\n4. `.otto\u002Fworkflow\u002Fmetrics.json` — does any `type\u002Fid` appear more than once? (stuck loop signal)\n5. `.otto\u002Fworkflow\u002Fruntime\u002Fpaused-session.json` — if present, what was the pause reason?\n\n## Step 2: Reconstruct the failure from the activity log\n\nActivity JSONL format:\n- Each line is `{type: \"message\", message: {...}}`.\n- `message.role: \"assistant\"` → `content[]` with `type: \"text\"` reasoning and `type: \"toolCall\"` invocations.\n- `message.role: \"toolResult\"` → `{toolCallId, toolName, isError, content}`.\n- `usage` on assistant messages tracks tokens and cost.\n\nTo trace a failure:\n1. Search for `isError: true` tool results in the last activity log. That's usually the proximate symptom.\n2. Walk backwards to the assistant message that made the call. Read the `text` content — that's the agent's reasoning at the moment of failure.\n3. Keep walking back. Find where the agent's model of the state diverged from reality.\n\n## Step 3: Cross-reference the journal\n\nFor each symptom from the activity log, find the matching journal events:\n- `stuck-detected` + same `flowId` → the loop detected repetition. `data.reason` says why.\n- `guard-block` → a dispatch guard refused to run a unit. Check `data.reason` and trace to `dispatch-guard.ts` logic.\n- `unit-end` followed by another `unit-start` for the same `unitId` → re-dispatch. If tied to `stuck-detected`, the artifact verification failed after the unit succeeded.\n- `terminal` → auto-mode decided to stop. `data.reason` tells you why.\n\nUse `flowId` to reconstruct one iteration; use `causedBy` to follow causal chains across iterations.\n\n## Step 4: Name the root cause\n\nA good root cause is:\n- Specific: a function, a state transition, a missing guard.\n- Falsifiable: if we changed X, would the failure go away?\n- Sourced: cites a file and (where applicable) a line number.\n\nBad root cause: \"Auto-mode got stuck in a loop.\" Good root cause: \"After slice completion, `auto-unit-closeout.ts` emits `unit-end` before `auto-post-unit.ts` updates the roadmap checkbox. The next `iteration-start` finds the same unit `[ ]` and re-dispatches — `dispatch-guard.ts:42` has no check against the freshly-ended `unitId`.\"\n\nConsult the source map in `src\u002Fresources\u002Fextensions\u002Fotto\u002Fprompts\u002Fforensics.md` to map symptoms to the likely domain files.\n\n## Step 5: Propose a fix\n\nFor the root cause:\n- Which file and function holds the bug?\n- What minimal change would eliminate it?\n- What test would have caught it? Can one be added?\n- Is this a regression from a recent commit? (Run `git log -- path\u002Fto\u002Ffile.ts` mentally; do NOT run git commands that could modify state.)\n\n## Step 6: Write the report\n\nFormat the output as a GitHub-issue-ready report:\n\n```markdown\n## Symptom\n\n\u003Cwhat the user saw — quote the error or describe the observed behavior>\n\n## Evidence Trail\n\n1. `.otto\u002Fworkflow\u002Fauto.lock` — \u003Cstate: stale \u002F fresh>\n2. `.otto\u002Fworkflow\u002Factivity\u002F042-slice-S02.jsonl:128` — \u003CisError: true from `otto_task_complete`>\n3. `.otto\u002Fworkflow\u002Fjournal\u002F2026-04-19.jsonl:87` — \u003Cstuck-detected flowId 7a3c…>\n4. `.otto\u002Fworkflow\u002Fmetrics.json` — \u003Cunit type\u002Fid \"slice\u002FS02\" appears 3 times>\n\n## Root Cause\n\n\u003Cspecific named cause — file, function, state transition>\n\n`src\u002Fresources\u002Fextensions\u002Fotto\u002Fauto-unit-closeout.ts:\u003Cline>`: \u003Cexactly what goes wrong>\n\n## Proposed Fix\n\n\u003Cminimal change — file, function, what to change>\n\n## Test\n\n\u003Cwhat test would have caught this; whether one should be added>\n\n## Confidence\n\n\u003Chigh \u002F medium \u002F low> — \u003Cwhat would change this confidence>\n```\n\nOffer to file this as a GitHub issue via `mcp__github__issue_write` — explicit confirmation required per the outward-action rule. Also save a copy to `.otto\u002Fworkflow\u002Fforensics\u002F\u003Cslug>.md` for future reference.\n\n\u003C\u002Fprocess>\n\n\u003Canti_patterns>\n\n- **Running any `otto_*` write tool during forensics.** Evidence stays pristine.\n- **Re-running the auto-mode loop to \"reproduce.\"** That overwrites the activity log. Read the existing one.\n- **Vague root cause.** \"There's a race\" is not a root cause. Name the race.\n- **No citations.** Every claim gets an artifact path.\n- **Skipping the journal.** The journal is the only view that shows dispatch-level decisions.\n- **Auto-filing the GitHub issue.** Outward actions need confirmation.\n\n\u003C\u002Fanti_patterns>\n\n\u003Csuccess_criteria>\n\n- [ ] The symptom is quoted, not paraphrased.\n- [ ] Every claim in the evidence trail cites a file and a line or field.\n- [ ] The root cause names a specific file, function, or state transition.\n- [ ] The proposed fix is minimal and falsifiable.\n- [ ] Confidence is stated honestly.\n- [ ] Report is saved under `.otto\u002Fworkflow\u002Fforensics\u002F` even if not filed as an issue.\n\n\u003C\u002Fsuccess_criteria>\n",{"name":5,"description":7},"main","e62d23e713a36a0570f7f5c3ee69868b1131e548","src\u002Fresources\u002Fskills\u002Fforensics","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli","https:\u002F\u002Fgithub.com\u002Fcmetech","https:\u002F\u002Fwww.cmetech.io","Corey Ellis is a seasoned data engineer with over 20 years of experience in the field. He is the founder of CME Technologies LLC.","2026-06-17 22:50:56",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add cmetech\u002Fotto-cli --skill forensics",{"tool":38,"command":39},"bunx","bunx skills add cmetech\u002Fotto-cli --skill forensics",{"tool":41,"command":42},"pnpm","pnpm dlx skills add cmetech\u002Fotto-cli --skill forensics","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fforensics\u002FSKILL.md",true,[],[47,54,61,68,75,82],{"skillNo":48,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":53,"publishedAt":19},"01M74PWE6AVSD8RDS1M3Q6TH95","write-milestone-brief","Synthesize the current conversation into a milestone brief (PRD). Writes to `M###-CONTEXT.md` by default, or files a GitHub issue only with explicit user confirmation. Use when asked to \"turn this into a PRD\", \"draft a milestone brief\", \"capture this context\", \"write it up\", or when enough has been discussed to commit the plan to paper. Does not interview — it synthesizes what is already known.","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fwrite-milestone-brief\u002FSKILL.md",[],[],{"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":60,"publishedAt":19},"01M74PWB6CEEQPGS9HRQY4QQPZ","write-docs","Collaborative document authoring workflow for proposals, technical specs, decision docs, README sections, ADRs, and long-form prose that must work for fresh readers. Use when asked to \"write the docs\", \"draft a proposal\", \"write a spec\", \"write an RFC\", \"write the README\", or when a document needs to be understandable by someone without this session's context. Three stages: gather context, iterate on structure, reader-test for a stranger.","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fwrite-docs\u002FSKILL.md",[],[],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":19},"01M74PW7SJQ8H516MDBQ7WV1BN","web-quality-audit","Comprehensive web quality audit covering performance, accessibility, SEO, and best practices. Use when asked to \"audit my site\", \"review web quality\", \"run lighthouse audit\", \"check page quality\", or \"optimize my website\".","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fweb-quality-audit\u002FSKILL.md",[],[],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":19},"01M74PW5JAA6D34Z8QBN1HQ014","web-design-guidelines","Review UI code for Web Interface Guidelines compliance. Use when asked to \"review my UI\", \"check accessibility\", \"audit design\", \"review UX\", or \"check my site against best practices\".","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fweb-design-guidelines\u002FSKILL.md",[],[],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M74PW1YP2Y03GMDYD443BVHQ","verify-before-complete","Block completion claims until verification evidence has been produced in the current message. Use before marking a task\u002Fslice\u002Fmilestone complete, before creating a commit or PR, before saying \"it works\" or \"tests pass\", and any time you are about to claim work is done. The rule is: evidence before claims, always — running the verification must happen now, not \"earlier in the session\". Fresh output or no claim.","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fverify-before-complete\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":19},"01M74PVXR5GE8HE55YWEG7ENBP","userinterface-wiki","UI\u002FUX best practices for web interfaces. Use when reviewing animations, CSS, audio, typography, UX patterns, prefetching, or icon implementations. Covers 11 categories from animation principles to typography. Outputs file:line findings.","https:\u002F\u002Fgithub.com\u002Fcmetech\u002Fotto-cli\u002Fblob\u002Fmain\u002Fsrc\u002Fresources\u002Fskills\u002Fuserinterface-wiki\u002FSKILL.md",[],[]]