[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M75DW20FYJRW28TYADEF3DBG":3,"skill-same:01M75DW20FYJRW28TYADEF3DBG":49},{"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":26,"commitSha":27,"skillDirectory":28,"forksCount":29,"repositoryHtmlUrl":30,"repositoryHomepageUrl":31,"ownerHtmlUrl":32,"ownerBlogUrl":33,"ownerDescription":6,"updatedAt":34,"install":35,"resources":48},"01M75DW20FYJRW28TYADEF3DBG","cowork-setup",null,"One-shot setup that wires Digital Marketing Pro for team usage in Anthropic Cowork. Verifies the Cowork sandbox, checks for a Google Drive integration, creates the canonical Drive folder layout, and confirms team-ready brand-state routing. Use this the first time a Cowork user installs DMP OR when brand profiles aren't persisting across sessions.","LongLeo287\u002FSEOSONA-OS","LongLeo287","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F141803367?v=4","01M6JK75C62VCNZKR5BRZ386YV","LongLeo","01M75CK60XQGYJY3YDGGFJQDYT",2,"MIT","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fframeworks\u002Fdigital-marketing-pro\u002Fskills\u002Fcowork-setup\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: cowork-setup\ndescription: \"One-shot setup that wires Digital Marketing Pro for team usage in Anthropic Cowork. Verifies the Cowork sandbox, checks for a Google Drive integration, creates the canonical Drive folder layout, and confirms team-ready brand-state routing. Use this the first time a Cowork user installs DMP OR when brand profiles aren't persisting across sessions.\"\nargument-hint: \"[--brand \u003Cname>] [--drive-root \u003Cfolder-name>]\"\neffort: low\n---\n\n# \u002Fdigital-marketing-pro:cowork-setup\n\nThe one-time setup that makes Digital Marketing Pro persistent in Cowork by a team. Wires up the Cowork → Drive routing so brand profiles, campaign plans, audit reports, and run records survive past the end of the current Cowork session.\n\n## Why this skill exists\n\nCowork is the friendliest Anthropic surface for marketers — agency teams, in-house marketers, growth ops — who don't live in a terminal. The natural team workflow is \"everyone uses Cowork; brand state and outputs live in our shared Drive\". But DMP's filesystem layer was designed for local Claude Code (writes to `~\u002F.claude-marketing\u002F` on the host machine). In Cowork that path is the per-session Linux sandbox — vanishes at session end, invisible to the team.\n\n**`${CLAUDE_PLUGIN_DATA}` does not help here either.** Anthropic's plugin docs describe it as the persistent per-plugin storage path. In Cowork it resolves to a session-scoped VM mount that disappears the same way (open: [claude-code#51398](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fissues\u002F51398)). Every OAuth-backed MCP plugin hits the same wall.\n\nv3.12.0 fixed this with environment-aware routing: when Cowork is detected AND a Drive MCP is configured, brand profiles and reports round-trip through Drive instead of the ephemeral sandbox. This skill is the one-shot setup that ensures both conditions are true before you start producing real work.\n\n## Behavior\n\n### Step 1 — Verify Cowork environment\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fplugin-metadata.py\" --section environment\n```\n\nParse the JSON. Three branches:\n\n**`environment == \"cowork-sandbox\"`** — Proceed to Step 2.\n\n**`environment == \"claude-code-windows\"` \u002F `\"-mac\"` \u002F `\"-linux\"`** — Tell the user:\n\n> \"You're running in local Claude Code, not Cowork. The Cowork-specific Drive routing isn't needed here — brand state at `~\u002F.claude-marketing\u002F` persists on your host as designed. If you ALSO want Drive backups for team sharing, you can run this skill anyway and it'll mirror state to Drive as a backup. Want to proceed?\"\n\nOnly proceed if the user confirms.\n\n**`environment == \"unknown\"`** — Show the indicators from the JSON and ask the user where they're running, then proceed assuming Cowork (since unknown-from-Cowork is the most likely case).\n\n### Step 2 — Verify a Drive MCP is connected\n\nScan your available tools for any Google Drive MCP. Common signatures:\n\n- `mcp__\u003Cid>__create_file`, `mcp__\u003Cid>__read_file_content`, `mcp__\u003Cid>__search_files`, `mcp__\u003Cid>__list_folder_items` — Anthropic-platform Drive integration (Settings → Integrations → Google Drive in Cowork)\n- `mcp__pipedream-google-drive__*` — Pipedream aggregator\n- `mcp__composio-google-drive__*` — Composio\n- `mcp__zapier-google-drive__*` — Zapier\n- Any tool whose name combines \"drive\" with \"create\" \u002F \"upload\" \u002F \"search\"\n\n**If a Drive MCP is found:** confirm to the user which one (\"Found: Anthropic platform Google Drive integration. I'll use this.\") and proceed to Step 3.\n\n**If NO Drive MCP is found:** stop the wizard with a clear message:\n\n> \"Cowork-mode DMP needs a Google Drive integration before it can persist brand state for your team. Easiest setup (60 seconds):\n>\n> 1. In Cowork, click your profile menu → **Settings** → **Integrations**\n> 2. Find **Google Drive** in the list → click **Connect**\n> 3. Sign in with the Google account that owns your team's shared Drive\n> 4. Come back here and re-run `\u002Fdigital-marketing-pro:cowork-setup`\n>\n> Alternative: a Notion MCP also works as a persistence target — DMP will treat each brand as a Notion page. If you'd prefer that route, add Notion to your Cowork Integrations panel and re-run this skill.\"\n\n### Step 3 — Verify or create the canonical Drive folder\n\nDefault folder name: `DigitalMarketingPro` (under \"My Drive\" or wherever the user prefers). If `--drive-root \u003Cname>` was passed, use that instead.\n\nUse the Drive MCP to:\n\n1. Search for a top-level folder named `DigitalMarketingPro` (or the user's `--drive-root`)\n2. If it exists, confirm the user wants to use it. Show its URL.\n3. If it doesn't exist, create it. Show the URL of the new folder.\n\nThen create the subfolder skeleton:\n\n```\nDigitalMarketingPro\u002F\n├── _brands\u002F                  \u003C- brand profile JSONs persist here per brand\n├── _runs\u002F                    \u003C- per-run checkpoints (resume across sessions)\n├── _plans\u002F                   \u003C- yearly + quarterly + campaign plans\n└── (brand folders created on first content\u002Faudit\u002Fcampaign run)\n    └── \u003Cbrand name>\u002F\n        ├── strategy\u002F\n        ├── seo\u002F\n        ├── campaigns\u002F\n        ├── audits\u002F\n        └── reports\u002F\n```\n\nDon't create empty brand subfolders yet — those auto-create during the first run for that brand. Just `_brands\u002F`, `_runs\u002F`, and `_plans\u002F` need to exist.\n\n### Step 4 — Store the Drive root reference + team namespace\n\n**Multi-team isolation**: ask the user \"what's your team's Drive root folder name?\" (default: `DigitalMarketingPro`). Different teams use different folder names → automatic namespace isolation. Examples:\n- Solo \u002F small team: `DigitalMarketingPro` (default)\n- Agency named \"ACME\": `ACME DigitalMarketingPro`\n- Two distinct teams sharing one Drive: each picks their own name\n\nThen write the config via the canonical script (NOT a hand-written JSON file — use the script so the format stays in sync with the rest of the toolchain):\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fdrive-sync-state.py\" --action write-config --data '{\n  \"environment\": \"cowork-sandbox\",\n  \"drive_root_folder_name\": \"\u003Cteam folder name chosen>\",\n  \"drive_root_folder_id\": \"\u003Cid from Step 3>\",\n  \"drive_root_folder_url\": \"\u003CwebViewLink from Step 3>\",\n  \"drive_mcp_tool_prefix\": \"\u003Cprefix detected in Step 2, e.g. mcp__abc123__>\"\n}'\n```\n\nThe script writes to `~\u002F.claude-marketing\u002F_cowork-config.json` and adds a `configured_at` timestamp automatically.\n\nFuture Cowork sessions: every DMP operation (`brand-setup`, `status`, `seo-audit`, `campaign-plan`, etc.) reads this config first. If it exists AND the Drive folder still exists, all I\u002FO routes to that root. If a different team picked a different folder name, their config lives at the same path but points elsewhere — no collision.\n\nTo verify it was written correctly:\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fdrive-sync-state.py\" --action read-config\n```\n\n### Step 5 — Set the user's expectations\n\nShow a clean summary:\n\n```\nDigital Marketing Pro is now wired for Cowork team usage:\n\nEnvironment:           Cowork sandbox (Linux)\nDrive integration:     \u003Cname>\nOutput root in Drive:  My Drive\u002F\u003Cfolder name> (link)\nConfig saved at:       ~\u002F.claude-marketing\u002F_cowork-config.json\n\nWhat this means in practice:\n\n- \u002Fdigital-marketing-pro:brand-setup -> profile lands in\n  Drive\u002F\u003Cfolder>\u002F_brands\u002F\u003Cbrand-slug>\u002Fprofile.json (persists across sessions)\n- \u002Fdigital-marketing-pro:campaign-plan -> plan lands in\n  Drive\u002F\u003Cfolder>\u002F\u003Cbrand>\u002Fcampaigns\u002F\u003CYYYY-MM>\u002F\u003Cslug>\u002FPLAN.md\n- \u002Fdigital-marketing-pro:seo-audit -> audit + intermediates land in\n  Drive\u002F\u003Cfolder>\u002F\u003Cbrand>\u002Faudits\u002F\u003Cdate>\u002F\n- \u002Fdigital-marketing-pro:status -> reads brand state from Drive first,\n  falls back to local sandbox if Drive call fails\n- \u002Fdigital-marketing-pro:resume -> picks up an interrupted run by\n  pulling its checkpoint files from Drive\u002F\u003Cfolder>\u002F_runs\u002F\n\nYour team accesses everything via Google Drive directly. No\nCowork-specific paths to remember.\n\nNext step:\n  \u002Fdigital-marketing-pro:brand-setup \"Your Brand Name\"\n```\n\n### Step 6 — Optional: kick off a brand setup\n\nIf `--brand \u003Cname>` was passed, automatically launch `\u002Fdigital-marketing-pro:brand-setup \"\u003Cname>\"` after the summary. This makes the very first run \"one command, fully set up.\"\n\n## How the Cowork-aware skills use this config\n\nWhen the routing is configured, brand-setup writes locally to `~\u002F.claude-marketing\u002F{brand}\u002Fprofile.json` AND records a pending Drive upload via `drive-sync-state.py --action add-pending-upload`. The agent then reads the pending list and uses its Drive MCP to push the file to `\u003Croot>\u002F_brands\u002F{brand}\u002Fprofile.json`. On a future Cowork session, the agent reverses this: it reads `_cowork-config.json`, sees the team's Drive root, downloads `\u003Croot>\u002F_brands\u002F{brand}\u002Fprofile.json` to the local sandbox, and marks it `profile-mark-downloaded` so the local hash matches the Drive copy.\n\nConcretely: after every state-mutating DMP operation, the agent runs:\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fdrive-sync-state.py\" --action profile-needs-upload --brand \u003Cbrand>\n```\n\nIf `needs_upload: true`, the agent uses its Drive MCP to upload the file and then runs `--action profile-mark-uploaded` with the Drive file ID returned by the MCP.\n\n## What this skill does NOT do\n\n- It does not change DMP's behavior in local Claude Code (where host filesystem is fine).\n- It does not migrate existing local-mode brands to Drive. To do that after the fact: re-run `\u002Fdigital-marketing-pro:brand-setup \"\u003Cbrand>\"` in Cowork after this skill finishes — the brand-setup skill will upload the local profile to Drive.\n- It does not create a service-account JSON. Cowork-mode uses the MCP path exclusively (no Google Cloud setup needed).\n- It does not check whether your Drive has enough space. Brand profiles + plans are tiny (\u003C100KB typical), so this is rarely a concern, but flag it if you hit a quota error during a real run.\n- It does not replace the local fallback — if a Drive call fails for any reason, DMP still writes locally and re-queues the upload.\n\n## See also\n\n- `\u002Fdigital-marketing-pro:status` — confirm Cowork+Drive is detected after setup\n- `\u002Fdigital-marketing-pro:brand-setup` — actual brand setup (now Drive-default in Cowork)\n- `\u002Fdigital-marketing-pro:doctor` — per-action readiness check (now reports Cowork+Drive routing too)\n- `scripts\u002Fplugin-metadata.py --section environment` — the underlying probe\n- README \"Cowork team usage\" section — canonical doc for which surface to use\n","# \u002Fdigital-marketing-pro:cowork-setup\n\nThe one-time setup that makes Digital Marketing Pro persistent in Cowork by a team. Wires up the Cowork → Drive routing so brand profiles, campaign plans, audit reports, and run records survive past the end of the current Cowork session.\n\n## Why this skill exists\n\nCowork is the friendliest Anthropic surface for marketers — agency teams, in-house marketers, growth ops — who don't live in a terminal. The natural team workflow is \"everyone uses Cowork; brand state and outputs live in our shared Drive\". But DMP's filesystem layer was designed for local Claude Code (writes to `~\u002F.claude-marketing\u002F` on the host machine). In Cowork that path is the per-session Linux sandbox — vanishes at session end, invisible to the team.\n\n**`${CLAUDE_PLUGIN_DATA}` does not help here either.** Anthropic's plugin docs describe it as the persistent per-plugin storage path. In Cowork it resolves to a session-scoped VM mount that disappears the same way (open: [claude-code#51398](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fissues\u002F51398)). Every OAuth-backed MCP plugin hits the same wall.\n\nv3.12.0 fixed this with environment-aware routing: when Cowork is detected AND a Drive MCP is configured, brand profiles and reports round-trip through Drive instead of the ephemeral sandbox. This skill is the one-shot setup that ensures both conditions are true before you start producing real work.\n\n## Behavior\n\n### Step 1 — Verify Cowork environment\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fplugin-metadata.py\" --section environment\n```\n\nParse the JSON. Three branches:\n\n**`environment == \"cowork-sandbox\"`** — Proceed to Step 2.\n\n**`environment == \"claude-code-windows\"` \u002F `\"-mac\"` \u002F `\"-linux\"`** — Tell the user:\n\n> \"You're running in local Claude Code, not Cowork. The Cowork-specific Drive routing isn't needed here — brand state at `~\u002F.claude-marketing\u002F` persists on your host as designed. If you ALSO want Drive backups for team sharing, you can run this skill anyway and it'll mirror state to Drive as a backup. Want to proceed?\"\n\nOnly proceed if the user confirms.\n\n**`environment == \"unknown\"`** — Show the indicators from the JSON and ask the user where they're running, then proceed assuming Cowork (since unknown-from-Cowork is the most likely case).\n\n### Step 2 — Verify a Drive MCP is connected\n\nScan your available tools for any Google Drive MCP. Common signatures:\n\n- `mcp__\u003Cid>__create_file`, `mcp__\u003Cid>__read_file_content`, `mcp__\u003Cid>__search_files`, `mcp__\u003Cid>__list_folder_items` — Anthropic-platform Drive integration (Settings → Integrations → Google Drive in Cowork)\n- `mcp__pipedream-google-drive__*` — Pipedream aggregator\n- `mcp__composio-google-drive__*` — Composio\n- `mcp__zapier-google-drive__*` — Zapier\n- Any tool whose name combines \"drive\" with \"create\" \u002F \"upload\" \u002F \"search\"\n\n**If a Drive MCP is found:** confirm to the user which one (\"Found: Anthropic platform Google Drive integration. I'll use this.\") and proceed to Step 3.\n\n**If NO Drive MCP is found:** stop the wizard with a clear message:\n\n> \"Cowork-mode DMP needs a Google Drive integration before it can persist brand state for your team. Easiest setup (60 seconds):\n>\n> 1. In Cowork, click your profile menu → **Settings** → **Integrations**\n> 2. Find **Google Drive** in the list → click **Connect**\n> 3. Sign in with the Google account that owns your team's shared Drive\n> 4. Come back here and re-run `\u002Fdigital-marketing-pro:cowork-setup`\n>\n> Alternative: a Notion MCP also works as a persistence target — DMP will treat each brand as a Notion page. If you'd prefer that route, add Notion to your Cowork Integrations panel and re-run this skill.\"\n\n### Step 3 — Verify or create the canonical Drive folder\n\nDefault folder name: `DigitalMarketingPro` (under \"My Drive\" or wherever the user prefers). If `--drive-root \u003Cname>` was passed, use that instead.\n\nUse the Drive MCP to:\n\n1. Search for a top-level folder named `DigitalMarketingPro` (or the user's `--drive-root`)\n2. If it exists, confirm the user wants to use it. Show its URL.\n3. If it doesn't exist, create it. Show the URL of the new folder.\n\nThen create the subfolder skeleton:\n\n```\nDigitalMarketingPro\u002F\n├── _brands\u002F                  \u003C- brand profile JSONs persist here per brand\n├── _runs\u002F                    \u003C- per-run checkpoints (resume across sessions)\n├── _plans\u002F                   \u003C- yearly + quarterly + campaign plans\n└── (brand folders created on first content\u002Faudit\u002Fcampaign run)\n    └── \u003Cbrand name>\u002F\n        ├── strategy\u002F\n        ├── seo\u002F\n        ├── campaigns\u002F\n        ├── audits\u002F\n        └── reports\u002F\n```\n\nDon't create empty brand subfolders yet — those auto-create during the first run for that brand. Just `_brands\u002F`, `_runs\u002F`, and `_plans\u002F` need to exist.\n\n### Step 4 — Store the Drive root reference + team namespace\n\n**Multi-team isolation**: ask the user \"what's your team's Drive root folder name?\" (default: `DigitalMarketingPro`). Different teams use different folder names → automatic namespace isolation. Examples:\n- Solo \u002F small team: `DigitalMarketingPro` (default)\n- Agency named \"ACME\": `ACME DigitalMarketingPro`\n- Two distinct teams sharing one Drive: each picks their own name\n\nThen write the config via the canonical script (NOT a hand-written JSON file — use the script so the format stays in sync with the rest of the toolchain):\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fdrive-sync-state.py\" --action write-config --data '{\n  \"environment\": \"cowork-sandbox\",\n  \"drive_root_folder_name\": \"\u003Cteam folder name chosen>\",\n  \"drive_root_folder_id\": \"\u003Cid from Step 3>\",\n  \"drive_root_folder_url\": \"\u003CwebViewLink from Step 3>\",\n  \"drive_mcp_tool_prefix\": \"\u003Cprefix detected in Step 2, e.g. mcp__abc123__>\"\n}'\n```\n\nThe script writes to `~\u002F.claude-marketing\u002F_cowork-config.json` and adds a `configured_at` timestamp automatically.\n\nFuture Cowork sessions: every DMP operation (`brand-setup`, `status`, `seo-audit`, `campaign-plan`, etc.) reads this config first. If it exists AND the Drive folder still exists, all I\u002FO routes to that root. If a different team picked a different folder name, their config lives at the same path but points elsewhere — no collision.\n\nTo verify it was written correctly:\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fdrive-sync-state.py\" --action read-config\n```\n\n### Step 5 — Set the user's expectations\n\nShow a clean summary:\n\n```\nDigital Marketing Pro is now wired for Cowork team usage:\n\nEnvironment:           Cowork sandbox (Linux)\nDrive integration:     \u003Cname>\nOutput root in Drive:  My Drive\u002F\u003Cfolder name> (link)\nConfig saved at:       ~\u002F.claude-marketing\u002F_cowork-config.json\n\nWhat this means in practice:\n\n- \u002Fdigital-marketing-pro:brand-setup -> profile lands in\n  Drive\u002F\u003Cfolder>\u002F_brands\u002F\u003Cbrand-slug>\u002Fprofile.json (persists across sessions)\n- \u002Fdigital-marketing-pro:campaign-plan -> plan lands in\n  Drive\u002F\u003Cfolder>\u002F\u003Cbrand>\u002Fcampaigns\u002F\u003CYYYY-MM>\u002F\u003Cslug>\u002FPLAN.md\n- \u002Fdigital-marketing-pro:seo-audit -> audit + intermediates land in\n  Drive\u002F\u003Cfolder>\u002F\u003Cbrand>\u002Faudits\u002F\u003Cdate>\u002F\n- \u002Fdigital-marketing-pro:status -> reads brand state from Drive first,\n  falls back to local sandbox if Drive call fails\n- \u002Fdigital-marketing-pro:resume -> picks up an interrupted run by\n  pulling its checkpoint files from Drive\u002F\u003Cfolder>\u002F_runs\u002F\n\nYour team accesses everything via Google Drive directly. No\nCowork-specific paths to remember.\n\nNext step:\n  \u002Fdigital-marketing-pro:brand-setup \"Your Brand Name\"\n```\n\n### Step 6 — Optional: kick off a brand setup\n\nIf `--brand \u003Cname>` was passed, automatically launch `\u002Fdigital-marketing-pro:brand-setup \"\u003Cname>\"` after the summary. This makes the very first run \"one command, fully set up.\"\n\n## How the Cowork-aware skills use this config\n\nWhen the routing is configured, brand-setup writes locally to `~\u002F.claude-marketing\u002F{brand}\u002Fprofile.json` AND records a pending Drive upload via `drive-sync-state.py --action add-pending-upload`. The agent then reads the pending list and uses its Drive MCP to push the file to `\u003Croot>\u002F_brands\u002F{brand}\u002Fprofile.json`. On a future Cowork session, the agent reverses this: it reads `_cowork-config.json`, sees the team's Drive root, downloads `\u003Croot>\u002F_brands\u002F{brand}\u002Fprofile.json` to the local sandbox, and marks it `profile-mark-downloaded` so the local hash matches the Drive copy.\n\nConcretely: after every state-mutating DMP operation, the agent runs:\n\n```bash\npython \"${CLAUDE_PLUGIN_ROOT}\u002Fscripts\u002Fdrive-sync-state.py\" --action profile-needs-upload --brand \u003Cbrand>\n```\n\nIf `needs_upload: true`, the agent uses its Drive MCP to upload the file and then runs `--action profile-mark-uploaded` with the Drive file ID returned by the MCP.\n\n## What this skill does NOT do\n\n- It does not change DMP's behavior in local Claude Code (where host filesystem is fine).\n- It does not migrate existing local-mode brands to Drive. To do that after the fact: re-run `\u002Fdigital-marketing-pro:brand-setup \"\u003Cbrand>\"` in Cowork after this skill finishes — the brand-setup skill will upload the local profile to Drive.\n- It does not create a service-account JSON. Cowork-mode uses the MCP path exclusively (no Google Cloud setup needed).\n- It does not check whether your Drive has enough space. Brand profiles + plans are tiny (\u003C100KB typical), so this is rarely a concern, but flag it if you hit a quota error during a real run.\n- It does not replace the local fallback — if a Drive call fails for any reason, DMP still writes locally and re-queues the upload.\n\n## See also\n\n- `\u002Fdigital-marketing-pro:status` — confirm Cowork+Drive is detected after setup\n- `\u002Fdigital-marketing-pro:brand-setup` — actual brand setup (now Drive-default in Cowork)\n- `\u002Fdigital-marketing-pro:doctor` — per-action readiness check (now reports Cowork+Drive routing too)\n- `scripts\u002Fplugin-metadata.py --section environment` — the underlying probe\n- README \"Cowork team usage\" section — canonical doc for which surface to use\n",{"name":5,"effort":24,"description":7,"argument-hint":25},"low","[--brand \u003Cname>] [--drive-root \u003Cfolder-name>]","main","4fd50b1281e8cd978866b6b4556242605cabf708","2_KNOWLEDGE\u002Fframeworks\u002Fdigital-marketing-pro\u002Fskills\u002Fcowork-setup",1,"https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS","https:\u002F\u002Fseosona-os.vercel.app","https:\u002F\u002Fgithub.com\u002FLongLeo287","https:\u002F\u002Fwww.facebook.com\u002FResourceRookie2023","2026-10-09 15:14:13",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add LongLeo287\u002FSEOSONA-OS --skill cowork-setup",{"tool":41,"command":42},"bunx","bunx skills add LongLeo287\u002FSEOSONA-OS --skill cowork-setup",{"tool":44,"command":45},"pnpm","pnpm dlx skills add LongLeo287\u002FSEOSONA-OS --skill cowork-setup","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fframeworks\u002Fdigital-marketing-pro\u002Fskills\u002Fcowork-setup\u002FSKILL.md",true,[],[50,57,64,71,78,85],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":19},"01M75F0T3V3W7JQQ05X26NNN2T","web_crawler_katana","High-speed web crawling using Katana patterns for deep site mapping, URL discovery, and content extraction.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fskills\u002Fseo_technical\u002Fweb_crawler_katana\u002FSKILL.md",[],[],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M75F0Q2QJXDGAFKC7D84GT88","server_log_analyzer","Analyzes Nginx\u002FApache server logs to identify Googlebot crawl patterns, errors, and performance bottlenecks.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fskills\u002Fseo_technical\u002Fserver_log_analyzer\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":19},"01M75F0KZP6D8R8XPN2YT35BAJ","schema_markup_generator","Auto-generates JSON-LD structured data for any page type (Article, Product, FAQ, LocalBusiness, etc.).","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fskills\u002Fseo_technical\u002Fschema_markup_generator\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":19},"01M75F0G3KX4Y86AXJXTKXVEVA","internal_linking_optimizer","Analyzes and optimizes the internal link graph of a website for SEO authority distribution.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fskills\u002Fseo_technical\u002Finternal_linking_optimizer\u002FSKILL.md",[],[],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":19},"01M75F0CS1RYX4YPJC7N6RAAQJ","google_trends_analyzer","Detects trending topics and seasonal patterns using Google Trends data for content planning and keyword strategy.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fskills\u002Fseo_technical\u002Fgoogle_trends_analyzer\u002FSKILL.md",[],[],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M75F0ASMQ1GKPFX82D19SRTN","brand_context_analyzer","Tracks brand mentions, sentiment, and online reputation across web sources.","https:\u002F\u002Fgithub.com\u002FLongLeo287\u002FSEOSONA-OS\u002Fblob\u002Fmain\u002F2_KNOWLEDGE\u002Fskills\u002Fseo_technical\u002Fbrand_context_analyzer\u002FSKILL.md",[],[]]