google-agents-cli-scaffold
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
Guide you through creating a single Red Hat Showroom workshop module from reference materials (URLs, files, docs, or text) with business storytelling and proper AsciiDoc formatting.
Full skill instructions
Guide you through creating a single Red Hat Showroom workshop module from reference materials (URLs, files, docs, or text) with business storytelling and proper AsciiDoc formatting.
Have these ready before running this skill:
Required:
content/modules/ROOT/pages/)Helpful to have:
Access needed:
Use this skill when you want to:
Don't use this for:
/create-demo/blog-generate/verify-contentIMPORTANT: This skill follows shared contracts defined in .claude/docs/SKILL-COMMON-RULES.md:
See SKILL-COMMON-RULES.md for complete details.
This skill supports optional command-line arguments for faster workflows.
Usage Examples:
/create-lab # Interactive mode (asks all questions)
/create-lab <directory> # Specify target directory
/create-lab <directory> --new # Create new lab in directory
/create-lab <directory> --continue <module> # Continue from specific module
Parameters:
<directory> - Target directory for module files
/create-lab content/modules/ROOT/pages/content/modules/ROOT/pages/--new - Flag to create new lab (generates index + overview + details + module-01)--continue <module-path> - Continue from specified previous module
/create-lab content/modules/ROOT/pages/ --continue content/modules/ROOT/pages/03-module-01-intro.adocHow Arguments Work:
/create-lab with no argumentsCRITICAL RULES
If this is the FIRST module of a NEW lab, you MUST generate files in this EXACT order:
NEVER skip index/overview/details for first module!
File naming convention:
If continuing existing lab:
Example of WRONG approach:
❌ Asking all at once:
1. Module file name?
2. UserInfo variables?
3. Learning objective?
4. Number of exercises?
Example of CORRECT approach:
✅ Ask sequentially:
Step 2: Complete overall lab 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-lab <directory> --new
Parsing arguments: "<directory> --new"
✓ Target directory: <directory>
✓ Mode: Create new lab
✓ 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 lab)
Proceeding to: Step 2 (Plan Overall Lab Story)
Pattern 2: /create-lab <directory> --continue <module-path>
Parsing arguments: "<directory> --continue <module-path>"
✓ Target directory: <directory>
✓ Mode: Continue existing lab
✓ Previous module: <module-path>
Validating directory...
[Check if directory exists]
Reading previous module: <module-path>
[Extract story, company, 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-lab <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-lab (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 lab)--continue <module> in arguments (already know: EXISTING lab)CRITICAL: DO NOT read any files or make assumptions before asking this question!
First, ask the user:
Welcome! Let's create your workshop together.
Are you starting a brand new lab or adding to an existing one?
1. 🆕 NEW lab (I'll create the whole thing: index → overview → details → first module)
2. ➕ EXISTING lab (I'll add the next module and continue your story)
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:
Where should I create the lab files?
Default location: content/modules/ROOT/pages/
Press Enter to use default, or type a different path:
Validation:
If option 1 (NEW lab):
If option 2 (EXISTING lab):
If continuing existing lab:
Fallback behavior:
Awesome! Let's design your workshop together. I'll ask you some questions to build the perfect learning experience.
IMPORTANT: Ask these as conversational, open-ended questions. Do NOT provide multiple choice options.
Question 1 - What Should We Call This?:
What's the name of your workshop?
Example: "Building AI/ML Workloads on OpenShift AI"
I'll use this to set up your lab title and generate a clean URL-friendly slug.
Your lab name:
[After user provides title, I'll suggest a slug like "building-ai-ml-workloads-openshift-ai"]
Question 2 - The Learning Goal:
What's the main goal of this lab?
What should learners be able to do when they finish?
Example: "Learn to build and deploy AI/ML workloads on OpenShift AI"
Your lab goal:
Question 3 - Who's Learning?:
Who is this lab designed for?
Examples: Developers, Architects, SREs, Data Scientists, Platform Engineers
Your target audience:
What's their experience level?
- Beginner (new to the technology)
- Intermediate (some hands-on experience)
- Advanced (production experience)
Their level:
Question 4 - The Learning Journey:
By the end of this lab, what should learners understand and be able to do?
List the key skills they'll gain:
Your learning outcomes:
Question 5 - Make It Real:
What company or business scenario should we use to make this relatable?
Examples: "ACME Corp", "RetailCo", "FinTech Solutions"
Or create your own!
Company name:
What business challenge are they facing that drives this learning?
Their challenge:
Question 6 - How Long?:
How much time should learners budget for the complete lab?
Typical options: 30min, 1hr, 2hr
Your target duration:
Question 7 - Technical Environment:
Let's nail down the technical details:
OpenShift version? (e.g., "4.18", "4.20", or I can use {ocp_version} placeholder)
Product versions? (e.g., "OpenShift Pipelines 1.12, OpenShift AI 2.8")
Cluster type? (SNO or multinode)
Access level? (admin only, or multi-user with keycloak/htpasswd)
Your environment details:
Note: If you're not sure, I'll use placeholders that work across versions.
Then I'll recommend:
You can:
CRITICAL: Update these files with the lab name BEFORE generating any content files.
Using the lab title and slug from Step 2, update:
site.yml (line 3):
site:
title: {{ lab_title }} # e.g., "Building AI/ML Workloads on OpenShift AI"
content/antora.yml (line 2):
name: modules
title: {{ lab_title }} # Same as site.yml
content/antora.yml (line 9):
asciidoc:
attributes:
lab_name: "{{ lab_slug }}" # e.g., "building-ai-ml-workloads-openshift-ai"
Example transformation:
building-ai-ml-workloads-openshift-aiNote: These files must be updated BEFORE Step 8 (Generate Files).
Now for this specific module:
Module file name and numbering:
0X-module-YY-<slug>.adoc (e.g., 03-module-01-pipelines-intro.adoc)= Module X: <Title> (e.g., = Module 1: Pipeline Fundamentals)content/modules/ROOT/pages/Reference 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.
Main learning objective:
Business scenario:
Technology/product focus:
Number of exercises:
Diagrams, screenshots, or code blocks (optional):
content/modules/ROOT/assets/images/Troubleshooting section (optional):
Q: Would you like to include a troubleshooting section in this module?
A troubleshooting section helps learners solve common issues they may encounter.
Options:
1. Yes, include troubleshooting (Recommended for production workshops)
2. No, skip it for now (I'll add it later if needed)
Your choice? [1/2]
When to recommend "Yes":
When "No" is acceptable:
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_urlopenshift_api_server_urlopenshift_cluster_admin_usernameopenshift_cluster_admin_passwordgitea_console_urlgitea_admin_usernamegitea_admin_passwordIf 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: sectionsMap to Showroom attributes:
{openshift_cluster_console_url}
{openshift_api_server_url}
{openshift_cluster_admin_username}
{gitea_console_url}
{{ custom_variable }}
CRITICAL: DO NOT Replace Variables with Actual Values:
{openshift_console_url}https://console-openshift-console.apps.cluster-abc123.abc123.example.opentlc.com. Navigate to the OpenShift Console at {openshift_cluster_console_url}
. Login with username: {openshift_cluster_admin_username}
. Password: {openshift_cluster_admin_password}
What UserInfo variables are for:
If you provided visual assets or code:
For images (diagrams, screenshots):
Path convention:
content/modules/ROOT/assets/images/Required for every image:
link=self,window=blank - ALWAYS required)AsciiDoc syntax (REQUIRED):
image::pipeline-execution-1.png[Tekton pipeline showing three tasks executing in sequence,link=self,window=blank,width=700,title="Pipeline Execution in Progress"]
CRITICAL: ALWAYS include link=self,window=blank to make images clickable. This allows learners to see full resolution without losing their place in the workshop.
Optional - Center alignment:
image::architecture-diagram.png[Architecture overview,link=self,window=blank,align="center",width=800,title="System Architecture"]
Placeholders:
// TODO: Add screenshot
image::create-task-screenshot.png[OpenShift console showing task creation form,link=self,window=blank,width=600,title="Creating a Tekton Task"]
Assets Needed list: At end of module, include:
== Assets Needed
. `pipeline-execution-1.png` - Screenshot of pipeline running in OpenShift console
. `task-definition.png` - YAML editor showing task definition
For code blocks:
[source,bash]
----
oc create deployment my-app --image=myimage:latest
----
Recommended image naming:
architecture-overview.png, deployment-flow.pngconsole-project-view.png, dashboard-metrics.pngoc-get-pods-output.png, build-logs.pngstep-1-create-task.png, step-2-run-pipeline.pngClickable Images (Links):
If an image should be clickable and link to external content, use ^ caret to open in new tab:
// Using image macro with link attribute
image::architecture-diagram.png[Architecture,600,link=https://docs.redhat.com/architecture^]
// Using link macro around image
link:https://docs.redhat.com/architecture^[image:architecture-diagram.png[Architecture,600]]
Critical: Clickable images linking to external URLs MUST use ^ caret to open in new tab, just like text links.
Based on your references, I'll:
Reference Enforcement:
**Reference needed**: <claim>Reference Tracking (for conclusion generation):
IMPORTANT: External Link Format:
^ caret to open in new tablink:https://example.com[Link Text^]^ ensures users don't lose their place in the workshop^link:https://docs.redhat.com/...[Red Hat Documentation^]xref:03-module-02-next.adoc[Next Module] (no caret)CRITICAL: I MUST read all these files BEFORE generating content to ensure output meets all standards.
Templates to read:
.claude/templates/workshop/templates/00-index-learner.adoc - Learner-facing index template.claude/templates/workshop/templates/03-module-01.adoc - Module template.claude/templates/workshop/example/00-index.adoc - Example index (but write for LEARNERS, not facilitators).claude/templates/workshop/example/01-overview.adoc - Example overview.claude/templates/workshop/example/02-details.adoc - Example details.claude/templates/workshop/example/03-module-01.adoc - Example moduleVerification criteria to read and apply DURING generation:
.claude/prompts/enhanced_verification_workshop.txt - Complete quality checklist.claude/prompts/redhat_style_guide_validation.txt - Red Hat style rules.claude/prompts/verify_workshop_structure.txt - Structure requirements.claude/prompts/verify_technical_accuracy_workshop.txt - Technical accuracy standards.claude/prompts/verify_accessibility_compliance_workshop.txt - Accessibility requirements.claude/prompts/verify_content_quality.txt - Content quality standardsHow I use these:
CRITICAL: If this is the FIRST module of a NEW lab, generate files in this order:
Purpose: Learner-facing landing page - NOT a facilitator guide
Content:
= {{ Workshop Title }}
Welcome to the {{ workshop name }} workshop!
== What you'll learn
In this workshop, you will:
* {{ Learning objective 1 }}
* {{ Learning objective 2 }}
* {{ Learning objective 3 }}
* {{ Learning objective 4 }}
== Who this is for
This workshop is designed for {{ target audience }} who want to {{ main goal }}.
== Prerequisites
Before starting this workshop, you should have:
* {{ Prerequisite 1 }}
* {{ Prerequisite 2 }}
* Access to {{ environment/tools }}
== Workshop environment
{{ Brief description of the lab environment }}
* OpenShift cluster: {openshift_console_url}
* Login credentials will be provided
== Let's get started!
Click on the next section to begin the workshop.
What NOT to do:
What TO do:
Purpose: Business scenario and learning objectives
Content: See workshop/example/01-overview.adoc for pattern
Purpose: Technical requirements and setup
Content: See workshop/example/02-details.adoc for pattern
I'll create a complete module with:
CRITICAL: Image Syntax Enforcement:
When generating ANY image reference in the module content, you MUST include link=self,window=blank:
✅ CORRECT - Always use this format:
image::filename.png[Description,link=self,window=blank,width=700]
image::pipeline-view.png[Pipeline Execution,link=self,window=blank,width=700,title="Pipeline Running"]
❌ WRONG - Never generate images without link parameter:
image::filename.png[Description,width=700]
image::pipeline-view.png[Pipeline Execution,width=700]
Why: This makes images clickable to open full-size in new tab, preventing learners from losing their place in the workshop.
CRITICAL: AsciiDoc List Formatting Enforcement: When generating ANY list in the module content, you MUST include blank lines before and after the list:
✅ CORRECT - Always use proper spacing:
**Learning objectives:**
* Understand how Tekton tasks work
* Create and execute pipelines
* Troubleshoot failed runs
By the end of this module...
❌ WRONG - Text runs together when rendered:
**Learning objectives:**
* Understand how Tekton tasks work
* Create and execute pipelines
* Troubleshoot failed runs
By the end of this module...
Required blank lines:
**Text:**) or colon (:)Why: Without blank lines, Showroom renders lists as plain text, causing content to run together and become unreadable.
CRITICAL: Content Originality - No Plagiarism: All generated content MUST be original. Never copy from external sources without proper attribution.
✅ CORRECT - Original with attribution:
According to link:https://kubernetes.io/docs/...[Kubernetes documentation^],
Kubernetes is "an open-source system for automating deployment." Red Hat OpenShift
extends Kubernetes with enterprise features including integrated CI/CD and security.
❌ WRONG - Copied without attribution:
Kubernetes is an open-source system for automating deployment, scaling,
and management of containerized applications.
Prohibited:
Required:
CRITICAL: No Em Dashes: Never use em dashes (—). Use commas, periods, or en dashes (–) instead.
✅ CORRECT:
OpenShift, Red Hat's platform, simplifies deployments.
The process is simple. Just follow these steps.
2020–2025 (en dash for ranges)
❌ WRONG - Em dash used:
OpenShift—Red Hat's platform—simplifies deployments.
The process is simple—just follow these steps.
Why: Follows Red Hat Corporate Style Guide and improves readability.
CRITICAL: External Links Must Open in New Tab:
All external links MUST use ^ caret to open in new tab, preventing learners from losing their place.
✅ CORRECT - External links with caret:
According to link:https://docs.redhat.com/...[Red Hat Documentation^], OpenShift provides...
See the link:https://www.redhat.com/guides[Getting Started Guide^] for more details.
❌ WRONG - Missing caret:
According to link:https://docs.redhat.com/...[Red Hat Documentation], OpenShift provides...
See the link:https://www.redhat.com/guides[Getting Started Guide] for more details.
Internal links (NO caret):
✅ CORRECT - Internal navigation without caret:
Navigate to xref:04-module-02.adoc[Next Module] to continue.
See xref:02-details.adoc#prerequisites[Prerequisites] section.
Why: External links without caret replace current tab, causing learners to lose their place in the workshop. Internal xrefs should NOT use caret to keep flow within the workshop.
CRITICAL: Bullets vs Numbers - Knowledge vs Tasks: Knowledge/information sections use bullets (*). Task/step sections use numbers (.).
✅ CORRECT - Bullets for knowledge, numbers for tasks:
== Learning Objectives
By the end of this module, you will understand:
* How Tekton tasks encapsulate CI/CD steps
* The relationship between tasks and pipelines
* Best practices for pipeline design
== Exercise 1: Create Your First Pipeline
Follow these steps:
. Open the OpenShift Console at {openshift_console_url}
. Navigate to Pipelines → Create Pipeline
. Enter the pipeline name: my-first-pipeline
. Add a task from the catalog
. Click Create
=== Verify
Check that your pipeline was created successfully:
* Pipeline appears in the list
* Status shows "Not started"
* All tasks are configured correctly
❌ WRONG - Mixed up bullets and numbers:
== Exercise 1: Create Your First Pipeline
Follow these steps:
* Open the OpenShift Console ← WRONG (should be numbers)
* Navigate to Pipelines
* Click Create
=== Verify
. Pipeline appears in the list ← WRONG (should be bullets)
. Status shows "Not started"
Rule:
Why: Bullets indicate information to absorb; numbers indicate sequential actions to perform.
Required Structure:
Note: References are NOT included in individual modules. All references will be consolidated in the mandatory conclusion module.
Mandatory: Verification Checkpoints: Each major step must include:
=== Verify
Run the following to confirm success:
[source,bash]
----
oc get pods
----
Expected output:
----
NAME READY STATUS RESTARTS AGE
my-app-xxxxx-xxxxx 1/1 Running 0 2m
----
✓ Pod status is "Running"
✓ READY shows 1/1
Optional: Troubleshooting Section (If Requested): If the user requested troubleshooting in Step 3, include this section:
== Troubleshooting
**Issue**: Pod stuck in "ImagePullBackOff"
**Solution**:
. Check image name: `oc describe pod <pod-name>`
. Verify registry credentials
. Common fix: `oc set image-lookup <deployment>`
**Issue**: Permission denied errors
**Solution**:
. Verify you're in correct project: `oc project`
. Check RBAC: `oc whoami` and `oc auth can-i create pods`
**Issue**: Command not found
**Solution**:
. Verify OpenShift CLI installed: `oc version`
. Expected version: {ocp_version}
Guidelines for troubleshooting section:
Mandatory: Learning Outcomes Checkpoint: Every module must include a learning confirmation (not just technical validation):
== Learning Outcomes
By completing this module, you should now understand:
* ✓ How Tekton tasks encapsulate reusable CI/CD steps
* ✓ The relationship between tasks, pipelines, and pipeline runs
* ✓ How to troubleshoot failed pipeline executions using logs and status
* ✓ When to use sequential vs parallel task execution patterns
Guidelines:
Optional but Recommended: Cleanup: If module changes shared state:
== Cleanup (Optional)
To reset your environment:
[source,bash]
----
oc delete project my-project
----
Quality:
Since verification criteria were applied during generation (Step 7-8), the module should already meet all standards.
Quick final checks:
AsciiDoc Syntax:
[source,bash]^ caret to open in new tabCompleteness:
Navigation:
Note: Content was generated using verification prompts from Step 7, so it should already comply with:
I'll automatically update content/modules/ROOT/nav.adoc - this is REQUIRED for the module to appear in the Showroom sidebar.
Navigation Rules:
What I'll add:
* xref:index.adoc[Home]
* xref:03-module-01-intro.adoc[Module 1: Introduction]
** xref:03-module-01-intro.adoc#exercise-1[Exercise 1: Setup]
** xref:03-module-01-intro.adoc#exercise-2[Exercise 2: First Pipeline]
* xref:04-module-02-advanced.adoc[Module 2: Advanced Topics] ← NEW MODULE
** xref:04-module-02-advanced.adoc#exercise-1[Exercise 1: Git Integration]
** xref:04-module-02-advanced.adoc#exercise-2[Exercise 2: Triggers]
Conflict handling:
Note: Without this nav.adoc entry, your module won't be accessible in Showroom!
CRITICAL: Manage Output Tokens to Prevent Overflow
Token Management Rules:
Output Format for FIRST module:
✅ Workshop Generation Complete
**Files Created**:
- content/modules/ROOT/pages/index.adoc (32 lines) - Learner landing page
- content/modules/ROOT/pages/01-overview.adoc (85 lines) - Business scenario
- content/modules/ROOT/pages/02-details.adoc (67 lines) - Technical details
- content/modules/ROOT/pages/03-module-01-intro.adoc (234 lines) - First hands-on module
- content/modules/ROOT/nav.adoc (updated)
Output Format for CONTINUATION modules:
✅ Module Generation Complete
**Files Created**:
- content/modules/ROOT/pages/04-module-02-advanced.adoc (198 lines)
- content/modules/ROOT/nav.adoc (updated)
**Module Structure**:
- Learning objectives: 4 items
- Exercises: 3
- Verification checkpoints: 3
- Troubleshooting scenarios: 5 (if included)
- Learning outcomes: 4 items
**Assets**:
- Images needed: 2 placeholders (see module for TODO comments)
- Dynamic attributes used: {openshift_console_url}, {user}, {password}
**Next Steps**:
1. Review module: content/modules/ROOT/pages/04-module-02-advanced.adoc
2. Capture screenshots for placeholder images
3. Test commands in your environment
4. Run: verify-content to check quality
5. Create next module: create-lab (continuing existing lab)
**Note**: All files have been written. Use your editor to review them.
What NOT to do:
What TO do:
After delivering the final module, ask if this is the last module:
Q: Is this the last module of your workshop?
If YES, I will now generate the mandatory conclusion module that includes:
- Summary of what learners accomplished
- Key takeaways from all modules
- ALL REFERENCES used across the entire workshop
- Next steps and resources
- Related workshops and certification paths
If NO, you can continue creating more modules, and I'll generate the conclusion when you're done.
Is this your last module? [Yes/No]
If user answers YES (this is the last module):
Read ALL previous modules to extract:
Ask about references:
First, extract all references from previous modules:
Then ask the user:
Q: How would you like to handle references in the conclusion?
I found these references used across your modules:
1. https://docs.openshift.com/container-platform/4.18/... [OpenShift Documentation] - Used in: Modules 1, 3
2. https://tekton.dev/docs/pipelines/ [Tekton Pipelines] - Used in: Module 2
3. https://developers.redhat.com/... [Developer Guide] - Used in: Module 1
{{ additional_references_if_found }}
Options:
1. Use these references as-is (I'll organize them by category)
2. Let me provide additional references to include
3. Let me curate the reference list (add/remove specific items)
Your choice? [1/2/3]
If option 1: Use extracted references, organize by category
If option 2: Ask user to provide additional references:
Q: Please provide additional references to include in the conclusion.
Format: URL and description, one per line
Example:
https://docs.redhat.com/... - OpenShift documentation
https://developers.redhat.com/... - Developer guides
Your additional references:
If option 3: Ask user which references to keep/remove/add:
Q: Let's curate the reference list.
Current references:
{{ numbered_list_of_references }}
Options:
- Type numbers to REMOVE (e.g., "3, 5, 7")
- Type "add" to add new references
- Type "done" when finished
Your action:
Detect highest module number (e.g., if last module is 07-module-05, conclusion will be 08-conclusion.adoc)
Generate conclusion module using the embedded template below
Customize the template by:
Update nav.adoc with conclusion entry at the end
Provide brief confirmation
If user answers NO (more modules to come):
Embedded Conclusion Template:
= Conclusion and Next Steps
Congratulations! You've completed the {{ workshop_name }} workshop.
== What You've Learned
Throughout this workshop, you've gained hands-on experience with:
* ✅ {{ learning_outcome_1 }}
* ✅ {{ learning_outcome_2 }}
* ✅ {{ learning_outcome_3 }}
* ✅ {{ learning_outcome_4 }}
You now have the skills to {{ primary_capability }}.
== Key Takeaways
The most important concepts to remember:
. **{{ key_concept_1 }}**: {{ brief_explanation_1 }}
. **{{ key_concept_2 }}**: {{ brief_explanation_2 }}
. **{{ key_concept_3 }}**: {{ brief_explanation_3 }}
== Next Steps
Ready to continue your journey? Here are some recommended next steps:
=== Recommended Workshops
Explore related workshops to expand your skills:
* link:{{ related_workshop_1_url }}[{{ related_workshop_1_name }}^] - {{ related_workshop_1_description }}
* link:{{ related_workshop_2_url }}[{{ related_workshop_2_name }}^] - {{ related_workshop_2_description }}
=== Documentation and Resources
Deepen your knowledge with these resources:
* link:{{ docs_url_1 }}[{{ product_name }} Official Documentation^]
* link:{{ docs_url_2 }}[{{ feature_name }} Guide^]
* link:{{ community_url }}[{{ product_name }} Community^]
=== Practice Projects
Put your new skills to work:
. **{{ project_idea_1 }}**: {{ project_description_1 }}
. **{{ project_idea_2 }}**: {{ project_description_2 }}
. **{{ project_idea_3 }}**: {{ project_description_3 }}
== References
**CRITICAL**: This section consolidates ALL references used across the entire workshop.
Read all previous modules and extract every reference cited, then organize them by category:
=== Official Documentation
* link:{{ docs_url_1 }}[{{ product_name }} Documentation^] - Used in: Modules {{ modules_list }}
* link:{{ docs_url_2 }}[{{ feature_name }} Guide^] - Used in: Modules {{ modules_list }}
=== Red Hat Resources
* link:{{ redhat_resource_1 }}[{{ resource_title_1 }}^] - Used in: Module {{ module_number }}
* link:{{ redhat_resource_2 }}[{{ resource_title_2 }}^] - Used in: Module {{ module_number }}
=== Community and Open Source
* link:{{ community_url_1 }}[{{ community_resource_1 }}^] - Used in: Module {{ module_number }}
* link:{{ community_url_2 }}[{{ community_resource_2 }}^] - Used in: Module {{ module_number }}
=== Additional Reading
* link:{{ additional_url_1 }}[{{ additional_title_1 }}^] - Background information
* link:{{ additional_url_2 }}[{{ additional_title_2 }}^] - Advanced topics
**Guidelines for References section**:
- Group references by category (Official Docs, Red Hat Resources, Community, etc.)
- Include which module(s) used each reference
- ALL external links must use `^` caret to open in new tab
- Provide brief context for each reference (what it covers)
- Ensure ALL references from ALL modules are included
== Share Your Feedback
Help us improve this workshop:
* What did you find most valuable?
* What could be improved?
* What topics would you like to see covered in future workshops?
Contact us: {{ feedback_contact }}
== Thank You!
Thank you for participating in this workshop. We hope you found it valuable and informative.
Keep building, keep learning! 🚀
---
**Workshop**: {{ workshop_name }} +
**Completed**: {localdate} +
**Platform**: Red Hat Showroom
Conclusion Module Naming:
0X-conclusion.adoc (sequential number, e.g., 08-conclusion.adoc)= Conclusion and Next Steps* xref:0X-conclusion.adoc[Conclusion and Next Steps]Content to Include (ALL REQUIRED):
CRITICAL: The References section MUST include every reference used across all modules, organized by category.
User: Create a lab about OpenShift Pipelines for developers
Skill: Great! Since this is a new lab, let me gather the overall story first.
**Overall Lab Planning:**
Q: Is this the first module or continuing existing lab?
A: First module of a new lab
Q: What's the overall goal of this lab?
A: "Teach developers how to build and deploy cloud-native CI/CD pipelines using OpenShift Pipelines"
Q: Target audience?
A: Intermediate developers familiar with containers and Kubernetes
Q: What should learners know by the end?
A: - Create Tekton tasks and pipelines
- Integrate with Git repositories
- Deploy applications via automated pipelines
- Troubleshoot pipeline failures
Q: Company/business scenario?
A: "DevOps Corp" - A company struggling with slow, manual deployment processes
Q: Estimated total duration?
A: 90 minutes
**Recommended Module Flow:**
Based on your goals, I recommend 3 modules:
Module 1: Pipeline Fundamentals (30 min)
- Introduce Tekton concepts
- Create first task
- Run simple pipeline
- Story: DevOps Corp's current manual deployment pain
Module 2: Git Integration & Automation (30 min)
- Connect pipelines to Git
- Trigger on commits
- Build from source
- Story: Enabling developer self-service
Module 3: Production Pipelines (30 min)
- Multi-stage pipelines (dev, test, prod)
- Pipeline parameters and workspaces
- Monitoring and troubleshooting
- Story: Full automation, reduced deployment time
Does this flow work for you, or would you like adjustments?
User: Perfect! Let's start with Module 1.
Skill: Excellent! Now let me gather details for Module 1...
Q1: Module file name? → "03-pipelines-intro.adoc"
Q2: Reference materials? → https://docs.openshift.com/pipelines/1.12/
Q3: Learning objective? → "Create and execute your first Tekton pipeline"
Q4: Business scenario? → "DevOps Corp" (using overall story)
Q5: Technology? → "OpenShift Pipelines / Tekton"
Q6: Exercise count? → 3
Q7: Diagrams/code? → No, not yet
[Generates Module 1 with DevOps Corp story]
[Sets up story arc for modules 2 and 3]
✓ Created: content/modules/ROOT/pages/03-pipelines-intro.adoc
✓ Story established: DevOps Corp's deployment transformation
✓ Module flow documented for next modules
✓ Ready for Module 2 (will auto-continue story)
User: Create Module 2 for the OpenShift Pipelines lab
Skill: Let me check if this continues an existing lab...
Q: Is this first module or continuing?
A: Continuing existing lab
Q: Path to previous module?
A: content/modules/ROOT/pages/03-pipelines-intro.adoc
[Reads previous module]
→ Detected story: "DevOps Corp deployment transformation"
→ Detected company: "DevOps Corp"
→ Detected progression: Module 1 covered fundamentals
→ Next logical step: Git integration
I'll continue the DevOps Corp story. Now for Module 2 details...
Q1: Module file name? → "04-pipelines-git.adoc"
Q2: Reference materials? → https://docs.openshift.com/pipelines/.../triggers
Q4: Learning objective? → "Automate pipeline execution via Git webhooks"
Q5: Technology? → "OpenShift Pipelines / Tekton Triggers"
Q6: Exercise count? → 3
Q7: Diagrams/code? → No
[Generates Module 2]
- Continues DevOps Corp narrative
- References accomplishments from Module 1
- Builds toward Module 3's production pipeline
✓ Created: content/modules/ROOT/pages/04-pipelines-git.adoc
✓ Story continuity maintained from Module 1
✓ Ready for Module 3 (final module in recommended flow)
User: Create Module 1 for OpenShift Pipelines using:
https://docs.openshift.com/pipelines/1.12/
Skill: I'll create that module. Let me ask a few questions...
[asks if first module or continuing]
[if first: asks overall story questions]
[asks module-specific questions]
[generates module with scenario]
[validates with agents]
✓ Created: content/modules/ROOT/pages/03-pipelines-intro.adoc
✓ 3 exercises: Create task, Define pipeline, Run pipeline
✓ Screenshot guide provided
✓ Ready to add to nav.adoc
User: Create Module 1 for container security. I have an architecture diagram
and some example Dockerfiles.
Skill: Great! Let me ask some questions...
Q1: Module file name? → "03-security-intro.adoc"
Q2: Reference materials? → https://docs.redhat.com/en/documentation/...
Q3: Learning objective? → "Implement container security best practices"
Q4: Business scenario? → ACME Corp
Q5: Technology? → "Container security, Podman, OpenShift"
Q6: Exercise count? → 3
Q7: Diagrams/screenshots/code? → Yes, I have:
- Architecture diagram: ~/diagrams/security-architecture.png
- Code: Secure Dockerfile examples (paste below)
User provides:
```dockerfile
FROM registry.redhat.io/ubi9/ubi-minimal:latest
USER 1001
WORKDIR /app
COPY --chown=1001:0 app.jar .
RUN chmod 440 app.jar
CMD ["java", "-jar", "app.jar"]
Skill: Perfect! Processing...
[Copies diagram to assets/images/] → Saved: content/modules/ROOT/assets/images/security-architecture.png
[Formats code blocks with syntax highlighting] → Integrated Dockerfile examples in exercises
[Generates module with:]
Architecture diagram referenced: image::security-architecture.png[Container Security Architecture,link=self,window=blank,align="center",width=800,title="Container Security Architecture"]
Exercise flow integrates the diagram and code naturally
✓ Created: content/modules/ROOT/pages/03-security-intro.adoc ✓ Diagram saved and referenced: security-architecture.png ✓ Code blocks integrated with syntax highlighting ✓ Screenshot guide for additional captures needed
## Tips for Best Results
- **Specific objectives**: "Build and deploy container with persistent storage" vs "Learn containers"
- **Multiple references**: More context = better content
- **Continue scenarios**: Reference previous module for narrative continuity
- **Test commands**: Always verify in real environment
## Quality Standards
Every module will have:
- ✓ Valid AsciiDoc syntax
- ✓ 3-4 clear learning objectives
- ✓ Business context introduction
- ✓ Progressive exercises (foundational → advanced)
- ✓ Verification steps
- ✓ Module summary
- ✓ Image placeholders
- ✓ External links with `^` to open in new tab
- ✓ Red Hat style compliance
Project scaffolding, deployment configuration, and CI/CD setup for Google ADK agents.
Set up tracing, logging, and monitoring for deployed ADK agents across Cloud Trace, BigQuery, and third-party platforms.
Enterprise Azure infrastructure architect generating Bicep or Terraform from workload descriptions.
Plan and configure production-ready Azure Kubernetes Service clusters with Day-0 and Day-1 best practices.
Raw mechanical interfaces fusing Swiss typographic print with military terminal aesthetics. Rigid grids, extreme type scale contrast, utilitarian color, analog degradation effects. For data-heavy dashboards, portfolios, or editorial sites that need to feel like declassified blueprints.
Web search, scraping, extraction, crawling, and monitoring via ScrapeGraph AI CLI.
Skill for working with Firebase Hosting (Classic). Use this when you want to deploy static web apps, Single Page Apps (SPAs), or simple microservices. Do NOT use for Firebase App Hosting.
Deploy and manage web apps with Firebase App Hosting. Use this skill when deploying Next.js/Angular apps with backends.
Deploy applications and websites to Vercel. Use when the user requests deployment actions like "deploy my app", "deploy and give me the link", "push this live", or "create a preview deployment".
Build SEO-optimized pages at scale using templates, data, and proven playbook patterns.
Design and build isolated, reusable Convex backend components with clear boundaries and app-facing wrappers.
Deploy and manage projects on Vercel using token-based authentication. Use when working with Vercel CLI using access tokens rather than interactive login — e.g. "deploy to vercel", "set up vercel", "add environment variables to vercel".
Opus.ai: Revolutionize Your Web Experience
Build a no-code AI app in minutes.
An IDE for code migration from legacy to modern frameworks through coding agents.
Automate CGI animation in live-action scenes
Branded artistic QR-code concepts
Launch a website in seconds with AI.
Streamline Your Coding Experience with AI Code Helper
Convert any screenshot or design to clean code.