[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RY07XF3WN68DCZQTESG9C":3,"skill-same:01M71RY07XF3WN68DCZQTESG9C":68},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":14,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":53,"install":54,"resources":67},"01M71RY07XF3WN68DCZQTESG9C","ask-user",null,"Pattern for asking the user structured questions and gating execution on their\nresponse. Use whenever the agent needs a choice, confirmation, or free-text\nanswer before it can proceed. Renders an interactive widget in the web UI and\nTUI, and falls back to stdin on the console.","blouargant\u002Fomnis","blouargant","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5691896?v=4","01M71RWETBTYXSMT6FFC4Q7HPW","Bertrand Louargant","01M71RWEV3G47S696JYH8EA7W2",0,"MIT","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fask-user\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"ask user","ask","user","back","needs","gating","input","interaction","free","present","pattern","options","planning","confirmation","question","clarify","choice","decision","text","ui","2026-11-10 13:02:02",false,"---\nname: ask-user\ndescription: |\n  Pattern for asking the user structured questions and gating execution on their\n  response. Use whenever the agent needs a choice, confirmation, or free-text\n  answer before it can proceed. Renders an interactive widget in the web UI and\n  TUI, and falls back to stdin on the console.\nmetadata:\n  tags: \"user input, decision gate, interaction pattern, questions, interactive\"\n  triggers: \"ask the user, ask user, ask questions, question the user, gather user input, need user input, interactive planning, present options, ask before proceeding, choice gate, user decision, clarify with user, confirm with user, collect user preferences\"\n---\n\n# Ask User — Choice Gate Pattern\n\n## How to Ask\n\nCall the `AskUserQuestion` tool. It **blocks** until the user responds and returns the\nanswer as a structured tool result. Do not attempt to simulate a question by\nwriting prose — use the tool.\n\n### Tool parameters\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `kind` | string | ✓ | `\"single\"`, `\"multi\"`, `\"text\"`, or `\"confirm\"` |\n| `prompt` | string | ✓ | The question to show the user |\n| `choices` | []string | see below | Required for `single`\u002F`confirm`\u002F`multi`; optional for `text` |\n| `allow_text` | bool | – | Add a free-text field to a `multi` question |\n| `default` | string | – | Pre-selected value hint (display only) |\n| `timeout_seconds` | int | – | Bound the wait. By default there is **no timeout** — the question waits until the user answers (or the turn is aborted). Set a positive value to auto-cancel after N seconds |\n\n### Kind semantics\n\n| Kind | Widget | Choices | Result fields used |\n|---|---|---|---|\n| `single` | Radio buttons | 2-4 required | `selected[0]` |\n| `confirm` | Radio buttons | Exactly 2 required (Yes\u002FNo) | `selected[0]` |\n| `multi` | Checkboxes (+ optional text) | ≥1 required | `selected[]`, `text` |\n| `text` | Text area | Optional hint choices ignored | `text` |\n\n### Cancelled result\n\nIf the user clicks Skip\u002FCancel (or an explicit `timeout_seconds` you set\nelapses), `cancelled: true` is set in the result. Fall back to the safest default\nand note what was assumed. With no `timeout_seconds` the question simply waits for\nthe user — it is not auto-cancelled on a timer.\n\n---\n\n## Editorial policy\n\n### Infer before asking\n\nBefore calling `AskUserQuestion`, run these checks:\n1. **Scan conversation history** — did the user already answer this implicitly?\n2. **Check stated preferences** — does a loaded skill supply a default?\n3. **Estimate cost of a wrong default** — if low, pick the safest default and note it.\n\nOnly gate when the three checks leave the answer genuinely ambiguous.\n\n### Constraints\n\n| Check | Requirement |\n|---|---|\n| Option count | **2–4 choices max.** More than 4 creates decision paralysis. |\n| Labels | **Self-explanatory labels.** Action verb + brief qualifier, not \"Option 1\". |\n| Escape hatch | **Always include an escape hatch** (e.g. \"Skip\" or \"Cancel\") as the last choice. |\n| Question scope | **One `AskUserQuestion` call per turn.** Never stack multiple calls sequentially before reading results. |\n| Safety ordering | **Safest\u002Freversible option first** for destructive ops. |\n| Blocking order | **Ask the most blocking question first** when multiple unknowns exist. |\n\n### How to gate (CRITICAL)\n\nAfter calling `AskUserQuestion`, the tool blocks — the LLM turn does not end until the\nuser answers. Do not speculatively continue planning inside the same turn while\nwaiting. Read the tool result, acknowledge briefly, then branch.\n\nIf the result has `cancelled: true`, fall back to the safest default and\ncontinue with a note about the assumption.\n\n### Non-blocking exception\n\nIf the gate blocks only *one branch* of a parallelizable plan and unrelated\nindependent work exists, you MAY call other tools for that unrelated work\n**before** calling `AskUserQuestion` for the blocked branch, and state what you are\ndoing in parallel.\n\n---\n\n## Example calls\n\n### Single choice\n```json\nAskUserQuestion({\n  \"kind\": \"single\",\n  \"prompt\": \"Which branch should I target?\",\n  \"choices\": [\"main\", \"develop\", \"feature\u002Fmy-branch\", \"Skip — I'll tell you later\"]\n})\n```\n\n### Confirmation\n```json\nAskUserQuestion({\n  \"kind\": \"confirm\",\n  \"prompt\": \"This will delete 47 files. Proceed?\",\n  \"choices\": [\"No, cancel\", \"Yes, delete them\"]\n})\n```\n\n### Multi-select\n```json\nAskUserQuestion({\n  \"kind\": \"multi\",\n  \"prompt\": \"Which test suites should I run?\",\n  \"choices\": [\"unit\", \"integration\", \"e2e\", \"lint\"],\n  \"allow_text\": false\n})\n```\n\n### Free text\n```json\nAskUserQuestion({\n  \"kind\": \"text\",\n  \"prompt\": \"What should I name the new branch?\"\n})\n```\n\n","# Ask User — Choice Gate Pattern\n\n## How to Ask\n\nCall the `AskUserQuestion` tool. It **blocks** until the user responds and returns the\nanswer as a structured tool result. Do not attempt to simulate a question by\nwriting prose — use the tool.\n\n### Tool parameters\n\n| Field | Type | Required | Notes |\n|---|---|---|---|\n| `kind` | string | ✓ | `\"single\"`, `\"multi\"`, `\"text\"`, or `\"confirm\"` |\n| `prompt` | string | ✓ | The question to show the user |\n| `choices` | []string | see below | Required for `single`\u002F`confirm`\u002F`multi`; optional for `text` |\n| `allow_text` | bool | – | Add a free-text field to a `multi` question |\n| `default` | string | – | Pre-selected value hint (display only) |\n| `timeout_seconds` | int | – | Bound the wait. By default there is **no timeout** — the question waits until the user answers (or the turn is aborted). Set a positive value to auto-cancel after N seconds |\n\n### Kind semantics\n\n| Kind | Widget | Choices | Result fields used |\n|---|---|---|---|\n| `single` | Radio buttons | 2-4 required | `selected[0]` |\n| `confirm` | Radio buttons | Exactly 2 required (Yes\u002FNo) | `selected[0]` |\n| `multi` | Checkboxes (+ optional text) | ≥1 required | `selected[]`, `text` |\n| `text` | Text area | Optional hint choices ignored | `text` |\n\n### Cancelled result\n\nIf the user clicks Skip\u002FCancel (or an explicit `timeout_seconds` you set\nelapses), `cancelled: true` is set in the result. Fall back to the safest default\nand note what was assumed. With no `timeout_seconds` the question simply waits for\nthe user — it is not auto-cancelled on a timer.\n\n---\n\n## Editorial policy\n\n### Infer before asking\n\nBefore calling `AskUserQuestion`, run these checks:\n1. **Scan conversation history** — did the user already answer this implicitly?\n2. **Check stated preferences** — does a loaded skill supply a default?\n3. **Estimate cost of a wrong default** — if low, pick the safest default and note it.\n\nOnly gate when the three checks leave the answer genuinely ambiguous.\n\n### Constraints\n\n| Check | Requirement |\n|---|---|\n| Option count | **2–4 choices max.** More than 4 creates decision paralysis. |\n| Labels | **Self-explanatory labels.** Action verb + brief qualifier, not \"Option 1\". |\n| Escape hatch | **Always include an escape hatch** (e.g. \"Skip\" or \"Cancel\") as the last choice. |\n| Question scope | **One `AskUserQuestion` call per turn.** Never stack multiple calls sequentially before reading results. |\n| Safety ordering | **Safest\u002Freversible option first** for destructive ops. |\n| Blocking order | **Ask the most blocking question first** when multiple unknowns exist. |\n\n### How to gate (CRITICAL)\n\nAfter calling `AskUserQuestion`, the tool blocks — the LLM turn does not end until the\nuser answers. Do not speculatively continue planning inside the same turn while\nwaiting. Read the tool result, acknowledge briefly, then branch.\n\nIf the result has `cancelled: true`, fall back to the safest default and\ncontinue with a note about the assumption.\n\n### Non-blocking exception\n\nIf the gate blocks only *one branch* of a parallelizable plan and unrelated\nindependent work exists, you MAY call other tools for that unrelated work\n**before** calling `AskUserQuestion` for the blocked branch, and state what you are\ndoing in parallel.\n\n---\n\n## Example calls\n\n### Single choice\n```json\nAskUserQuestion({\n  \"kind\": \"single\",\n  \"prompt\": \"Which branch should I target?\",\n  \"choices\": [\"main\", \"develop\", \"feature\u002Fmy-branch\", \"Skip — I'll tell you later\"]\n})\n```\n\n### Confirmation\n```json\nAskUserQuestion({\n  \"kind\": \"confirm\",\n  \"prompt\": \"This will delete 47 files. Proceed?\",\n  \"choices\": [\"No, cancel\", \"Yes, delete them\"]\n})\n```\n\n### Multi-select\n```json\nAskUserQuestion({\n  \"kind\": \"multi\",\n  \"prompt\": \"Which test suites should I run?\",\n  \"choices\": [\"unit\", \"integration\", \"e2e\", \"lint\"],\n  \"allow_text\": false\n})\n```\n\n### Free text\n```json\nAskUserQuestion({\n  \"kind\": \"text\",\n  \"prompt\": \"What should I name the new branch?\"\n})\n```\n\n",{"name":5,"metadata":44,"description":47},{"tags":45,"triggers":46},"user input, decision gate, interaction pattern, questions, interactive","ask the user, ask user, ask questions, question the user, gather user input, need user input, interactive planning, present options, ask before proceeding, choice gate, user decision, clarify with user, confirm with user, collect user preferences","Pattern for asking the user structured questions and gating execution on their\nresponse. Use whenever the agent needs a choice, confirmation, or free-text\nanswer before it can proceed. Renders an interactive widget in the web UI and\nTUI, and falls back to stdin on the console.\n","develop","c9440489468f6bbafc65e9a10811428ac0ef2619","registry\u002Fskills\u002Fask-user","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis","https:\u002F\u002Fgithub.com\u002Fblouargant","2026-11-10 16:30:07",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add blouargant\u002Fomnis --skill ask-user",{"tool":60,"command":61},"bunx","bunx skills add blouargant\u002Fomnis --skill ask-user",{"tool":63,"command":64},"pnpm","pnpm dlx skills add blouargant\u002Fomnis --skill ask-user","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fask-user\u002FSKILL.md",true,[],[69,100,120,146,168,198],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":80,"publishedAt":39},"01M71RZKQ64WTDCV48Z4Y071FA","skill-creator","Create or update a skill playbook (SKILL.md) for the agent. Use when the user wants to create a new skill, add a skill, define a new agent capability, update an existing skill, edit a skill, refine a skill playbook, or specialise the agent for a new domain.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fskill-creator\u002FSKILL.md",[75],{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,21,99],"skill creator","creator","new agent","domain","for","new","define","use","Existing","when","create","update","refine","playbook","edit","a skill","new skill","add","existing skill",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":39},"01M71RZJ15NMV6FXBZD1AQF3K7","review","Review a body of work (source code, configuration, documents, infra manifests, …) for correctness, clarity, and obvious risks. Use this skill whenever the user asks for a review, audit or critique.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Freview\u002FSKILL.md",[],[102,107,108,109,110,85,111,88,112,113,114,115,116,117,118,119,21],"infra","work","critique","audit","clarity","body","source","manifests","documents","configuration","correctness","code","source code",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":129,"publishedAt":39},"01M71RZFP8KJEANYXAH6AX68G0","pdf","Fallback PDF text extractor using pdftotext (poppler). Use ONLY when the preferred `liteparse` skill is unavailable or for a quick plain-text dump of a simple text PDF — for the best PDF parsing (scanned, multi-column, layout-heavy, or non-PDF formats) prefer the `liteparse` skill.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fpdf\u002FSKILL.md",[126],{"categoryNo":127,"categoryName":128,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000002","文档处理",[130,37,131,132,133,134,135,136,85,137,138,139,140,141,88,142,90,143,144,145],"PDF","multi","quick","simple","parsing","pdf text extractor","layout","liteparse","plain-text","column","only","formats","pdftotext","plain","pdf parsing","file",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":154,"publishedAt":39},"01M71RZDAHNX7JC52P5HH5XPEG","pandoc","This skill should be used when converting documents between formats (Markdown, DOCX, PDF, HTML, LaTeX, etc.) using pandoc. Use for format conversion, document generation, and preparing markdown for Google Docs or other word processors.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fpandoc\u002FSKILL.md",[152,153],{"categoryNo":127,"categoryName":128,"taxonomyType":78,"taxonomyTypeDesc":79},{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},[148,155,130,156,85,157,88,158,115,90,159,160,161,162,163,164,141,165,166,167],"docx","Word","document generation","document","conversion","generation","markdown","format","google","google docs","docs","html","LaTeX",{"skillNo":169,"name":137,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":185,"publishedAt":39},"01M71RZ7PSG17ES4CQWA6860F5","Preferred local parser for extracting text from PDFs, images, and scanned\u002Flayout-heavy documents (OCR, screenshots, complex PDFs) — far better than pdftotext. Use this FIRST for any PDF, image, or OCR text-extraction or conversion task. NOTE for Office documents (DOCX, PPTX, XLSX, ODT) — for plain text extraction prefer the `pandoc` skill, which needs no LibreOffice; only use LiteParse for Office docs when you need its layout\u002FOCR\u002Fscreenshot output. The `pdf` skill (pdftotext) is only a fallback for when LiteParse cannot be installed.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fliteparse\u002FSKILL.md",[173,174,177,180],{"categoryNo":127,"categoryName":128,"taxonomyType":78,"taxonomyTypeDesc":79},{"categoryNo":175,"categoryName":176,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":178,"categoryName":179,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":181,"categoryName":182,"taxonomyType":183,"taxonomyTypeDesc":184},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[137,186,187,188,155,189,130,190,191,192,193,194,195,140,142,115,90,196,197,23],"images","app","ocr","which","pptx","extracting","xlsx","managed","local","pipx","image","you",{"skillNo":199,"name":200,"nameZh":6,"description":201,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":202,"categories":203,"keywords":204,"publishedAt":39},"01M71RZ2Y9KY94NRBV4WMH73G5","linux-admin","Safely make a change to a Linux workstation — install\u002Fremove packages, manage systemd services and timers, edit and validate configuration files, manage users\u002Fpermissions and networking. Detect the distro and package manager, determine whether the target is package-managed or hand-maintained, preview or simulate every change, back up configs before editing, and prefer the package manager and drop-in overrides so the host stays consistent and secure. Use whenever a change to the local Linux host is required (install, remove, enable, disable, start, stop, edit a config, add a user, change permissions or networking).","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Flinux-admin\u002FSKILL.md",[],[205,206,207,22,208,209,210,211,212,193,194,213,214,215,216,217,218,219,220,221],"linux","linux admin","admin","workstation","package manager","pacman","remove","up","systemd services","files","host","drop","preview","hand","permissions","packages","change"]