skills/showroom-create-demo/SKILL.md
This skill should be used when the user asks to "create a demo module", "write a Know/Show demo", "build a presenter demo", "create a Showroom demo", "write a facilitator guide", "build a demo script", or "create a presenter-led demo for RHDP".
npx skillsauth add rhpds/rhdp-skills-marketplace showroom:create-demoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guide you through creating a Red Hat Showroom demo module using the Know/Show structure for presenter-led demonstrations.
Have these ready before running this skill:
Required:
content/modules/ROOT/pages/)Helpful to have:
Access needed:
Use this skill to create presenter-led demo content, transform technical documentation into business-focused demos, or add modules to existing demos.
IMPORTANT: This skill follows shared contracts defined in @showroom/docs/SKILL-COMMON-RULES.md:
See SKILL-COMMON-RULES.md for complete details.
Demos use a different format than workshops:
This separates what presenters need to understand (business value) from what they need to do (technical demonstration).
This skill supports optional command-line arguments for faster workflows.
Usage Examples:
/create-demo # Interactive mode (asks all questions)
/create-demo <directory> # Specify target directory
/create-demo <directory> --new # Create new demo in directory
/create-demo <directory> --continue <module> # Continue from specific module
Parameters:
<directory> - Target directory for demo files
/create-demo content/modules/ROOT/pages/content/modules/ROOT/pages/--new - Flag to create new demo (generates index + overview + details + module-01)--continue <module-path> - Continue from specified previous demo module
/create-demo content/modules/ROOT/pages/ --continue content/modules/ROOT/pages/03-module-01-intro.adocHow Arguments Work:
/create-demo with no argumentsCRITICAL RULES
Example of WRONG approach:
❌ Asking all at once:
1. Module file name?
2. UserInfo variables?
3. Presentation objective?
4. Number of demos?
Example of CORRECT approach:
✅ Ask sequentially:
Step 2: Complete overall demo story planning
[WAIT for completion]
Step 3.1: Module file name?
[WAIT for answer]
Step 3.2: Reference materials?
[WAIT for answer]
etc.
Check if user invoked skill with arguments.
Pattern 1: /create-demo <directory> --new
Parsing arguments: "<directory> --new"
✓ Target directory: <directory>
✓ Mode: Create new demo
✓ Will generate: index.adoc → 01-overview → 02-details → 03-module-01
Validating directory...
[Check if directory exists, create if needed]
Skipping: Step 1 (mode already known: NEW demo)
Proceeding to: Step 2 (Plan Overall Demo Story)
Pattern 2: /create-demo <directory> --continue <module-path>
Parsing arguments: "<directory> --continue <module-path>"
✓ Target directory: <directory>
✓ Mode: Continue existing demo
✓ Previous module: <module-path>
Validating directory...
[Check if directory exists]
Reading previous module: <module-path>
[Extract story, business context, progression]
Skipping: Step 1 (mode already known: CONTINUE)
Skipping: Step 2 (story detected from previous module)
Proceeding to: Step 3 (Module-Specific Details)
Pattern 3: /create-demo <directory>
Parsing arguments: "<directory>"
✓ Target directory: <directory>
Validating directory...
[Check if directory exists]
Skipping: Target directory question
Proceeding to: Step 1 (still need to ask: new vs continue)
Pattern 4: /create-demo (no arguments)
No arguments provided.
Using interactive mode.
Target directory: Will use default (content/modules/ROOT/pages/)
Proceeding to: Step 1 (Determine Context)
Argument Validation:
--continue but module path invalid, fall back to asking for story recapSKIP THIS STEP IF:
--new flag in arguments (already know: NEW demo)--continue <module> in arguments (already know: EXISTING demo)CRITICAL: DO NOT read any files or make assumptions before asking this question!
First, ask the user:
Let's get started! I'll help you create amazing demo content.
Are you creating a new demo or continuing an existing one?
1. 🆕 Creating a NEW demo (I'll help you plan the whole story)
2. ➡️ Continuing an EXISTING demo (I'll pick up where you left off)
3. 🤔 Something else (tell me what you need)
What's your situation? [1/2/3]
ONLY AFTER user answers, proceed based on their response.
SKIP THIS STEP IF: User provided <directory> as argument
Ask the user:
What is the path to your cloned Showroom repository?
You can provide:
- A local path: /Users/yourname/work/showroom-content/my-demo-showroom
- A GitHub URL: https://github.com/rhpds/my-demo-showroom
(I'll clone it to /tmp/ automatically)
Repo path or URL:
If the user provides a GitHub URL (starts with https://github.com/ or [email protected]:):
.git suffix if present)git clone <url> /tmp/<repo-name>/tmp/<repo-name>Use content/modules/ROOT/pages/ within that path as the target for demo files.
If continuing existing demo:
Great! Let's plan your demo together. I'll ask you a few questions to understand what you're trying to achieve.
IMPORTANT: Ask these as conversational, open-ended questions. Do NOT provide multiple choice options.
Question 1 - The Big Picture:
What's the main message you want to deliver in this demo?
Think about: What should your audience remember after seeing this?
Example: "Show how OpenShift accelerates application deployment for enterprises"
Your answer:
Question 2 - Know Your Audience:
Who will be watching this demo?
Examples: C-level executives, Sales engineers, Technical managers, Partners
Your audience:
And what matters most to them right now? (their business priorities)
Examples: Cost reduction, faster time-to-market, competitive advantage
Their priorities:
Question 3 - The Transformation Story:
Let's create the before-and-after narrative.
What's the customer challenge you're solving?
What's painful about their current state?
What does the ideal future state look like?
Your story:
Question 4 - Customer Scenario:
What company or industry should we feature in this demo?
Examples: "RetailCo" (retail), "FinanceCorp" (banking), "HealthTech" (healthcare)
Or create your own!
Company/industry:
What specific business challenge is driving urgency for them?
Their urgent challenge:
Question 5 - Show the Impact:
What quantifiable improvements will you highlight?
Examples:
- "6 weeks → 5 minutes deployment time"
- "80% reduction in infrastructure costs"
- "10x faster developer productivity"
Your key metrics:
Question 6 - Timing:
How long should the complete demo take?
Typical options: 15min, 30min, 45min
Your target duration:
Then I'll recommend:
You can:
For NEW demos only. Skip if adding a module to an existing demo.
Two files to create or fix:
site.yml — correct title and ui-bundle theme URL. If default-site.yml exists → rename to site.yml + update gh-pages.yml.ui-config.yml — split view enabled, correct tabs for OCP or VMAsk all three questions in order — do NOT skip any:
ui-config.yml)ui-bundle URL in site.yml)→ Full questions, file templates, AgnosticV workload vars: @showroom/skills/create-demo/references/showroom-scaffold.md
Now for this specific module:
Module file name:
content/modules/ROOT/pages/[number]-[topic-name].adocReference materials (optional but recommended):
UserInfo variables (optional, for accurate showroom content):
Q: Do you have access to a deployed environment on demo.redhat.com or integration.demo.redhat.com?
If YES (RECOMMENDED - easiest and most accurate):
Please share the UserInfo variables from your deployed service:
1. Login to https://demo.redhat.com (or integration.demo.redhat.com)
2. Go to "My services" → Your service
3. Click "Details" tab
4. Expand "Advanced settings" section
5. Copy and paste the output here
This provides exact variable NAMES like:
- openshift_cluster_console_url
- openshift_cluster_admin_username
- gitea_console_url
- [custom workload variables]
CRITICAL: I will use these to know WHICH variables exist, NOT to replace them with actual values!
Variables will stay as placeholders: {openshift_cluster_console_url}
Showroom replaces these at runtime with actual deployment values.
If NO:
Q: Would you like to use placeholder attributes for now?
If YES:
I'll use placeholders: {openshift_console_url}, {user}, {password}
You can update these later when you get Advanced settings.
If NO (RHDP internal team only):
I can extract variables from AgnosticV repository if you have it cloned locally.
This requires AgV path and catalog name.
Note: Less reliable than Advanced settings.
Target audience:
Business scenario/challenge:
Technology/product focus:
Number of demo parts:
Key metrics/business value:
Diagrams, screenshots, or demo scripts (optional):
content/modules/ROOT/assets/images/If UserInfo variables weren't already provided in Step 3, I'll ask for them now.
RECOMMENDED: Get from Deployed Environment (Primary Method)
I'll ask: "Do you have access to a deployed environment on demo.redhat.com or integration.demo.redhat.com?"
If YES (recommended):
Please share the UserInfo variables from your deployed service:
1. Login to https://integration.demo.redhat.com (or demo.redhat.com)
2. Go to "My services" → Find your service
3. Click on "Details" tab
4. Expand "Advanced settings" section
5. Copy and paste the output here
This shows all available variables like:
openshift_cluster_console_url → For showing presenter where to log inopenshift_api_server_url → For API demonstrationsopenshift_cluster_admin_username → For admin access demosopenshift_cluster_admin_password → For demo credentialsgitea_console_url → For Git server demosgitea_admin_username, gitea_admin_password → For Gitea accessIf NO (fallback): I'll use common placeholder variables:
{openshift_console_url}{openshift_api_url}{user}{password}{bastion_public_hostname}Alternative: Clone collections from AgV catalog
common.yaml from user-provided AgV pathagnosticd_user_info tasksdata: sectionsResult: I'll use these in Show sections for precise presenter instructions with actual URLs and credentials.
If you provided visual assets or scripts:
See @showroom/docs/SKILL-COMMON-RULES.md for image path conventions and clickable image syntax.
For demo scripts or commands:
[source,role="execute"] — the execute button lets the presenter click to run commands directly in the Showroom terminal during the demonstration.[source,role="execute"]
----
oc new-app https://github.com/example/nodejs-ex
----
[NOTE]
====
**Presenter Tip:** Emphasize how this single command eliminates 3-5 days of manual setup.
====
For before/after comparisons:
before-manual-deployment.png, after-automated-deployment.pngRecommended image naming for demos:
customer-challenge-overview.png, transformation-roadmap.pngstep-1-login-console.png, step-2-create-project.pngdeployment-success.png, metrics-dashboard.pngbefore-state.png, after-state.pngBased on your references, I'll:
Reference Tracking (for conclusion generation):
CRITICAL: Read templates BEFORE generating any content.
Template source — check the Showroom repo first:
The user's Showroom repo may contain a templates/ directory with up-to-date patterns. Always prefer these over the marketplace's built-in templates.
# Check if user's Showroom repo has demo templates
ls {showroom_repo_path}/examples/demo/templates/ # if exists use examples/ 2>/dev/null
If examples/demo/templates/ exists in the Showroom repo — read from there:
{showroom_repo_path}/examples/demo/templates/index.adoc — Facilitator/presenter guide (output as index.adoc){showroom_repo_path}/examples/demo/templates/01-overview.adoc{showroom_repo_path}/examples/demo/templates/02-details.adoc{showroom_repo_path}/examples/demo/templates/03-module-01.adoc — Uses Know/Show structure{showroom_repo_path}/examples/demo/templates/99-conclusion.adocIf examples/demo/templates/ does NOT exist — use bundled plugin templates:
@showroom/templates/demo/00-index.adoc — Facilitator/presenter guide@showroom/templates/demo/03-module-01.adoc — Know/Show structure@showroom/templates/demo/01-overview.adoc — Business context overview@showroom/templates/demo/99-conclusion.adoc — Conclusion templateKey rules from the templates:
index.adoc is a facilitator/presenter guide — NOT learner-facing (opposite of workshop)=== Know (background, business value, why) then === Show (step-by-step presenter actions)index.adoc regardless of template source filenameThe user's examples/ directory reflects the latest nookbag patterns and may be more current than the marketplace copies. Always use the repo's own templates when available.
See @showroom/docs/SKILL-COMMON-RULES.md for verification prompt file lists and usage.
IMPORTANT: Use the bundled demo templates read in Step 8 as quality references.
Apply patterns from the bundled templates to new demo content:
This ensures generated demo content matches real Showroom demo quality instead of generic templates.
I'll create a module with Know/Show structure:
See @showroom/docs/SKILL-COMMON-RULES.md for image syntax and AsciiDoc list formatting rules.
CRITICAL: Content rules (originality, em dashes, Know/Show bullets vs numbers, demo language, talk track):
See @showroom/skills/create-demo/references/content-rules.md for all rules with correct/incorrect examples.
The generated module is already in context — check it directly.
Read @showroom/docs/SKILL-COMMON-RULES.md for full quality gate criteria, then verify against this list:
Must fix before delivering (fix silently, note in delivery summary):
| Check | Rule |
|---|---|
| Know/Show structure | Every section has Know (context) before Show (demonstration) — never Show without Know |
| Business value | ROI or outcome framing stated in every Know section |
| Presenter notes | At least one [NOTE] or aside block per section with talking points |
| No participant steps | Demo is presenter-led — no hands-on exercises requiring participant input |
| Headings | Sentence case — not Title Case |
| Em dashes | Zero — — rewrite or use -- |
| Prohibited terms | No "robust", "powerful", "leverage", "synergy" |
| Presenter command blocks | All commands the presenter runs use [source,role="execute"] — not bare [source,bash] |
| Code blocks | Config/data blocks use [source,yaml] / [source,json] without role="execute" |
| Hardcoded values | No cluster URLs, usernames, passwords — use {user}, {password}, {openshift_console_url} |
| Product names | No bare "OCP", "AAP" without first-use expansion |
If anything fails, fix it now. Do not ask the user — just fix and note what was corrected in the delivery summary.
See @showroom/docs/SKILL-COMMON-RULES.md for navigation update requirements.
CRITICAL: Manage Output Tokens to Prevent Overflow
Write files using Write tool — show brief confirmations only. Keep total output under 5000 tokens.
Templates used (from Showroom repo templates/demo/templates/ or marketplace fallback):
index.adoc (facilitator/presenter guide)01-overview.adoc, 02-details.adoc03-module-01.adoc (Know/Show structure)99-conclusion.adocQuality check at Step 10: Inline — no agents. See Step 10 checklist above.
Files created:
content/modules/ROOT/pages/<module-file>.adoccontent/modules/ROOT/assets/images/Files modified (with permission):
content/modules/ROOT/nav.adoc - Adds navigation entry/showroom:verify-content -- Run quality checks on generated demo content/showroom:blog-generate -- Convert demo content into blog poststools
Writes validate.yml playbooks using the validation_check Ansible plugin. Takes the content-reader task report and solve-writer actions as input, producing checks that verify student progress without manual steps or navigation instructions.
tools
Writes solve.yml playbooks from the structured task report produced by ftl:content-reader. Uses the automation priority ladder (k8s_exec → k8s → uri → wait_for → Playwright) to generate Ansible tasks that replicate what the student does in the lab.
development
Pushes solve.yml and validate.yml to a live RHDP showroom, restarts the pod, and runs the full test cycle (fresh validate → solve → validate again → idempotency check). Reports pass/fail per task with full output for debugging.
tools
AsciiDoc reader agent for the FTL lab validator. Reads a showroom .adoc module file, extracts executable code blocks (role="execute"), classifies each step by automation type, and outputs a structured task report for the solve-writer and validate-writer agents.