Comprehensive Pharo Smalltalk development workflow guide with AI-driven Tonel editing. Provides expertise in Tonel file format syntax (class definitions with name, superclass, instVars, category, method categories, class comment placement), package structure (package.st placement, directory organization, BaselineOf dependencies), development workflow (Edit → Import → Test cycle with absolute paths, re-import timing, test execution), and Pharo best practices (CRC format documentation, method categorization conventions). Use when working with Pharo Smalltalk projects, creating or editing Tonel .st files, organizing packages and dependencies, resolving import order issues, writing class comments, implementing standard Pharo development patterns, or troubleshooting Tonel syntax.
Implements the complete Pharo Smalltalk development workflow using Tonel file format. Claude will automatically suggest import and test commands after editing `.st` files, enforcing the Edit → Lint → Import → Test cycle with absolute paths and proper dependency ordering.
/plugin marketplace add mumez/smalltalk-dev-plugin/plugin install smalltalk-dev@smalltalk-dev-marketplaceThis skill inherits all available tools. When active, it can use any tool Claude has access to.
examples/development-sessions.mdreferences/best-practices.mdreferences/style-guide.mdreferences/tonel-format.mdImplement the standard workflow for Pharo Smalltalk development using AI editors and the Tonel file format.
The fundamental workflow for Smalltalk development consists of three steps that repeat:
Edit Tonel files directly in the AI editor. The AI editor is the single source of truth for code.
Key principle: All code changes happen in .st files, not in the Pharo image.
Tonel basics:
.st filepackage.stFor detailed Tonel syntax and examples, see Tonel Format Reference.
Before importing, run lint to check code quality:
/st:lint src/MyPackage # Check Smalltalk best practices
Then import the package into the running Pharo image using absolute paths:
mcp__smalltalk-interop__import_package: 'MyPackage' path: '/home/user/project/src'
Critical rules:
After import, run tests to verify changes:
mcp__smalltalk-interop__run_class_test: 'MyClassTest'
mcp__smalltalk-interop__run_package_test: 'MyPackage-Tests'
If tests fail, return to step 1, fix the Tonel file, and repeat.
Always use absolute paths for imports:
✅ /home/user/myproject/src
❌ ./src
❌ ../myproject/src
Finding the source directory:
.project file for srcDirectory fieldsrc/, repositories/<project_root>/<srcDirectory>See Best Practices Reference for details.
Check BaselineOf<ProjectName> to determine correct import order:
baseline: spec
<baseline>
spec for: #common do: [
spec
package: 'MyPackage-Core';
package: 'MyPackage-Json' with: [
spec requires: #('MyPackage-Core')
]
]
Import order: Dependencies first → MyPackage-Core → MyPackage-Json
See Best Practices: Dependencies for complete guide.
Re-import after every change - Pharo doesn't automatically reload files.
Standard sequence:
MyPackage/MyClass.stMyPackageMyPackage-Tests/MyClassTest.stMyPackage-TestsThe AI editor is the source of truth:
.st files → Import to Pharo.st filesUse export_package only for:
See Best Practices: File Editing for rationale.
1. Create src/MyPackage/MyClass.st with class definition
2. import_package: 'MyPackage' path: '/absolute/path/src'
3. run_class_test: 'MyClassTest'
1. Read existing src/MyPackage/MyClass.st
2. Add new method to file
3. import_package: 'MyPackage' path: '/absolute/path/src'
4. run_class_test: 'MyClassTest'
1. Check BaselineOf for dependency order
2. Import packages in correct sequence
3. Import test packages last
4. Run comprehensive tests
For complete examples, see Development Session Examples.
When this skill is active, automatically suggest:
Import:
mcp__smalltalk-interop__import_package: 'PackageName' path: '/absolute/path'
Test:
mcp__smalltalk-interop__run_class_test: 'TestClassName'
mcp__smalltalk-interop__run_package_test: 'PackageName-Tests'
Debug:
mcp__smalltalk-interop__eval: 'Smalltalk code here'
Validate (optional):
mcp__smalltalk-validator__validate_tonel_smalltalk_from_file: '/path/to/file.st'
/st:import PackageName /path - Import package/st:test TestClass - Run tests/st:eval code - Execute Smalltalk snippet/st:validate file.st - Validate syntax"Package not found":
package.st exists"Syntax error":
validate_tonel_smalltalk_from_file first"Dependency not found":
/st:eval to debug incrementallySee Best Practices: Error Handling for complete guide.
This skill provides focused guidance for the core workflow. For comprehensive information:
Edit .st file
↓
Lint code (/st:lint)
↓
Import package (absolute path)
↓
Run tests
↓
Tests pass? → Done
↓
Tests fail? → Debug with /st:eval → Fix .st file → Re-import
Remember: The cycle is Edit → Lint → Import → Test. Never skip lint, import, or tests.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.