{"id":"9f101b88-f10b-4aab-88e1-f31fff212552","shortId":"cJD2ws","kind":"skill","title":"smalltalk-usage-finder","tagline":"Class and method usage analyzer for Pharo Smalltalk. Provides expertise in understanding class responsibilities through class comments (get_class_comment), discovering usage patterns via references (search_references_to_class), finding example methods (exampleXXX patterns), analy","description":"# Smalltalk Usage Finder\n\nDiscover how Smalltalk classes, methods, and packages are used in practice through systematic analysis of documentation, examples, and real-world code.\n\n## Core Analysis Workflows\n\n### 1. Understanding Class Responsibilities\n\n**Goal**: Discover what a class does and its intended purpose.\n\n**Primary Tool**: `get_class_comment` - The authoritative source for class responsibility.\n\n**Workflow**:\n```\n1. Verify class name (if uncertain): search_classes_like(query)\n2. Get class comment: get_class_comment(class_name)\n3. Present responsibility clearly\n```\n\n**Example**:\n```\nsearch_classes_like(\"Point\")\n→ [\"Point\", \"PointArray\", ...]\n\nget_class_comment(\"Point\")\n→ \"I represent an x-y pair of numbers usually designating a location on the screen.\"\n```\n\n**Best practice**: Always start with the class comment - it's the authoritative documentation.\n\n### 2. Finding Class Usage Patterns\n\n**Goal**: Learn how to use a class by examining real examples.\n\n**Primary Tools**: `search_references_to_class`, `get_method_source`, `list_methods`\n\n**Workflow**:\n```\n1. Check for example methods:\n   - list_methods(package) or search_methods_like(\"example\")\n   - Filter for \"exampleXXX\" methods (class-side)\n   - get_method_source for each example\n\n2. Find real-world usage:\n   - search_references_to_class(class_name)\n   - Get source for top 5-10 references\n   - Identify common patterns\n\n3. Synthesize usage guide\n```\n\n**Example methods convention**:\n- Class-side methods in `examples` category\n- Named: `exampleSimple`, `example1`, `exampleWithData`\n- Best source for learning how to use a class\n\n### 3. Finding Method Usage\n\n**Goal**: Understand how a specific method is used in context.\n\n**Primary Tools**: `search_references`, `get_method_source`\n\n**Challenge**: Polymorphism - same method name in multiple classes.\n\n**Workflow**:\n```\n1. Verify method exists: search_methods_like(method_name)\n2. Find all references: search_references(method_name)\n3. Filter by context:\n   - Get source for each reference\n   - Look for variable naming clues (e.g., \"aPoint\" → Point)\n   - Check type comments\n4. Present usage with examples\n```\n\n**Filtering by context**:\n- Variable names: `aPoint` → Point, `dict` → Dictionary\n- Type hints: `\"aPoint <Point>\"`\n- Method category: `arithmetic`, `accessing`, etc.\n\n### 4. Generating Package Overviews\n\n**Goal**: Understand package structure and purpose.\n\n**Primary Tools**: `list_classes`, `get_class_comment`\n\n**Workflow**:\n```\n1. List all classes: list_classes(package_name)\n2. Get comments for key classes (top 10-20)\n3. Identify class hierarchy and relationships\n4. Find entry points (constructors, main classes)\n5. Generate overview\n```\n\n**Focus on**:\n- Base classes and their implementations\n- Main entry points\n- Common usage patterns\n\n### 5. Handling Ambiguous Names\n\n**Goal**: Resolve unclear or partial class/method names.\n\n**Primary Tools**: `search_classes_like`, `search_methods_like`\n\n**Workflow**:\n```\n1. Fuzzy search: search_classes_like(partial_name)\n2. If multiple matches: present options to user\n3. Once identified: proceed with normal workflow\n```\n\n**Example**:\n```\nsearch_classes_like(\"Dict\")\n→ [\"Dictionary\", \"IdentityDictionary\", \"SmallDictionary\", ...]\n\nPresent options:\n\"Found 3 classes:\n1. Dictionary - General key-value storage\n2. IdentityDictionary - Identity comparison\n3. SmallDictionary - Optimized for <10 elements\nWhich one?\"\n```\n\n## Quick Reference\n\n### MCP Tools\n\n**Class inspection**:\n```\nget_class_comment('ClassName')\nget_class_source('ClassName')\n```\n\n**Method inspection**:\n```\nget_method_source(class: 'ClassName' method: 'methodName' is_class_method: false)\n```\n\n**Search tools**:\n```\nsearch_references_to_class('ClassName')\nsearch_references('methodName')\nsearch_classes_like('partial')\nsearch_methods_like('partial')\n```\n\n**Package tools**:\n```\nlist_classes('PackageName')\nlist_methods('PackageName')\n```\n\n## Best Practices\n\n### 1. Verify Names First\nUse fuzzy search when uncertain:\n\n✅ **Good**: `search_classes_like('Dict')` → confirm → proceed\n❌ **Bad**: Assume `Dict` is valid class name\n\n### 2. Limit Search Results\nFocus on top 5-10 most relevant:\n\n✅ **Good**: Analyze top 5 references\n❌ **Bad**: Try to analyze all 500 references\n\n### 3. Prioritize Examples\nCheck for example methods first:\n\n✅ **Good**: Search examples → if none, search references\n❌ **Bad**: Immediately search all references\n\n### 4. Trust Class Comments\nThey are authoritative documentation:\n\n✅ **Good**: Start with `get_class_comment`\n❌ **Bad**: Ignore comments, only look at code\n\n### 5. Provide Context\nShow surrounding code, not just isolated lines:\n\n✅ **Good**: Show full method with context\n❌ **Bad**: Show only the single line with method call\n\n### 6. Handle Polymorphism\nUse context clues to filter:\n\n✅ **Good**: Check variable names, method category\n❌ **Bad**: Assume first match is correct\n\n### 7. Clarify Ambiguity\nAsk user instead of guessing:\n\n✅ **Good**: \"Found 3 matches. Which one?\"\n❌ **Bad**: \"Assuming you meant Stream...\"\n\n## Common Pitfalls\n\n### Pitfall 1: Assuming Exact Names\n**Problem**: User says \"Point\" but means \"PointArray\"\n**Solution**: Always verify with `search_classes_like`\n\n### Pitfall 2: Reference Overload\n**Problem**: 500 search results overwhelming\n**Solution**: Limit to top 10, filter by relevance\n\n### Pitfall 3: Polymorphic Confusion\n**Problem**: Same method in multiple classes\n**Solution**: Use variable names and context to filter\n\n### Pitfall 4: Missing Examples\n**Problem**: Only checking instance-side\n**Solution**: Check class-side for `exampleXXX` methods\n\n### Pitfall 5: No Synthesis\n**Problem**: Just showing raw search results\n**Solution**: Analyze patterns and create usage guide\n\n## Analysis Pattern Examples\n\n### Example 1: Class Usage\n```\nUser: \"How do I use Point?\"\n\n1. get_class_comment('Point')\n   → \"I represent x-y pair...\"\n\n2. search_methods_like('example')\n   → Find: \"Point class>>exampleGrid\"\n\n3. get_method_source (example)\n   → Shows: x@y syntax\n\n4. search_references_to_class('Point')\n   → Top usages in Rectangle, Morph\n\n5. Synthesize:\n   \"Point is created with @: 100@200\n    Common operations: x, y, +, -, *\n    Example: center := (100@100 + 200@200) // 2\"\n```\n\n### Example 2: Method Usage\n```\nUser: \"How to use distanceTo:?\"\n\n1. search_methods_like('distanceTo')\n   → Multiple classes\n\n2. search_references('distanceTo:')\n   → Find usage examples\n\n3. Filter by variable names:\n   - \"aPoint distanceTo:\" → Point class\n   - Context: geometric operations\n\n4. get_method_source for Point version\n\n5. Synthesize:\n   \"Point>>distanceTo: calculates distance\n    Usage: point1 distanceTo: point2\n    Returns: Float (Euclidean distance)\"\n```\n\nFor complete analysis techniques and detailed scenarios, see:\n\n- **[Usage Analysis Reference](references/usage-analysis.md)** - Comprehensive analysis techniques\n- **[Usage Scenarios](examples/usage-scenarios.md)** - Real-world analysis examples\n\n## Summary\n\n**Key workflow**: Verify → Search → Inspect → Filter → Synthesize → Present\n\n**Analysis priorities**:\n1. Start with class comments (authoritative)\n2. Look for example methods (best learning resource)\n3. Limit search results (top 5-10)\n4. Provide context (surrounding code)\n5. Synthesize findings (don't dump raw data)\n\n**Remember**: The goal is understanding HOW to use code, not explaining implementation details.","tags":["smalltalk","usage","finder","dev","plugin","mumez","agent-skills","agents","claude-code","marketplace","mcp","pharo-smalltalk"],"capabilities":["skill","source-mumez","skill-smalltalk-usage-finder","topic-agent-skills","topic-agents","topic-claude-code","topic-marketplace","topic-mcp","topic-pharo-smalltalk","topic-plugin","topic-skills","topic-smalltalk"],"categories":["smalltalk-dev-plugin"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/mumez/smalltalk-dev-plugin/smalltalk-usage-finder","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add mumez/smalltalk-dev-plugin","source_repo":"https://github.com/mumez/smalltalk-dev-plugin","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 11 github stars · SKILL.md body (7,346 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-24T07:03:22.044Z","embedding":null,"createdAt":"2026-04-23T13:04:03.590Z","updatedAt":"2026-04-24T07:03:22.044Z","lastSeenAt":"2026-04-24T07:03:22.044Z","tsv":"'-10':228,574,967 '-20':383 '1':68,94,185,290,367,433,469,543,697,789,798,866,947 '10':382,484,728 '100':844,852,853 '2':104,157,211,299,375,441,476,566,716,809,856,858,873,953 '200':845,854,855 '3':113,233,260,307,384,449,467,480,589,685,733,818,880,961 '4':327,349,390,609,751,827,892,968 '5':227,397,413,573,580,630,769,838,899,966,973 '500':587,720 '6':655 '7':675 'access':347 'alway':146,709 'ambigu':415,677 'anali':39 'analysi':56,66,785,915,922,926,934,945 'analyz':9,578,585,779 'apoint':322,337,343,885 'arithmet':346 'ask':678 'assum':560,670,690,698 'authorit':88,155,615,952 'bad':559,582,604,623,646,669,689 'base':402 'best':144,251,541,958 'calcul':903 'call':654 'categori':246,345,668 'center':851 'challeng':281 'check':186,324,592,664,756,761 'clarifi':676 'class':5,17,20,23,33,46,70,76,85,91,96,101,106,109,111,119,125,150,159,168,178,203,220,221,241,259,288,362,364,370,372,380,386,396,403,427,437,458,468,492,495,499,507,512,520,526,536,554,564,611,621,713,741,763,790,800,816,831,872,888,950 'class-sid':202,240,762 'class/method':422 'classnam':497,501,508,521 'clear':116 'clue':320,660 'code':64,629,635,972,989 'comment':21,24,86,107,110,126,151,326,365,377,496,612,622,625,801,951 'common':231,410,694,846 'comparison':479 'complet':914 'comprehens':925 'confirm':557 'confus':735 'constructor':394 'context':273,310,334,632,645,659,747,889,970 'convent':239 'core':65 'correct':674 'creat':782,842 'data':980 'design':138 'detail':918,993 'dict':339,460,556,561 'dictionari':340,461,470 'discov':25,43,73 'distanc':904,912 'distanceto':865,870,876,886,902,907 'document':58,156,616 'dump':978 'e.g':321 'element':485 'entri':392,408 'etc':348 'euclidean':911 'exact':699 'examin':170 'exampl':35,59,117,172,188,197,210,237,245,331,456,591,594,599,753,787,788,813,822,850,857,879,935,956 'example1':249 'examplegrid':817 'examples/usage-scenarios.md':930 'examplesimpl':248 'examplewithdata':250 'examplexxx':37,200,766 'exist':293 'expertis':14 'explain':991 'fals':514 'filter':198,308,332,662,729,749,881,942 'find':34,158,212,261,300,391,814,877,975 'finder':4,42 'first':546,596,671 'float':910 'focus':400,570 'found':466,684 'full':642 'fuzzi':434,548 'general':471 'generat':350,398 'geometr':890 'get':22,84,105,108,124,179,205,223,278,311,363,376,494,498,504,620,799,819,893 'goal':72,162,264,353,417,983 'good':552,577,597,617,640,663,683 'guess':682 'guid':236,784 'handl':414,656 'hierarchi':387 'hint':342 'ident':478 'identifi':230,385,451 'identitydictionari':462,477 'ignor':624 'immedi':605 'implement':406,992 'inspect':493,503,941 'instanc':758 'instance-sid':757 'instead':680 'intend':80 'isol':638 'key':379,473,937 'key-valu':472 'learn':163,254,959 'like':102,120,196,296,428,431,438,459,527,531,555,714,812,869 'limit':567,725,962 'line':639,651 'list':182,190,361,368,371,535,538 'locat':140 'look':316,627,954 'main':395,407 'match':444,672,686 'mcp':490 'mean':706 'meant':692 'method':7,36,47,180,183,189,191,195,201,206,238,243,262,269,279,284,292,295,297,305,344,430,502,505,509,513,530,539,595,643,653,667,738,767,811,820,859,868,894,957 'methodnam':510,524 'miss':752 'morph':837 'multipl':287,443,740,871 'name':97,112,222,247,285,298,306,319,336,374,416,423,440,545,565,666,700,745,884 'none':601 'normal':454 'number':136 'one':487,688 'oper':847,891 'optim':482 'option':446,465 'overload':718 'overview':352,399 'overwhelm':723 'packag':49,192,351,355,373,533 'packagenam':537,540 'pair':134,808 'partial':421,439,528,532 'pattern':27,38,161,232,412,780,786 'pharo':11 'pitfal':695,696,715,732,750,768 'point':121,122,127,323,338,393,409,704,797,802,815,832,840,887,897,901 'point1':906 'point2':908 'pointarray':123,707 'polymorph':282,657,734 'practic':53,145,542 'present':114,328,445,464,944 'primari':82,173,274,359,424 'priorit':590 'prioriti':946 'problem':701,719,736,754,772 'proceed':452,558 'provid':13,631,969 'purpos':81,358 'queri':103 'quick':488 'raw':775,979 'real':62,171,214,932 'real-world':61,213,931 'rectangl':836 'refer':29,31,176,218,229,277,302,304,315,489,518,523,581,588,603,608,717,829,875,923 'references/usage-analysis.md':924 'relationship':389 'relev':576,731 'rememb':981 'repres':129,804 'resolv':418 'resourc':960 'respons':18,71,92,115 'result':569,722,777,964 'return':909 'say':703 'scenario':919,929 'screen':143 'search':30,100,118,175,194,217,276,294,303,426,429,435,436,457,515,517,522,525,529,549,553,568,598,602,606,712,721,776,810,828,867,874,940,963 'see':920 'show':633,641,647,774,823 'side':204,242,759,764 'singl':650 'skill' 'skill-smalltalk-usage-finder' 'smalldictionari':463,481 'smalltalk':2,12,40,45 'smalltalk-usage-find':1 'solut':708,724,742,760,778 'sourc':89,181,207,224,252,280,312,500,506,821,895 'source-mumez' 'specif':268 'start':147,618,948 'storag':475 'stream':693 'structur':356 'summari':936 'surround':634,971 'syntax':826 'synthes':234,839,900,943,974 'synthesi':771 'systemat':55 'techniqu':916,927 'tool':83,174,275,360,425,491,516,534 'top':226,381,572,579,727,833,965 'topic-agent-skills' 'topic-agents' 'topic-claude-code' 'topic-marketplace' 'topic-mcp' 'topic-pharo-smalltalk' 'topic-plugin' 'topic-skills' 'topic-smalltalk' 'tri':583 'trust':610 'type':325,341 'uncertain':99,551 'unclear':419 'understand':16,69,265,354,985 'usag':3,8,26,41,160,216,235,263,329,411,783,791,834,860,878,905,921,928 'use':51,166,257,271,547,658,743,796,864,988 'user':448,679,702,792,861 'usual':137 'valid':563 'valu':474 'variabl':318,335,665,744,883 'verifi':95,291,544,710,939 'version':898 'via':28 'workflow':67,93,184,289,366,432,455,938 'world':63,215,933 'x':132,806,824,848 'x-i':131,805 'y':133,807,825,849","prices":[{"id":"ea1ac827-b6a5-4bd3-be10-da0a4b65b297","listingId":"9f101b88-f10b-4aab-88e1-f31fff212552","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"mumez","category":"smalltalk-dev-plugin","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:03.590Z"}],"sources":[{"listingId":"9f101b88-f10b-4aab-88e1-f31fff212552","source":"github","sourceId":"mumez/smalltalk-dev-plugin/smalltalk-usage-finder","sourceUrl":"https://github.com/mumez/smalltalk-dev-plugin/tree/develop/skills/smalltalk-usage-finder","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:03.590Z","lastSeenAt":"2026-04-24T07:03:22.044Z"}],"details":{"listingId":"9f101b88-f10b-4aab-88e1-f31fff212552","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"mumez","slug":"smalltalk-usage-finder","github":{"repo":"mumez/smalltalk-dev-plugin","stars":11,"topics":["agent-skills","agents","claude-code","marketplace","mcp","pharo-smalltalk","plugin","skills","smalltalk"],"license":"mit","html_url":"https://github.com/mumez/smalltalk-dev-plugin","pushed_at":"2026-04-21T15:21:41Z","description":"Claude Code plugin for AI-driven Smalltalk (Pharo) development","skill_md_sha":"207cc32aaf4687044aec3da9e2ca112492ce3770","skill_md_path":"skills/smalltalk-usage-finder/SKILL.md","default_branch":"develop","skill_tree_url":"https://github.com/mumez/smalltalk-dev-plugin/tree/develop/skills/smalltalk-usage-finder"},"layout":"multi","source":"github","category":"smalltalk-dev-plugin","frontmatter":{"name":"smalltalk-usage-finder","description":"Class and method usage analyzer for Pharo Smalltalk. Provides expertise in understanding class responsibilities through class comments (get_class_comment), discovering usage patterns via references (search_references_to_class), finding example methods (exampleXXX patterns), analyzing method usage in context (search_references with polymorphism handling), generating package overviews (list_classes with comment analysis), and resolving ambiguous names (search_classes_like, search_methods_like). Use when understanding what a class does, finding usage examples for classes or methods, discovering how to use an API, analyzing package structure and purpose, resolving unclear class or method names, or learning usage patterns from real-world code."},"skills_sh_url":"https://skills.sh/mumez/smalltalk-dev-plugin/smalltalk-usage-finder"},"updatedAt":"2026-04-24T07:03:22.044Z"}}