Skip to content

feat(skills): add the catalog entry skill for Hyperloom bootstrap - #1515

Open
lishuoshuo-amd wants to merge 7 commits into
mainfrom
feat/catalog-entry-skill
Open

lishuoshuo-amd wants to merge 7 commits into
mainfrom
feat/catalog-entry-skill

Conversation

@lishuoshuo-amd

@lishuoshuo-amd lishuoshuo-amd commented Sep 15, 2026

Copy link
Copy Markdown
Contributor

Description

amd/skills now federates every catalog skill from the product repo that owns it: the skill lives here, and the catalog imports a copy nightly. This adds hyperloom-workload-optimizer to this repo so that import has a source.

This is an alternative to #1482, which copies the catalog's current tree into this repo. Please take this one instead and close that.

What this skill holds

Only the bootstrap: confirm the workspace, pip install --target ., run /hyperloom-setup, then hand the run to the skill that owns it.

Everything after setup already ships with the runtime, so it stays in step with the installed version by construction:

  • hyperloom-setup — credentials, USER_DATA_PATH, run mode, Docker target host, bare-metal framework install
  • the demo skills — a workload preset and the container lifecycle
  • inference_optimizer — launcher gates, resume, monitoring

It is the agent-facing form of examples/README.md, which stays as the human quickstart.

Placement

examples/skills/hyperloom-workload-optimizer/, beside the README it mirrors and one level up from the demo skills it hands off to.

Unlike those four demo skills, it has no data-files entry in pyproject.toml, and that is deliberate rather than an omission: a user follows this skill before the wheel exists, so shipping it in the wheel would only overwrite the copy they installed from the catalog.

What it deliberately leaves out

The catalog copy was written for a workspace with no Hyperloom in it, so it carries its own launch.sh, resume.sh, preflight.py and their tests. Importing those would give this repo a second launch path that drifts from the CLI it wraps, so they are not here, and the skill says so rather than leaving it to the reader.

Also out: skill-card.md (the catalog synthesizes one on import, as it does for the federated TraceLens skill) and evals/ (federation does not carry it in either direction — the datasets stay in amd/skills).

Notes

  • The description is kept byte-identical to the catalog's, because the catalog's routing cases are graded against it.
  • Structural limits check out: name matches the directory, description 943/1024 chars, body 126/500 lines.

Follow-up (separate PRs on amd/skills)

  1. Register this path in .github/federation.json.
  2. Realign two behavioral cases in skills/hyperloom-workload-optimizer/evals/evals.json that currently grade the catalog's own scripts (hyperloom-launcher-gates pins install.sh / kernel-agent.env.sh; hyperloom-workload-intake asks about workload.env). Those belong to the wheel-installed optimizer skill, which a headless run without a wheel cannot reach. The walkthrough needs the same pass.

Test plan

  • test_packaging_lint.py passes (7 passed); no asset under src/ changed, so nothing new to declare
  • Relative link to examples/README.md resolves from the new location
  • Markdown-only change, so Lint and Tests with Coverage are skipped by their paths-ignore
  • Reviewer check: the handoff names the run skills the wheel actually installs

amd/skills now federates every catalog skill from the product repo that
owns it, so `hyperloom-workload-optimizer` has to live here and the
catalog vendors a copy nightly.

What it holds is only the bootstrap: confirm the workspace, install the
wheel, run `/hyperloom-setup`, then hand the run to the skill that owns
it. Everything after setup already ships with the runtime --
`hyperloom-setup` for credentials and run mode, the demo skills for a
workload preset, `inference_optimizer` for the launcher gates, resume and
monitoring -- so they stay in step with the installed version by
construction.

This is the agent-facing form of examples/README.md, which stays as the
human quickstart.

The catalog copy of this skill was written against an empty workspace and
carries its own launch, resume and GPU-preflight scripts. Those are not
imported: a second launch path in the product repo would drift from the
CLI it wraps. The skill says so explicitly rather than leaving it to the
reader.

No packaging change. The entry point earns its keep before the wheel is
installed, so shipping it in the wheel would only overwrite the copy the
user installed from the catalog.

Co-authored-by: Cursor <cursoragent@cursor.com>
@lishuoshuo-amd
lishuoshuo-amd requested a review from a team as a code owner September 15, 2026 09:03
lishuoshuo-amd and others added 2 commits September 16, 2026 11:23
… hands off to

The skill's whole job is to reach the demo skills in examples/, and its
prose is the agent-facing form of examples/README.md, so it reads better
next to both than at the repository root.

It stays out of pyproject's data-files on purpose, unlike the four demo
skills one level up: this entry point is what a user follows before the
wheel exists, so shipping it would only overwrite the copy they installed
from the catalog.

Co-authored-by: Cursor <cursoragent@cursor.com>
The run skills report the plan before starting; the walkthrough in
amd/skills already promises the user is asked, and an unattended run that
holds the GPU for hours should not begin on a plan nobody accepted.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ates

amd/skills imports this folder nightly and validates it there, so until
now a broken edit here would surface as a red bot pull request in that
repo, where nobody on this side is watching.

Nothing in this repo would have caught it either: the skill is markdown,
and lint.yml and tests-coverage.yml both ignore **/*.md, so the one file
that ships to the catalog was the one file no job read. The new workflow
carries no paths-ignore for exactly the reason packaging.yml carries
none.

The four assertions are the rules the catalog enforces, and the
description is the one with no room left: at 943 of 1024 characters, a
single added trigger sentence takes it to 1098. Each assertion was
checked against the break it exists for -- an over-long description, a
name that no longer matches the directory, and a moved folder, which is
the case that also needs a federation.json pull request upstream.
The workflow and its test are named for the relationship they guard --
this folder is federated out of here -- rather than for the catalog on
the other end of it.

Both keep their own name rather than #1482's `AMD Skills Checks`, which
belongs to a workflow that really does call the catalog's skillscope
harness. This one asserts four rules itself, so borrowing that name would
show a green check for a harness that never ran.
The rename commit carried the git mv but not the edits inside the file,
so the workflow still named itself Catalog skill and ran a test path that
no longer existed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant