---
name: ssp-generate
description: Render one markdown SSP per Class baseline (plus a cross-baseline gaps report) from current Halo state — read-only, never writes
---

# SSP Generate

Read-only Path B for the SSP system: walk the SSP asset spine (Site → Control Implementation → Implemented Requirements → Implementation Statements → Set Parameters), iterating the Class baselines on `Site.CFBaselines`, and render one markdown SSP per baseline plus `gaps.md`. Safe to run anytime — never modifies Halo.

## Usage

```
/grcitsm-analyst:ssp-generate --site-id N [--baseline "X"] [--output-dir DIR]
/grcitsm-analyst:ssp-generate --client-name "X"
```

- `--site-id N` (or `--client-name "X"`) — required.
- `--baseline "X"` — optional; restrict to a single Class baseline (default: one SSP per baseline entry in `Site.CFBaselines`).
- `--output-dir DIR` — optional; default `outputs/ssp-{site-id}-{date}/`.

## Agents

| Agent | Purpose | When Invoked |
|-------|---------|--------------|
| `ssp-author` | Read-only renderer: walks the spine, emits the per-baseline SSP markdown + gaps report | Single RENDER phase |

## Process

Load the **`ssp-generate` skill** and follow it. In brief:

1. Resolve the target Site (from `--site-id` / `--client-name`; ask if ambiguous — do not guess).
2. Dispatch `ssp-author` with the resolved site + flags. The agent walks the spine read-only, renders OSCAL set-parameter values from the linked SP assets (never from IS prose), and writes the output files.
3. Surface the output paths and the gaps.md headline to the user.

## Error Handling

- No Halo MCP connection → stop and point at `/grcitsm-analyst:setup`.
- Site has no `CFBaselines` entries → report it as a spine gap (that IS the finding), don't invent a baseline.
- This command performs no writes; there is nothing to roll back.
