[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6991ABTZW7FCPREXY8GD4RG":3,"skill-same:01M6991ABTZW7FCPREXY8GD4RG":205},{"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":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":61,"commitSha":62,"skillDirectory":63,"forksCount":64,"repositoryHtmlUrl":65,"repositoryHomepageUrl":66,"ownerHtmlUrl":67,"ownerBlogUrl":68,"ownerDescription":69,"updatedAt":70,"install":71,"resources":84},"01M6991ABTZW7FCPREXY8GD4RG","retail-product-search",null,"Creates product search agents with semantic search and RAG on Google Cloud (Vector Search on Gemini Enterprise Agent Platform, BigQuery, embeddings). Use when the user wants to \"build a product search agent\", \"create an e-commerce search\", \"make a shopping assistant\", \"set up semantic catalog discovery\", \"ingest products into Vector Search\", or \"deploy a retail RAG agent\". Handles the full pipeline: catalog data ingestion to BigQuery, Gemini Enterprise Agent Platform Vector Search collection setup, ADK agent scaffolding, evaluation, and Cloud Run deployment.","google\u002Fadk-recipes","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M6990124CWS5627VKGSKJXRD",10603,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,9,46,47,48,49,50,51,52,53],"retail product search","product","search","apache","when","commerce","scaffolding","shopping","up","ingestion","collection","SET","pipeline","vector","run","create","rag","google cloud","gemini enterprise agent platform","adk","gemini","assistant","2026-11-10 10:12:30",false,"---\nname: retail-product-search\ndescription: >-\n  Creates product search agents with semantic search and RAG on Google Cloud\n  (Vector Search on Gemini Enterprise Agent Platform, BigQuery, embeddings). Use when the user wants to\n  \"build a product search agent\", \"create an e-commerce search\", \"make a\n  shopping assistant\", \"set up semantic catalog discovery\", \"ingest products\n  into Vector Search\", or \"deploy a retail RAG agent\". Handles the full\n  pipeline: catalog data ingestion to BigQuery, Gemini Enterprise Agent Platform Vector Search\n  collection setup, ADK agent scaffolding, evaluation, and Cloud Run deployment.\n\nmetadata:\n  author: Google\n  license: Apache-2.0\n  version: 0.2.0\n---\n\n# Product Search Agent\n\nCreates product search agents with semantic search and RAG on Google Cloud.\n\n## STOP — Q-MODE FIRST\n\n**If a catalog is already loaded** (system context says \"DEPLOYED search agent\"\nor provides a `\u003Ccatalog>` block), skip Q-MODE and answer product queries\ndirectly using the catalog.\n\n**Otherwise**, your first message MUST be exactly this:\n\n```\n[skill: retail-product-search] active.\nQ-MODE: Pick a setup mode? [default: 1]\n  1. Quick start -- 2 questions, smart defaults, ~60s. Best for demos and first-timers.\n  2. Full setup  -- 4 questions, ~2 min. Best for real builds.\n```\n\nThen stop and wait. Accept `1`, `quick`, empty\u002FEnter (Quick), or `2`, `full` (Full).\n\n## Execution Rules\n\n1. Q-MODE first. No preamble, no plan-proposing.\n2. One question at a time. Show `[default: ...]`. Empty input = default.\n3. Save answers to `.\u002Fdesign-spec.md` in the workspace as you collect them.\n4. After interview, run `scripts\u002Fsetup.py` (see Workspace Setup below).\n5. User can say \"configure more\" mid-Quick-Start to switch to Full.\n\n## Workspace Setup\n\nThe skill has two locations:\n- **Install dir** — where SKILL.md and scripts live (varies by host)\n- **Workspace** — the agent's cwd; design-spec.md, .venv, and per-run state live here\n\nBy the end of this section the workspace must have `.venv\u002F` (with the skill\ninstalled editable), `design-spec.md`, and `SKILL_DIR` exported in the shell.\n\nRun this as ONE shell command — splitting it across tool calls loses state:\n\n```bash\nSKILL_DIR=$(for d in ~\u002F.claude\u002Fskills ~\u002F.agents\u002Fskills ~\u002F.gemini\u002Fskills ~\u002F.cursor\u002Fskills; do\n  [ -f \"$d\u002Fretail-product-search\u002FSKILL.md\" ] && echo \"$d\u002Fretail-product-search\" && break\ndone)\nbash \"$SKILL_DIR\u002Fscripts\u002Fbootstrap.sh\"\n```\n\n`bootstrap.sh` finds a Python 3.11+ interpreter (with absolute-path fallback\nfor sandboxed shells), creates `.venv`, installs the skill editable, and\ncopies `design-spec.md` into the workspace.\n\nAll scripts run from the install dir against the workspace config. **Use\n`.venv\u002Fbin\u002Fpython`, not bare `python`** — bare `python` may resolve to a\nPython without the skill's editable install on sys.path.\n\n```bash\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fcleanup.py\" --config .\u002Fdesign-spec.md --confirm\n```\n\nDetails in [references\u002Finstall-paths.md](references\u002Finstall-paths.md).\n\n## Skill Dependencies\n\nThis skill works in conjunction with the following core Google Cloud skills:\n- `bigquery-basics` (for database configuration guidelines)\n- `gemini-api` (for Gemini Enterprise Agent Platform \u002F Google Gen AI SDK best practices)\n\nVerify if these skills are installed in your active skills directory. If they are missing, recommend the developer to install them by running:\n`npx skills add google\u002Fskills --skill bigquery-basics gemini-api`\n\n## Mode 1: Quick Start (2 questions)\n\n| Q | Question | Default |\n|---|---|---|\n| Q-A | GCP project ID? | `$GOOGLE_CLOUD_PROJECT` or `gcloud config get-value project` |\n| Q-B | Where's your product data? | `assets\u002Fsample-products.csv` (bundled) |\n\nAccepted for Q-B: empty \u002F `default` (bundled), `\u002Fpath\u002Fto\u002Ffile.csv`, or `gs:\u002F\u002F...`.\n\nSilent defaults: Extended fields, `us-central1`.\n\nAfter Q-A and Q-B, do this automatically (don't ask the user to copy\u002Fpaste).\n**Run these steps SEQUENTIALLY — do not parallelize.** Steps 2-3 modify the\nfile bootstrap copies in step 1; running them concurrently is a race.\n\n1. **Run bootstrap first and wait for completion.** `bash \"$SKILL_DIR\u002Fscripts\u002Fbootstrap.sh\"`\n   copies the YAML-frontmatter design-spec template into the workspace at\n   `.\u002Fdesign-spec.md`. Do NOT touch `.\u002Fdesign-spec.md` until bootstrap exits.\n2. **Mutate the existing `.\u002Fdesign-spec.md`** — do NOT rewrite it from scratch.\n   `setup.py` parses YAML frontmatter via `_setup_utils.py`. A Markdown-only\n   file fails with `'NoneType' object has no attribute 'get'`. Use Edit \u002F sed\n   to replace specific lines:\n   - `gcp_project_id: \"\"` → `gcp_project_id: \"\u003CQ-A answer>\"`\n   - `data_source: assets\u002Fsample-products.csv` → `data_source: \u003CQ-B answer>` (only if user gave a non-default)\n3. Say: \"Taking defaults for the rest. Running setup — this takes 2-5 min to\n   create a BigQuery dataset and Vector Search collection. Say 'configure\n   more' to switch to Full setup.\"\n4. Run `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md`\n5. Stream output. On non-zero exit, surface the error and check\n   [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md)\n6. On success, set `VECTOR_SEARCH_COLLECTION` and proceed to Test\n\n## Mode 2: Full Setup\n\nAdds two more questions: product fields level and GCP region.\n\n| Q | Question | Default | Notes |\n|---|---|---|---|\n| Q-fields | Product fields level | `Extended` | `Basic` \u002F `Standard` \u002F `Extended` \u002F `Full`. Match this to your CSV's columns. Don't offer \"Custom\" — `validate_schema.py` rejects it. |\n| Q-region | GCP region | `us-central1` | **Only confirmed-working region for Vector Search 2.0.** Other regions return `501 MethodNotImplemented`. |\n\nOtherwise identical to Quick Start.\n\n## When to Use\n\n- E-commerce product search, shopping assistants, semantic catalog discovery\n\nDon't use for generic document search, simple keyword search, or non-retail.\n\n## Project Tree\n\n```\nretail-product-search\u002F\n  assets\u002F\n    design-spec.md            # Source of truth -- filled by Q-MODE\n    sample-products.csv       # Bundled 5-product demo catalog\n  references\u002F                  # Deep-dive docs (load on demand)\n  scripts\u002F\n    agent.py                  # Reference ADK agent\n    retrievers.py             # Vector Search retrieval logic\n    setup.py                  # Pipeline driver (reads design-spec.md)\n    bootstrap.sh              # Workspace bootstrap (called from Workspace Setup)\n    validate_schema.py\n    ingest_bigquery.py\n    ingest_vertex_search.py\n    cleanup.py\n```\n\nCustomize: rewrite `scripts\u002Fagent.py` (see\n[references\u002Fagent-example.md](references\u002Fagent-example.md)) and\n`scripts\u002Fretrievers.py` with your product-specific fields.\n\n## Test\n\nAfter `setup.py` succeeds, set the collection env var (one line, no newlines):\n\n```bash\nexport VECTOR_SEARCH_COLLECTION=\"projects\u002F$GOOGLE_CLOUD_PROJECT\u002Flocations\u002Fus-central1\u002Fcollections\u002Fretail-skill-products-collection\"\n```\n\nThen either:\n\n**With ADK** (interactive UI):\n```bash\n# Use the WORKSPACE VENV's adk (not bare `adk`) so the skill's editable\n# install is on sys.path. Bare `adk` may resolve to a global Python (pyenv,\n# brew, etc.) whose ADK can't find the skill and reports an empty app list.\n.venv\u002Fbin\u002Fadk web \"$SKILL_DIR\u002Fscripts\" --port 8765\n```\nOpen http:\u002F\u002F127.0.0.1:8765, click `scripts`, query.\n\n⚠️ Two things must be right:\n- **Point `adk web` at `$SKILL_DIR\u002Fscripts`, not at `.`** — agent code lives\n  in the install dir, not the workspace. `adk web .` fails with \"No agents\n  found in current folder\".\n- **Use `.venv\u002Fbin\u002Fadk`, not bare `adk`** — bare `adk` may launch the wrong\n  Python and silently fail to load the agent (UI loads, but `\u002Flist-apps`\n  returns `[]` and queries time out).\n\n**Without ADK** (direct smoke test):\n```bash\n.venv\u002Fbin\u002Fpython -c \"from scripts.retrievers import search; print(search('laptop for video editing', top_k=3))\"\n```\n\nSemantic-only retrieval — no structured filters on price, stock, or rating.\nFor demo queries and how to add structured filtering, see\n[references\u002Farchitecture.md](references\u002Farchitecture.md).\n\n## Evaluate\n\n```bash\ncd \"$SKILL_DIR\"\nuv run pytest\n```\n\n`EVAL.yaml` declares `rubric` (LLM-as-judge) + `assertions` (deterministic\nchecks). Target: 80%+ passing.\n\n## Deploy\n\n**Never deploy without explicit human approval.**\n\nCloud Run service account needs `roles\u002Fbigquery.dataViewer` on the dataset and\n`roles\u002Faiplatform.user` on the project. Deploy via `gcloud run deploy` or your\norg's existing tooling.\n\n## Gotchas\n\n- **No results**: collection empty or `VECTOR_SEARCH_COLLECTION` not set\n- **Slow search**: check region and `top_k`\n- **No structured filters**: `search()` is pure semantic similarity. Price \u002F\n  stock \u002F currency filters happen client-side in the LLM, so results may\n  include items outside the constraint. Don't promise hard filters\n- **ADK session memory**: if the retriever errored in earlier turns, the\n  model \"learns\" the tool is broken. Click \"New Session\" in `adk web` after\n  fixing the underlying issue\n\n## Troubleshooting\n\nMost-common failures inline; full table in\n[references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n| Error | Fix |\n|---|---|\n| `setup.py` exits with `'NoneType' object has no attribute 'get'` | `design-spec.md` was rewritten as plain Markdown instead of mutating the YAML-frontmatter template bootstrap copied. Wait for bootstrap to finish, then **edit** (not rewrite) `.\u002Fdesign-spec.md` — only change the field values inside the existing `---...---` frontmatter |\n| `adk web` starts but `\u002Flist-apps` returns `[]` \u002F browser shows \"No agents found\" | Bare `adk` resolved to a global Python that lacks the editable install. Kill it and restart with `.venv\u002Fbin\u002Fadk web \"$SKILL_DIR\u002Fscripts\" --port 8765` |\n| `MethodNotImplemented: 501` from Vector Search | `VECTOR_SEARCH_COLLECTION` has a newline. Re-export on one line |\n| `ModuleNotFoundError: google.adk` | `pip install -e \"$SKILL_DIR\"` — google-adk is an unconditional dependency, no `[adk]` extra needed |\n| `Package requires Python: 3.9.X` | venv used system Python 3.9. Recreate with `python3.12 -m venv .venv` |\n| `BILLING_DISABLED` \u002F `PERMISSION_DENIED` \u002F `API has not been used` | GCP project setup — see troubleshooting.md |\n\n## MCP Migration\n\nThis skill uses `gcloud` CLI + Python SDKs (`google-genai`,\n`google-cloud-bigquery`, `google-cloud-aiplatform`). Per\n[Phase 2 Skills guidelines](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills), 1p skills\nshould prefer remote MCP tools when available. Migration map:\n\n| Service | Where | Future MCP |\n|---|---|---|\n| BigQuery | `ingest_bigquery.py`, `validate_schema.py` | BigQuery MCP |\n| Vector Search (Gemini Enterprise Agent Platform) | `ingest_vertex_search.py`, `setup.py` | Gemini Enterprise Agent Platform MCP |\n| Embeddings (Gemini Enterprise Agent Platform) | `retrievers.py` | Gemini Enterprise Agent Platform MCP |\n| Cloud Run | `gcloud run deploy` | Cloud Run MCP |\n\n## Completion Checklist\n\n- [ ] Product fields level and data source confirmed\n- [ ] Data ingestion ran; Vector Search populated\n- [ ] `retrieve_docs` returns results in ADK web UI\n- [ ] Evaluation passes success criteria\n- [ ] Deployed (if beyond prototype)\n\n## References\n\nLoad on demand:\n\n- [references\u002Finstall-paths.md](references\u002Finstall-paths.md) — host install dirs, Python fallback, `bash -c` rationale\n- [references\u002Fdependencies.md](references\u002Fdependencies.md) — pip deps and install quirks\n- [references\u002Farchitecture.md](references\u002Farchitecture.md) — what retrieval does (semantic-only), demo queries, structured-filter strategies\n- [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md) — full error table\n- [references\u002Fagent-example.md](references\u002Fagent-example.md) — how agent.py + retrievers.py fit together\n- [references\u002Fingestion-scripts.md](references\u002Fingestion-scripts.md) — per-script CLI reference\n","# Product Search Agent\n\nCreates product search agents with semantic search and RAG on Google Cloud.\n\n## STOP — Q-MODE FIRST\n\n**If a catalog is already loaded** (system context says \"DEPLOYED search agent\"\nor provides a `\u003Ccatalog>` block), skip Q-MODE and answer product queries\ndirectly using the catalog.\n\n**Otherwise**, your first message MUST be exactly this:\n\n```\n[skill: retail-product-search] active.\nQ-MODE: Pick a setup mode? [default: 1]\n  1. Quick start -- 2 questions, smart defaults, ~60s. Best for demos and first-timers.\n  2. Full setup  -- 4 questions, ~2 min. Best for real builds.\n```\n\nThen stop and wait. Accept `1`, `quick`, empty\u002FEnter (Quick), or `2`, `full` (Full).\n\n## Execution Rules\n\n1. Q-MODE first. No preamble, no plan-proposing.\n2. One question at a time. Show `[default: ...]`. Empty input = default.\n3. Save answers to `.\u002Fdesign-spec.md` in the workspace as you collect them.\n4. After interview, run `scripts\u002Fsetup.py` (see Workspace Setup below).\n5. User can say \"configure more\" mid-Quick-Start to switch to Full.\n\n## Workspace Setup\n\nThe skill has two locations:\n- **Install dir** — where SKILL.md and scripts live (varies by host)\n- **Workspace** — the agent's cwd; design-spec.md, .venv, and per-run state live here\n\nBy the end of this section the workspace must have `.venv\u002F` (with the skill\ninstalled editable), `design-spec.md`, and `SKILL_DIR` exported in the shell.\n\nRun this as ONE shell command — splitting it across tool calls loses state:\n\n```bash\nSKILL_DIR=$(for d in ~\u002F.claude\u002Fskills ~\u002F.agents\u002Fskills ~\u002F.gemini\u002Fskills ~\u002F.cursor\u002Fskills; do\n  [ -f \"$d\u002Fretail-product-search\u002FSKILL.md\" ] && echo \"$d\u002Fretail-product-search\" && break\ndone)\nbash \"$SKILL_DIR\u002Fscripts\u002Fbootstrap.sh\"\n```\n\n`bootstrap.sh` finds a Python 3.11+ interpreter (with absolute-path fallback\nfor sandboxed shells), creates `.venv`, installs the skill editable, and\ncopies `design-spec.md` into the workspace.\n\nAll scripts run from the install dir against the workspace config. **Use\n`.venv\u002Fbin\u002Fpython`, not bare `python`** — bare `python` may resolve to a\nPython without the skill's editable install on sys.path.\n\n```bash\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md\n.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fcleanup.py\" --config .\u002Fdesign-spec.md --confirm\n```\n\nDetails in [references\u002Finstall-paths.md](references\u002Finstall-paths.md).\n\n## Skill Dependencies\n\nThis skill works in conjunction with the following core Google Cloud skills:\n- `bigquery-basics` (for database configuration guidelines)\n- `gemini-api` (for Gemini Enterprise Agent Platform \u002F Google Gen AI SDK best practices)\n\nVerify if these skills are installed in your active skills directory. If they are missing, recommend the developer to install them by running:\n`npx skills add google\u002Fskills --skill bigquery-basics gemini-api`\n\n## Mode 1: Quick Start (2 questions)\n\n| Q | Question | Default |\n|---|---|---|\n| Q-A | GCP project ID? | `$GOOGLE_CLOUD_PROJECT` or `gcloud config get-value project` |\n| Q-B | Where's your product data? | `assets\u002Fsample-products.csv` (bundled) |\n\nAccepted for Q-B: empty \u002F `default` (bundled), `\u002Fpath\u002Fto\u002Ffile.csv`, or `gs:\u002F\u002F...`.\n\nSilent defaults: Extended fields, `us-central1`.\n\nAfter Q-A and Q-B, do this automatically (don't ask the user to copy\u002Fpaste).\n**Run these steps SEQUENTIALLY — do not parallelize.** Steps 2-3 modify the\nfile bootstrap copies in step 1; running them concurrently is a race.\n\n1. **Run bootstrap first and wait for completion.** `bash \"$SKILL_DIR\u002Fscripts\u002Fbootstrap.sh\"`\n   copies the YAML-frontmatter design-spec template into the workspace at\n   `.\u002Fdesign-spec.md`. Do NOT touch `.\u002Fdesign-spec.md` until bootstrap exits.\n2. **Mutate the existing `.\u002Fdesign-spec.md`** — do NOT rewrite it from scratch.\n   `setup.py` parses YAML frontmatter via `_setup_utils.py`. A Markdown-only\n   file fails with `'NoneType' object has no attribute 'get'`. Use Edit \u002F sed\n   to replace specific lines:\n   - `gcp_project_id: \"\"` → `gcp_project_id: \"\u003CQ-A answer>\"`\n   - `data_source: assets\u002Fsample-products.csv` → `data_source: \u003CQ-B answer>` (only if user gave a non-default)\n3. Say: \"Taking defaults for the rest. Running setup — this takes 2-5 min to\n   create a BigQuery dataset and Vector Search collection. Say 'configure\n   more' to switch to Full setup.\"\n4. Run `.venv\u002Fbin\u002Fpython \"$SKILL_DIR\u002Fscripts\u002Fsetup.py\" --config .\u002Fdesign-spec.md`\n5. Stream output. On non-zero exit, surface the error and check\n   [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md)\n6. On success, set `VECTOR_SEARCH_COLLECTION` and proceed to Test\n\n## Mode 2: Full Setup\n\nAdds two more questions: product fields level and GCP region.\n\n| Q | Question | Default | Notes |\n|---|---|---|---|\n| Q-fields | Product fields level | `Extended` | `Basic` \u002F `Standard` \u002F `Extended` \u002F `Full`. Match this to your CSV's columns. Don't offer \"Custom\" — `validate_schema.py` rejects it. |\n| Q-region | GCP region | `us-central1` | **Only confirmed-working region for Vector Search 2.0.** Other regions return `501 MethodNotImplemented`. |\n\nOtherwise identical to Quick Start.\n\n## When to Use\n\n- E-commerce product search, shopping assistants, semantic catalog discovery\n\nDon't use for generic document search, simple keyword search, or non-retail.\n\n## Project Tree\n\n```\nretail-product-search\u002F\n  assets\u002F\n    design-spec.md            # Source of truth -- filled by Q-MODE\n    sample-products.csv       # Bundled 5-product demo catalog\n  references\u002F                  # Deep-dive docs (load on demand)\n  scripts\u002F\n    agent.py                  # Reference ADK agent\n    retrievers.py             # Vector Search retrieval logic\n    setup.py                  # Pipeline driver (reads design-spec.md)\n    bootstrap.sh              # Workspace bootstrap (called from Workspace Setup)\n    validate_schema.py\n    ingest_bigquery.py\n    ingest_vertex_search.py\n    cleanup.py\n```\n\nCustomize: rewrite `scripts\u002Fagent.py` (see\n[references\u002Fagent-example.md](references\u002Fagent-example.md)) and\n`scripts\u002Fretrievers.py` with your product-specific fields.\n\n## Test\n\nAfter `setup.py` succeeds, set the collection env var (one line, no newlines):\n\n```bash\nexport VECTOR_SEARCH_COLLECTION=\"projects\u002F$GOOGLE_CLOUD_PROJECT\u002Flocations\u002Fus-central1\u002Fcollections\u002Fretail-skill-products-collection\"\n```\n\nThen either:\n\n**With ADK** (interactive UI):\n```bash\n# Use the WORKSPACE VENV's adk (not bare `adk`) so the skill's editable\n# install is on sys.path. Bare `adk` may resolve to a global Python (pyenv,\n# brew, etc.) whose ADK can't find the skill and reports an empty app list.\n.venv\u002Fbin\u002Fadk web \"$SKILL_DIR\u002Fscripts\" --port 8765\n```\nOpen http:\u002F\u002F127.0.0.1:8765, click `scripts`, query.\n\n⚠️ Two things must be right:\n- **Point `adk web` at `$SKILL_DIR\u002Fscripts`, not at `.`** — agent code lives\n  in the install dir, not the workspace. `adk web .` fails with \"No agents\n  found in current folder\".\n- **Use `.venv\u002Fbin\u002Fadk`, not bare `adk`** — bare `adk` may launch the wrong\n  Python and silently fail to load the agent (UI loads, but `\u002Flist-apps`\n  returns `[]` and queries time out).\n\n**Without ADK** (direct smoke test):\n```bash\n.venv\u002Fbin\u002Fpython -c \"from scripts.retrievers import search; print(search('laptop for video editing', top_k=3))\"\n```\n\nSemantic-only retrieval — no structured filters on price, stock, or rating.\nFor demo queries and how to add structured filtering, see\n[references\u002Farchitecture.md](references\u002Farchitecture.md).\n\n## Evaluate\n\n```bash\ncd \"$SKILL_DIR\"\nuv run pytest\n```\n\n`EVAL.yaml` declares `rubric` (LLM-as-judge) + `assertions` (deterministic\nchecks). Target: 80%+ passing.\n\n## Deploy\n\n**Never deploy without explicit human approval.**\n\nCloud Run service account needs `roles\u002Fbigquery.dataViewer` on the dataset and\n`roles\u002Faiplatform.user` on the project. Deploy via `gcloud run deploy` or your\norg's existing tooling.\n\n## Gotchas\n\n- **No results**: collection empty or `VECTOR_SEARCH_COLLECTION` not set\n- **Slow search**: check region and `top_k`\n- **No structured filters**: `search()` is pure semantic similarity. Price \u002F\n  stock \u002F currency filters happen client-side in the LLM, so results may\n  include items outside the constraint. Don't promise hard filters\n- **ADK session memory**: if the retriever errored in earlier turns, the\n  model \"learns\" the tool is broken. Click \"New Session\" in `adk web` after\n  fixing the underlying issue\n\n## Troubleshooting\n\nMost-common failures inline; full table in\n[references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n| Error | Fix |\n|---|---|\n| `setup.py` exits with `'NoneType' object has no attribute 'get'` | `design-spec.md` was rewritten as plain Markdown instead of mutating the YAML-frontmatter template bootstrap copied. Wait for bootstrap to finish, then **edit** (not rewrite) `.\u002Fdesign-spec.md` — only change the field values inside the existing `---...---` frontmatter |\n| `adk web` starts but `\u002Flist-apps` returns `[]` \u002F browser shows \"No agents found\" | Bare `adk` resolved to a global Python that lacks the editable install. Kill it and restart with `.venv\u002Fbin\u002Fadk web \"$SKILL_DIR\u002Fscripts\" --port 8765` |\n| `MethodNotImplemented: 501` from Vector Search | `VECTOR_SEARCH_COLLECTION` has a newline. Re-export on one line |\n| `ModuleNotFoundError: google.adk` | `pip install -e \"$SKILL_DIR\"` — google-adk is an unconditional dependency, no `[adk]` extra needed |\n| `Package requires Python: 3.9.X` | venv used system Python 3.9. Recreate with `python3.12 -m venv .venv` |\n| `BILLING_DISABLED` \u002F `PERMISSION_DENIED` \u002F `API has not been used` | GCP project setup — see troubleshooting.md |\n\n## MCP Migration\n\nThis skill uses `gcloud` CLI + Python SDKs (`google-genai`,\n`google-cloud-bigquery`, `google-cloud-aiplatform`). Per\n[Phase 2 Skills guidelines](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills), 1p skills\nshould prefer remote MCP tools when available. Migration map:\n\n| Service | Where | Future MCP |\n|---|---|---|\n| BigQuery | `ingest_bigquery.py`, `validate_schema.py` | BigQuery MCP |\n| Vector Search (Gemini Enterprise Agent Platform) | `ingest_vertex_search.py`, `setup.py` | Gemini Enterprise Agent Platform MCP |\n| Embeddings (Gemini Enterprise Agent Platform) | `retrievers.py` | Gemini Enterprise Agent Platform MCP |\n| Cloud Run | `gcloud run deploy` | Cloud Run MCP |\n\n## Completion Checklist\n\n- [ ] Product fields level and data source confirmed\n- [ ] Data ingestion ran; Vector Search populated\n- [ ] `retrieve_docs` returns results in ADK web UI\n- [ ] Evaluation passes success criteria\n- [ ] Deployed (if beyond prototype)\n\n## References\n\nLoad on demand:\n\n- [references\u002Finstall-paths.md](references\u002Finstall-paths.md) — host install dirs, Python fallback, `bash -c` rationale\n- [references\u002Fdependencies.md](references\u002Fdependencies.md) — pip deps and install quirks\n- [references\u002Farchitecture.md](references\u002Farchitecture.md) — what retrieval does (semantic-only), demo queries, structured-filter strategies\n- [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md) — full error table\n- [references\u002Fagent-example.md](references\u002Fagent-example.md) — how agent.py + retrievers.py fit together\n- [references\u002Fingestion-scripts.md](references\u002Fingestion-scripts.md) — per-script CLI reference\n",{"name":5,"metadata":59,"description":7},{"author":12,"license":15,"version":60},"0.2.0","main","665f7b2a181686f2ba3c6c942e9b30a084b12ec3","plugins\u002Fretail\u002Fskills\u002Fproduct-search",2956,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes","https:\u002F\u002Fadk.dev","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-11 03:19:25",{"source":8,"skillName":5,"commands":72,"prompt":82,"zipAvailable":83},[73,76,79],{"tool":74,"command":75},"npx","npx skills add google\u002Fadk-recipes --skill retail-product-search",{"tool":77,"command":78},"bunx","bunx skills add google\u002Fadk-recipes --skill retail-product-search",{"tool":80,"command":81},"pnpm","pnpm dlx skills add google\u002Fadk-recipes --skill retail-product-search","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002FSKILL.md",true,[85,91,95,101,105,111,115,119,123,127,131,135,139,143,147,153,157,161,165,169,173,177,181,185,189,193,197,201],{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},".env.example","OTHER","其他",1479,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002F.env.example",{"path":92,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":93,"sourceHtmlUrl":94},".gitignore",174,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002F.gitignore",{"path":96,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":99,"sourceHtmlUrl":100},"assets\u002Fdesign-spec.md","ASSET","资产文件",1802,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fassets\u002Fdesign-spec.md",{"path":102,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":103,"sourceHtmlUrl":104},"assets\u002Fsample-products.csv",649,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fassets\u002Fsample-products.csv",{"path":106,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":109,"sourceHtmlUrl":110},"EVAL.yaml","REFERENCE","参考文档",8065,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002FEVAL.yaml",{"path":112,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":113,"sourceHtmlUrl":114},"Makefile",2112,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002FMakefile",{"path":116,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":117,"sourceHtmlUrl":118},"pyproject.toml",1117,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fpyproject.toml",{"path":120,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":121,"sourceHtmlUrl":122},"README.md",8906,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002FREADME.md",{"path":124,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":125,"sourceHtmlUrl":126},"references\u002Fagent-example.md",2851,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Freferences\u002Fagent-example.md",{"path":128,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":129,"sourceHtmlUrl":130},"references\u002Farchitecture.md",2251,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Freferences\u002Farchitecture.md",{"path":132,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":133,"sourceHtmlUrl":134},"references\u002Fdependencies.md",1011,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Freferences\u002Fdependencies.md",{"path":136,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":137,"sourceHtmlUrl":138},"references\u002Fingestion-scripts.md",5185,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Freferences\u002Fingestion-scripts.md",{"path":140,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":141,"sourceHtmlUrl":142},"references\u002Finstall-paths.md",1897,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Freferences\u002Finstall-paths.md",{"path":144,"resourceType":107,"resourceTypeDesc":108,"sizeBytes":145,"sourceHtmlUrl":146},"references\u002Ftroubleshooting.md",5607,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Freferences\u002Ftroubleshooting.md",{"path":148,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":151,"sourceHtmlUrl":152},"scripts\u002F__init__.py","SCRIPT","脚本",666,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002F__init__.py",{"path":154,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":155,"sourceHtmlUrl":156},"scripts\u002F_paths.py",1409,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002F_paths.py",{"path":158,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":159,"sourceHtmlUrl":160},"scripts\u002F_setup_utils.py",1936,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002F_setup_utils.py",{"path":162,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":163,"sourceHtmlUrl":164},"scripts\u002Fagent.py",6493,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fagent.py",{"path":166,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":167,"sourceHtmlUrl":168},"scripts\u002Fbootstrap.sh",4455,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fbootstrap.sh",{"path":170,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":171,"sourceHtmlUrl":172},"scripts\u002Fcleanup.py",17747,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fcleanup.py",{"path":174,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":175,"sourceHtmlUrl":176},"scripts\u002Fconfig.py",3358,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fconfig.py",{"path":178,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":179,"sourceHtmlUrl":180},"scripts\u002Fingest_bigquery.py",16383,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fingest_bigquery.py",{"path":182,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":183,"sourceHtmlUrl":184},"scripts\u002Fingest_vertex_search.py",17523,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fingest_vertex_search.py",{"path":186,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":187,"sourceHtmlUrl":188},"scripts\u002Fretrievers.py",5521,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fretrievers.py",{"path":190,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":191,"sourceHtmlUrl":192},"scripts\u002Fsetup.py",9962,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fsetup.py",{"path":194,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":195,"sourceHtmlUrl":196},"scripts\u002Fvalidate_schema.py",9351,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fscripts\u002Fvalidate_schema.py",{"path":198,"resourceType":149,"resourceTypeDesc":150,"sizeBytes":199,"sourceHtmlUrl":200},"tests\u002Ftest_runnability.py",879,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Ftests\u002Ftest_runnability.py",{"path":202,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":203,"sourceHtmlUrl":204},"uv.lock",450466,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002Fuv.lock",[206,224,249,266,287,306],{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":219,"publishedAt":54},"01M6991EKEG8XEM3VWW4VGV0ZQ","retail-virtual-tryon","Creates virtual try-on agents supporting image and video (catwalk animation) try-ons on Google Cloud (Gemini image models and Veo on Gemini Enterprise Agent Platform). Handles resource setup, user photo uploading, image\u002Fvideo generation pipelines, local testing, and evaluation.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fvirtual-tryon\u002FSKILL.md",[212,215,218],{"categoryNo":213,"categoryName":214,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":216,"categoryName":217,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[220,49,50,51,221,52,9,222,223],"retail virtual tryon","genai","image","testing",{"skillNo":225,"name":226,"nameZh":6,"description":227,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":228,"categories":229,"keywords":231,"publishedAt":54},"01M69918HZCYZHD7K9Y9ZSD287","routines","Use for a recurring unattended task (cron; pull data, open a PR, post a digest), or to test\u002Fdry-run a routine first. Explains authoring and testing via the routine tool.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Froutines\u002FSKILL.md",[230],{"categoryNo":213,"categoryName":214,"taxonomyType":21,"taxonomyTypeDesc":22},[226,232,46,233,234,223,235,236,237,238,239,240,241,242,243,244,245,246,247,248],"pull","pr","test","post","routine","for","data","via","dry","authoring","digest","task","use","recurring","tool","open","first",{"skillNo":250,"name":251,"nameZh":6,"description":252,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":253,"categories":254,"keywords":255,"publishedAt":54},"01M699178ZDFDXEZ11DG1Y9CTF","policy","Inspect the per-workspace tool-policy overlay (.lha\u002Fpolicies.jsonl) that gates destructive or sensitive tool calls, and tell the user what to change if they want a rule added or removed.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Fpolicy\u002FSKILL.md",[],[251,256,257,258,259,260,261,262,263,264,246,265],"overlay","change","tool calls","inspect","calls","jsonl","rule","gates","user","workspace",{"skillNo":267,"name":268,"nameZh":6,"description":269,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":270,"categories":271,"keywords":272,"publishedAt":54},"01M69915F8591SQBA1ZHK6NDA7","google-workspace","Read\u002Fwrite Google Drive, Docs, Sheets, Gmail, Calendar, Chat, Tasks, Slides via the `gws` CLI. Needs an OAuth client or service account configured first. Use for any Google Workspace task.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Fgoogle-workspace\u002FSKILL.md",[],[9,273,265,237,243,248,274,239,275,276,277,244,278,279,280,281,282,283,284,285,286],"google workspace","client","chat","gws","calendar","write","read","slides","sheets","OAuth","tasks","docs","cli","gmail",{"skillNo":288,"name":289,"nameZh":6,"description":290,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":291,"categories":292,"keywords":294,"publishedAt":54},"01M69914416KTZ6Z0WD425YYJ0","find-skills","Discover\u002Finstall NEW agent skills from external sources (skills.sh). Use for capabilities you lack, e.g. \"find a skill for X\". Do NOT use to list skills you already have; see `\u003Cavailable_skills>`.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Ffind-skills\u002FSKILL.md",[293],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[295,296,297,244,298,299,300,301,302,237,303,304,305],"find","find skills","do","install","list","list skills","capabilities","new agent","you","sources","discover",{"skillNo":307,"name":308,"nameZh":6,"description":309,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":310,"categories":311,"keywords":313,"publishedAt":54},"01M6991292FVYS3XR3WE7VXZJD","bootstrap-google-tools","Install\u002Fauth CLIs the sandbox lacks - `gws` (Drive, Gmail, Sheets, Calendar), `gcloud`, `agents-cli`, `mcp-cli` (MCP servers). Use on \"command not found\" or before GCP\u002FWorkspace\u002FMCP work.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Flong-horizon-harness\u002Fhorizon\u002Fbuiltin_skills\u002Fbootstrap-google-tools\u002FSKILL.md",[312],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[314,9,315,316,244,317,281,276,277,298,318,319,265,320,321,322,323,285,286,324],"Tools","bootstrap google tools","bootstrap","servers","command","work","gcp","auth","sandbox","gcloud","MCP"]