Skip to content

Guide 6 of 6

Creating programs with AI

Generate a full program with AI — right inside Pulse, or with any AI assistant of your own.

A Pulse program is just JSON under the hood — a title, a description, and an ordered list of steps. That means AI can write one for you, from a topic, an outline, or even an existing slide deck or doc pasted in as text. You review and edit it like any other draft once it’s in.

There are two ways to do this:

  • Generate it in Pulse — describe what you want in a chat, right in the app. Fastest, and it can ask a follow-up question if your description is thin. Available on the Team and Enterprise plans.
  • Do it yourself with any AI tool — download our JSON schema, hand it to ChatGPT, Claude, Cursor, or whatever you already use, and import the result. Works on every plan, including Free, and lets you pick exactly which model writes it.

Generate it in Pulse

From Programs, click ✨ Generate with AI. Describe the course you want — topic, audience, roughly how long it should run — and optionally attach reference material (PDF or plain text, up to 5 files). If that’s enough to go on, it builds the program straight away; if something important is missing, it asks a quick follow-up question first instead of guessing. Reply, and it finishes the program and drops you straight into the editor with a draft to review, exactly like an import.

Generations are capped per month depending on your plan (check Settings → Billing). On Enterprise, you can add your own OpenAI API key in Settings → AI for unmetered use, billed directly to your own OpenAI account instead of Pulse’s shared budget — and that key is used for every other AI feature too (session coaching/reports, brand suggestions), not just this one.

If you’re on Free, or you’d rather use a specific AI tool or model of your own choosing, use the manual route below instead.

Do it yourself with any AI tool

1. Download the schema

Download the program JSON schema and attach or paste it alongside your prompt — it tells the AI exactly which fields exist, which step types are valid, and what each step type’s config needs. Models follow it far more reliably than a plain-English description alone.

If you’d rather hand the AI a real example instead of (or alongside) the schema, export any program you can already see while logged in by visiting /api/programs/<program-id>/export — you’ll find the id in that program’s URL in the program library.

2. Write the prompt

A good prompt gives the AI: the schema, your topic, the audience, roughly how many steps, and a reminder to respond with only the JSON file — no markdown fences, no commentary before or after it.

Generate a new program from a topic:

Attached is the JSON schema Pulse uses for training programs. Write a program for a 20-minute session titled "Giving feedback that lands," aimed at first-time engineering managers. Include 6-9 steps: a couple of INFO steps for context, at least one SCENARIO with a clearly best answer, one DISCUSSION prompt, and REVEAL steps after each POLL/SCENARIO/DISCUSSION so the group sees the results. Respond with only the JSON file, matching the schema exactly — no markdown fences, no explanation.

Turn existing material into a program:

Attached is the JSON schema Pulse uses for training programs, plus my rough notes/slides below. Restructure this content into a Pulse program: split it into logical INFO steps, and turn any "check your understanding" moments into SCENARIO or POLL steps with a REVEAL step right after each one. Keep my original wording where it already works. Respond with only the JSON file matching the schema — no markdown fences, no explanation.
---
[paste your notes, transcript, or slide text here]

Add a knowledge check to a topic you already understand well:

Attached is the JSON schema Pulse uses for training programs. I want to test my team's understanding of [topic]. Write 4-5 SCENARIO steps, each with 3-4 plausible options and one clearly best answer (bestOptionIndex), covering the most common mistakes people make with this topic. Add a REVEAL step after each one, set resultsVisibility to "PUBLIC" so the group sees who picked what, and open with one INFO step framing why this matters. Respond with only the JSON file matching the schema — no markdown fences, no explanation.

3. Model-specific notes

The prompts above work anywhere, but how you attach the schema and get a clean JSON file back differs a bit by tool:

  • Claude (claude.ai or Claude Code) — Attach pulse-program-schema.json directly (or, in Claude Code, just point it at the file on disk) along with your prompt. Claude reliably returns a single clean JSON block; copy that into a new file and save it with a .json extension. In Claude Code, you can ask it to write the file straight to disk for you.
  • ChatGPT / Codex — Upload the schema file in the chat, or paste its contents inline if your plan doesn’t support file uploads. In the Codex CLI/IDE extension, point it at the downloaded schema file in your workspace and ask it to write the output to a new .json file directly — faster than copy-pasting out of a chat window.
  • Cursor — Drop pulse-program-schema.json into your project (a scratch/ folder works fine), then reference it in the Composer/chat with @pulse-program-schema.json and ask it to create a new file with the generated program. Cursor writes the file directly, so there’s no copy-paste step.
  • Any other assistant — The schema is a standard JSON Schema file, so anything that can read an attachment or a long paste will work the same way: give it the schema, your prompt, and ask for JSON-only output.

Whatever tool you use, double-check the response is pure JSON — some models wrap output in ```json fences by default even when asked not to. Strip those before saving, or the import will fail on the first character.

4. Import it

In Pulse, go to Programs and click Import program, then Choose .json file… and pick the file you just generated, then Import. It lands as a draft, exactly like a program you built by hand — open it in the editor to read through, tweak wording, fix a step order, or adjust resultsVisibility before you run a live session with it.

Common issues

  • “Invalid program file” on import — almost always leftover ```json fences, or the AI adding a trailing comment after the JSON. Open the file and confirm it starts with { and ends with } and nothing else.
  • A REVEAL step shows the wrong results — check its sourceStepOrder: it’s the position (starting at 0) of the step being revealed within the file’s steps array, not a step number you see in the editor later.
  • A POLL or SCENARIO step is missing options — the schema allows config to be empty, so a model that skips resultsVisibility or options won’t get caught until you look at the step in the editor. Skim each interactive step after importing.