[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F0VQF682HT0CKSQP4HTG3Z":3,"skill-same:01M6F0VQF682HT0CKSQP4HTG3Z":131},{"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":31,"publishedAt":51,"linkOnly":52,"markdownContent":53,"markdownBody":54,"frontMatter":55,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":67,"ownerHtmlUrl":68,"ownerBlogUrl":6,"ownerDescription":69,"updatedAt":70,"install":71,"resources":84},"01M6F0VQF682HT0CKSQP4HTG3Z","plannotator",null,"Interactive plan and diff review for AI coding agents. Visual browser UI for annotating agent plans — approve or request changes with structured feedback. Supports code review, image annotation, and auto-save to Obsidian\u002FBear Notes.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50],"ui","save to obsidian","annotation","opencode","auto","write","read","plan","Bash","code review","browser","code-review","code","notes","ai coding agents","obsidian","review","image","design","2026-11-10 10:12:30",false,"---\nname: plannotator\ndescription: Interactive plan and diff review for AI coding agents. Visual browser UI for annotating agent plans — approve or request changes with structured feedback. Supports code review, image annotation, and auto-save to Obsidian\u002FBear Notes.\nallowed-tools: Read Bash Write\nmetadata:\n  tags: plan, planning, planno, plannotator, plan-review, diff-review, code-review, claude-code, opencode, annotation, visual-review, plan-review, design-review\n  platforms: Claude, OpenCode, Codex, Gemini\n  keyword: plan\n  version: 0.9.2\n  source: backnotprop\u002Fplannotator\n---\n\n\n# plannotator — Interactive Plan & Diff Review\n\n> Keyword: `plan` | Source: https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator\n>\n> Annotate and review AI coding agent plans visually, share with your team, send feedback with one click.\n> Works with **Claude Code**, **OpenCode**, **Gemini CLI**, and **Codex CLI**.\n\n## When to use this skill\n\n- You want to review an AI agent's implementation plan BEFORE it starts coding\n- You want to annotate a git diff after the agent makes changes\n- You need a feedback loop: visually mark up what to change, then send structured feedback back\n- You want to share plan reviews with teammates via a link\n- You want to auto-save approved plans to Obsidian or Bear Notes\n\n---\n\n## Scripts (Automated Patterns)\n\nAll patterns have a corresponding script in `scripts\u002F`. Run them directly or let the agent call them.\n\n| Script | Pattern | Usage |\n|--------|---------|-------|\n| `scripts\u002Finstall.sh` | CLI Install | One-command install; `--all` sets up every AI tool |\n| `scripts\u002Fsetup-hook.sh` | Claude Code Hook | Configure Claude Code ExitPlanMode hook |\n| `scripts\u002Fsetup-gemini-hook.sh` | Gemini CLI Hook | Configure Gemini CLI ExitPlanMode hook + GEMINI.md |\n| `scripts\u002Fsetup-codex-hook.sh` | Codex CLI Setup | Configure Codex CLI developer_instructions + prompt |\n| `scripts\u002Fsetup-opencode-plugin.sh` | OpenCode Plugin | Register plugin + slash commands |\n| `scripts\u002Fcheck-status.sh` | Status Check | Verify all integrations and configuration |\n| `scripts\u002Fconfigure-remote.sh` | Remote Mode | SSH \u002F devcontainer \u002F WSL configuration |\n| `scripts\u002Freview.sh` | Code Review | Launch diff review UI |\n\n---\n\n## Pattern 1: Install\n\n```bash\n# Install CLI only (macOS \u002F Linux \u002F WSL)\nbash scripts\u002Finstall.sh\n\n# Install CLI and get Claude Code plugin commands\nbash scripts\u002Finstall.sh --with-plugin\n\n# Install CLI + configure Gemini CLI\nbash scripts\u002Finstall.sh --with-gemini\n\n# Install CLI + configure Codex CLI\nbash scripts\u002Finstall.sh --with-codex\n\n# Install CLI + register OpenCode plugin\nbash scripts\u002Finstall.sh --with-opencode\n\n# Install CLI + all AI tool integrations at once\nbash scripts\u002Finstall.sh --all\n```\n\nWhat it does:\n- Detects OS (macOS \u002F Linux \u002F WSL \u002F Windows)\n- Checks for Obsidian and shows install link if missing: https:\u002F\u002Fobsidian.md\u002Fdownload\n- Installs via `https:\u002F\u002Fplannotator.ai\u002Finstall.sh`\n- Verifies install and PATH\n- Optionally runs integration scripts for each AI tool\n- On Windows: prints PowerShell \u002F CMD commands to run manually\n\n---\n\n## Pattern 2: Hook Setup (Plan Review trigger)\n\n```bash\n# Add hook to ~\u002F.claude\u002Fsettings.json\nbash scripts\u002Fsetup-hook.sh\n\n# Preview what would change (no writes)\nbash scripts\u002Fsetup-hook.sh --dry-run\n```\n\nWhat it does:\n- Checks plannotator CLI is installed\n- Merges `ExitPlanMode` hook into `~\u002F.claude\u002Fsettings.json` safely (backs up first)\n- Skips if hook already configured\n- **Restart Claude Code after running this**\n\n### Alternative: Claude Code Plugin (no manual hook needed)\n\nRun inside Claude Code:\n\n```bash\n\u002Fplugin marketplace add backnotprop\u002Fplannotator\n\u002Fplugin install plannotator@plannotator\n# IMPORTANT: Restart Claude Code after plugin install\n```\n\n---\n\n## Pattern 3: Plan Review (Before Coding)\n\n> Triggered automatically via hook when Claude Code exits plan mode.\n\nWhen your agent finishes planning (Claude Code: `Shift+Tab×2` to enter plan mode), plannotator opens automatically:\n\n1. **View** the agent's plan in the visual UI\n2. **Annotate** with clear intent:\n   - `delete` — remove risky or unnecessary step\n   - `insert` — add missing step\n   - `replace` — revise incorrect approach\n   - `comment` — clarify constraints or acceptance criteria\n3. **Submit** one outcome:\n   - **Approve** → agent proceeds with implementation\n   - **Request changes** → your annotations are sent back as structured feedback for replanning\n\n---\n\n## Pattern 4: Code Review (After Coding)\n\n```bash\n# Review all uncommitted changes\nbash scripts\u002Freview.sh\n\n# Review a specific commit\nbash scripts\u002Freview.sh HEAD~1\n\n# Review branch diff\nbash scripts\u002Freview.sh main...HEAD\n```\n\nWhat it does:\n- Checks CLI and git repo state\n- Shows diff summary before opening\n- Launches `plannotator review` UI\n- In the UI: select line numbers to annotate, switch unified\u002Fsplit views, attach images\n\n---\n\n## Pattern 5: Remote \u002F Devcontainer Mode\n\n```bash\n# Interactive setup (SSH, devcontainer, WSL)\nbash scripts\u002Fconfigure-remote.sh\n\n# View current configuration\nbash scripts\u002Fconfigure-remote.sh --show\n\n# Set port directly\nbash scripts\u002Fconfigure-remote.sh --port 9999\n```\n\nWhat it does:\n- Detects shell profile (`.zshrc`, `.bashrc`, `.profile`)\n- Writes `PLANNOTATOR_REMOTE=1` and `PLANNOTATOR_PORT` to shell profile\n- Shows SSH and VS Code port-forwarding instructions\n- Optionally sets custom browser or share URL\n\nManual environment variables:\n\n```bash\nexport PLANNOTATOR_REMOTE=1    # No auto browser open\nexport PLANNOTATOR_PORT=9999   # Fixed port for forwarding\n```\n\n| Variable | Description |\n|----------|-------------|\n| `PLANNOTATOR_REMOTE` | Remote mode (no auto browser open) |\n| `PLANNOTATOR_PORT` | Fixed local\u002Fforwarded port |\n| `PLANNOTATOR_BROWSER` | Custom browser path\u002Fapp |\n| `PLANNOTATOR_SHARE_URL` | Custom share portal URL |\n\n---\n\n## Pattern 6: Status Check\n\n```bash\nbash scripts\u002Fcheck-status.sh\n```\n\nChecks all of:\n- CLI installed and version\n- Claude Code hook in `~\u002F.claude\u002Fsettings.json` (or plugin detected)\n- Gemini CLI hook in `~\u002F.gemini\u002Fsettings.json`\n- Codex CLI `~\u002F.codex\u002Fconfig.toml` developer_instructions\n- OpenCode plugin in `opencode.json` + slash commands\n- Obsidian installation\n- Environment variables configured\n- Git repo available for diff review\n\n---\n\n## Pattern 7: Gemini CLI Integration\n\n```bash\n# Configure Gemini CLI (hook + GEMINI.md instructions)\nbash scripts\u002Fsetup-gemini-hook.sh\n\n# Preview what would change (no writes)\nbash scripts\u002Fsetup-gemini-hook.sh --dry-run\n\n# Only update settings.json hook (skip GEMINI.md)\nbash scripts\u002Fsetup-gemini-hook.sh --hook-only\n\n# Only update GEMINI.md (skip settings.json)\nbash scripts\u002Fsetup-gemini-hook.sh --md-only\n```\n\nWhat it does:\n- Checks plannotator CLI is installed\n- Merges `ExitPlanMode` hook into `~\u002F.gemini\u002Fsettings.json` (same format as Claude Code)\n- Appends plannotator usage instructions to `~\u002F.gemini\u002FGEMINI.md`\n- Backs up existing files before modifying\n\nUsage in Gemini CLI after setup:\n\n```bash\n# Enter planning mode (hook fires when you exit)\ngemini --approval-mode plan\n\n# Manual plan review (validated format)\npython3 -c \"\nimport json\nplan = open('plan.md').read()\nprint(json.dumps({'tool_input': {'plan': plan, 'permission_mode': 'acceptEdits'}}))\n\" | plannotator > \u002Ftmp\u002Fplannotator_feedback.txt 2>&1 &\n\n# Code review after implementation\nplannotator review\n```\n\n> **Note:** Gemini CLI supports `gemini hooks migrate --from-claude` to auto-migrate existing Claude Code hooks.\n\n---\n\n## Pattern 8: Codex CLI Integration\n\n```bash\n# Configure Codex CLI (developer_instructions + prompt file)\nbash scripts\u002Fsetup-codex-hook.sh\n\n# Preview what would change (no writes)\nbash scripts\u002Fsetup-codex-hook.sh --dry-run\n```\n\nWhat it does:\n- Adds plannotator instruction to `developer_instructions` in `~\u002F.codex\u002Fconfig.toml`\n- Creates `~\u002F.codex\u002Fprompts\u002Fplannotator.md` (invoke with `\u002Fprompts:plannotator`)\n- Backs up existing config before modifying\n\nUsage in Codex CLI after setup:\n\n```bash\n# Use the plannotator agent prompt\n\u002Fprompts:plannotator\n\n# Manual plan review (validated format)\npython3 -c \"\nimport json\nplan = open('plan.md').read()\nprint(json.dumps({'tool_input': {'plan': plan, 'permission_mode': 'acceptEdits'}}))\n\" | plannotator > \u002Ftmp\u002Fplannotator_feedback.txt 2>&1 &\n\n# Code review after implementation\nplannotator review HEAD~1\n```\n\n> Note: `plannotator plan -` with heredoc\u002Fecho can fail with `Failed to parse hook event from stdin`. Use the python3 JSON format above.\n\n---\n\n## Pattern 10: Manual Save via Export → Notes Tab\n\nSave the current plan to Obsidian or Bear Notes at any time — without approving or denying.\n\n### How to access\n\n1. Click **Export** button in the plannotator UI toolbar\n2. Click the **Notes** tab (not Share or Annotations)\n3. You see:\n   - **Obsidian** row with configured vault path and **Save** button\n   - **Bear** row with **Save** button\n   - **Save All** button to save both at once\n4. A green dot next to each row means that integration is configured\n5. Clicking **Save** shows **Saved** when complete\n\n### When to use\n\n- Save work-in-progress plans without committing to Approve\u002FDeny\n- Quick archive after reviewing without final decision\n- Save annotated plans for team reference\n\n### Requirements\n\n- plannotator must be running in **hook mode** (normal Claude Code ExitPlanMode hook invocation = hook mode)\n- Obsidian\u002FBear must be configured in Settings (⚙️) → Saving tab\n- Settings are stored in **cookies** (not localStorage) and persist across restarts\n\n> **Note:** The Notes tab uses `POST \u002Fapi\u002Fsave-notes` which writes directly to the vault filesystem (Obsidian) or calls `bear:\u002F\u002Fx-callback-url\u002Fcreate` (Bear). This endpoint is only available in hook mode.\n\n---\n\n## Recommended Workflow\n\n### Quick Start (all AI tools)\n\n```bash\n# 1. Install CLI + configure all AI tool integrations at once\nbash scripts\u002Finstall.sh --all\n\n# 2. Verify everything\nbash scripts\u002Fcheck-status.sh\n\n# 3. Restart your AI tools (Claude Code, Gemini CLI, OpenCode, Codex)\n```\n\n### Claude Code (manual)\n\n```\n1. bash scripts\u002Finstall.sh --with-plugin\n   └─ Installs CLI + shows plugin install commands\n\n2. bash scripts\u002Fsetup-hook.sh          ← skip if using plugin\n   └─ Configures automatic plan review trigger\n\n3. bash scripts\u002Fcheck-status.sh\n   └─ Confirm everything is ready\n\n4. [Code with agent in plan mode → Shift+Tab×2]\n   └─ plannotator opens automatically\n\n5. bash scripts\u002Freview.sh              ← after agent finishes coding\n   └─ Opens visual diff review\n```\n\n### Gemini CLI (manual)\n\n```\n1. bash scripts\u002Finstall.sh\n2. bash scripts\u002Fsetup-gemini-hook.sh\n3. gemini --approval-mode plan          ← work in plan mode\n   └─ plannotator fires on exit\n```\n\n### Codex CLI (manual)\n\n```\n1. bash scripts\u002Finstall.sh\n2. bash scripts\u002Fsetup-codex-hook.sh\n3. \u002Fprompts:plannotator                 ← inside Codex session\n```\n\n---\n\n## OpenCode Setup\n\n```bash\n# Automated (recommended)\nbash scripts\u002Fsetup-opencode-plugin.sh\n\n# Or add manually to opencode.json:\n```\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fopencode.ai\u002Fconfig.json\",\n  \"plugin\": [\"@plannotator\u002Fopencode@latest\"]\n}\n```\n\nAfter setup, restart OpenCode. Available slash commands:\n- `\u002Fplannotator-review` — open code review UI for current git diff\n- `\u002Fplannotator-annotate \u003Cfile.md>` — annotate a markdown file\n\nThe `submit_plan` tool is automatically available to the agent for plan submission.\n\n---\n\n## Pattern 9: Obsidian Integration Setup\n\nAuto-save approved plans to your Obsidian vault with YAML frontmatter and tags.\n\n### Prerequisites\n\n1. **Install Obsidian**: https:\u002F\u002Fobsidian.md\u002Fdownload\n2. **Create a Vault**: Open Obsidian → Create new vault → Choose location\n   - Example: `~\u002FDocuments\u002FObsidian\u002FMyVault`\n3. **Verify Vault Exists**: Obsidian creates `obsidian.json` config after first vault creation\n\n```bash\n# Check Obsidian installation (macOS)\nls \u002FApplications\u002FObsidian.app\n\n# Check Obsidian config exists (vault detection depends on this)\n# macOS\ncat ~\u002FLibrary\u002FApplication\\ Support\u002Fobsidian\u002Fobsidian.json\n# Linux\ncat ~\u002F.config\u002Fobsidian\u002Fobsidian.json\n# Windows\ncat %APPDATA%\u002Fobsidian\u002Fobsidian.json\n```\n\n### Step-by-Step Setup\n\n```bash\n# Step 1: Verify Obsidian is installed and has at least one vault\nbash scripts\u002Fcheck-status.sh\n\n# Step 2: Trigger a plan review (any method)\n# Claude Code: Shift+Tab×2 → plan mode → exit plan mode\n# Gemini CLI: gemini --approval-mode plan\n# OpenCode: Agent creates a plan\n\n# Step 3: In the plannotator UI:\n#   1. Click ⚙️ (Settings gear icon)\n#   2. Go to \"Saving\" tab\n#   3. Toggle ON \"Obsidian Integration\"\n#   4. Select your vault from dropdown (auto-detected)\n#      - Or enter custom path if vault not detected\n#   5. Set folder name (default: \"plannotator\")\n\n# Step 4: Approve a plan to test the integration\n#   - Click \"Approve\" in the plannotator UI\n#   - Check your vault for the saved file\n```\n\n### Obsidian Configuration Options\n\n| Setting | Description | Default |\n|---------|-------------|---------|\n| **Vault** | Path to Obsidian vault | Auto-detected |\n| **Folder** | Subfolder in vault for plans | `plannotator` |\n| **Custom Path** | Manual path if auto-detect fails | - |\n\n### Saved File Format\n\nFiles are saved with human-readable names and YAML frontmatter:\n\n```\nFilename: {Title} - {Month} {Day}, {Year} {Hour}-{Minute}{am\u002Fpm}.md\nExample:  User Authentication - Feb 22, 2026 10-45pm.md\n```\n\n```yaml\n---\ncreated: 2026-02-22T22:45:30.000Z\nsource: plannotator\ntags: [plannotator, project-name, typescript, ...]\n---\n\n[[Plannotator Plans]]\n\n# Original plan content...\n```\n\n**Tag extraction:**\n- `plannotator` — always included\n- Project name — from git repo or directory\n- Title words — first 3 meaningful words from H1 heading\n- Languages — from code blocks (```typescript → typescript)\n\n### Folder Organization\n\nOrganize plans within the vault using subfolders:\n\n```\nvault\u002Fplannotator\u002F\n├── approved\u002F          ← approved plans\n├── denied\u002F            ← rejected plans\n└── 2026-02\u002F           ← monthly archive\n```\n\nCreate subfolders manually (Obsidian detects them automatically):\n\n```bash\nmkdir -p ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002Fapproved\nmkdir -p ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002Fdenied\nmkdir -p ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002F2026-02\n```\n\nOr write directly to any subfolder:\n\n```bash\ncp ~\u002F.plannotator\u002Fplans\u002F\u003Cname>-approved.md ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002Fapproved\u002F\n```\n\n### Bear Notes (Alternative)\n\nIf you prefer Bear Notes over Obsidian:\n\n1. Toggle ON \"Bear Notes\" in Settings → Saving tab\n2. Plans are saved via `bear:\u002F\u002Fx-callback-url\u002Fcreate`\n3. Tags are appended as hashtags\n4. Validate callback from terminal:\n\n```bash\nopen \"bear:\u002F\u002Fx-callback-url\u002Fcreate?title=Plannotator%20Check&text=Bear%20callback%20OK\"\n```\n\n| Feature | Obsidian | Bear |\n|---------|----------|------|\n| Storage | File system | x-callback-url |\n| Frontmatter | YAML | None (hashtags) |\n| Platforms | macOS\u002FWin\u002FLinux | macOS\u002FiOS |\n\n### Troubleshooting\n\n**Vault not detected:**\n\n```bash\n# 1. Check Obsidian config exists\nls ~\u002FLibrary\u002FApplication\\ Support\u002Fobsidian\u002Fobsidian.json  # macOS\n\n# 2. If missing, open Obsidian and create a vault first\nopen \u002FApplications\u002FObsidian.app\n\n# 3. After creating vault, restart plannotator\n```\n\n**Plans not saving:**\n\n```bash\n# Check write permissions on vault folder\nls -la ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002F\n\n# Check browser console for errors (F12 → Console)\n```\n\n**Export → Notes tab Save buttons require hook mode:**\n- Export → Notes tab Save buttons require plannotator running in **hook mode** (stdin JSON input). In CLI `review`\u002F`annotate` modes, the `\u002Fapi\u002Fsave-notes` endpoint is not active. Normal Claude Code hook invocation (ExitPlanMode hook) always runs in hook mode.\n\n**Settings not visible in automated\u002Fheadless browsers:**\n- Obsidian Integration settings must be configured in the **system browser** that plannotator auto-opens. Settings are stored in cookies (not localStorage). Automated\u002Fheadless browser profiles (Playwright, Puppeteer) use isolated cookie jars and will not see these settings.\n\n**Bear export not working:**\n- Confirm Bear app is installed and opened at least once\n- Confirm `open \"bear:\u002F\u002Fx-callback-url\u002Fcreate?...\"` works from terminal\n- Use system browser session for plannotator settings; automated\u002Fheadless sessions can block custom URI handlers\n\n**Settings not persisting:**\n- Settings are stored in cookies (not localStorage)\n- Ensure cookies are enabled for localhost\n- Settings persist across different ports\n\n---\n\n## Auto-save (Summary)\n\n> Obsidian integration is **optional** — plans can still be reviewed and approved without it.\n\n---\n\n## Best Practices\n\n1. Use plan review BEFORE the agent starts coding — catch wrong approaches early\n2. Keep each annotation tied to one concrete, actionable change\n3. Include acceptance criteria in \"request changes\" feedback\n4. For diff review, annotate exact line ranges tied to expected behavior changes\n5. Use image annotation for UI\u002FUX feedback where text is insufficient\n\n---\n\n## References\n\n- [GitHub: backnotprop\u002Fplannotator](https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator)\n- [Official site: plannotator.ai](https:\u002F\u002Fplannotator.ai)\n- [Obsidian download](https:\u002F\u002Fobsidian.md\u002Fdownload)\n- [Hook README: apps\u002Fhook\u002FREADME.md](https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator\u002Fblob\u002Fmain\u002Fapps\u002Fhook\u002FREADME.md)\n- [OpenCode plugin: apps\u002Fopencode-plugin\u002FREADME.md](https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator\u002Fblob\u002Fmain\u002Fapps\u002Fopencode-plugin\u002FREADME.md)\n","# plannotator — Interactive Plan & Diff Review\n\n> Keyword: `plan` | Source: https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator\n>\n> Annotate and review AI coding agent plans visually, share with your team, send feedback with one click.\n> Works with **Claude Code**, **OpenCode**, **Gemini CLI**, and **Codex CLI**.\n\n## When to use this skill\n\n- You want to review an AI agent's implementation plan BEFORE it starts coding\n- You want to annotate a git diff after the agent makes changes\n- You need a feedback loop: visually mark up what to change, then send structured feedback back\n- You want to share plan reviews with teammates via a link\n- You want to auto-save approved plans to Obsidian or Bear Notes\n\n---\n\n## Scripts (Automated Patterns)\n\nAll patterns have a corresponding script in `scripts\u002F`. Run them directly or let the agent call them.\n\n| Script | Pattern | Usage |\n|--------|---------|-------|\n| `scripts\u002Finstall.sh` | CLI Install | One-command install; `--all` sets up every AI tool |\n| `scripts\u002Fsetup-hook.sh` | Claude Code Hook | Configure Claude Code ExitPlanMode hook |\n| `scripts\u002Fsetup-gemini-hook.sh` | Gemini CLI Hook | Configure Gemini CLI ExitPlanMode hook + GEMINI.md |\n| `scripts\u002Fsetup-codex-hook.sh` | Codex CLI Setup | Configure Codex CLI developer_instructions + prompt |\n| `scripts\u002Fsetup-opencode-plugin.sh` | OpenCode Plugin | Register plugin + slash commands |\n| `scripts\u002Fcheck-status.sh` | Status Check | Verify all integrations and configuration |\n| `scripts\u002Fconfigure-remote.sh` | Remote Mode | SSH \u002F devcontainer \u002F WSL configuration |\n| `scripts\u002Freview.sh` | Code Review | Launch diff review UI |\n\n---\n\n## Pattern 1: Install\n\n```bash\n# Install CLI only (macOS \u002F Linux \u002F WSL)\nbash scripts\u002Finstall.sh\n\n# Install CLI and get Claude Code plugin commands\nbash scripts\u002Finstall.sh --with-plugin\n\n# Install CLI + configure Gemini CLI\nbash scripts\u002Finstall.sh --with-gemini\n\n# Install CLI + configure Codex CLI\nbash scripts\u002Finstall.sh --with-codex\n\n# Install CLI + register OpenCode plugin\nbash scripts\u002Finstall.sh --with-opencode\n\n# Install CLI + all AI tool integrations at once\nbash scripts\u002Finstall.sh --all\n```\n\nWhat it does:\n- Detects OS (macOS \u002F Linux \u002F WSL \u002F Windows)\n- Checks for Obsidian and shows install link if missing: https:\u002F\u002Fobsidian.md\u002Fdownload\n- Installs via `https:\u002F\u002Fplannotator.ai\u002Finstall.sh`\n- Verifies install and PATH\n- Optionally runs integration scripts for each AI tool\n- On Windows: prints PowerShell \u002F CMD commands to run manually\n\n---\n\n## Pattern 2: Hook Setup (Plan Review trigger)\n\n```bash\n# Add hook to ~\u002F.claude\u002Fsettings.json\nbash scripts\u002Fsetup-hook.sh\n\n# Preview what would change (no writes)\nbash scripts\u002Fsetup-hook.sh --dry-run\n```\n\nWhat it does:\n- Checks plannotator CLI is installed\n- Merges `ExitPlanMode` hook into `~\u002F.claude\u002Fsettings.json` safely (backs up first)\n- Skips if hook already configured\n- **Restart Claude Code after running this**\n\n### Alternative: Claude Code Plugin (no manual hook needed)\n\nRun inside Claude Code:\n\n```bash\n\u002Fplugin marketplace add backnotprop\u002Fplannotator\n\u002Fplugin install plannotator@plannotator\n# IMPORTANT: Restart Claude Code after plugin install\n```\n\n---\n\n## Pattern 3: Plan Review (Before Coding)\n\n> Triggered automatically via hook when Claude Code exits plan mode.\n\nWhen your agent finishes planning (Claude Code: `Shift+Tab×2` to enter plan mode), plannotator opens automatically:\n\n1. **View** the agent's plan in the visual UI\n2. **Annotate** with clear intent:\n   - `delete` — remove risky or unnecessary step\n   - `insert` — add missing step\n   - `replace` — revise incorrect approach\n   - `comment` — clarify constraints or acceptance criteria\n3. **Submit** one outcome:\n   - **Approve** → agent proceeds with implementation\n   - **Request changes** → your annotations are sent back as structured feedback for replanning\n\n---\n\n## Pattern 4: Code Review (After Coding)\n\n```bash\n# Review all uncommitted changes\nbash scripts\u002Freview.sh\n\n# Review a specific commit\nbash scripts\u002Freview.sh HEAD~1\n\n# Review branch diff\nbash scripts\u002Freview.sh main...HEAD\n```\n\nWhat it does:\n- Checks CLI and git repo state\n- Shows diff summary before opening\n- Launches `plannotator review` UI\n- In the UI: select line numbers to annotate, switch unified\u002Fsplit views, attach images\n\n---\n\n## Pattern 5: Remote \u002F Devcontainer Mode\n\n```bash\n# Interactive setup (SSH, devcontainer, WSL)\nbash scripts\u002Fconfigure-remote.sh\n\n# View current configuration\nbash scripts\u002Fconfigure-remote.sh --show\n\n# Set port directly\nbash scripts\u002Fconfigure-remote.sh --port 9999\n```\n\nWhat it does:\n- Detects shell profile (`.zshrc`, `.bashrc`, `.profile`)\n- Writes `PLANNOTATOR_REMOTE=1` and `PLANNOTATOR_PORT` to shell profile\n- Shows SSH and VS Code port-forwarding instructions\n- Optionally sets custom browser or share URL\n\nManual environment variables:\n\n```bash\nexport PLANNOTATOR_REMOTE=1    # No auto browser open\nexport PLANNOTATOR_PORT=9999   # Fixed port for forwarding\n```\n\n| Variable | Description |\n|----------|-------------|\n| `PLANNOTATOR_REMOTE` | Remote mode (no auto browser open) |\n| `PLANNOTATOR_PORT` | Fixed local\u002Fforwarded port |\n| `PLANNOTATOR_BROWSER` | Custom browser path\u002Fapp |\n| `PLANNOTATOR_SHARE_URL` | Custom share portal URL |\n\n---\n\n## Pattern 6: Status Check\n\n```bash\nbash scripts\u002Fcheck-status.sh\n```\n\nChecks all of:\n- CLI installed and version\n- Claude Code hook in `~\u002F.claude\u002Fsettings.json` (or plugin detected)\n- Gemini CLI hook in `~\u002F.gemini\u002Fsettings.json`\n- Codex CLI `~\u002F.codex\u002Fconfig.toml` developer_instructions\n- OpenCode plugin in `opencode.json` + slash commands\n- Obsidian installation\n- Environment variables configured\n- Git repo available for diff review\n\n---\n\n## Pattern 7: Gemini CLI Integration\n\n```bash\n# Configure Gemini CLI (hook + GEMINI.md instructions)\nbash scripts\u002Fsetup-gemini-hook.sh\n\n# Preview what would change (no writes)\nbash scripts\u002Fsetup-gemini-hook.sh --dry-run\n\n# Only update settings.json hook (skip GEMINI.md)\nbash scripts\u002Fsetup-gemini-hook.sh --hook-only\n\n# Only update GEMINI.md (skip settings.json)\nbash scripts\u002Fsetup-gemini-hook.sh --md-only\n```\n\nWhat it does:\n- Checks plannotator CLI is installed\n- Merges `ExitPlanMode` hook into `~\u002F.gemini\u002Fsettings.json` (same format as Claude Code)\n- Appends plannotator usage instructions to `~\u002F.gemini\u002FGEMINI.md`\n- Backs up existing files before modifying\n\nUsage in Gemini CLI after setup:\n\n```bash\n# Enter planning mode (hook fires when you exit)\ngemini --approval-mode plan\n\n# Manual plan review (validated format)\npython3 -c \"\nimport json\nplan = open('plan.md').read()\nprint(json.dumps({'tool_input': {'plan': plan, 'permission_mode': 'acceptEdits'}}))\n\" | plannotator > \u002Ftmp\u002Fplannotator_feedback.txt 2>&1 &\n\n# Code review after implementation\nplannotator review\n```\n\n> **Note:** Gemini CLI supports `gemini hooks migrate --from-claude` to auto-migrate existing Claude Code hooks.\n\n---\n\n## Pattern 8: Codex CLI Integration\n\n```bash\n# Configure Codex CLI (developer_instructions + prompt file)\nbash scripts\u002Fsetup-codex-hook.sh\n\n# Preview what would change (no writes)\nbash scripts\u002Fsetup-codex-hook.sh --dry-run\n```\n\nWhat it does:\n- Adds plannotator instruction to `developer_instructions` in `~\u002F.codex\u002Fconfig.toml`\n- Creates `~\u002F.codex\u002Fprompts\u002Fplannotator.md` (invoke with `\u002Fprompts:plannotator`)\n- Backs up existing config before modifying\n\nUsage in Codex CLI after setup:\n\n```bash\n# Use the plannotator agent prompt\n\u002Fprompts:plannotator\n\n# Manual plan review (validated format)\npython3 -c \"\nimport json\nplan = open('plan.md').read()\nprint(json.dumps({'tool_input': {'plan': plan, 'permission_mode': 'acceptEdits'}}))\n\" | plannotator > \u002Ftmp\u002Fplannotator_feedback.txt 2>&1 &\n\n# Code review after implementation\nplannotator review HEAD~1\n```\n\n> Note: `plannotator plan -` with heredoc\u002Fecho can fail with `Failed to parse hook event from stdin`. Use the python3 JSON format above.\n\n---\n\n## Pattern 10: Manual Save via Export → Notes Tab\n\nSave the current plan to Obsidian or Bear Notes at any time — without approving or denying.\n\n### How to access\n\n1. Click **Export** button in the plannotator UI toolbar\n2. Click the **Notes** tab (not Share or Annotations)\n3. You see:\n   - **Obsidian** row with configured vault path and **Save** button\n   - **Bear** row with **Save** button\n   - **Save All** button to save both at once\n4. A green dot next to each row means that integration is configured\n5. Clicking **Save** shows **Saved** when complete\n\n### When to use\n\n- Save work-in-progress plans without committing to Approve\u002FDeny\n- Quick archive after reviewing without final decision\n- Save annotated plans for team reference\n\n### Requirements\n\n- plannotator must be running in **hook mode** (normal Claude Code ExitPlanMode hook invocation = hook mode)\n- Obsidian\u002FBear must be configured in Settings (⚙️) → Saving tab\n- Settings are stored in **cookies** (not localStorage) and persist across restarts\n\n> **Note:** The Notes tab uses `POST \u002Fapi\u002Fsave-notes` which writes directly to the vault filesystem (Obsidian) or calls `bear:\u002F\u002Fx-callback-url\u002Fcreate` (Bear). This endpoint is only available in hook mode.\n\n---\n\n## Recommended Workflow\n\n### Quick Start (all AI tools)\n\n```bash\n# 1. Install CLI + configure all AI tool integrations at once\nbash scripts\u002Finstall.sh --all\n\n# 2. Verify everything\nbash scripts\u002Fcheck-status.sh\n\n# 3. Restart your AI tools (Claude Code, Gemini CLI, OpenCode, Codex)\n```\n\n### Claude Code (manual)\n\n```\n1. bash scripts\u002Finstall.sh --with-plugin\n   └─ Installs CLI + shows plugin install commands\n\n2. bash scripts\u002Fsetup-hook.sh          ← skip if using plugin\n   └─ Configures automatic plan review trigger\n\n3. bash scripts\u002Fcheck-status.sh\n   └─ Confirm everything is ready\n\n4. [Code with agent in plan mode → Shift+Tab×2]\n   └─ plannotator opens automatically\n\n5. bash scripts\u002Freview.sh              ← after agent finishes coding\n   └─ Opens visual diff review\n```\n\n### Gemini CLI (manual)\n\n```\n1. bash scripts\u002Finstall.sh\n2. bash scripts\u002Fsetup-gemini-hook.sh\n3. gemini --approval-mode plan          ← work in plan mode\n   └─ plannotator fires on exit\n```\n\n### Codex CLI (manual)\n\n```\n1. bash scripts\u002Finstall.sh\n2. bash scripts\u002Fsetup-codex-hook.sh\n3. \u002Fprompts:plannotator                 ← inside Codex session\n```\n\n---\n\n## OpenCode Setup\n\n```bash\n# Automated (recommended)\nbash scripts\u002Fsetup-opencode-plugin.sh\n\n# Or add manually to opencode.json:\n```\n\n```json\n{\n  \"$schema\": \"https:\u002F\u002Fopencode.ai\u002Fconfig.json\",\n  \"plugin\": [\"@plannotator\u002Fopencode@latest\"]\n}\n```\n\nAfter setup, restart OpenCode. Available slash commands:\n- `\u002Fplannotator-review` — open code review UI for current git diff\n- `\u002Fplannotator-annotate \u003Cfile.md>` — annotate a markdown file\n\nThe `submit_plan` tool is automatically available to the agent for plan submission.\n\n---\n\n## Pattern 9: Obsidian Integration Setup\n\nAuto-save approved plans to your Obsidian vault with YAML frontmatter and tags.\n\n### Prerequisites\n\n1. **Install Obsidian**: https:\u002F\u002Fobsidian.md\u002Fdownload\n2. **Create a Vault**: Open Obsidian → Create new vault → Choose location\n   - Example: `~\u002FDocuments\u002FObsidian\u002FMyVault`\n3. **Verify Vault Exists**: Obsidian creates `obsidian.json` config after first vault creation\n\n```bash\n# Check Obsidian installation (macOS)\nls \u002FApplications\u002FObsidian.app\n\n# Check Obsidian config exists (vault detection depends on this)\n# macOS\ncat ~\u002FLibrary\u002FApplication\\ Support\u002Fobsidian\u002Fobsidian.json\n# Linux\ncat ~\u002F.config\u002Fobsidian\u002Fobsidian.json\n# Windows\ncat %APPDATA%\u002Fobsidian\u002Fobsidian.json\n```\n\n### Step-by-Step Setup\n\n```bash\n# Step 1: Verify Obsidian is installed and has at least one vault\nbash scripts\u002Fcheck-status.sh\n\n# Step 2: Trigger a plan review (any method)\n# Claude Code: Shift+Tab×2 → plan mode → exit plan mode\n# Gemini CLI: gemini --approval-mode plan\n# OpenCode: Agent creates a plan\n\n# Step 3: In the plannotator UI:\n#   1. Click ⚙️ (Settings gear icon)\n#   2. Go to \"Saving\" tab\n#   3. Toggle ON \"Obsidian Integration\"\n#   4. Select your vault from dropdown (auto-detected)\n#      - Or enter custom path if vault not detected\n#   5. Set folder name (default: \"plannotator\")\n\n# Step 4: Approve a plan to test the integration\n#   - Click \"Approve\" in the plannotator UI\n#   - Check your vault for the saved file\n```\n\n### Obsidian Configuration Options\n\n| Setting | Description | Default |\n|---------|-------------|---------|\n| **Vault** | Path to Obsidian vault | Auto-detected |\n| **Folder** | Subfolder in vault for plans | `plannotator` |\n| **Custom Path** | Manual path if auto-detect fails | - |\n\n### Saved File Format\n\nFiles are saved with human-readable names and YAML frontmatter:\n\n```\nFilename: {Title} - {Month} {Day}, {Year} {Hour}-{Minute}{am\u002Fpm}.md\nExample:  User Authentication - Feb 22, 2026 10-45pm.md\n```\n\n```yaml\n---\ncreated: 2026-02-22T22:45:30.000Z\nsource: plannotator\ntags: [plannotator, project-name, typescript, ...]\n---\n\n[[Plannotator Plans]]\n\n# Original plan content...\n```\n\n**Tag extraction:**\n- `plannotator` — always included\n- Project name — from git repo or directory\n- Title words — first 3 meaningful words from H1 heading\n- Languages — from code blocks (```typescript → typescript)\n\n### Folder Organization\n\nOrganize plans within the vault using subfolders:\n\n```\nvault\u002Fplannotator\u002F\n├── approved\u002F          ← approved plans\n├── denied\u002F            ← rejected plans\n└── 2026-02\u002F           ← monthly archive\n```\n\nCreate subfolders manually (Obsidian detects them automatically):\n\n```bash\nmkdir -p ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002Fapproved\nmkdir -p ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002Fdenied\nmkdir -p ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002F2026-02\n```\n\nOr write directly to any subfolder:\n\n```bash\ncp ~\u002F.plannotator\u002Fplans\u002F\u003Cname>-approved.md ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002Fapproved\u002F\n```\n\n### Bear Notes (Alternative)\n\nIf you prefer Bear Notes over Obsidian:\n\n1. Toggle ON \"Bear Notes\" in Settings → Saving tab\n2. Plans are saved via `bear:\u002F\u002Fx-callback-url\u002Fcreate`\n3. Tags are appended as hashtags\n4. Validate callback from terminal:\n\n```bash\nopen \"bear:\u002F\u002Fx-callback-url\u002Fcreate?title=Plannotator%20Check&text=Bear%20callback%20OK\"\n```\n\n| Feature | Obsidian | Bear |\n|---------|----------|------|\n| Storage | File system | x-callback-url |\n| Frontmatter | YAML | None (hashtags) |\n| Platforms | macOS\u002FWin\u002FLinux | macOS\u002FiOS |\n\n### Troubleshooting\n\n**Vault not detected:**\n\n```bash\n# 1. Check Obsidian config exists\nls ~\u002FLibrary\u002FApplication\\ Support\u002Fobsidian\u002Fobsidian.json  # macOS\n\n# 2. If missing, open Obsidian and create a vault first\nopen \u002FApplications\u002FObsidian.app\n\n# 3. After creating vault, restart plannotator\n```\n\n**Plans not saving:**\n\n```bash\n# Check write permissions on vault folder\nls -la ~\u002Fpath\u002Fto\u002Fvault\u002Fplannotator\u002F\n\n# Check browser console for errors (F12 → Console)\n```\n\n**Export → Notes tab Save buttons require hook mode:**\n- Export → Notes tab Save buttons require plannotator running in **hook mode** (stdin JSON input). In CLI `review`\u002F`annotate` modes, the `\u002Fapi\u002Fsave-notes` endpoint is not active. Normal Claude Code hook invocation (ExitPlanMode hook) always runs in hook mode.\n\n**Settings not visible in automated\u002Fheadless browsers:**\n- Obsidian Integration settings must be configured in the **system browser** that plannotator auto-opens. Settings are stored in cookies (not localStorage). Automated\u002Fheadless browser profiles (Playwright, Puppeteer) use isolated cookie jars and will not see these settings.\n\n**Bear export not working:**\n- Confirm Bear app is installed and opened at least once\n- Confirm `open \"bear:\u002F\u002Fx-callback-url\u002Fcreate?...\"` works from terminal\n- Use system browser session for plannotator settings; automated\u002Fheadless sessions can block custom URI handlers\n\n**Settings not persisting:**\n- Settings are stored in cookies (not localStorage)\n- Ensure cookies are enabled for localhost\n- Settings persist across different ports\n\n---\n\n## Auto-save (Summary)\n\n> Obsidian integration is **optional** — plans can still be reviewed and approved without it.\n\n---\n\n## Best Practices\n\n1. Use plan review BEFORE the agent starts coding — catch wrong approaches early\n2. Keep each annotation tied to one concrete, actionable change\n3. Include acceptance criteria in \"request changes\" feedback\n4. For diff review, annotate exact line ranges tied to expected behavior changes\n5. Use image annotation for UI\u002FUX feedback where text is insufficient\n\n---\n\n## References\n\n- [GitHub: backnotprop\u002Fplannotator](https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator)\n- [Official site: plannotator.ai](https:\u002F\u002Fplannotator.ai)\n- [Obsidian download](https:\u002F\u002Fobsidian.md\u002Fdownload)\n- [Hook README: apps\u002Fhook\u002FREADME.md](https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator\u002Fblob\u002Fmain\u002Fapps\u002Fhook\u002FREADME.md)\n- [OpenCode plugin: apps\u002Fopencode-plugin\u002FREADME.md](https:\u002F\u002Fgithub.com\u002Fbacknotprop\u002Fplannotator\u002Fblob\u002Fmain\u002Fapps\u002Fopencode-plugin\u002FREADME.md)\n",{"name":5,"metadata":56,"description":7,"allowed-tools":61},{"tags":57,"source":58,"keyword":39,"version":59,"platforms":60},"plan, planning, planno, plannotator, plan-review, diff-review, code-review, claude-code, opencode, annotation, visual-review, plan-review, design-review","backnotprop\u002Fplannotator","0.9.2","Claude, OpenCode, Codex, Gemini","Read Bash Write","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":72,"prompt":82,"zipAvailable":83},[73,76,79],{"tool":74,"command":75},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill plannotator",{"tool":77,"command":78},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill plannotator",{"tool":80,"command":81},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill plannotator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002FSKILL.md",true,[85,91,95,99,103,107,111,115,119,125],{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"scripts\u002Fcheck-status.sh","SCRIPT","脚本",10611,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Fcheck-status.sh",{"path":92,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":93,"sourceHtmlUrl":94},"scripts\u002Fconfigure-remote.sh",5763,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Fconfigure-remote.sh",{"path":96,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":97,"sourceHtmlUrl":98},"scripts\u002Finstall.sh",8003,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Finstall.sh",{"path":100,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":101,"sourceHtmlUrl":102},"scripts\u002Freview.sh",2730,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Freview.sh",{"path":104,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":105,"sourceHtmlUrl":106},"scripts\u002Fsetup-codex-hook.sh",8441,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Fsetup-codex-hook.sh",{"path":108,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":109,"sourceHtmlUrl":110},"scripts\u002Fsetup-gemini-hook.sh",9420,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Fsetup-gemini-hook.sh",{"path":112,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":113,"sourceHtmlUrl":114},"scripts\u002Fsetup-hook.sh",5033,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Fsetup-hook.sh",{"path":116,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":117,"sourceHtmlUrl":118},"scripts\u002Fsetup-opencode-plugin.sh",6448,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fscripts\u002Fsetup-opencode-plugin.sh",{"path":120,"resourceType":121,"resourceTypeDesc":122,"sizeBytes":123,"sourceHtmlUrl":124},"skill-report.json","REFERENCE","参考文档",15129,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002Fskill-report.json",{"path":126,"resourceType":127,"resourceTypeDesc":128,"sizeBytes":129,"sourceHtmlUrl":130},"SKILL.toon","OTHER","其他",2933,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsupercent-io\u002Fplannotator\u002FSKILL.toon",[132,142,152,161,167,174],{"skillNo":133,"name":134,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":138,"publishedAt":51},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[137],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[139,140,141],"model","model hierarchy","model hierarchy skill",{"skillNo":143,"name":144,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":148,"publishedAt":51},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[147],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[149,150,151],"MCP","zoom","zoom mcp",{"skillNo":153,"name":154,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":51},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[158,159,160,150],"sdk","zoom apps sdk","apps",{"skillNo":162,"name":163,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":51},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[163],{"skillNo":168,"name":169,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":173,"publishedAt":51},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[172],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[169],{"skillNo":175,"name":176,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":51},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[176]]