SigmaLifting CLI
Use this skill when working with SigmaLifting CLI bundles, especially when turning a spreadsheet, manual, or public program into a program-import bundle.
Core Boundaries
- Treat the CLI as a standalone JSON tool.
- Use the installed
sigmalifting-cliexecutable as the contract and validation engine. - Do not rely on Realm, Expo file APIs, or app services for CLI behavior.
- Stored program changes may cascade into linked process bundles in the CLI JSON store; file-only bundle edits cannot update unrelated files unless the command output is saved to the store.
- Prefer contract-valid JSON bundles over app-coupled shortcuts.
- Treat this skill folder as the modeling guide, not as the executable schema.
Agent Mutation Policy
SigmaLifting JSON is the CLI's internal storage and import/export contract. It is not an agent editing surface.
Agents must not directly create or mutate program/process bundle JSON with file edits, apply_patch, ad hoc scripts, jq, editor operations, or manual rewrites of files in the CLI store. Reading JSON for diagnosis is allowed; writing JSON directly is not.
All bundle creation and mutation must go through CLI commands:
- create initial bundles with
template,program create,process create-from-program, orxlsx import - change programs with
program add-block,program update-block,program add-day,program update-schedule,program add-exercise,program update-exercise, custom-lift commands, and the exercise-progression intent commands such asprogram set-anchor,program add-set-group,program set-week-value, andprogram toggle-backoff - change processes with
process update-*commands and narrow intent commands such asprocess set-one-rm - write command results with
--outor let the local store persist command output - import externally supplied JSON only through
validate; usenormalizeonly when the user explicitly wants CLI cleanup/repair
validate is a strict import/acceptance gate for existing JSON. If it fails with repair warnings, use normalize to produce the cleaned bundle before inspecting or importing it.
If the CLI does not expose a command for a needed mutation, stop and report the CLI command gap or add the command first. Do not bypass the CLI by patching raw JSON.
CLI Discovery
When the installed CLI and this skill are available, inspect the tool before modeling:
- run
sigmalifting-cli doctor --compact - read this
SKILL.mdand any task-relevant files inreferences/ - run
sigmalifting-cli help --compact - run
sigmalifting-cli schema list --compact - run
sigmalifting-cli template program-import --compactortemplate process-import --compact
Program and process bundle results persist as local JSON by default. Use sigmalifting-cli store path to locate the store, and use SIGMALIFTING_HOME or --store-root when you need an explicit test or project-local store.
Schema Contract
Do not treat this skill file as the schema.
This skill explains modeling judgment: block boundaries, weekly structure, set-group semantics, and common translation mistakes. The installed CLI is the schema source of truth.
Schema mentions in this skill are routing instructions, not schema documentation. They tell the agent which CLI commands to call before building CLI payloads or accepting imported JSON.
Before building CLI command payloads or importing existing JSON, get the executable contract from the CLI:
sigmalifting-cli schema list --compactsigmalifting-cli schema show <kind> --compactsigmalifting-cli template <kind> --compactsigmalifting-cli validate <kind> --file <path|"-"> --compact
Use the template to learn field shape, defaults, sentinel values, and nesting. Use schema show to check constraints. Use this skill to decide what the program should mean structurally.
If the skill and CLI appear to disagree, trust the CLI schema and report the skill as stale.
Do not invent fields that are not present in the CLI schema or template.
Authoritative Sample Workflow
If the user provides an exported SigmaLifting JSON file, treat that export as the first source of truth.
Before generating or translating anything similar:
- identify the bundle kind the file actually matches
- run the standalone CLI against the file exactly as provided
- validate it first
- if validation reports repair warnings, normalize it and validate the normalized output
- only then extract modeling rules from it
- make any changes through CLI mutation commands, never by patching the JSON file
If an app-exported file cannot be consumed by the standalone CLI, treat that as a CLI problem to investigate before declaring the modeling wrong.
Do not skip this step and jump straight to reconstructing the program from memory, public spreadsheets, or a simplified interpretation.
Block Semantics
Do not define a block by contiguous time alone.
A block is a maximal consecutive run of weeks that share the same structural skeleton.
The structural skeleton means:
- same training day layout
- same exercise identities on each day
- same set-group count and ordering per exercise
- same variable-parameter style per set group
- same dependency shape such as backoff or fatigue-drop relationships
What may vary inside a block:
- weekly set counts
- weekly reps
- weekly RPE values
- weekly percentages
- weekly notes
What should usually force a new block:
- a day appears, disappears, or changes role materially
- an exercise is added, removed, or replaced
- a set group appears or disappears
- a set group changes semantic role rather than just numeric values
- dependency structure changes
- the week only fits by abusing placeholder zero-sets across many exercises
- the phase intent clearly changes even if the schema could be compressed
Do not collapse an entire multi-week program into one block just because weekly arrays can encode it.
That is a schema-valid compression, but it is a modeling error under SigmaLifting semantics.
Variable Parameter Semantics
Every set group has exactly one workout-recorded variable parameter: weight, reps, or rpe.
The other two training numbers are prescribed by the program:
variable_parameter: "weight"means reps and RPE are prescribed, and weight is recorded during the workout.variable_parameter: "reps"means weight and RPE are prescribed, and reps are recorded during the workout.variable_parameter: "rpe"means weight and reps are prescribed, and RPE is recorded during the workout.
Do not model a set group by prescribing all three numbers. Do not leave two numbers open unless the CLI has a command and schema support for that explicit behavior.
Backoff and fatigue-drop configs are RPE-variable tools in the app model. They are only valid on set groups with variable_parameter: "rpe". If weight is the variable parameter, do not enable backoff_config, fatigue_drop_config, or mixed-weight prescription.
Workflow
When modeling a program:
- Inspect each week for structural sameness, not just duration.
- Group only consecutive weeks that share the same skeleton.
- Create one block per structural group.
- Use weekly arrays only for parameter variation inside that block.
- Preserve special-case instructions in notes if they are not truly machine-derived.
- If unsure, prefer more blocks over fewer blocks.
Warning Signs
Stop and re-evaluate the block split if you notice:
- many
0set placeholders just to make weeks fit - weeks that feel like distinct phases but are still in one block
- day layouts drifting across weeks
- exercise schemes changing identity from week to week
References
- For detailed modeling guidance, read references/program-modeling.md.
- For Candito-specific lessons extracted from an exported app bundle, read references/candito-translation.md.
- For process execution and workout logging rules, read references/process-logging.md.