[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71DXMFWHYVYDN2NPR0YK29X":3,"skill-same:01M71DXMFWHYVYDN2NPR0YK29X":62},{"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":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":39,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M71DXMFWHYVYDN2NPR0YK29X","goals",null,"View and manage company OKRs and key results.","indigoai-us\u002Fhq-core","indigoai-us","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F122242446?v=4","01M71DTQ5NGD10GT1Z7E6XKWC5","HQ","01M71DTQ6BKSYYBNC9RAKT3YDK",94,"MIT","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fgoals\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26],"view","manage","company","Bash","results","read","write","edit","2026-11-10 10:12:30",false,"---\nname: goals\ndescription: View and manage company OKRs and key results.\nallowed-tools: Read, Write, Edit, Bash, AskUserQuestion\n---\n\n# \u002Fgoals - OKR Management\n\nView and manage objectives + key results on company boards (board.json v2).\n\n**Input:** $ARGUMENTS\n\n## Step 1: Parse Input\n\nExtract from `$ARGUMENTS`:\n- `--company \u003Cslug>` or `-c \u003Cslug>` — explicit company override\n- Subcommand (first non-flag word): `add-objective`, `add-kr`, `update-kr`, `set-status`, `link-linear`, `link-project`\n- Subcommand args (remaining positional args after subcommand)\n\nIf no subcommand → **view mode** (Step 3).\n\n## Step 2: Resolve Company\n\n**Priority order:**\n1. `--company` \u002F `-c` flag → use exact slug\n2. cwd inside `companies\u002F{slug}\u002F` → infer from path\n3. cwd inside `repos\u002F{pub|priv}\u002F{name}` → look up owning company in `companies\u002Fmanifest.yaml`\n4. Default to asking user\n\nRead `companies\u002Fmanifest.yaml`. Validate company slug exists.\nRead `companies\u002F{co}\u002Fboard.json`. If `schema_version` is missing or \u003C 2, warn: \"Board needs migration. Run `npx tsx core\u002Fscripts\u002Fmigrate-board-v2.ts` first.\"\n\n## Step 3: View Mode (no subcommand)\n\nRead board.json. Compute metrics:\n- Per KR with `source: \"derived\"`: recompute `current` from linked project statuses (count projects with status in `[\"done\", \"completed\"]`)\n- Per objective: compute overall progress = avg of (KR current\u002Ftarget) across its KRs, or 0% if no KRs\n\nDisplay OKR tree:\n\n```\nOBJECTIVES — {company} [{date}]\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n[{status-emoji}] {objective title}  ({timeframe})\n  Owner: {owner || \"unassigned\"}\n  {if linear_initiative_id: \"Linear: {uuid-short}\"}\n\n  KR 1: {kr title}\n    {progress-bar}  {pct}%  ({current}\u002F{target} {unit})\n    Projects: {proj-id} {status-icon}  {proj-id} {status-icon} ...\n\n  KR 2: ...\n\n---\n\n[{status-emoji}] {next objective} ...\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nUnlinked projects: {count}\nTotal: {obj-count} objectives, {kr-count} KRs, {proj-count} projects\n```\n\n**Status emoji mapping:**\n- `on_track` → `●` (green context via text)\n- `at_risk` → `◐`\n- `off_track` → `○`\n- `completed` → `✓`\n- `paused` → `⏸`\n\n**Progress bar:** Unicode blocks: `████████░░` (10-char bar based on current\u002Ftarget ratio)\n\n## Step 4: add-objective\n\nAsk via AskUserQuestion (batch into 1 call):\n1. **Title** — 1-line strategic goal\n2. **Description** — optional longer context\n3. **Timeframe** — e.g. \"2026-H1\", \"2026-Q2\", \"2026\", \"ongoing\"\n4. **Owner** — free text (person name\u002Fslug) or null\n\nAfter user answers:\n1. Read board.json\n2. Show existing objectives + existing initiatives. Ask: \"Link to existing initiatives?\" (multi-select from initiatives list, or \"None\")\n3. If company has `linear` in manifest `services`: ask \"Link to Linear initiative UUID?\" (text input or skip)\n4. Generate ID: `{prefix}-obj-{max+1}` (3-digit zero-padded, same prefix convention as existing objectives)\n5. Build objective entry with empty `key_results: []`\n6. Append to `objectives[]`, update `updated_at`, write board.json\n\nPrint confirmation with the new objective ID.\n\n## Step 5: add-kr {obj-id}\n\nValidate `{obj-id}` exists in objectives[].\n\nAsk via AskUserQuestion (1 call):\n1. **Title** — measurable outcome statement\n2. **Metric** — machine-readable slug (e.g. \"active_users\", \"revenue_mrr\", \"features_shipped\")\n3. **Target** — numeric target value\n4. **Current** — numeric current value (default 0)\n5. **Unit** — display unit (\"users\", \"%\", \"$k\", \"features\", etc.)\n6. **Direction** — \"up\" (higher=better) or \"down\" (lower=better)\n7. **Source** — \"manual\" (you update it) or \"derived\" (computed from linked project completion)\n\nAfter user answers:\n1. Generate KR ID: `{obj-id}-kr-{N}` where N = existing KR count + 1\n2. Set `status` based on current\u002Ftarget ratio: >=70% → on_track, 40-70% → at_risk, \u003C40% → off_track\n3. Set `project_ids: []` (link projects separately)\n4. Append to objective's `key_results[]`, update `updated_at`, write board.json\n\nIf user wants to link projects now, ask: \"Link projects to this KR?\" Show project list from board, allow multi-select.\n\n## Step 6: update-kr {kr-id} {value}\n\nParse `{kr-id}` — format is `{obj-id}-kr-{N}`.\nFind the objective containing this KR.\nUpdate `current` to `{value}` (parse as number).\nRecompute `status`: current\u002Ftarget ratio → on_track\u002Fat_risk\u002Foff_track\u002Fcompleted.\nIf current >= target and direction is \"up\", set status to \"completed\".\nUpdate `updated_at` on both KR parent objective and board root.\nWrite board.json.\n\nPrint: `Updated {kr-id}: {current}\u002F{target} {unit} ({status})`\n\n## Step 7: set-status {obj-id} {status}\n\nValidate status is one of: `on_track`, `at_risk`, `off_track`, `completed`, `paused`.\nFind objective, update its `status` field.\nUpdate `updated_at`, write board.json.\n\nPrint: `{obj-id} status → {status}`\n\n## Step 8: link-linear {obj-id} {uuid}\n\nFind objective, set `linear_initiative_id` to `{uuid}`.\nUpdate `updated_at`, write board.json.\n\nIf company has `linear` in manifest services, note: \"Cross-referenced with Linear initiative {uuid}.\"\nIf company does NOT have `linear` in services, warn: \"Note: {company} has no Linear integration in manifest.\"\n\n## Step 9: link-project {kr-id} {proj-id}\n\nParse `{kr-id}` to find objective + KR.\nValidate `{proj-id}` exists in projects[].\nAdd `{proj-id}` to KR's `project_ids[]` (skip if already present).\nAlso set `objective_id` on the project entry if not already set (use the KR's parent objective ID).\nIf KR source is \"derived\", recompute `current` from linked project statuses.\nUpdate `updated_at`, write board.json.\n\nPrint: `Linked {proj-id} to {kr-id} ({project-title})`\n\n## Rules\n\n- **1 AskUserQuestion max per subcommand** — batch all questions\n- **board.json is the only file written**\n- **Follow existing ID conventions** — prefix from existing entries, zero-padded 3-digit numbers\n- **Never block on errors** — if board.json is v1 or malformed, warn and exit gracefully\n- **Reindex after writes**: `qmd update 2>\u002Fdev\u002Fnull || true`\n\n## See also\n\n- `\u002Fsignals` — commitments and decisions feeding goals\n- `\u002Fstrategize` — turn goals into a plan\n","# \u002Fgoals - OKR Management\n\nView and manage objectives + key results on company boards (board.json v2).\n\n**Input:** $ARGUMENTS\n\n## Step 1: Parse Input\n\nExtract from `$ARGUMENTS`:\n- `--company \u003Cslug>` or `-c \u003Cslug>` — explicit company override\n- Subcommand (first non-flag word): `add-objective`, `add-kr`, `update-kr`, `set-status`, `link-linear`, `link-project`\n- Subcommand args (remaining positional args after subcommand)\n\nIf no subcommand → **view mode** (Step 3).\n\n## Step 2: Resolve Company\n\n**Priority order:**\n1. `--company` \u002F `-c` flag → use exact slug\n2. cwd inside `companies\u002F{slug}\u002F` → infer from path\n3. cwd inside `repos\u002F{pub|priv}\u002F{name}` → look up owning company in `companies\u002Fmanifest.yaml`\n4. Default to asking user\n\nRead `companies\u002Fmanifest.yaml`. Validate company slug exists.\nRead `companies\u002F{co}\u002Fboard.json`. If `schema_version` is missing or \u003C 2, warn: \"Board needs migration. Run `npx tsx core\u002Fscripts\u002Fmigrate-board-v2.ts` first.\"\n\n## Step 3: View Mode (no subcommand)\n\nRead board.json. Compute metrics:\n- Per KR with `source: \"derived\"`: recompute `current` from linked project statuses (count projects with status in `[\"done\", \"completed\"]`)\n- Per objective: compute overall progress = avg of (KR current\u002Ftarget) across its KRs, or 0% if no KRs\n\nDisplay OKR tree:\n\n```\nOBJECTIVES — {company} [{date}]\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n[{status-emoji}] {objective title}  ({timeframe})\n  Owner: {owner || \"unassigned\"}\n  {if linear_initiative_id: \"Linear: {uuid-short}\"}\n\n  KR 1: {kr title}\n    {progress-bar}  {pct}%  ({current}\u002F{target} {unit})\n    Projects: {proj-id} {status-icon}  {proj-id} {status-icon} ...\n\n  KR 2: ...\n\n---\n\n[{status-emoji}] {next objective} ...\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nUnlinked projects: {count}\nTotal: {obj-count} objectives, {kr-count} KRs, {proj-count} projects\n```\n\n**Status emoji mapping:**\n- `on_track` → `●` (green context via text)\n- `at_risk` → `◐`\n- `off_track` → `○`\n- `completed` → `✓`\n- `paused` → `⏸`\n\n**Progress bar:** Unicode blocks: `████████░░` (10-char bar based on current\u002Ftarget ratio)\n\n## Step 4: add-objective\n\nAsk via AskUserQuestion (batch into 1 call):\n1. **Title** — 1-line strategic goal\n2. **Description** — optional longer context\n3. **Timeframe** — e.g. \"2026-H1\", \"2026-Q2\", \"2026\", \"ongoing\"\n4. **Owner** — free text (person name\u002Fslug) or null\n\nAfter user answers:\n1. Read board.json\n2. Show existing objectives + existing initiatives. Ask: \"Link to existing initiatives?\" (multi-select from initiatives list, or \"None\")\n3. If company has `linear` in manifest `services`: ask \"Link to Linear initiative UUID?\" (text input or skip)\n4. Generate ID: `{prefix}-obj-{max+1}` (3-digit zero-padded, same prefix convention as existing objectives)\n5. Build objective entry with empty `key_results: []`\n6. Append to `objectives[]`, update `updated_at`, write board.json\n\nPrint confirmation with the new objective ID.\n\n## Step 5: add-kr {obj-id}\n\nValidate `{obj-id}` exists in objectives[].\n\nAsk via AskUserQuestion (1 call):\n1. **Title** — measurable outcome statement\n2. **Metric** — machine-readable slug (e.g. \"active_users\", \"revenue_mrr\", \"features_shipped\")\n3. **Target** — numeric target value\n4. **Current** — numeric current value (default 0)\n5. **Unit** — display unit (\"users\", \"%\", \"$k\", \"features\", etc.)\n6. **Direction** — \"up\" (higher=better) or \"down\" (lower=better)\n7. **Source** — \"manual\" (you update it) or \"derived\" (computed from linked project completion)\n\nAfter user answers:\n1. Generate KR ID: `{obj-id}-kr-{N}` where N = existing KR count + 1\n2. Set `status` based on current\u002Ftarget ratio: >=70% → on_track, 40-70% → at_risk, \u003C40% → off_track\n3. Set `project_ids: []` (link projects separately)\n4. Append to objective's `key_results[]`, update `updated_at`, write board.json\n\nIf user wants to link projects now, ask: \"Link projects to this KR?\" Show project list from board, allow multi-select.\n\n## Step 6: update-kr {kr-id} {value}\n\nParse `{kr-id}` — format is `{obj-id}-kr-{N}`.\nFind the objective containing this KR.\nUpdate `current` to `{value}` (parse as number).\nRecompute `status`: current\u002Ftarget ratio → on_track\u002Fat_risk\u002Foff_track\u002Fcompleted.\nIf current >= target and direction is \"up\", set status to \"completed\".\nUpdate `updated_at` on both KR parent objective and board root.\nWrite board.json.\n\nPrint: `Updated {kr-id}: {current}\u002F{target} {unit} ({status})`\n\n## Step 7: set-status {obj-id} {status}\n\nValidate status is one of: `on_track`, `at_risk`, `off_track`, `completed`, `paused`.\nFind objective, update its `status` field.\nUpdate `updated_at`, write board.json.\n\nPrint: `{obj-id} status → {status}`\n\n## Step 8: link-linear {obj-id} {uuid}\n\nFind objective, set `linear_initiative_id` to `{uuid}`.\nUpdate `updated_at`, write board.json.\n\nIf company has `linear` in manifest services, note: \"Cross-referenced with Linear initiative {uuid}.\"\nIf company does NOT have `linear` in services, warn: \"Note: {company} has no Linear integration in manifest.\"\n\n## Step 9: link-project {kr-id} {proj-id}\n\nParse `{kr-id}` to find objective + KR.\nValidate `{proj-id}` exists in projects[].\nAdd `{proj-id}` to KR's `project_ids[]` (skip if already present).\nAlso set `objective_id` on the project entry if not already set (use the KR's parent objective ID).\nIf KR source is \"derived\", recompute `current` from linked project statuses.\nUpdate `updated_at`, write board.json.\n\nPrint: `Linked {proj-id} to {kr-id} ({project-title})`\n\n## Rules\n\n- **1 AskUserQuestion max per subcommand** — batch all questions\n- **board.json is the only file written**\n- **Follow existing ID conventions** — prefix from existing entries, zero-padded 3-digit numbers\n- **Never block on errors** — if board.json is v1 or malformed, warn and exit gracefully\n- **Reindex after writes**: `qmd update 2>\u002Fdev\u002Fnull || true`\n\n## See also\n\n- `\u002Fsignals` — commitments and decisions feeding goals\n- `\u002Fstrategize` — turn goals into a plan\n",{"name":5,"description":7,"allowed-tools":32},"Read, Write, Edit, Bash, AskUserQuestion","main","205cf61728a27ef15e9153aa38df5856fc8d82f5",".claude\u002Fskills\u002Fgoals",18,"https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core","https:\u002F\u002Fgithub.com\u002Findigoai-us","https:\u002F\u002Fhqforwork.com\u002F","The AI Context Layer for Teams","2026-11-09 23:36:37",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add indigoai-us\u002Fhq-core --skill goals",{"tool":48,"command":49},"bunx","bunx skills add indigoai-us\u002Fhq-core --skill goals",{"tool":51,"command":52},"pnpm","pnpm dlx skills add indigoai-us\u002Fhq-core --skill goals","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fgoals\u002FSKILL.md",true,[56],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"agents\u002Fopenai.yaml","REFERENCE","参考文档",109,"https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fgoals\u002Fagents\u002Fopenai.yaml",[63,81,111,135,146,156],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":27},"01M71E4MQ04WPK1EVDS7VKJ3E8","social-graphic","Generate 1080x1080 HTML social graphics for HQ update posts.","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fworkers\u002Fpublic\u002Fsocial-strategist\u002Fskills\u002Fsocial-graphic\u002FSKILL.md",[],[70,71,22,72,26,25,24,73,74,75,76,77,78,79,80],"social","social graphic","html","update","generate","graphics","browser","open","agent-browser","for","posts",{"skillNo":82,"name":78,"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":94,"publishedAt":27},"01M71E4H33K4P5H5M7ENPTMFSC","Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to \"open a website\", \"fill out a form\", \"click a button\", \"take a screenshot\", \"scrape data from a page\", \"test this web app\", \"login to a site\", \"automate browser actions\", or any task requiring programmatic web interaction.","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fworkers\u002Fpublic\u002Fqa-tester\u002Fskills\u002Fagent-browser\u002FSKILL.md",[86,91],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":92,"categoryName":93,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000023","Skill与智能体开发",[95,76,96,97,98,99,22,100,101,102,103,104,77,105,78,106,107,108,109,110],"agent browser","click","ai agents","app","scrape","when","apps","actions","extracting","take a screenshot","testing","programmatic","browser automation","website","cli","interaction",{"skillNo":112,"name":113,"nameZh":6,"description":114,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":27},"01M71E4FDBD7J8Y45JJ9KMMYGN","work-mesh","Work Mesh Live — automatic presence via hq mesh daemon; context reconcile\u002Forganize; manual session task-status, blocked, and note only.","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fwork-mesh\u002FSKILL.md",[],[118,119,120,22,121,122,123,124,125,126,127,128,129,130,24,131,132,133,134],"work mesh","work","mesh","status","context","note","live","presence","automatic","reconcile","only","organize","task","session","manual","daemon","via",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":27},"01M71E4EGHNAAGWAPV6KGBMQ9W","review","Parity worker review skill (materialization fixture).","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fscripts\u002Ftests\u002Ffixtures\u002Fagent-session\u002Fworker-materialization\u002Fparity-worker\u002Fskills\u002Freview\u002FSKILL.md",[],[137,142,143,144,145],"review skill","fixture","parity","worker",{"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":152,"publishedAt":27},"01M71E4D1FZDJPDC15DRERKX8Y","run","Run or list HQ workers (parity fixture).","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fscripts\u002Ftests\u002Ffixtures\u002Fagent-session\u002Fskills\u002Frun\u002FSKILL.md",[],[148,153,154,144,155,143],"parity fixture","workers","list",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":27},"01M71E4BF4MV5SEWZJZ4T1QPQW","handoff","Preserve session state for a follow-up agent (parity fixture).","https:\u002F\u002Fgithub.com\u002Findigoai-us\u002Fhq-core\u002Fblob\u002Fmain\u002Fcore\u002Fscripts\u002Ftests\u002Ffixtures\u002Fagent-session\u002Fskills\u002Fhandoff\u002FSKILL.md",[],[158,153,163,164,131,165,79,144,166,167,143],"up","preserve","session state","follow-up","state"]