Set Up Smalltalk Project Boilerplate
Create a complete Smalltalk project structure with BaselineOf, Core package, and Tests package.
When to Use This Skill
- User asks to "create a new project", "start a Smalltalk project", or "set up project structure"
- No
src/directory or.projectfile exists in the current directory - User provides a project name and wants to begin development
Project Name Rules
- PascalCase required: Must start with uppercase, alphanumeric only
- Valid:
MyProject,RedisClient,JSONParser - Invalid:
my-project,my_project,myProject
If no name provided: Ask with AskUserQuestion: "What is your project name? (Use PascalCase like MyProject)"
Pre-flight Checks
1. Validate PascalCase:
if [[ ! "$PROJECT_NAME" =~ ^[A-Z][a-zA-Z0-9]*$ ]]; then
echo "Error: Project name must be in PascalCase (e.g., MyProject, RedisClient)"
exit 1
fi
2. Check for existing project:
if [ -d "src" ] && [ "$(find src -mindepth 1 -maxdepth 1 -type d 2>/dev/null | wc -l)" -gt 0 ]; then
echo "Error: Project already exists (src/ directory contains packages)"
exit 1
fi
Created Structure
MyProject/
├── .project # srcDirectory: 'src'
└── src/
├── .properties # format: tonel
├── BaselineOfMyProject/
│ ├── package.st
│ └── BaselineOfMyProject.class.st
├── MyProject-Core/
│ └── package.st
└── MyProject-Tests/
└── package.st
Implementation
Run the setup script with the validated project name. See Complete Setup Script for the full bash implementation.
Key files created:
.project (STON format with single quotes):
{
'srcDirectory' : 'src'
}
src/.properties (Tonel format declaration):
{
#format : #tonel
}
BaselineOf class defines package dependencies and groups:
Coregroup:ProjectName-CoreTestsgroup:ProjectName-Tests(requires Core)allgroup: Core + Testsdefaultgroup: Core only
After Setup
Show the user what was created and next steps:
✓ Smalltalk project 'ProjectName' created successfully!
Next steps:
1. Use /st-init to verify the Smalltalk image connection and start development
2. Start adding classes to ProjectName-Core
3. Write tests in ProjectName-Tests
Then suggest using the smalltalk-dev:st-init skill to start the development session.
Error Handling
| Situation | Action |
|---|---|
| Invalid project name | Show error with PascalCase example, stop |
| Project already exists | Stop immediately, suggest this is for new projects |
| File system errors | Let bash errors propagate naturally (set -e) |
Related Skills
smalltalk-dev:st-init— Start development session after project is createdsmalltalk-dev:smalltalk-developer— Development workflow (Edit → Import → Test)