Publishing House Integration
Skills support two modes: interactive (human at terminal) and headless (Publishing House via ph_payload). Zero changes to PH β the integration is entirely in the skills.
How It Works

verify-content β PH Headless
PH sends:
ph_payload:
content_path: content/modules/ROOT/pages/
modules: [] # empty = all modules
lab_type: workshop
shared_context:
defined_attributes: {ocp_version: "4.18", user: user1}
nav_order: [index, 01-overview, 02-details, 03-module-01]
first_use_map: {AAP: 01-overview.adoc}
What happens inside:

PH receives:
{
"findings": [
{
"id": "E.3a",
"module": "03-module-01.adoc",
"line": 47,
"severity": "High",
"message": "[source,bash] missing role=execute"
}
],
"summary": {"critical": 0, "high": 1, "medium": 0, "warnings": 3}
}
create-lab β PH Headless
PH sends:
ph_payload:
target_dir: content/modules/ROOT/pages/
mode: new
spec:
lab_name: OpenShift Pipelines Workshop
audience: intermediate
learning_objectives:
- Deploy a Tekton pipeline
- Configure event triggers
- Monitor build results
business_scenario: ACME Corp needs to modernize their CI/CD pipeline...
duration: 90min
module_outline: |
Module 1: Pipeline setup (~30 min)
Module 2: Triggers (~30 min)
Module 3: Monitoring (~30 min)
env:
ocp_version: "4.18"
attributes: {user: user1, password: openshift}
writing_style: "conversational, short sentences, active voice"
What happens inside:

PH receives:
{
"files_created": [
"index.adoc",
"01-overview.adoc",
"02-details.adoc",
"03-module-01-pipeline-setup.adoc"
],
"nav_updated": true,
"quality": {"critical": 0, "high": 0, "warnings": 1},
"warnings": ["Module has only 1 exercise β consider adding a second"]
}
Agent Communication Flow
When any showroom skill runs β interactive or headless β agents communicate through their JSON outputs:

Key design decisions:
- Agents never talk to each other directly β all communication goes through the orchestrator
- Agents return JSON only β the orchestrator handles all human-facing output
SHARED_CONTEXTis built once by the orchestrator and injected into every agent β agents donβt read across files
Skill Comparison: Interactive vs Headless
| Β | Human interactive | PH headless |
|---|---|---|
| Trigger | /verify-content |
ph_payload JSON |
| Questions asked | Yes (if repo not found) | Never |
| Output format | Findings table + fix loop | Structured JSON |
| Agents used | Same agents, same models | Identical β no difference |
| Performance | Same | Same |
| Fix loop | Yes β user picks issues | No β PH handles fixes |
Supported Skills
| Skill | ph_payload supported | Notes |
|---|---|---|
showroom:verify-content |
β | Returns findings JSON |
showroom:create-lab |
β | Returns files_created + quality JSON |
showroom:create-demo |
β | Same as create-lab |
agnosticv:catalog-builder |
β | PH doesnβt drive catalog creation |
ftl:rhdp-lab-validator |
β | Requires live cluster connection |