{"id":"44e0472f-2cbe-4121-b2dc-22085a0b8595","shortId":"QQuW2d","kind":"skill","title":"st-eval","tagline":"Smalltalk code evaluator for Pharo via MCP. Use when executing Smalltalk expressions, verifying object state or intermediate values, debugging code incrementally, checking Pharo connection, or running quick experiments.","description":"# Execute Smalltalk Code\n\nEvaluate arbitrary Smalltalk expressions in the running Pharo image via `mcp__smalltalk-interop__eval`.\n\n## Essential Rules\n\n**Always use `printString`** — MCP returns serialized output. Raw objects cause errors or unreadable results:\n\n```smalltalk\n✅ MyClass new doSomething printString\n✅ collection printString\n❌ MyClass new doSomething\n```\n\n**Wrap risky code in `on:do:`** — Uncaught errors in eval crash the MCP call with no useful message:\n\n```smalltalk\n| result |\nresult := Array new: 2.\n[ result at: 1 put: (riskyOperation) printString ]\n  on: Error do: [:ex | result at: 2 put: ex description].\n^ result\n```\n\n**Use `fork` for blocking operations** — Code that opens a dialog or blocks the image will cause the MCP call to hang indefinitely. Detach it:\n\n```smalltalk\n[ <blocking expression> ] fork.\n^ 'started'\n```\n\n## Common Patterns\n\n### Connection check\n```smalltalk\nSmalltalk version\n```\n\n### Inspect intermediate values\n```smalltalk\n| step1 step2 |\nstep1 := objA computeStep1.\nstep2 := step1 processStep2.\n^ { 'step1' -> step1 printString. 'step2' -> step2 printString } asDictionary printString\n```\n\n### Inspect object state\n```smalltalk\n{\n  'class' -> obj class name.\n  'value' -> obj printString.\n  'size'  -> obj size printString\n} asDictionary printString\n```\n\n### Safe collection access\n```smalltalk\ncollection ifEmpty: ['empty'] ifNotEmpty: [:col | col first printString]\n```\n\n### Error-capturing eval\n```smalltalk\n| result |\nresult := Array new: 2.\n[\n  | obj |\n  obj := MyClass new name: 'Test'.\n  result at: 1 put: obj process printString.\n] on: Error do: [:ex |\n  result at: 2 put: ex description\n].\n^ result\n```\n\n## Troubleshooting\n\n| Symptom | Cause | Fix |\n|---------|-------|-----|\n| MCP call hangs / no response | Blocking operation (dialog, modal, infinite loop) | Wrap in `fork` |\n| `Error: cannot serialize` | Returning raw object | Add `printString` |\n| Debugger window opened in Pharo | Uncaught error triggered Pharo debugger | Close debugger in Pharo, then re-eval with `on:do:` |\n| `MessageNotUnderstood` | Method doesn't exist or typo | Check with `mcp__smalltalk-interop__search_implementors` |\n\n## Related Skills\n\n- `smalltalk-dev:smalltalk-debugger` — Systematic debugging workflow using eval\n- `smalltalk-dev:st-init` — Verify Pharo connection if eval fails unexpectedly","tags":["eval","smalltalk","dev","plugin","mumez","agent-skills","agents","claude-code","marketplace","mcp","pharo-smalltalk","skills"],"capabilities":["skill","source-mumez","skill-st-eval","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/st-eval","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.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 13 github stars · SKILL.md body (2,335 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-05-18T19:07:00.258Z","embedding":null,"createdAt":"2026-05-09T01:04:41.751Z","updatedAt":"2026-05-18T19:07:00.258Z","lastSeenAt":"2026-05-18T19:07:00.258Z","tsv":"'1':102,218 '2':99,112,209,229 'access':190 'add':258 'alway':52 'arbitrari':36 'array':97,207 'asdictionari':169,186 'block':120,128,243 'call':89,135,239 'cannot':253 'captur':202 'caus':61,132,236 'check':25,147,288 'class':175,177 'close':270 'code':5,23,34,78,122 'col':196,197 'collect':71,189,192 'common':144 'computestep1':159 'connect':27,146,317 'crash':86 'debug':22,305 'debugg':260,269,271,303 'descript':115,232 'detach':139 'dev':300,311 'dialog':126,245 'doesn':283 'dosometh':69,75 'empti':194 'error':62,83,107,201,224,252,266 'error-captur':200 'essenti':50 'eval':3,49,85,203,277,308,319 'evalu':6,35 'ex':109,114,226,231 'execut':13,32 'exist':285 'experi':31 'express':15,38 'fail':320 'first':198 'fix':237 'fork':118,142,251 'hang':137,240 'ifempti':193 'ifnotempti':195 'imag':43,130 'implementor':295 'increment':24 'indefinit':138 'infinit':247 'init':314 'inspect':151,171 'intermedi':20,152 'interop':48,293 'loop':248 'mcp':10,45,55,88,134,238,290 'messag':93 'messagenotunderstood':281 'method':282 'modal':246 'myclass':67,73,212 'name':178,214 'new':68,74,98,208,213 'obj':176,180,183,210,211,220 'obja':158 'object':17,60,172,257 'open':124,262 'oper':121,244 'output':58 'pattern':145 'pharo':8,26,42,264,268,273,316 'printstr':54,70,72,105,165,168,170,181,185,187,199,222,259 'process':221 'processstep2':162 'put':103,113,219,230 'quick':30 'raw':59,256 're':276 're-ev':275 'relat':296 'respons':242 'result':65,95,96,100,110,116,205,206,216,227,233 'return':56,255 'riski':77 'riskyoper':104 'rule':51 'run':29,41 'safe':188 'search':294 'serial':57,254 'size':182,184 'skill':297 'skill-st-eval' 'smalltalk':4,14,33,37,47,66,94,141,148,149,154,174,191,204,292,299,302,310 'smalltalk-debugg':301 'smalltalk-dev':298,309 'smalltalk-interop':46,291 'source-mumez' 'st':2,313 'st-eval':1 'st-init':312 'start':143 'state':18,173 'step1':155,157,161,163,164 'step2':156,160,166,167 'symptom':235 'systemat':304 'test':215 'topic-agent-skills' 'topic-agents' 'topic-claude-code' 'topic-marketplace' 'topic-mcp' 'topic-pharo-smalltalk' 'topic-plugin' 'topic-skills' 'topic-smalltalk' 'trigger':267 'troubleshoot':234 'typo':287 'uncaught':82,265 'unexpect':321 'unread':64 'use':11,53,92,117,307 'valu':21,153,179 'verifi':16,315 'version':150 'via':9,44 'window':261 'workflow':306 'wrap':76,249","prices":[{"id":"df9efa0e-215f-4db3-8ea4-2ad274ed1504","listingId":"44e0472f-2cbe-4121-b2dc-22085a0b8595","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-05-09T01:04:41.751Z"}],"sources":[{"listingId":"44e0472f-2cbe-4121-b2dc-22085a0b8595","source":"github","sourceId":"mumez/smalltalk-dev-plugin/st-eval","sourceUrl":"https://github.com/mumez/smalltalk-dev-plugin/tree/develop/skills/st-eval","isPrimary":false,"firstSeenAt":"2026-05-09T01:04:41.751Z","lastSeenAt":"2026-05-18T19:07:00.258Z"}],"details":{"listingId":"44e0472f-2cbe-4121-b2dc-22085a0b8595","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"mumez","slug":"st-eval","github":{"repo":"mumez/smalltalk-dev-plugin","stars":13,"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-05-12T05:53:28Z","description":"Claude Code plugin for AI-driven Smalltalk (Pharo) development","skill_md_sha":"d7f9db19a58e1aaad0d296ab8631c69d159dbc1f","skill_md_path":"skills/st-eval/SKILL.md","default_branch":"develop","skill_tree_url":"https://github.com/mumez/smalltalk-dev-plugin/tree/develop/skills/st-eval"},"layout":"multi","source":"github","category":"smalltalk-dev-plugin","frontmatter":{"name":"st-eval","description":"Smalltalk code evaluator for Pharo via MCP. Use when executing Smalltalk expressions, verifying object state or intermediate values, debugging code incrementally, checking Pharo connection, or running quick experiments."},"skills_sh_url":"https://skills.sh/mumez/smalltalk-dev-plugin/st-eval"},"updatedAt":"2026-05-18T19:07:00.258Z"}}