A framework for designing, generating, and running hierarchical state machines.
Extracted from the Caishen StateForge platform and reimplemented in Python and TypeScript.
| Package | Language | Description |
|---|---|---|
smcraft/py |
Python | Runtime library + parser + SMCG code generator + CLI |
smcraft/ts |
TypeScript | Runtime library + parser + code generator |
smcraft/web |
React/Next.js | Visual state machine designer |
smcraft/mcp |
TypeScript | MCP server for LLM agent integration |
cd py && pip install -e .
smcg examples/bdbo_strategy.smdf.json -o output/ -v
cd ts && npm install && npm run build && npm test
cd web && npm install && npm run dev
# Opens at http://localhost:3000
cd mcp && npm install && npm run build
node dist/server.js # Runs on stdio
Add to your MCP client config:
{
"mcpServers": {
"smcraft": {
"command": "node",
"args": ["/b/trading/smcraft/mcp/dist/server.js"]
}
}
}
.smdf.json definition
↓
Parser (Spec 60)
↓
EnrichedModel (with lookup maps)
↓
Validator (V001-V013 rules)
↓
Code Generator (Spec 62)
↓
Python / TypeScript state machine classes
↓
Runtime Engine (Spec 61) executes them
The runtime library (Context, State, TransitionHelper, Observer) ships as a dependency — generated code imports from smcraft.
.smdf.json)See caishen/rispecs/StateMachineries/ for full specs.
.smdf.json){
"settings": {
"namespace": "MyApp",
"name": "OrderWorkflow",
"asynchronous": false
},
"events": [
{
"name": "OrderEvents",
"feeder": "OrderFeeder",
"events": [
{ "id": "OrderCreated", "parameters": [{ "name": "orderId", "type": "string" }] },
{ "id": "OrderApproved" },
{ "id": "OrderCompleted" }
]
}
],
"state": {
"name": "Root",
"states": [
{ "name": "Pending", "transitions": [{ "event": "OrderCreated", "nextState": "Active" }] },
{ "name": "Active", "transitions": [{ "event": "OrderApproved", "nextState": "Completed" }] },
{ "name": "Completed", "kind": "final" }
]
}
}