st-eval
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.
What it does
Execute Smalltalk Code
Evaluate arbitrary Smalltalk expressions in the running Pharo image via mcp__smalltalk-interop__eval.
Essential Rules
Always use printString — MCP returns serialized output. Raw objects cause errors or unreadable results:
✅ MyClass new doSomething printString
✅ collection printString
❌ MyClass new doSomething
Wrap risky code in on:do: — Uncaught errors in eval crash the MCP call with no useful message:
| result |
result := Array new: 2.
[ result at: 1 put: (riskyOperation) printString ]
on: Error do: [:ex | result at: 2 put: ex description].
^ result
Use fork for blocking operations — Code that opens a dialog or blocks the image will cause the MCP call to hang indefinitely. Detach it:
[ <blocking expression> ] fork.
^ 'started'
Common Patterns
Connection check
Smalltalk version
Inspect intermediate values
| step1 step2 |
step1 := objA computeStep1.
step2 := step1 processStep2.
^ { 'step1' -> step1 printString. 'step2' -> step2 printString } asDictionary printString
Inspect object state
{
'class' -> obj class name.
'value' -> obj printString.
'size' -> obj size printString
} asDictionary printString
Safe collection access
collection ifEmpty: ['empty'] ifNotEmpty: [:col | col first printString]
Error-capturing eval
| result |
result := Array new: 2.
[
| obj |
obj := MyClass new name: 'Test'.
result at: 1 put: obj process printString.
] on: Error do: [:ex |
result at: 2 put: ex description
].
^ result
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| MCP call hangs / no response | Blocking operation (dialog, modal, infinite loop) | Wrap in fork |
Error: cannot serialize | Returning raw object | Add printString |
| Debugger window opened in Pharo | Uncaught error triggered Pharo debugger | Close debugger in Pharo, then re-eval with on:do: |
MessageNotUnderstood | Method doesn't exist or typo | Check with mcp__smalltalk-interop__search_implementors |
Related Skills
smalltalk-dev:smalltalk-debugger— Systematic debugging workflow using evalsmalltalk-dev:st-init— Verify Pharo connection if eval fails unexpectedly
Capabilities
Install
Quality
deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 13 github stars · SKILL.md body (2,335 chars)