{"id":"b7ee46ad-2e3f-4aae-ac19-e75cf1f1de09","shortId":"XF4Rdb","kind":"skill","title":"winmd-api-search","tagline":"Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI/ML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, e","description":"# WinMD API Search\n\nThis skill helps you find the right Windows API for any capability and get its full details. It searches a local cache of all WinMD metadata from:\n\n- **Windows Platform SDK** — all `Windows.*` WinRT APIs (always available, no restore needed)\n- **WinAppSDK / WinUI** — bundled as a baseline in the cache generator (always available, no restore needed)\n- **NuGet packages** — any additional packages in restored projects that contain `.winmd` files\n- **Project-output WinMD** — class libraries (C++/WinRT, C#) that produce `.winmd` as build output\n\nEven on a fresh clone with no restore or build, you still get full Platform SDK + WinAppSDK coverage.\n\n## When to Use This Skill\n\n- User wants to build a feature and you need to find which API provides that capability\n- User asks \"how do I do X?\" where X involves a platform feature (camera, files, notifications, sensors, AI, etc.)\n- You need the exact methods, properties, events, or enumeration values of a type before writing code\n- You're unsure which control, class, or interface to use for a UI or system task\n\n## Prerequisites\n\n- **.NET SDK 8.0 or later** — required to build the cache generator. Install from [dotnet.microsoft.com](https://dotnet.microsoft.com/download) if not available.\n\n## Cache Setup (Required Before First Use)\n\nAll query and search commands read from a local JSON cache. **You must generate the cache before running any queries.**\n\n```powershell\n# All projects in the repo (recommended for first run)\n.\\.github\\skills\\winmd-api-search\\scripts\\Update-WinMdCache.ps1\n\n# Single project\n.\\.github\\skills\\winmd-api-search\\scripts\\Update-WinMdCache.ps1 -ProjectDir <project-folder>\n```\n\nNo project restore or build is needed for baseline coverage (Platform SDK + WinAppSDK). For additional NuGet packages, the project needs `dotnet restore` (which generates `project.assets.json`) or a `packages.config` file.\n\nCache is stored at `Generated Files\\winmd-cache\\`, deduplicated per-package+version.\n\n### What gets indexed\n\n| Source | When available |\n|--------|----------------|\n| Windows Platform SDK | Always (reads from local SDK install) |\n| WinAppSDK (latest) | Always (bundled as baseline in cache generator) |\n| WinAppSDK Runtime | When installed on the system (detected via `Get-AppxPackage`) |\n| Project NuGet packages | After `dotnet restore` or with `packages.config` |\n| Project-output `.winmd` | After project build (class libraries that produce WinMD) |\n\n> **Note:** This cache directory should be in `.gitignore` — it's generated, not source.\n\n## How to Use\n\nPick the path that matches the situation:\n\n---\n\n### Discover — \"I don't know which API to use\"\n\nThe user describes a capability in their own words. You need to find the right API.\n\n**0. Ensure the cache exists**\n\nIf the cache hasn't been generated yet, run `Update-WinMdCache.ps1` first — see [Cache Setup](#cache-setup-required-before-first-use) above.\n\n**1. Translate user language → search keywords**\n\nMap the user's daily language to programming terms. Try multiple variations:\n\n| User says | Search keywords to try (in order) |\n|-----------|-----------------------------------|\n| \"take a picture\" | `camera`, `capture`, `photo`, `MediaCapture` |\n| \"load from disk\" | `file open`, `picker`, `FileOpen`, `StorageFile` |\n| \"describe what's in it\" | `image description`, `Vision`, `Recognition` |\n| \"show a popup\" | `dialog`, `flyout`, `popup`, `ContentDialog` |\n| \"drag and drop\" | `drag`, `drop`, `DragDrop` |\n| \"save settings\" | `settings`, `ApplicationData`, `LocalSettings` |\n\nStart with simple everyday words. If results are weak or irrelevant, try the more technical variation.\n\n**2. Run searches**\n\n```powershell\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action search -Query \"<keyword>\"\n```\n\nThis returns ranked namespaces with top matching types and the **JSON file path**.\n\nIf results have **low scores (below 60) or are irrelevant**, fall back to searching online documentation:\n\n1. Use web search to find the right API on Microsoft Learn, for example:\n   - `site:learn.microsoft.com/uwp/api <capability keywords>` for `Windows.*` APIs\n   - `site:learn.microsoft.com/windows/windows-app-sdk/api/winrt <capability keywords>` for `Microsoft.*` WinAppSDK APIs\n2. Read the documentation pages to identify which type matches the user's requirement.\n3. Once you know the type name, come back and use `-Action members` or `-Action enums` to get the exact local signatures.\n\n**3. Read the JSON to choose the right API**\n\nRead the file at the path(s) from the top results. The JSON has all types in that namespace — full members, signatures, parameters, return types, enumeration values.\n\nRead and decide which types and members fit the user's requirement.\n\n**4. Look up official documentation for context**\n\nThe cache contains only signatures — no descriptions or usage guidance. For explanations, examples, and remarks, look up the type on Microsoft Learn:\n\n| Namespace prefix | Documentation base URL |\n|-----------------|----------------------|\n| `Windows.*` | `https://learn.microsoft.com/uwp/api/{fully.qualified.typename}` |\n| `Microsoft.*` (WinAppSDK) | `https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/{fully.qualified.typename}` |\n\nFor example, `Microsoft.UI.Xaml.Controls.NavigationView` maps to:\n`https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview`\n\n**5. Use the API knowledge to answer or write code**\n\n---\n\n### Lookup — \"I know the API, show me the details\"\n\nYou already know (or suspect) the type or namespace name. Go direct:\n\n```powershell\n# Get all members of a known type\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action members -TypeName \"Microsoft.UI.Xaml.Controls.NavigationView\"\n\n# Get enum values\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action enums -TypeName \"Microsoft.UI.Xaml.Visibility\"\n\n# List all types in a namespace\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action types -Namespace \"Microsoft.UI.Xaml.Controls\"\n\n# Browse namespaces\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action namespaces -Filter \"Microsoft.UI\"\n```\n\nIf you need full detail beyond what `-Action members` shows, use `-Action search` to get the JSON file path, then read the JSON file directly.\n\n---\n\n### Other Commands\n\n```powershell\n# List cached projects\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action projects\n\n# List packages for a project\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action packages\n\n# Show stats\n.\\.github\\skills\\winmd-api-search\\scripts\\Invoke-WinMdQuery.ps1 -Action stats\n```\n\n> If only one project is cached, `-Project` is auto-selected.\n> If multiple projects exist, add `-Project <name>` (use `-Action projects` to see available names).\n> In scan mode, manifest names include a short hash suffix to avoid collisions; you can pass the base project name without the suffix if it's unambiguous.\n\n## Search Scoring\n\nThe search ranks type names and member names against your query:\n\n| Score | Match type | Example |\n|-------|-----------|---------|\n| 100 | Exact name | `Button` → `Button` |\n| 80 | Starts with | `Navigation` → `NavigationView` |\n| 60 | Contains | `Dialog` → `ContentDialog` |\n| 50 | PascalCase initials | `ASB` → `AutoSuggestBox` |\n| 40 | Multi-keyword AND | `navigation item` → `NavigationViewItem` |\n| 20 | Fuzzy character match | `NavVw` → `NavigationView` |\n\nResults are grouped by namespace. Higher-scored namespaces appear first.\n\n## Troubleshooting\n\n| Issue | Fix |\n|-------|-----|\n| \"Cache not found\" | Run `Update-WinMdCache.ps1` |\n| \"Multiple projects cached\" | Add `-Project <name>` |\n| \"Namespace not found\" | Use `-Action namespaces` to list available ones |\n| \"Type not found\" | Use fully qualified name (e.g., `Microsoft.UI.Xaml.Controls.Button`) |\n| Stale after NuGet update | Re-run `Update-WinMdCache.ps1` |\n| Cache in git history | Add `Generated Files/` to `.gitignore` |\n\n## References\n\n- [Windows Platform SDK API reference](https://learn.microsoft.com/uwp/api/) — documentation for `Windows.*` namespaces\n- [Windows App SDK API reference](https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/) — documentation for `Microsoft.*` WinAppSDK namespaces","tags":["winmd","api","search","awesome","copilot","github","agent-skills","agents","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"capabilities":["skill","source-github","skill-winmd-api-search","topic-agent-skills","topic-agents","topic-awesome","topic-custom-agents","topic-github-copilot","topic-hacktoberfest","topic-prompt-engineering"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/winmd-api-search","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add github/awesome-copilot","source_repo":"https://github.com/github/awesome-copilot","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 30784 github stars · SKILL.md body (8,318 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:52:34.205Z","embedding":null,"createdAt":"2026-04-18T20:26:50.107Z","updatedAt":"2026-04-22T06:52:34.205Z","lastSeenAt":"2026-04-22T06:52:34.205Z","tsv":"'/download)':236 '/uwp/api':627 '/uwp/api/':760 '/uwp/api/)':1138 '/windows/windows-app-sdk/api/winrt':634 '/windows/windows-app-sdk/api/winrt/':766 '/windows/windows-app-sdk/api/winrt/)':1150 '/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview':775 '/winrt':121 '0':449 '1':479,610 '100':1031 '2':563,639 '20':1058 '3':653,675 '4':723 '40':1050 '5':776 '50':1045 '60':600,1041 '8.0':222 '80':1036 'access':21 'action':578,664,667,826,844,865,882,893,897,928,946,961,981,1095 'add':978,1089,1125 'addit':105,315 'ai':185 'ai/ml':25 'alreadi':796 'alway':82,97,353,361 'answer':782 'api':3,10,32,46,56,81,164,280,293,430,448,571,618,630,638,683,779,790,819,837,858,875,921,939,954,1134,1146 'app':1144 'appear':1073 'applicationdata':545 'appxpackag':379 'asb':1048 'ask':169 'auto':972 'auto-select':971 'autosuggestbox':1049 'avail':83,98,239,349,985,1099 'avoid':998 'back':605,661 'base':755,1004 'baselin':92,309,364 'beyond':891 'brows':869 'build':13,127,138,155,227,305,395 'bundl':89,362 'button':1034,1035 'c':120,122 'cach':69,95,229,240,256,261,330,338,366,403,452,456,469,472,731,915,968,1078,1088,1121 'cache-setup-required-before-first-us':471 'camera':19,181,508 'capabl':18,59,167,437 'captur':509 'charact':1060 'choos':680 'class':118,208,396 'clone':133 'code':202,785 'collis':999 'come':660 'command':250,912 'contain':111,732,1042 'contentdialog':535,1044 'context':729 'control':24,207 'coverag':146,310 'daili':489 'decid':713 'dedupl':339 'describ':435,520 'descript':526,736 'desktop':9 'detail':40,64,794,890 'detect':375 'dialog':532,1043 'direct':806,910 'directori':404 'discov':29,424 'disk':514 'document':609,642,727,754,1139,1151 'dotnet':321,384 'dotnet.microsoft.com':233,235 'dotnet.microsoft.com/download)':234 'drag':536,539 'dragdrop':541 'drop':538,540 'e':44 'e.g':1108 'ensur':450 'enum':668,831,845 'enumer':195,709 'etc':28,186 'even':129 'event':43,193 'everyday':550 'exact':190,672,1032 'exampl':623,742,769,1030 'exist':453,977 'explan':741 'explor':7 'fall':604 'featur':14,157,180 'file':20,113,182,329,335,515,592,686,903,909,1127 'fileopen':518 'filter':884 'find':5,52,162,445,615 'first':244,274,467,476,1074 'fit':718 'fix':1077 'flyout':533 'found':1080,1093,1103 'fresh':132 'full':38,63,142,703,889 'fulli':1105 'fully.qualified.typename':761,767 'fuzzi':1059 'generat':96,230,259,324,334,367,411,460,1126 'get':61,141,345,378,670,808,830,900 'get-appxpackag':377 'git':1123 'github':276,289,567,815,833,854,871,917,935,950 'gitignor':408,1129 'go':805 'group':1066 'guidanc':739 'hash':995 'hasn':457 'help':50 'higher':1070 'higher-scor':1069 'histori':1124 'identifi':645 'imag':525 'includ':992 'index':346 'initi':1047 'instal':231,358,371 'interfac':210 'invok':575,823,841,862,879,925,943,958 'invoke-winmdqueri':574,822,840,861,878,924,942,957 'involv':177 'irrelev':557,603 'issu':1076 'item':1056 'json':255,591,678,696,902,908 'keyword':484,500,1053 'know':428,656,788,797 'knowledg':780 'known':813 'languag':482,490 'later':224 'latest':360 'learn':621,751 'learn.microsoft.com':626,633,759,765,774,1137,1149 'learn.microsoft.com/uwp/api':625 'learn.microsoft.com/uwp/api/':758 'learn.microsoft.com/uwp/api/)':1136 'learn.microsoft.com/windows/windows-app-sdk/api/winrt':632 'learn.microsoft.com/windows/windows-app-sdk/api/winrt/':764 'learn.microsoft.com/windows/windows-app-sdk/api/winrt/)':1148 'learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.controls.navigationview':773 'librari':119,397 'list':848,914,930,1098 'load':512 'local':68,254,356,673 'localset':546 'look':724,745 'lookup':786 'low':597 'manifest':990 'map':485,771 'match':421,587,648,1028,1061 'mediacaptur':511 'member':665,704,717,810,827,894,1022 'metadata':73 'method':41,191 'microsoft':620,636,750,762,1153 'microsoft.ui':885 'microsoft.ui.xaml.controls':868 'microsoft.ui.xaml.controls.button':1109 'microsoft.ui.xaml.controls.navigationview':770,829 'microsoft.ui.xaml.visibility':847 'mode':989 'multi':1052 'multi-keyword':1051 'multipl':495,975,1086 'must':258 'name':659,804,986,991,1006,1020,1023,1033,1107 'namespac':584,702,752,803,853,867,870,883,1068,1072,1091,1096,1142,1155 'navig':1039,1055 'navigationview':1040,1063 'navigationviewitem':1057 'navvw':1062 'need':16,86,101,160,188,307,320,443,888 'net':220 'network':27 'note':401 'notif':22,183 'nuget':102,316,381,1112 'offici':726 'one':965,1100 'onlin':608 'open':516 'order':504 'output':116,128,391 'packag':103,106,317,342,382,931,947 'packages.config':328,388 'page':643 'paramet':706 'pascalcas':1046 'pass':1002 'path':419,593,689,904 'per':341 'per-packag':340 'photo':510 'pick':417 'picker':517 'pictur':507 'platform':17,76,143,179,311,351,1132 'popup':531,534 'powershel':266,566,807,913 'prefix':753 'prerequisit':219 'produc':124,399 'program':492 'project':109,115,268,288,302,319,380,390,394,916,929,934,966,969,976,979,982,1005,1087,1090 'project-output':114,389 'project.assets.json':325 'projectdir':300 'properti':42,192 'provid':165 'ps1':286,299,466,577,825,843,864,881,927,945,960,1085,1120 'qualifi':1106 'queri':247,265,580,1026 'rank':583,1018 're':204,1115 're-run':1114 'read':251,354,640,676,684,711,906 'recognit':528 'recommend':272 'refer':1130,1135,1147 'remark':744 'repo':271 'requir':225,242,474,652,722 'restor':85,100,108,136,303,322,385 'result':553,595,694,1064 'retriev':37 'return':582,707 'right':31,54,447,617,682 'run':263,275,462,564,1081,1116 'runtim':369 'save':542 'say':498 'scan':988 'score':598,1015,1027,1071 'script':282,295,573,821,839,860,877,923,941,956 'sdk':77,144,221,312,352,357,1133,1145 'search':4,47,66,249,281,294,483,499,565,572,579,607,613,820,838,859,876,898,922,940,955,1014,1017 'see':468,984 'select':973 'sensor':26,184 'set':543,544 'setup':241,470,473 'short':994 'show':529,791,895,948 'signatur':674,705,734 'simpl':549 'singl':287 'site':624,631 'situat':423 'skill':49,151,277,290,568,816,834,855,872,918,936,951 'skill-winmd-api-search' 'sourc':347,413 'source-github' 'stale':1110 'start':547,1037 'stat':949,962 'still':140 'storagefil':519 'store':332 'suffix':996,1009 'suspect':799 'system':217,374 'take':505 'task':35,218 'technic':561 'term':493 'top':586,693 'topic-agent-skills' 'topic-agents' 'topic-awesome' 'topic-custom-agents' 'topic-github-copilot' 'topic-hacktoberfest' 'topic-prompt-engineering' 'translat':480 'tri':494,502,558 'troubleshoot':1075 'type':39,199,588,647,658,699,708,715,748,801,814,850,866,1019,1029,1101 'typenam':828,846 'ui':23,215 'unambigu':1013 'unsur':205 'updat':284,297,464,1083,1113,1118 'update-winmdcach':283,296,463,1082,1117 'url':756 'usag':738 'use':11,149,212,245,416,432,477,611,663,777,896,980,1094,1104 'user':152,168,434,481,487,497,650,720 'valu':196,710,832 'variat':496,562 'version':343 'via':376 'vision':527 'want':153 'weak':555 'web':612 'winappsdk':87,145,313,359,368,637,763,1154 'window':8,55,75,79,350,629,757,1131,1141,1143 'winmd':2,45,72,112,117,125,279,292,337,392,400,570,818,836,857,874,920,938,953 'winmd-api-search':1,278,291,569,817,835,856,873,919,937,952 'winmd-cach':336 'winmdcach':285,298,465,1084,1119 'winmdqueri':576,824,842,863,880,926,944,959 'winrt':80 'winui':88 'without':1007 'word':441,551 'write':201,784 'x':174,176 'yet':461","prices":[{"id":"7957b0d1-4ed3-417c-b2b4-c8962e842346","listingId":"b7ee46ad-2e3f-4aae-ac19-e75cf1f1de09","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:26:50.107Z"}],"sources":[{"listingId":"b7ee46ad-2e3f-4aae-ac19-e75cf1f1de09","source":"github","sourceId":"github/awesome-copilot/winmd-api-search","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/winmd-api-search","isPrimary":false,"firstSeenAt":"2026-04-18T21:51:40.545Z","lastSeenAt":"2026-04-22T06:52:34.205Z"},{"listingId":"b7ee46ad-2e3f-4aae-ac19-e75cf1f1de09","source":"skills_sh","sourceId":"github/awesome-copilot/winmd-api-search","sourceUrl":"https://skills.sh/github/awesome-copilot/winmd-api-search","isPrimary":true,"firstSeenAt":"2026-04-18T20:26:50.107Z","lastSeenAt":"2026-04-22T06:40:17.826Z"}],"details":{"listingId":"b7ee46ad-2e3f-4aae-ac19-e75cf1f1de09","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"winmd-api-search","github":{"repo":"github/awesome-copilot","stars":30784,"topics":["agent-skills","agents","ai","awesome","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"license":"mit","html_url":"https://github.com/github/awesome-copilot","pushed_at":"2026-04-21T22:20:21Z","description":"Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.","skill_md_sha":"56110a95070d71719656898ecc4db872b0e6db46","skill_md_path":"skills/winmd-api-search/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/github/awesome-copilot/tree/main/skills/winmd-api-search"},"layout":"multi","source":"github","category":"awesome-copilot","frontmatter":{"name":"winmd-api-search","license":"Complete terms in LICENSE.txt","description":"Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI/ML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, enumeration values)."},"skills_sh_url":"https://skills.sh/github/awesome-copilot/winmd-api-search"},"updatedAt":"2026-04-22T06:52:34.205Z"}}