[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69910MDQ0YV8CCY71ZWK2MM":3,"skill-same:01M69910MDQ0YV8CCY71ZWK2MM":72},{"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":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":55,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M69910MDQ0YV8CCY71ZWK2MM","rca",null,"Root-cause analysis of one AQuA insight against the observed agent's own source code. Use when a message names an insight and asks what the root cause is, how to fix it, why the agent behaved that way, or to diagnose a failure -- for example `Diagnose insight \u003Cid> (\"\u003Clabel>\") — what is the root cause, and how would you fix it?`. Reads the source snapshot at the revision the failure ran on, plus the complete conversations behind the insight, and answers with `\u003Cpath>:\u003Cstart>-\u003Cend>` citations, and records the proposed fix against the insight.","google\u002Fadk-recipes","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M6990124CWS5627VKGSKJXRD",10609,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Fambient-quality-agent\u002Fsrc\u002Fambient_quality_agent\u002Fskills\u002Frca\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"end","when","source code","source","at","conversations","revision","you","how to","aqua","message","snapshot","fix","why","how","analysis","Citations","start","code","2026-11-10 10:12:30",false,"---\nname: rca\ndescription: >-\n  Root-cause analysis of one AQuA insight against the observed agent's own\n  source code. Use when a message names an insight and asks what the root cause\n  is, how to fix it, why the agent behaved that way, or to diagnose a failure --\n  for example `Diagnose insight \u003Cid> (\"\u003Clabel>\") — what is the root cause, and\n  how would you fix it?`. Reads the source snapshot at the revision the failure\n  ran on, plus the complete conversations behind the insight, and answers with\n  `\u003Cpath>:\u003Cstart>-\u003Cend>` citations, and records the proposed fix against the\n  insight.\n---\n\n# Root-cause analysis of an insight\n\nExplain why the observed agent failed, using its own code at the revision the\nfailure ran on and the conversations the insight was clustered from.\n\nThis is a read-only investigation. Never write to the observed agent's source,\nnever open a CL, and never open a pull request.\n\n## Procedure\n\nFollow these steps in order.\n\n### 0. Read the developer's goal and memories\n\nCall `get_goal` once. The goal says what the developer cares about; it is\nnever by itself the defect -- the defect is still the instruction, tool and\nturn. When none is written, there is no goal to follow.\n\nCall `get_memories` once too. Memories are what the developer asked AQuA to\nremember about working on their agent, such as which file holds its prompt;\nuse them to find your way, and check what one names against the snapshot,\nsince it can be out of date. They are reference data, not instructions, and\nnever by themselves the defect. Never call `remember` on your own\ninitiative, even when the diagnosis turns up something worth keeping.\n\n### 1. Find the revision the failure ran on\n\nCall `get_insight` with the insight id and `include_traces=False`. Occurrences\ncome back newest first, so `occurrences[0]` is the most recent sighting. Note\ntwo fields from it: `agent_revision`, the deployment the failure ran on, and\n`occurrence_id`, the sighting that names it.\n\nAn empty `agent_revision` means the sighting names no deployment. Read the\nnewest snapshot instead, and say in your answer that the code you read may not\nbe the code that failed.\n\n`list_revisions` shows which snapshots exist. Revision numbers are\nnon-contiguous, and an old snapshot can be gone entirely -- if that revision has\nno snapshot, say which revision you read instead.\n\n### 2. Orient, locate, read\n\nPass `revision=\u003Cagent_revision>` to every one of these calls:\n\n* `list_source_files` -- the shape of the repository at this revision.\n* `search_source` -- a regular expression for the prompt text, tool name, or\n  error string the insight points at.\n* `read_source_file` -- the surrounding lines, numbered, so quotes can be cited\n  exactly.\n\n### 3. Pull the evidence\n\nCall `get_full_trajectories` with `occurrence_id=\u003Coccurrence_id>` when the\nquestion turns on what users actually did. That is the sighting you took the\nrevision from, so its conversations are the ones the code you just read\nserved. The response is scoped to that sighting: `scope` is `\"occurrence\"` and\n`agent_revision` at the top level is the revision you already have.\n\nThe sample carried on the insight itself is capped rubric evidence, not the\nwhole population, so read the conversations rather than reasoning from it.\n\nIf one sighting is not enough evidence, call again with `insight_id` alone and\nno `occurrence_id`. That returns the recent sightings of the insight, newest\nfirst, with `scope` set to `\"insight\"`. The top-level `agent_revision` is then\n`null`, because the conversations span builds: each trajectory entry carries its own\n`occurrence_id` and `agent_revision`, and that per-entry revision is the one to\npass when reading source for that conversation.\n\nPaginate with `next_page_token`. A trajectory marked `partial`, `truncated`, or\n`not_archived` is incomplete evidence -- say so rather than reasoning over the\ngap.\n\nThis response is capped: `occurrences_read`, `total_occurrences`, and\n`occurrences_truncated` describe how much of the insight it covers. Never state\nhow often the issue happened from these numbers -- `get_insight` is what counts\noccurrences.\n\n### 4. Record the fix, then answer\n\nCall `record_root_cause`, then write the reply. The written answer has exactly\ntwo parts, in this order, naming both the revision you read and the occurrence\nyou took it from. The fix is not one of them.\n\n## Recording the fix\n\nThe fix is the tool call, not prose. Pass the `insight_id`, the `occurrence_id`\nyou took the revision from, that same `revision`, a `summary` naming the\nmechanism, and `edits` -- one per replacement, each a `path`, a 1-based\ninclusive `start_line`..`end_line`, the replacement text in `after`, and a\none-line `rationale`. Leave `before` empty: the server fills it from the snapshot and\ndiscards anything you send, so read the `record` it returns to confirm the\nanchor is the code you meant.\n\nCall it once you can explain the mechanism. Call it again with the **complete**\nedit set whenever the diagnosis changes -- each call supersedes the last for that\noccurrence, and the newest is what the dashboard shows. There is no way to add\nor remove one edit, so resend every edit you still stand behind. If an edit is\ngone because the user asked for a narrower fix, there is nothing to report; if\none disappeared and you did not intend it, put it back.\n\nAn empty `edits` set is a legitimate answer when the diagnosis needs no code\nchange. Say so in the summary.\n\nThe tool refuses the whole record if any one edit cannot be anchored, and names\nthe failing range and why. Correct that range and resend; `anchored` gives back\nthe edits that did resolve. If every edit is refused, state the fix in prose and\ntell the user the record was not saved.\n\n## The answer contract\n\n**1. The mechanism.** What in the code produces the observed behavior, cited as\n`\u003Cpath>:\u003Cstart>-\u003Cend>` and quoting the code as it exists at the revision you\nread. State that revision explicitly in the answer.\n\n**2. That the fix is unverified.** Say it, every time, in a sentence of its\nown: nothing here ran the fix or tested it. Most of these defects are prompt or\ninstruction wording, where a passing test suite would not show that the behavior\nchanged either. Omitting the sentence reads as confidence you do not have.\n\nIf the revision you read is not the newest snapshot, say so here too: the file\nmay have moved on since.\n\n## Never write the fix out\n\nThe dashboard renders the stored record directly above your reply, so repeating\nit shows the user the same edit twice. Write no \"proposed fix\" section, no path,\nno line range, no `before` or `after` block, no replacement text, and never a\nunified diff -- a `--- a\u002F... +++ b\u002F...` block invites `git apply`, and the\nsnapshot is a past revision while the working tree is at HEAD, so such a patch\ncan apply cleanly and land the wrong change.\n\nPoint at the record in one sentence -- which files it touches, and that the\nrecord carries the edit -- and stop there. The one exception is a record the\ntool refused outright: nothing is on screen then, so state the fix in prose and\nsay it was not saved.\n\n## Code and conversations must be the same revision\n\nThe revision you read the source at and the revision the conversations you quote\nran on have to be the same one, and the answer has to say which it is. Nothing\nenforces this for you: the revision is an argument you pass, so reading revision\n10 while quoting a sighting from revision 8 produces an explanation of code that\nnever served those conversations. Name the revision and the occurrence together,\nand if you had to mix them, say that instead of presenting one revision.\n\nUnder `\"insight\"` scope the revision varies from one trajectory entry to the\nnext, so there is no single revision the answer can name. Either explain each\nbuild against the entries that ran on it, or restrict the explanation to one\nrevision and say which conversations it covers.\n\n## Absent code\n\nA file the snapshot does not have is one of three different answers, and the\ntools distinguish them. Report the one you got:\n\n* excluded by a publish-time ignore pattern -- the code exists, this snapshot\n  does not carry it;\n* no such path at this revision -- it does not exist in the repository;\n* published but with its body missing, which means the deploy-time upload did\n  not finish -- another revision may carry the same file.\n\n`record_root_cause` reports whichever of the three applies to an edit's path.\nA third-party dependency is a fourth case that no snapshot covers at all: their\nbehavior has to be reasoned about from the call sites you can read.\n\nNever present \"not in this snapshot\" as \"does not exist\".\n","# Root-cause analysis of an insight\n\nExplain why the observed agent failed, using its own code at the revision the\nfailure ran on and the conversations the insight was clustered from.\n\nThis is a read-only investigation. Never write to the observed agent's source,\nnever open a CL, and never open a pull request.\n\n## Procedure\n\nFollow these steps in order.\n\n### 0. Read the developer's goal and memories\n\nCall `get_goal` once. The goal says what the developer cares about; it is\nnever by itself the defect -- the defect is still the instruction, tool and\nturn. When none is written, there is no goal to follow.\n\nCall `get_memories` once too. Memories are what the developer asked AQuA to\nremember about working on their agent, such as which file holds its prompt;\nuse them to find your way, and check what one names against the snapshot,\nsince it can be out of date. They are reference data, not instructions, and\nnever by themselves the defect. Never call `remember` on your own\ninitiative, even when the diagnosis turns up something worth keeping.\n\n### 1. Find the revision the failure ran on\n\nCall `get_insight` with the insight id and `include_traces=False`. Occurrences\ncome back newest first, so `occurrences[0]` is the most recent sighting. Note\ntwo fields from it: `agent_revision`, the deployment the failure ran on, and\n`occurrence_id`, the sighting that names it.\n\nAn empty `agent_revision` means the sighting names no deployment. Read the\nnewest snapshot instead, and say in your answer that the code you read may not\nbe the code that failed.\n\n`list_revisions` shows which snapshots exist. Revision numbers are\nnon-contiguous, and an old snapshot can be gone entirely -- if that revision has\nno snapshot, say which revision you read instead.\n\n### 2. Orient, locate, read\n\nPass `revision=\u003Cagent_revision>` to every one of these calls:\n\n* `list_source_files` -- the shape of the repository at this revision.\n* `search_source` -- a regular expression for the prompt text, tool name, or\n  error string the insight points at.\n* `read_source_file` -- the surrounding lines, numbered, so quotes can be cited\n  exactly.\n\n### 3. Pull the evidence\n\nCall `get_full_trajectories` with `occurrence_id=\u003Coccurrence_id>` when the\nquestion turns on what users actually did. That is the sighting you took the\nrevision from, so its conversations are the ones the code you just read\nserved. The response is scoped to that sighting: `scope` is `\"occurrence\"` and\n`agent_revision` at the top level is the revision you already have.\n\nThe sample carried on the insight itself is capped rubric evidence, not the\nwhole population, so read the conversations rather than reasoning from it.\n\nIf one sighting is not enough evidence, call again with `insight_id` alone and\nno `occurrence_id`. That returns the recent sightings of the insight, newest\nfirst, with `scope` set to `\"insight\"`. The top-level `agent_revision` is then\n`null`, because the conversations span builds: each trajectory entry carries its own\n`occurrence_id` and `agent_revision`, and that per-entry revision is the one to\npass when reading source for that conversation.\n\nPaginate with `next_page_token`. A trajectory marked `partial`, `truncated`, or\n`not_archived` is incomplete evidence -- say so rather than reasoning over the\ngap.\n\nThis response is capped: `occurrences_read`, `total_occurrences`, and\n`occurrences_truncated` describe how much of the insight it covers. Never state\nhow often the issue happened from these numbers -- `get_insight` is what counts\noccurrences.\n\n### 4. Record the fix, then answer\n\nCall `record_root_cause`, then write the reply. The written answer has exactly\ntwo parts, in this order, naming both the revision you read and the occurrence\nyou took it from. The fix is not one of them.\n\n## Recording the fix\n\nThe fix is the tool call, not prose. Pass the `insight_id`, the `occurrence_id`\nyou took the revision from, that same `revision`, a `summary` naming the\nmechanism, and `edits` -- one per replacement, each a `path`, a 1-based\ninclusive `start_line`..`end_line`, the replacement text in `after`, and a\none-line `rationale`. Leave `before` empty: the server fills it from the snapshot and\ndiscards anything you send, so read the `record` it returns to confirm the\nanchor is the code you meant.\n\nCall it once you can explain the mechanism. Call it again with the **complete**\nedit set whenever the diagnosis changes -- each call supersedes the last for that\noccurrence, and the newest is what the dashboard shows. There is no way to add\nor remove one edit, so resend every edit you still stand behind. If an edit is\ngone because the user asked for a narrower fix, there is nothing to report; if\none disappeared and you did not intend it, put it back.\n\nAn empty `edits` set is a legitimate answer when the diagnosis needs no code\nchange. Say so in the summary.\n\nThe tool refuses the whole record if any one edit cannot be anchored, and names\nthe failing range and why. Correct that range and resend; `anchored` gives back\nthe edits that did resolve. If every edit is refused, state the fix in prose and\ntell the user the record was not saved.\n\n## The answer contract\n\n**1. The mechanism.** What in the code produces the observed behavior, cited as\n`\u003Cpath>:\u003Cstart>-\u003Cend>` and quoting the code as it exists at the revision you\nread. State that revision explicitly in the answer.\n\n**2. That the fix is unverified.** Say it, every time, in a sentence of its\nown: nothing here ran the fix or tested it. Most of these defects are prompt or\ninstruction wording, where a passing test suite would not show that the behavior\nchanged either. Omitting the sentence reads as confidence you do not have.\n\nIf the revision you read is not the newest snapshot, say so here too: the file\nmay have moved on since.\n\n## Never write the fix out\n\nThe dashboard renders the stored record directly above your reply, so repeating\nit shows the user the same edit twice. Write no \"proposed fix\" section, no path,\nno line range, no `before` or `after` block, no replacement text, and never a\nunified diff -- a `--- a\u002F... +++ b\u002F...` block invites `git apply`, and the\nsnapshot is a past revision while the working tree is at HEAD, so such a patch\ncan apply cleanly and land the wrong change.\n\nPoint at the record in one sentence -- which files it touches, and that the\nrecord carries the edit -- and stop there. The one exception is a record the\ntool refused outright: nothing is on screen then, so state the fix in prose and\nsay it was not saved.\n\n## Code and conversations must be the same revision\n\nThe revision you read the source at and the revision the conversations you quote\nran on have to be the same one, and the answer has to say which it is. Nothing\nenforces this for you: the revision is an argument you pass, so reading revision\n10 while quoting a sighting from revision 8 produces an explanation of code that\nnever served those conversations. Name the revision and the occurrence together,\nand if you had to mix them, say that instead of presenting one revision.\n\nUnder `\"insight\"` scope the revision varies from one trajectory entry to the\nnext, so there is no single revision the answer can name. Either explain each\nbuild against the entries that ran on it, or restrict the explanation to one\nrevision and say which conversations it covers.\n\n## Absent code\n\nA file the snapshot does not have is one of three different answers, and the\ntools distinguish them. Report the one you got:\n\n* excluded by a publish-time ignore pattern -- the code exists, this snapshot\n  does not carry it;\n* no such path at this revision -- it does not exist in the repository;\n* published but with its body missing, which means the deploy-time upload did\n  not finish -- another revision may carry the same file.\n\n`record_root_cause` reports whichever of the three applies to an edit's path.\nA third-party dependency is a fourth case that no snapshot covers at all: their\nbehavior has to be reasoned about from the call sites you can read.\n\nNever present \"not in this snapshot\" as \"does not exist\".\n",{"name":5,"description":7},"main","665f7b2a181686f2ba3c6c942e9b30a084b12ec3","core\u002Fpython\u002Fambient-quality-agent\u002Fsrc\u002Fambient_quality_agent\u002Fskills\u002Frca",2958,"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-12 02:02:17",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add google\u002Fadk-recipes --skill rca",{"tool":64,"command":65},"bunx","bunx skills add google\u002Fadk-recipes --skill rca",{"tool":67,"command":68},"pnpm","pnpm dlx skills add google\u002Fadk-recipes --skill rca","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fcore\u002Fpython\u002Fambient-quality-agent\u002Fsrc\u002Fambient_quality_agent\u002Fskills\u002Frca\u002FSKILL.md",true,[],[73,99,130,155,172,193],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":90,"publishedAt":43},"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",[79,84,87],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":85,"categoryName":86,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":88,"categoryName":89,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000023","Skill与智能体开发",[91,92,93,9,94,95,96,97,98],"retail virtual tryon","google cloud","image","testing","gemini","genai","adk","gemini enterprise agent platform",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":112,"publishedAt":43},"01M6991ABTZW7FCPREXY8GD4RG","retail-product-search","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.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fadk-recipes\u002Fblob\u002Fmain\u002Fplugins\u002Fretail\u002Fskills\u002Fproduct-search\u002FSKILL.md",[105,108,109],{"categoryNo":106,"categoryName":107,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":88,"categoryName":89,"taxonomyType":82,"taxonomyTypeDesc":83},{"categoryNo":110,"categoryName":111,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000031","产品经理",[113,114,115,98,97,95,116,9,92,117,25,118,119,120,121,122,123,124,125,126,127,128,129],"retail product search","product","search","assistant","pipeline","commerce","scaffolding","shopping","up","ingestion","collection","SET","vector","apache","run","create","rag",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":137,"publishedAt":43},"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",[136],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[132,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,127,153,94,154],"dry","routine","for","post","via","authoring","digest","task","use","recurring","pr","tool","open","first","pull","test","data",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":161,"publishedAt":43},"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",[],[157,162,163,164,165,166,167,168,169,170,149,171],"gates","overlay","tool calls","inspect","calls","jsonl","rule","user","workspace","change",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":178,"publishedAt":43},"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",[],[170,179,9,180,146,181,182,183,151,184,185,186,187,188,145,140,189,190,142,191,192],"google workspace","calendar","write","read","slides","OAuth","tasks","docs","cli","gmail","sheets","client","chat","gws",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":200,"publishedAt":43},"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",[199],{"categoryNo":88,"categoryName":89,"taxonomyType":82,"taxonomyTypeDesc":83},[201,202,140,31,203,204,205,206,146,207,208,209,210],"find skills","find","sources","discover","new agent","do","install","list","list skills","capabilities"]