[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M698YJAAMYY71HRFBT3CCH4Z":3,"skill-same:01M698YJAAMYY71HRFBT3CCH4Z":87},{"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":26,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":6,"ownerHtmlUrl":63,"ownerBlogUrl":64,"ownerDescription":65,"updatedAt":66,"install":67,"resources":80},"01M698YJAAMYY71HRFBT3CCH4Z","agent-platform-rag-engine-management",null,"Manage and query Agent Platform RAG Engine Corpora and retrieve grounded contexts using the Google GenAI SDK. Use when listing RAG corpora or files, inspecting a corpus, retrieving contexts, or generating content grounded in a RAG corpus. Do not use for standard database queries (use SQL\u002FSpanner skills), Google Workspace RAG, or other RAG products like gRAG.","google\u002Fskills","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M698WR0H76ENHE587T9EJT89",24044,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fagent-platform-rag-engine-management\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,9,43,44,45,46,47,48,49],"agent platform","agent platform rag engine management","rag","engine","management","platform","files","listing","when","standard","for","database queries","query","do","manage","queries","use","workspace","database","sql","google workspace","sdk","genai","2026-11-10 10:12:30",false,"---\nname: agent-platform-rag-engine-management\nmetadata:\n  version: \"1.0.2\"\n  category: AiAndMachineLearning\ndescription: >-\n  Manage and query Agent Platform RAG Engine Corpora and retrieve grounded\n  contexts using the Google GenAI SDK. Use when listing RAG corpora or files,\n  inspecting a corpus, retrieving contexts, or generating content grounded in a\n  RAG corpus. Do not use for standard database queries (use SQL\u002FSpanner skills),\n  Google Workspace RAG, or other RAG products like gRAG.\n---\n\n# Agent Platform RAG Engine Management\n\nThis skill provides instructions on how to interact with Agent Platform RAG\nEngine using the Agent Platform Python SDK. You MUST use the `vertexai` Python\nSDK to perform RAG Engine operations, rather than raw REST calls or MCP tools,\nbecause this code is intended to be run by external clients.\n\n## Attribution\n\n**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you MUST\nread [Usage Attribution](references\u002Fattribution.md). For commands executed\ndirectly in the terminal (never in generated scripts, Terraform, or user code),\nprefix `gcloud` with `CLOUDSDK_METRICS_REQUEST_ATTRIBUTION` and append the\nattribution suffix to `User-Agent` headers:\n\n```text\nCLOUDSDK_METRICS_REQUEST_ATTRIBUTION=\"agent-skills\u002F1.0 (skill:agent-platform-rag-engine-management)\"\nUser-Agent: \u003Cexisting_user_agent> agent-skills\u002F1.0 (skill:agent-platform-rag-engine-management)\n```\n\n## Safety & Confirmation Tiers (CRITICAL)\n\nBefore executing any commands or scripts on behalf of the user, you must adhere\nto the following safety tiers based on the action requested:\n\n1.  **Tier R: Read-only (`list_corpora`, `list_files`, `get_corpus`,\n    `retrieval_query`)**\n    *   No confirmation needed. Execute immediately to gather information or\n        retrieve grounded contexts.\n2.  **Tier RC: Read-only but consumes Compute Resources\n    (`client.models.generate_content`)**\n\n    *   Requires **interactive confirmation** with 'Yes'\u002F'No' options before\n        executing grounded content generation. The confirmation prompt MUST\n        clearly explain the proposed generation execution and its key parameters\n        (e.g., target corpus ID, query text, target model). Natural-language\n        paraphrases without specifying exact parameters are insufficient, as\n        explicit parameter listing is required to ensure unambiguous user\n        approval of the specific resource and configuration.\n    *   **Same-turn restriction**: Do not execute the generation code in the\n        same turn as presenting the confirmation prompt. Stop and wait for the\n        user's reply; only execute after explicit 'Yes' \u002F approval.\n    *   **Gold Standard Example**:\n\n        > I will perform grounded content generation with the following\n        > parameters. Please confirm this information before I proceed:\n        >\n        > *   **Target Corpus ID**: `projects\u002F123\u002Flocations\u002Fus\u002FragCorpora\u002Fabc`\n        > *   **Target Model**: `gemini-2.5-pro`\n        > *   **Query Text**: \"What are the company policies on remote work?\"\n        >\n        > Do you confirm? [Yes\u002FNo]\n\n## Phase 0: Environment Setup\n\n**CRITICAL**: Before running any of the Python snippets below, you must ensure\nthe environment is correctly initialized by following these steps:\n\n1.  **Google Cloud Authentication**: Authenticate with your Google Cloud\n    credentials and configure active Application Default Credentials (ADC) for\n    Agent Platform access:\n\n    ```bash\n    gcloud auth login\n    gcloud auth application-default login\n    ```\n\n2.  **Python Dependencies**: This skill needs `google-cloud-aiplatform` and\n    `google-genai`, which the sandbox already provides. Do **not** create a\n    virtual environment — it starts empty and hides packages the environment\n    already provides, forcing a redundant install. Do not spend a separate\n    command checking for them: run the snippet directly, and only if it fails\n    with `ModuleNotFoundError`, install in the same command as the retry:\n\n    ```bash\n    pip install -q google-cloud-aiplatform google-genai && python3 - \u003C\u003C'PY'\n    ...\n    PY\n    ```\n\n3.  **Execution**: Run each snippet as a quoted heredoc, `python3 - \u003C\u003C'PY'` ...\n    `PY`, rather than `python3 -c '...'`, whose nested quotes break easily.\n    There is no environment to activate first. When one step needs several of\n    the snippets below (for example, list the corpora and then the files in\n    each), combine them into one script and one command. The\n    `vertexai.preview.rag` deprecation warning printed on stderr is expected;\n    keep using these snippets rather than switching clients because of it.\n\n## Workflow Decision Tree\n\n1.  **Information Gathering**: Has the user provided the Project ID, Region, and\n    Corpus ID?\n\n    *   **No** -> Proceed to [1. Listing Corpora and Files] to discover the\n        necessary Resource Names and IDs. Only ask the user if discovery fails.\n    *   **Yes** -> Proceed.\n\n2.  **Task Type**: What does the user want to do?\n\n    *   **List Corpora and Files** -> Proceed to [1. Listing Corpora and Files].\n    *   **Inspect a Corpus** -> Proceed to [2. Getting \u002F Inspecting a RAG Engine\n        Corpus].\n    *   **Search for Contexts** -> Proceed to [3. Retrieving Contexts].\n    *   **Answer questions using RAG Engine** -> Proceed to [4. Answering the\n        User with Retrieved Context].\n\n> [!TIP]\n>\n> **Placeholder Parameter Replacement:** The Python scripts below use bracketed\n> string placeholders (like `\"{project_id}\"`, `\"{region}\"`, and\n> `\"{corpus_id}\"`). You **MUST** dynamically replace these placeholders with the\n> actual Project ID, Region, and Corpus ID values provided in the user's prompt\n> (or active context) before generating, providing, or executing the scripts.\n\n## 1. Listing Corpora and Files (Discovery)\n\nIf you do not know the Resource Name of the corpus or file, you MUST list them\nfirst to discover them. The SDK handles pagination automatically when converted\nto a list, but you can also use manual pagination for large sets.\n\n### 1.1 Listing and Discovering Corpora\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\n\n# Approach A: List ALL (Automatic Pagination)\n# The SDK's Pager iterates through all pages for you.\nall_corpora = list(rag.list_corpora())\nprint(f\"Found {len(all_corpora)} corpora in total.\")\nfor c in all_corpora:\n    print(f\"Corpus Name: {c.name} | Display Name: {c.display_name}\")\n\n# Approach B: Manual Pagination (for very large projects)\npager = rag.list_corpora(page_size=10)\n# Process first page\nfor c in pager:\n    print(f\"Corpus: {c.display_name}\")\n\n# Get next page if needed\nif pager.next_page_token:\n    second_page = rag.list_corpora(\n        page_size=10, page_token=pager.next_page_token\n    )\n```\n\n### 1.2 Listing and Discovering Files\n\nTo understand what files (and types) are in a corpus, list them and inspect the\n`display_name` (usually includes the extension).\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\n\n# List files with automatic pagination\nfiles = list(rag.list_files(corpus_name=corpus_name))\nprint(f\"Found {len(files)} files.\")\n\nfor f in files:\n    # High-level SDK RagFile objects usually have name, display_name,\n    # description\n    print(f\"File: {f.display_name} | Resource: {f.name}\")\n    # Tip: Check extension to understand file type (PDF, TXT, etc.)\n    if f.display_name.lower().endswith(\".pdf\"):\n        print(\"  Type: PDF\")\n    elif f.display_name.lower().endswith(\".txt\"):\n        print(\"  Type: Plain Text\")\n```\n\n## 2. Getting \u002F Inspecting an Agent Platform RAG Engine Corpus\n\nTo retrieve details about an existing Agent Platform RAG Engine corpus:\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\n\n# To get details of a specific corpus\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\ncorpus = rag.get_corpus(name=corpus_name)\nprint(f\"Corpus Name: {corpus.name}\")\nprint(f\"Display Name: {corpus.display_name}\")\n```\n\n## 3. Retrieving Contexts\n\nTo retrieve relevant contexts from a RAG Engine corpus based on a query. If no\ncontexts come back, that is a valid answer: report it with the corpus and query\nyou used. If a broader search is reasonable, try it in the same script (for\nexample a larger `similarity_top_k`) rather than as a separate command.\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\n\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\nquery = \"What is the speed of light?\"\n\n# Retrieve contexts\nresponse = rag.retrieval_query(\n    rag_corpora=[corpus_name],\n    text=query,\n    similarity_top_k=3\n)\n\nfor context in response.contexts.contexts:\n    print(f\"Context text: {context.text}\")\n    print(f\"Source: {context.source_uri}\")\n```\n\n## 4. Answering the User with Retrieved Context\n\nTo use the retrieved context alongside an Agent Platform model to generate a\ngrounded response:\n\n```python\nfrom google import genai\nfrom google.genai import types\n\nclient = genai.Client(enterprise=True, project=\"{project_id}\", location=\"{region}\")\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\n\n# Define the Agent Platform RAG Engine tool pointing to the corpus\nrag_tool = types.Tool(\n    retrieval=types.Retrieval(\n        vertex_rag_store=types.VertexRagStore(\n            rag_resources=[types.VertexRagStoreRagResource(rag_corpus=corpus_name)],\n            rag_retrieval_config=types.RagRetrievalConfig(\n                top_k=3,\n                filter=types.RagRetrievalConfigFilter(\n                    vector_similarity_threshold=0.5,\n                ),\n            ),\n        )\n    )\n)\n\n# Generate content using the RAG Engine tool\nresponse = client.models.generate_content(\n    model=\"gemini-2.5-flash\",\n    contents=\"What is the speed of light?\",\n    config=types.GenerateContentConfig(\n        tools=[rag_tool]\n    )\n)\nprint(response.text)\n```\n","# Agent Platform RAG Engine Management\n\nThis skill provides instructions on how to interact with Agent Platform RAG\nEngine using the Agent Platform Python SDK. You MUST use the `vertexai` Python\nSDK to perform RAG Engine operations, rather than raw REST calls or MCP tools,\nbecause this code is intended to be run by external clients.\n\n## Attribution\n\n**MUST READ**: Before executing any `gcloud`, REST API, or MCP command, you MUST\nread [Usage Attribution](references\u002Fattribution.md). For commands executed\ndirectly in the terminal (never in generated scripts, Terraform, or user code),\nprefix `gcloud` with `CLOUDSDK_METRICS_REQUEST_ATTRIBUTION` and append the\nattribution suffix to `User-Agent` headers:\n\n```text\nCLOUDSDK_METRICS_REQUEST_ATTRIBUTION=\"agent-skills\u002F1.0 (skill:agent-platform-rag-engine-management)\"\nUser-Agent: \u003Cexisting_user_agent> agent-skills\u002F1.0 (skill:agent-platform-rag-engine-management)\n```\n\n## Safety & Confirmation Tiers (CRITICAL)\n\nBefore executing any commands or scripts on behalf of the user, you must adhere\nto the following safety tiers based on the action requested:\n\n1.  **Tier R: Read-only (`list_corpora`, `list_files`, `get_corpus`,\n    `retrieval_query`)**\n    *   No confirmation needed. Execute immediately to gather information or\n        retrieve grounded contexts.\n2.  **Tier RC: Read-only but consumes Compute Resources\n    (`client.models.generate_content`)**\n\n    *   Requires **interactive confirmation** with 'Yes'\u002F'No' options before\n        executing grounded content generation. The confirmation prompt MUST\n        clearly explain the proposed generation execution and its key parameters\n        (e.g., target corpus ID, query text, target model). Natural-language\n        paraphrases without specifying exact parameters are insufficient, as\n        explicit parameter listing is required to ensure unambiguous user\n        approval of the specific resource and configuration.\n    *   **Same-turn restriction**: Do not execute the generation code in the\n        same turn as presenting the confirmation prompt. Stop and wait for the\n        user's reply; only execute after explicit 'Yes' \u002F approval.\n    *   **Gold Standard Example**:\n\n        > I will perform grounded content generation with the following\n        > parameters. Please confirm this information before I proceed:\n        >\n        > *   **Target Corpus ID**: `projects\u002F123\u002Flocations\u002Fus\u002FragCorpora\u002Fabc`\n        > *   **Target Model**: `gemini-2.5-pro`\n        > *   **Query Text**: \"What are the company policies on remote work?\"\n        >\n        > Do you confirm? [Yes\u002FNo]\n\n## Phase 0: Environment Setup\n\n**CRITICAL**: Before running any of the Python snippets below, you must ensure\nthe environment is correctly initialized by following these steps:\n\n1.  **Google Cloud Authentication**: Authenticate with your Google Cloud\n    credentials and configure active Application Default Credentials (ADC) for\n    Agent Platform access:\n\n    ```bash\n    gcloud auth login\n    gcloud auth application-default login\n    ```\n\n2.  **Python Dependencies**: This skill needs `google-cloud-aiplatform` and\n    `google-genai`, which the sandbox already provides. Do **not** create a\n    virtual environment — it starts empty and hides packages the environment\n    already provides, forcing a redundant install. Do not spend a separate\n    command checking for them: run the snippet directly, and only if it fails\n    with `ModuleNotFoundError`, install in the same command as the retry:\n\n    ```bash\n    pip install -q google-cloud-aiplatform google-genai && python3 - \u003C\u003C'PY'\n    ...\n    PY\n    ```\n\n3.  **Execution**: Run each snippet as a quoted heredoc, `python3 - \u003C\u003C'PY'` ...\n    `PY`, rather than `python3 -c '...'`, whose nested quotes break easily.\n    There is no environment to activate first. When one step needs several of\n    the snippets below (for example, list the corpora and then the files in\n    each), combine them into one script and one command. The\n    `vertexai.preview.rag` deprecation warning printed on stderr is expected;\n    keep using these snippets rather than switching clients because of it.\n\n## Workflow Decision Tree\n\n1.  **Information Gathering**: Has the user provided the Project ID, Region, and\n    Corpus ID?\n\n    *   **No** -> Proceed to [1. Listing Corpora and Files] to discover the\n        necessary Resource Names and IDs. Only ask the user if discovery fails.\n    *   **Yes** -> Proceed.\n\n2.  **Task Type**: What does the user want to do?\n\n    *   **List Corpora and Files** -> Proceed to [1. Listing Corpora and Files].\n    *   **Inspect a Corpus** -> Proceed to [2. Getting \u002F Inspecting a RAG Engine\n        Corpus].\n    *   **Search for Contexts** -> Proceed to [3. Retrieving Contexts].\n    *   **Answer questions using RAG Engine** -> Proceed to [4. Answering the\n        User with Retrieved Context].\n\n> [!TIP]\n>\n> **Placeholder Parameter Replacement:** The Python scripts below use bracketed\n> string placeholders (like `\"{project_id}\"`, `\"{region}\"`, and\n> `\"{corpus_id}\"`). You **MUST** dynamically replace these placeholders with the\n> actual Project ID, Region, and Corpus ID values provided in the user's prompt\n> (or active context) before generating, providing, or executing the scripts.\n\n## 1. Listing Corpora and Files (Discovery)\n\nIf you do not know the Resource Name of the corpus or file, you MUST list them\nfirst to discover them. The SDK handles pagination automatically when converted\nto a list, but you can also use manual pagination for large sets.\n\n### 1.1 Listing and Discovering Corpora\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\n\n# Approach A: List ALL (Automatic Pagination)\n# The SDK's Pager iterates through all pages for you.\nall_corpora = list(rag.list_corpora())\nprint(f\"Found {len(all_corpora)} corpora in total.\")\nfor c in all_corpora:\n    print(f\"Corpus Name: {c.name} | Display Name: {c.display_name}\")\n\n# Approach B: Manual Pagination (for very large projects)\npager = rag.list_corpora(page_size=10)\n# Process first page\nfor c in pager:\n    print(f\"Corpus: {c.display_name}\")\n\n# Get next page if needed\nif pager.next_page_token:\n    second_page = rag.list_corpora(\n        page_size=10, page_token=pager.next_page_token\n    )\n```\n\n### 1.2 Listing and Discovering Files\n\nTo understand what files (and types) are in a corpus, list them and inspect the\n`display_name` (usually includes the extension).\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\n\n# List files with automatic pagination\nfiles = list(rag.list_files(corpus_name=corpus_name))\nprint(f\"Found {len(files)} files.\")\n\nfor f in files:\n    # High-level SDK RagFile objects usually have name, display_name,\n    # description\n    print(f\"File: {f.display_name} | Resource: {f.name}\")\n    # Tip: Check extension to understand file type (PDF, TXT, etc.)\n    if f.display_name.lower().endswith(\".pdf\"):\n        print(\"  Type: PDF\")\n    elif f.display_name.lower().endswith(\".txt\"):\n        print(\"  Type: Plain Text\")\n```\n\n## 2. Getting \u002F Inspecting an Agent Platform RAG Engine Corpus\n\nTo retrieve details about an existing Agent Platform RAG Engine corpus:\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\n\n# To get details of a specific corpus\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\ncorpus = rag.get_corpus(name=corpus_name)\nprint(f\"Corpus Name: {corpus.name}\")\nprint(f\"Display Name: {corpus.display_name}\")\n```\n\n## 3. Retrieving Contexts\n\nTo retrieve relevant contexts from a RAG Engine corpus based on a query. If no\ncontexts come back, that is a valid answer: report it with the corpus and query\nyou used. If a broader search is reasonable, try it in the same script (for\nexample a larger `similarity_top_k`) rather than as a separate command.\n\n```python\nimport vertexai\nfrom vertexai.preview import rag\n\nvertexai.init(project=\"{project_id}\", location=\"{region}\")\n\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\nquery = \"What is the speed of light?\"\n\n# Retrieve contexts\nresponse = rag.retrieval_query(\n    rag_corpora=[corpus_name],\n    text=query,\n    similarity_top_k=3\n)\n\nfor context in response.contexts.contexts:\n    print(f\"Context text: {context.text}\")\n    print(f\"Source: {context.source_uri}\")\n```\n\n## 4. Answering the User with Retrieved Context\n\nTo use the retrieved context alongside an Agent Platform model to generate a\ngrounded response:\n\n```python\nfrom google import genai\nfrom google.genai import types\n\nclient = genai.Client(enterprise=True, project=\"{project_id}\", location=\"{region}\")\ncorpus_name = (\n    \"projects\u002F{project_id}\u002Flocations\u002F{region}\u002FragCorpora\u002F{corpus_id}\"\n)\n\n# Define the Agent Platform RAG Engine tool pointing to the corpus\nrag_tool = types.Tool(\n    retrieval=types.Retrieval(\n        vertex_rag_store=types.VertexRagStore(\n            rag_resources=[types.VertexRagStoreRagResource(rag_corpus=corpus_name)],\n            rag_retrieval_config=types.RagRetrievalConfig(\n                top_k=3,\n                filter=types.RagRetrievalConfigFilter(\n                    vector_similarity_threshold=0.5,\n                ),\n            ),\n        )\n    )\n)\n\n# Generate content using the RAG Engine tool\nresponse = client.models.generate_content(\n    model=\"gemini-2.5-flash\",\n    contents=\"What is the speed of light?\",\n    config=types.GenerateContentConfig(\n        tools=[rag_tool]\n    )\n)\nprint(response.text)\n```\n",{"name":5,"metadata":55,"description":7},{"version":56,"category":57},"1.0.2","AiAndMachineLearning","main","071c4f7eba880767a647ce778650db8dbf7e16fc","skills\u002Fcloud\u002Fagent-platform-rag-engine-management",2002,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-13 02:42:47",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add google\u002Fskills --skill agent-platform-rag-engine-management",{"tool":73,"command":74},"bunx","bunx skills add google\u002Fskills --skill agent-platform-rag-engine-management",{"tool":76,"command":77},"pnpm","pnpm dlx skills add google\u002Fskills --skill agent-platform-rag-engine-management","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fagent-platform-rag-engine-management\u002FSKILL.md",true,[81],{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"references\u002Fattribution.md","REFERENCE","参考文档",1986,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fagent-platform-rag-engine-management\u002Freferences\u002Fattribution.md",[88,121,149,177,204,227],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":98,"publishedAt":50},"01M6998S2EZKD3GEJ7F943RZTE","sign-in-with-google-web","Implement, configure, and secure Sign In With Google (SiwG) using Google Identity Services (GIS \u002F `https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fclient`) across web architectures. Use when creating Google sign-in buttons, implementing Google One Tap with FedCM, integrating GIS in React\u002FNext.js\u002FAngular\u002FHTML, verifying ID tokens on backend runtimes (Python\u002FNode.js\u002FGo\u002FJava), enforcing Google Workspace domain restrictions (`hd`), securing client-side ID tokens via WebCrypto nonces or encrypted IndexedDB, embedding in cross-origin iframes via the Intermediate Iframe API (`https:\u002F\u002Faccounts.google.com\u002Fgsi\u002Fintermediate`), configuring Content Security Policy (CSP), COOP, and Permissions Policy (`identity-credentials-get`) headers, or handling sign-out and revocation. Don't use for legacy Google Sign-In (`gapi.auth2`), Google Cloud IAM service accounts, or Android\u002FiOS native Credential Manager.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fsign-in-with-google-web\u002FSKILL.md",[94,97],{"categoryNo":95,"categoryName":96,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[9,99,100,101,102,103,104,105,47,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120],"sign in with google web","sign","with","web","android","go","security","google cloud","implement","policy","python","implementing","react","iam","permissions","buttons","secure","manager","identity","architectures","domain","runtimes",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":134,"publishedAt":50},"01M6998PHPDCAD684VW5WRG83D","dpop-adoption","Implement and debug OAuth 2.0 DPoP (RFC 9449) refresh token sender-constraining for WebCrypto, Node.js ES6, and browser runtimes integrating with Google's OAuth platform. Use when configuring non-extractable asymmetric key pairs (P-256), generating DPoP Proof JWTs for authorization code exchange and token refresh, or handling 400 use_dpop_nonce challenge retry loops at oauth2.googleapis.com\u002Ftoken. Don't use for unconstrained OAuth 2.0 flows (where refresh tokens are not bound to a client key pair), or for Google Cloud IAM \u002F service account authentication.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fidentity\u002Fdpop-adoption\u002FSKILL.md",[127,128,129],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[135,136,9,106,137,138,139,140,141,142,112,143,144,145,146,147,148,117,120,32,35],"dpop adoption","adoption","es6","retry","authentication","flows","challenge","code","browser","loops","at","node","token","pair",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":161,"publishedAt":50},"01M6998M72TC73EEAQH4XC7EXW","retrieving-developer-knowledge","Searches, retrieves, and synthesizes official Google developer documentation across Google Cloud, AI\u002FGemini, Android, Chrome, Web, Flutter, Go, Firebase, and other Google developer platforms. Integrates with the Developer Knowledge MCP server (search_documents, get_documents, answer_query) or the Developer Knowledge REST API fallback. Use when searching for gcloud CLI commands, API syntax, IAM permissions, official documentation, architectural comparisons, or product choice overviews. Don't use for local filesystem lookups or non-Google documentation.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fretrieving-developer-knowledge\u002FSKILL.md",[155,156,159,160],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":157,"categoryName":158,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},[162,163,164,165,106,166,167,168,169,170,171,172,173,35,39,174,175,112,176,113],"retrieving developer knowledge","knowledge","developer","MCP","mcp server","official","developer documentation","get","search","local","choice","documents","api","across","documentation",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":50},"01M6998J2CZEXS9BES9S3WWFKC","migrate-to-rust","Clones, analyzes, plans, and migrates legacy codebases (C++, Fortran, Java, Python, C, Shell) from a GitHub URL or local directory to a modern, high-performance, deterministic, 100% Safe Rust architecture, tracking live telemetry across every task bucket, test failure\u002Ffix cycle, and Profile-Guided Optimization (PGO) stage, and producing a first-person AI storytelling report and interactive HTML infographic. Use when migrating a GitHub repository or local codebase to Rust, porting legacy C++, Fortran, Python, or Java workloads to memory-safe Rust, designing Struct-of-Arrays (SoA) or SIMD Rust architectures, or optimizing Rust ports with LLVM PGO. Don't use for unrelated non-Rust refactoring or single-line syntax questions.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Fmigrate-to-rust\u002FSKILL.md",[],[184,185,186,187,188,189,190,191,109,192,193,194,195,196,197,171,198,199,200,35,201,202,175,203],"migrate to rust","rust","migrate","github","memory","performance","directory","safe","ports","llvm","soa","cycle","porting","fix","arrays","infographic","high-performance","URL","architecture","unrelated",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":213,"publishedAt":50},"01M6998GCC3K29WZ82KXMB9E02","finding-google-skills","Google platform decision and setup guidance, loaded on demand from Google's skill catalog. Use when a developer is choosing or setting up part of their stack, such as where to run a service, a database, storage, messaging, authentication, analytics, ads, or AI model serving, and a Google product is a reasonable candidate - whether or not a vendor is named - or when a request names a Google product or API. Brings in the matching Google skill so the answer can weigh Google options, their trade-offs, and when they are not the right fit. Skip when the stack is already settled on another provider and no Google product is named, or the task involves no platform choice.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fdevelopers\u002Ffinding-google-skills\u002FSKILL.md",[210,211,212],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},[9,214,215,216,217,32,218,219,220,221,222,139,223,224,225,172,43,45,35,226,174],"finding google skills","storage","as","messaging","model","trade-offs","provider","answer","fit","catalog","up","decision","candidate",{"skillNo":228,"name":229,"nameZh":6,"description":230,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":231,"categories":232,"keywords":235,"publishedAt":50},"01M6998DWNHTH0BS6W1CY8ZXMP","workload-manager-basics","Use this skill to manage Google Cloud Workload Manager evaluations, rules, scanned resources, and validation results by using public client libraries and the REST API. Use when you need to inspect workload best-practice rules, create and run evaluations for Google Cloud general best practices, SAP, SQL Server, or custom organizational rules, review violations, export results to BigQuery, or automate Workload Manager through client libraries because no service-specific public CLI or MCP server is available. Don't use for general Google Compute Engine instance management, VPC configuration, or standard IAM auditing.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fcloud\u002Fworkload-manager-basics\u002FSKILL.md",[233,234],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[236,237,116,238,9,165,239,106,166,240,241,242,243,35,244,174,112,245,246,247,248],"workload manager basics","workload","basics","cli","review","vpc","resources","inspect","you","create","libraries","server","run"]