[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74YECZB5358RAT09ZK8PF7J":3,"skill-same:01M74YECZB5358RAT09ZK8PF7J":50},{"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":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":34,"ownerDescription":35,"updatedAt":36,"install":37,"resources":49},"01M74YECZB5358RAT09ZK8PF7J","request-human-input",null,"Decide whether a blocking situation needs human input; compose a mobile-first prompt with ≤ 3 quick-reply options + a stated timeout default; parse a free-text reply back into a structured decision. v0 reasoning-only — delivery (Telegram \u002F WhatsApp) lives in JobClaw's HITL MCP, not here. Always persists requests\u002F\u003Cid>.json in compose mode.","jain777\u002Fjobclaw-skills","jain777","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F57412580?v=4","01M74YCRYXSRMZFKERV6JS8M5D","Jeevesh Jain","01M74YCRZK4C3NNAEDWG5W8YMP",7,"MIT","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Frequest-human-input\u002FSKILL.md",[],[],"2026-11-11 17:31:23",false,"---\nname: request-human-input\ndescription: >\n  Decide whether a blocking situation needs human input; compose a mobile-first prompt\n  with ≤ 3 quick-reply options + a stated timeout default; parse a free-text reply back\n  into a structured decision. v0 reasoning-only — delivery (Telegram \u002F WhatsApp) lives\n  in JobClaw's HITL MCP, not here. Always persists requests\u002F\u003Cid>.json in compose mode.\nwhen_to_use: >\n  Use when a flagged answer-application-questions item, an `escalate` triage row, or any\n  ambiguous \u002F irreversible action needs a human. Two modes: compose (no reply) → produce\n  the question; parse (reply given) → interpret it.\nuser-invocable: true\nallowed-tools: Read, Write\n---\n\n# request-human-input\n\nPause the loop, ask one clear thing, resume on reply. **Hard rules:** [`..\u002F_shared\u002FRULES.md`](..\u002F_shared\u002FRULES.md).\n\n## Two modes\n\n### Compose mode (default — no `--reply`)\nDecide if the situation needs human input. If yes, produce a mobile-first prompt + ≤ 3 options + a timeout default. **Always** writes `requests\u002F\u003Cid>.json` so the the optional JobClaw agent's HITL MCP can pick it up.\n\n### Parse mode (`--reply \"\u003Ctext>\"`)\nMatch the reply to an option (case-insensitive prefix + fuzzy). Return a structured decision; mark the request file `resolved`.\n\n## Inputs (compose)\n- `situation` — 1–3 sentences. The blocker.\n- `policy` — freeform string. Escalation rules (e.g., *\"Escalate any irreversible action; auto-proceed on captcha if MFA backup is configured\"*).\n- `context_attachments[]` *(optional)* — file paths (screenshot, log) the human can review.\n- `request_id` *(optional)* — caller-provided; else generate a 12-char hex slug.\n\n## Inputs (parse)\n- `--request_id` — which request the reply is for.\n- `--reply` — the user's verbatim reply string.\n\n## Method (compose)\n\n1. **Decide if a human is needed.** Apply the `policy` text to `situation`. Output `{needs_human: bool, reason}`. If `false`, exit cleanly — no question, no file.\n\n2. **If needed, compose the prompt** (mobile-first):\n   - **Stem** — ≤ 1 sentence, ≤ 120 chars. The question itself.\n   - **Options** — 1–3 quick-reply labels, each ≤ 24 chars. Verb-led.\n   - **Default on timeout** — what JobClaw does if the human doesn't reply: `skip | queue | retry | abort`. Default `abort` for irreversible actions.\n   - **Context snippet** — 1 line (e.g. *\"Captcha at Workday submit for Mercury, screenshot attached\"*). No more.\n\n3. **Persist.** Always write `requests\u002F\u003Crequest_id>.json`:\n   ```jsonc\n   {\n     \"request_id\": \"...\",\n     \"created_at\": \"ISO-8601\",\n     \"situation\":  \"...\",\n     \"policy\":     \"...\",\n     \"prompt\":     \"string ≤ 120 chars\",\n     \"options\":    [{ \"label\": \"string ≤ 24 chars\", \"value\": \"string\" }],\n     \"timeout_default\": { \"after_minutes\": 30, \"action\": \"skip|queue|retry|abort\" },\n     \"context_refs\":    [\"path\u002For\u002Furl\"],\n     \"status\":     \"open\"\n   }\n   ```\n\n## Method (parse)\n\n1. Load `requests\u002F\u003Crequest_id>.json`.\n2. Match `reply` to `options[*].label` (case-insensitive prefix, then fuzzy). If no match → treat as `free_text`.\n3. Emit:\n   ```jsonc\n   {\n     \"request_id\":      \"...\",\n     \"chosen_option\":   \"\u003Cvalue> | null\",\n     \"free_text\":       \"\u003Cverbatim reply> | null\",\n     \"parsed_decision\": \"string — one of options[].value OR a normalized free_text\",\n     \"resolved_at\":     \"ISO-8601\"\n   }\n   ```\n4. Mark the request file `status: resolved` and append the `resolution` block. **Do not delete** the file — the optional JobClaw agent's HITL MCP owns cleanup.\n\n## Output\n- Compose: prompt block on stdout (stem · options · timeout default · context refs) + the file at `requests\u002F\u003Crequest_id>.json`.\n- Parse: the decision JSON on stdout + the updated request file.\n\n## Anti-patterns\n- More than 3 options.\n- Stems > 120 chars (mobile UX dies).\n- Multi-question prompts (\"Should I skip AND send the email?\"). Decompose.\n- Assuming a delivery channel (Telegram \u002F WhatsApp specifics). Those belong in the HITL MCP.\n- Long context dumps in the stem — link to a path instead.\n- Emoji.\n\n## Rubric\n- [ ] Stem ≤ 120 chars; options ≤ 24 chars; ≤ 3 options.\n- [ ] `timeout_default.action` is explicit and conservative for irreversible actions (default `abort` when in doubt).\n- [ ] `requests\u002F\u003Cid>.json` always written in compose mode; never deleted in parse mode.\n- [ ] In parse mode, an unmatched reply falls through to `free_text`, not a guessed option.\n\n## Next steps\nQuestion composed\u002Fparsed. Resume the action that triggered it.\n","# request-human-input\n\nPause the loop, ask one clear thing, resume on reply. **Hard rules:** [`..\u002F_shared\u002FRULES.md`](..\u002F_shared\u002FRULES.md).\n\n## Two modes\n\n### Compose mode (default — no `--reply`)\nDecide if the situation needs human input. If yes, produce a mobile-first prompt + ≤ 3 options + a timeout default. **Always** writes `requests\u002F\u003Cid>.json` so the the optional JobClaw agent's HITL MCP can pick it up.\n\n### Parse mode (`--reply \"\u003Ctext>\"`)\nMatch the reply to an option (case-insensitive prefix + fuzzy). Return a structured decision; mark the request file `resolved`.\n\n## Inputs (compose)\n- `situation` — 1–3 sentences. The blocker.\n- `policy` — freeform string. Escalation rules (e.g., *\"Escalate any irreversible action; auto-proceed on captcha if MFA backup is configured\"*).\n- `context_attachments[]` *(optional)* — file paths (screenshot, log) the human can review.\n- `request_id` *(optional)* — caller-provided; else generate a 12-char hex slug.\n\n## Inputs (parse)\n- `--request_id` — which request the reply is for.\n- `--reply` — the user's verbatim reply string.\n\n## Method (compose)\n\n1. **Decide if a human is needed.** Apply the `policy` text to `situation`. Output `{needs_human: bool, reason}`. If `false`, exit cleanly — no question, no file.\n\n2. **If needed, compose the prompt** (mobile-first):\n   - **Stem** — ≤ 1 sentence, ≤ 120 chars. The question itself.\n   - **Options** — 1–3 quick-reply labels, each ≤ 24 chars. Verb-led.\n   - **Default on timeout** — what JobClaw does if the human doesn't reply: `skip | queue | retry | abort`. Default `abort` for irreversible actions.\n   - **Context snippet** — 1 line (e.g. *\"Captcha at Workday submit for Mercury, screenshot attached\"*). No more.\n\n3. **Persist.** Always write `requests\u002F\u003Crequest_id>.json`:\n   ```jsonc\n   {\n     \"request_id\": \"...\",\n     \"created_at\": \"ISO-8601\",\n     \"situation\":  \"...\",\n     \"policy\":     \"...\",\n     \"prompt\":     \"string ≤ 120 chars\",\n     \"options\":    [{ \"label\": \"string ≤ 24 chars\", \"value\": \"string\" }],\n     \"timeout_default\": { \"after_minutes\": 30, \"action\": \"skip|queue|retry|abort\" },\n     \"context_refs\":    [\"path\u002For\u002Furl\"],\n     \"status\":     \"open\"\n   }\n   ```\n\n## Method (parse)\n\n1. Load `requests\u002F\u003Crequest_id>.json`.\n2. Match `reply` to `options[*].label` (case-insensitive prefix, then fuzzy). If no match → treat as `free_text`.\n3. Emit:\n   ```jsonc\n   {\n     \"request_id\":      \"...\",\n     \"chosen_option\":   \"\u003Cvalue> | null\",\n     \"free_text\":       \"\u003Cverbatim reply> | null\",\n     \"parsed_decision\": \"string — one of options[].value OR a normalized free_text\",\n     \"resolved_at\":     \"ISO-8601\"\n   }\n   ```\n4. Mark the request file `status: resolved` and append the `resolution` block. **Do not delete** the file — the optional JobClaw agent's HITL MCP owns cleanup.\n\n## Output\n- Compose: prompt block on stdout (stem · options · timeout default · context refs) + the file at `requests\u002F\u003Crequest_id>.json`.\n- Parse: the decision JSON on stdout + the updated request file.\n\n## Anti-patterns\n- More than 3 options.\n- Stems > 120 chars (mobile UX dies).\n- Multi-question prompts (\"Should I skip AND send the email?\"). Decompose.\n- Assuming a delivery channel (Telegram \u002F WhatsApp specifics). Those belong in the HITL MCP.\n- Long context dumps in the stem — link to a path instead.\n- Emoji.\n\n## Rubric\n- [ ] Stem ≤ 120 chars; options ≤ 24 chars; ≤ 3 options.\n- [ ] `timeout_default.action` is explicit and conservative for irreversible actions (default `abort` when in doubt).\n- [ ] `requests\u002F\u003Cid>.json` always written in compose mode; never deleted in parse mode.\n- [ ] In parse mode, an unmatched reply falls through to `free_text`, not a guessed option.\n\n## Next steps\nQuestion composed\u002Fparsed. Resume the action that triggered it.\n",{"name":5,"description":24,"when_to_use":25,"allowed-tools":26,"user-invocable":27},"Decide whether a blocking situation needs human input; compose a mobile-first prompt with ≤ 3 quick-reply options + a stated timeout default; parse a free-text reply back into a structured decision. v0 reasoning-only — delivery (Telegram \u002F WhatsApp) lives in JobClaw's HITL MCP, not here. Always persists requests\u002F\u003Cid>.json in compose mode.\n","Use when a flagged answer-application-questions item, an `escalate` triage row, or any ambiguous \u002F irreversible action needs a human. Two modes: compose (no reply) → produce the question; parse (reply given) → interpret it.\n","Read, Write",true,"main","68211e04d37044c49c3a91f3a29ce9647fada95f","skills\u002Frequest-human-input",1,"https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills","https:\u002F\u002Fgithub.com\u002Fjain777","https:\u002F\u002Fjeevesh.me\u002F","Product Manager | Builder | Claude Coder","2026-06-09 13:47:19",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":27},[39,42,45],{"tool":40,"command":41},"npx","npx skills add jain777\u002Fjobclaw-skills --skill request-human-input",{"tool":43,"command":44},"bunx","bunx skills add jain777\u002Fjobclaw-skills --skill request-human-input",{"tool":46,"command":47},"pnpm","pnpm dlx skills add jain777\u002Fjobclaw-skills --skill request-human-input","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Frequest-human-input\u002FSKILL.md",[],[51,58,65,72,79,86],{"skillNo":52,"name":53,"nameZh":6,"description":54,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":55,"categories":56,"keywords":57,"publishedAt":19},"01M74YF759275CXY2ZWZBA1PD0","write-outreach","Write a short, profile-grounded cold outreach message to a recruiter, hiring manager, or potential referrer — LinkedIn DM or email — with one clear CTA and no flattery.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-outreach\u002FSKILL.md",[],[],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":19},"01M74YF3WPDQ9D2PJ00XWH29EA","write-cover-letter","Produce a job-specific, profile-grounded cover letter in markdown — ≤ 350 words, ≤ 1 page, three paragraphs (hook → two quantified proofs → fit close). Reuses keywords from a prior tailor-resume sidecar when present. Writes a JSON sidecar reserved for a future \u002Frender-resume --kind cover-letter (rendercv).","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-cover-letter\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M74YF106JXZQ3DMDMVR722YH","triage-inbox","Classify a recruiting email (or a batch) into one of the 10 canonical email classes, extract structured fields (company \u002F role \u002F dates \u002F links \u002F asks \u002F deadline \u002F sentiment), and suggest the next action. Writes inbox\u002Ftriage-\u003CYYYY-MM-DD>.json — consumed by infer-status and draft-reply.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Ftriage-inbox\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":19},"01M74YEX348VFDH9FG9C00WKG3","tailor-resume","Produce a job-specific, ATS-optimized resume from the user's master profile and a target job — reordering, reframing, and surfacing the most relevant real experience and keywords. Enforces a content rubric (bullet shape, length, parallel grammar, metric coverage), then renders a polished PDF by default (via render-resume) and visually QAs it. Never fabricates.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Ftailor-resume\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":19},"01M74YESFCVSEG3C0AB8QXVJBR","score-fit","Score how well the user's master profile fits a specific job — an ATS-style match percentage with matched\u002Fmissing keywords, strengths, gaps, and a clear apply-or-skip recommendation. Optionally writes a structured sidecar that tailor-resume consumes.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fscore-fit\u002FSKILL.md",[],[],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M74YEP224H6Z9Q2K16YZ47K8","review-render","Visually QA a rendered resume PDF and auto-fix layout\u002Fcontent defects in a bounded loop: render → screenshot → deterministic gate → vision rubric → apply one fix → re-render, until it passes or hits a pass cap. Catches widows, under-fill, overflow, orphaned headers, and imbalance that text-only logic can't see.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Freview-render\u002FSKILL.md",[],[]]