Repo layout
Where things are in sales.demos, and the handful that are not where you would guess. Start with the repo's Getting started if you have not cloned it yet.
The tree
.claude/skills/<name>/SKILL.md in-repo skills, discovered when the repo is open
assets/aap-branding/ AAP gateway config inputs — NOT documentation
collections/requirements.yml what your laptop and the EE install
env-urls.yml GITIGNORED, generated — product URLs + credentials per env
hub/ what Private Automation Hub SYNCS (generated)
inventory/
hosts.yml one host per environment — never share one
group_vars/
aap/ shared config: job templates, workflows, credentials
sandbox/ demo/ edge/ per-environment connection settings:
connection.yml committed — hostnames, API URLs, namespaces
local.yml.example copy to local.yml and fill in your cluster
local.yml GITIGNORED per-SE repoint overlay
playbooks/ the work: one playbook per phase
group_vars/all/
secrets.yml GITIGNORED, vault-encrypted — the ONLY secrets file
secrets.yml.example the contract you build it from
terraform/ocpvirt/ keyed by PLATFORM, not demo — demos reuse platforms
utilities/ build, check and generate scripts
env-urls.yml is at the root, not in inventory/. Every command passes
-i inventory, and Ansible parses every file in that directory as an inventory
source — the generated file used to live there and printed
Skipping key (portal) in group (sandbox) warnings on every run
(#582). Regenerating
removes a leftover copy at the old path.
AAP objects are config-as-code in inventory/group_vars/aap/.
controller_templates.yml and controller_workflows.yml hold the job templates
and workflows, applied by playbooks/config.yml. What AAP ends up with is listed
in Running from AAP.
There is no docs/ directory. Documentation lives on this site.
Not where you would guess
hub/ is not collections/
collections/requirements.yml is what your laptop and the execution environment
install. hub/*-requirements.yml is what Private Automation Hub syncs from
upstream. Different direction, different lifecycle — mixing them up is the
likeliest mistake in the PAH use case.
assets/aap-branding/ is not documentation
However much it looks like screenshots. gateway_settings.yml reads
logo-<env>.png.b64 from there at playbook run time, including from AAP's SCM
checkout, so deleting any of it breaks config.yml. See
its README.
secrets.yml sits beside the playbooks, not the inventory
AAP's SCM inventory sync runs ansible-inventory, which parses every
group_vars file next to the inventory. A vaulted file there fails the sync
with ERROR! Attempting to decrypt but no vault secrets found, and AAP refuses
Vault credentials on SCM inventory sources, so it cannot be given the password.
Beside the playbooks, it loads for every play and stays out of the sync.
The overlay is local.yml, not connection.local.yml
Ansible loads a group_vars/<group>/ directory in sorted order and the last
file wins. connection.local.yml sorts before connection.yml and loses
silently — you would run against the committed cluster believing you had
repointed. How the overlay reaches AAP is in
Reusing this repo.
Working across the image factory and this repo
The golden images are split across two repos on purpose.
image.builder.pipeline
builds and publishes them; sales.demos points a cluster at a published image.
The only thing binding them is a containerdisk tag, carried in
quay_windows_image and quay_rhel9_image in
inventory/group_vars/<env>/connection.yml.
Most work needs only one repo. When it spans both — the edge / SNO demo does by construction — start the agent in sales.demos:
cd sales.demos && claude .
.mcp.json there is project-scoped, so the cluster MCP servers load only in a
session started in that directory, and the factory repo has none. From there you
can cd ../image.builder.pipeline and run its playbooks anyway — the working
directory does not restrict shell access.
Its skills are the exception. Skills are discovered from the directory the agent starts in, so the factory's own skills are not reachable from a session started in sales.demos. Open a second session there to use them.