From crisp-tc
Convert, write, explain, and debug JDA Space Automation scripts — both legacy AutoPilot (.sas) scripts and modern SA Pro C# scripts. Use this skill whenever the user is working with JDA Space Automation, AutoPilot scripting, Space Planning (.psa), Floor Planning (.pfa), or SA Pro automation. This includes converting legacy _PS_/_PF_/_GN_ prefix scripts into C# SA Pro code, writing new Pro scripts from scratch, explaining what a script does, or debugging syntax errors in either format. Trigger any time the user pastes or references an AutoPilot script, asks about SA commands, mentions planogram automation, or wants C# equivalents for legacy Space Automation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/crisp-tc:convert-automationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<context>
_GN_/_PS_/_PF_ command
prefixes and {Parameter=Value} syntax, used in Space Automation 9.x and earlier.SpacePlanning.* and FloorPlanning.* object
model, the modern SA Pro scripting engine.The primary goal of this project is converting legacy AutoPilot scripts to SA Pro C#.
Read these before performing complex tasks:
references/project-structure.md — How to scaffold a new SA Pro script project: folder
layout, .csproj settings, registry-based JDA references, MSBuild targets, App.Config format,
namespace/class naming rules. Read this first when creating or scaffolding a project.references/conversion-map.md — Side-by-side command mapping: legacy → SA Pro C#.
Read this first for any conversion task.references/legacy-syntax.md — Full legacy AutoPilot syntax reference (prefixes, loops,
functions, parameters). Read when the user provides legacy scripts or asks about legacy syntax.references/pro-api.md — SA Pro C# API reference (method signatures, examples).
Read when writing or converting to SA Pro C# code.| Concept | Legacy AutoPilot | SA Pro C# |
|---|---|---|
| Module prefix | _PS_, _PF_, _GN_ | SpacePlanning., FloorPlanning. |
| Parameters | {Name=Value} | Typed method parameters |
| Outer loop (projects) | For projects ... End projects | foreach (Space.Project proj in SpacePlanning.ForProjects(...)) |
| Inner loops (pogs/pos/fix) | For planograms/positions/fixtures | proj.Planograms / pog.Positions / pog.Fixtures collections |
| Conditionals | If ... Then / End if | Standard C# if/else |
| Variables | _GN_VarName=value | string varName = value; |
| Comments | _GN_' | // |
| Error handling | On error continue/stop | try { } catch { } |
| File I/O | Open input/output file, Write to file | System.IO.StreamReader/StreamWriter |
| GoTo | Go to {ScriptLabel=label} | break, continue, or helper methods |
| GetValue | GetValue("Type","Field") | Typed property on the object instance |
| Arrays | Create array / For array rows | C# List<T>, arrays, LINQ |
Legacy:
_PS_Create file list {ListName="list"} {UseSubdirectories="False"}
_PS_ C:\Planograms\file1.psa
_PS_ C:\Planograms\file2.psa
_PS_End create file list
_PS_Use file list {ListName="list"}
_PS_For projects
_PS_Open project file {FileName=CurrentProject}
_PS_For planograms
_PS_For positions
' ... work on each position ...
_PS_End positions
_PS_End planograms
_PS_Save project file
_PS_Close project file
_PS_End projects
SA Pro C#:
foreach (Space.Project proj in SpacePlanning.ForProjects(
sourceDirectory: @"C:\Planograms",
fileExtension: "psa",
useSubDirectories: false))
{
// project is auto-opened; traverse via typed collections — do NOT use
// SpacePlanning.ForPlanograms() / ForPositions() / ForFixtures() for inner loops
foreach (Space.Planogram pog in proj.Planograms)
{
foreach (Space.Position pos in pog.Positions)
{
// pos.Capacity, pos.UPC, pos.ProductKey, etc.
}
foreach (Space.Fixture fix in pog.Fixtures)
{
// fix.Name, fix.Width, fix.Height, etc.
}
}
SpacePlanning.SaveProjectFile();
SpacePlanning.CloseProjectFile();
}
### 1. Converting Legacy → SA Pro C# 1. Read `references/project-structure.md` — scaffold the project first. 2. Read `references/conversion-map.md` for the command mappings. 3. Read `references/pro-api.md` for exact method signatures. 4. Output clean, idiomatic C# with typed variables, `foreach` loops, and try/catch. 5. Preserve comments from the original (convert `_GN_'` to `//`). 6. Flag commands with no SA Pro equivalent (see list below). 7. Explain non-obvious choices (e.g., how a `Go To` was restructured).Why collections, not
ForPlanograms()? TheForXxx()singleton methods work on the implicit active context. Usingproj.Planograms/pog.Positionsetc. is explicit, type-safe, and scoped to the object you're actually holding — it avoids subtle bugs when context shifts. The only time to useSpacePlanning.ForPositions()is when you needwhereConditionfiltering:SpacePlanning.ForPositions(whereCondition: "Capacity = 0")— collections don't support that.
references/project-structure.md to scaffold the project.SpacePlanning.* for planogram/Space Planning operations.FloorPlanning.* for floorplan/Floor Planning operations.// comments explaining each logical section.Walk through section by section — what each command does in plain English, what the overall goal is, what objects are being modified, and what outputs are produced.
End statements, wrong module prefix, malformed {Param=Value}.references/project-structure.md exactly.OutputType=Library, target .NET 4.8, resolve JDA DLLs via registry.UpdateAssemblyInfo / UpdateAppConfigFiles MSBuild targets..slnx or .sln) after creating it.Always add System.Diagnostics.Debugger.Launch(); as the first line of Run().
This lets Visual Studio's JIT debugger attach the moment SA Pro fires the script.
| Script Type | Namespace | Class Name |
|---|---|---|
| Space Planning | SpaceMenuAssembly | SpaceMenuClass |
| Floor Planning | FloorMenuAssembly | FloorMenuClass |
These are fixed — the SA Pro runtime discovers scripts by these exact names.
Flag these with a comment and do NOT convert them:
Add planogram to scorecardCreate filter / End create filterClose floorplan windowPrint Intersection reportRun Intercept macro
npx claudepluginhub gocrisp-proservices/techteam_skills --plugin crisp-tcProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.