Skip to content

feat(menu): describe skills with title, description and tags - #447

Draft
edwinyjlim wants to merge 4 commits into
mainfrom
dag/c1-menu-metadata
Draft

edwinyjlim wants to merge 4 commits into
mainfrom
dag/c1-menu-metadata

Conversation

@edwinyjlim

@edwinyjlim edwinyjlim commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

Summary

Every skill-menu entry and bundle variant carries a title, a description and tags, so the wizard can pick skills by tag. Wizards already in the field ignore the new fields and get the same files as before. The context/agents/ README points to the wizard's own copy of the prompts.

Stack

The four PRs, in merge order:

PR What it does How it fits in
C1 · #447 (this PR) Adds a title, description and tags to every skill-menu entry. Wizards in the field ignore the new fields. Ships first, in a context-mill release. W1 picks skills by these tags, and W1 and W2 record their fixtures and prompts from this release.
W1 · PostHog/wizard#1497 Adds project traits and a tag-based skill pick that runs beside today's pick, plus the wizard-agent-dag flag that decides which pick installs. Base of the wizard stack, on main. Reads C1's tags but works without them. D1 builds on its traits service, and W2 on its traits and flag.
D1 · PostHog/wizard#1499 Records every framework write as a project trait with its source. No flag; the values a run uses don't change. On W1. Extends W1's traits service, so the traits carry the framework as it was written. W1's skill pick and W2's flow conditions read it.
W2 · PostHog/wizard#1498 Moves the task graphs and prompts of the five orchestrator programs into the wizard. With wizard-agent-dag on, runs use them instead of the fetched prompts and the planner's graph. Top of the stack, on D1. Its flow conditions read W1's traits, W1's flag switches it on, and its prompts come from C1's release.

W1, D1 and W2 merge in that order and ship together in one wizard release, with wizard-agent-dag off. A later PR, W3, removes the flag and the paths it replaced after a week at 100%.

Menu metadata

flowchart LR
  sources["Skill sources and config"] --> build["Build"]
  build --> menu["skill-menu.json<br/>entries and bundle variants<br/>with title, description, tags"]
  build -.-> warn["Warning for each skill<br/>that has no tags"]
  menu --> wizard["New wizard<br/>picks skills by tag"]
  menu --> older["Wizards in the field<br/>ignore the new fields"]
Loading

An entry's tags are its skill's own tags plus:

Tag Added when
framework:<framework> the skill serves a framework
its group, such as integration the skill belongs to a group
default the skill is its group's default variant

Two entries from this build:

Entry Title Tags
integration-nextjs-app-router Next.js App Router nextjs react ssr app-router javascript javascript_web javascript_node framework:nextjs integration default
integration-django Django django python framework:django integration

Build checks

Check Fails when
npm run check:bundle-diff -- <baseline-dist> [dist] two builds differ in anything beyond title, description and tags
Old-wizard compatibility test the wizard's skill resolution (expandBundleEntry, resolveSkillVariantId, the spellbook's selectSkills) picks differently from the snapshot of main's build: 41 prompts, 1,145 variant resolutions, 386 spellbook selections

The build also warns, without failing, about skills that have no tags.

Agent prompts

The wizard bundles its own copy of the agent prompts at src/programs/<id>/agent/. The copy in context/agents/ is published for wizard versions that fetch their prompts, and its README asks for a prompt change in both places.

Test plan

  • npm test: 29 files, 226 tests pass, including the compat test against main's snapshot
  • check:bundle-diff between clean builds of main and this branch: no differences beyond title, description and tags across 2,862 files, so every SKILL.md, reference and agent prompt is byte-identical
  • After release: a current npm wizard smoke run against the new latest

🤖 Generated with Claude Code

…agent prompts

Every skill-menu entry and bundle variant carries `title`, `description`
and `tags`. The tags are the skill's own tags plus `framework:<framework>`
for the framework it serves, its group, and `default` when set. The
wizard selects skills by these tags; old wizards ignore the new fields.

Agent prompts in `context/agents/` are frozen: the wizard bundles its own
copy, and this one keeps publishing for wizard versions already in the
field. `scripts/check-agents-frozen.sh` fails a pull request that edits it.

`check:bundle-diff` compares two builds and fails on any difference beyond
the menu metadata. The old-wizard compatibility test replays the
wizard's skill resolution and checks that agent assets, skill variants
and spellbook selections stay the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🧙 Wizard CI

Run the Wizard CI and test your changes against wizard-workbench example apps by replying with a GitHub comment using one of the following commands:

Test all apps:

  • /wizard-ci all

Test all apps in a directory:

  • /wizard-ci ai-observability
  • /wizard-ci basic-integration
  • /wizard-ci feature-flags
  • /wizard-ci mcp-analytics
  • /wizard-ci replay-vision
  • /wizard-ci revenue
  • /wizard-ci self-driving
  • /wizard-ci warehouse
  • /wizard-ci warehouse-seeded

Test an individual app:

  • /wizard-ci ai-observability/anthropic
  • /wizard-ci ai-observability/google-adk
  • /wizard-ci ai-observability/groq
Show more apps
  • /wizard-ci ai-observability/manual-capture
  • /wizard-ci ai-observability/openai
  • /wizard-ci ai-observability/openai-agents
  • /wizard-ci ai-observability/opentelemetry
  • /wizard-ci ai-observability/vercel-ai
  • /wizard-ci basic-integration/android
  • /wizard-ci basic-integration/angular
  • /wizard-ci basic-integration/astro
  • /wizard-ci basic-integration/django
  • /wizard-ci basic-integration/fastapi
  • /wizard-ci basic-integration/flask
  • /wizard-ci basic-integration/flutter
  • /wizard-ci basic-integration/javascript-node
  • /wizard-ci basic-integration/javascript-web
  • /wizard-ci basic-integration/laravel
  • /wizard-ci basic-integration/next-js
  • /wizard-ci basic-integration/nuxt
  • /wizard-ci basic-integration/python
  • /wizard-ci basic-integration/rails
  • /wizard-ci basic-integration/react-native
  • /wizard-ci basic-integration/react-router
  • /wizard-ci basic-integration/sveltekit
  • /wizard-ci basic-integration/swift
  • /wizard-ci basic-integration/tanstack-router
  • /wizard-ci basic-integration/tanstack-start
  • /wizard-ci basic-integration/vue
  • /wizard-ci feature-flags/django
  • /wizard-ci feature-flags/next-js
  • /wizard-ci mcp-analytics/custom-dispatcher
  • /wizard-ci mcp-analytics/typescript-sdk
  • /wizard-ci replay-vision/javascript-node
  • /wizard-ci replay-vision/next-js
  • /wizard-ci replay-vision/react-vite
  • /wizard-ci revenue/stripe
  • /wizard-ci self-driving/astro
  • /wizard-ci self-driving/fastapi
  • /wizard-ci self-driving/nuxt
  • /wizard-ci self-driving/react-router
  • /wizard-ci self-driving/sveltekit
  • /wizard-ci warehouse/monorepo-env
  • /wizard-ci warehouse/multi-source-next
  • /wizard-ci warehouse/stripe-node
  • /wizard-ci warehouse/zero-source
  • /wizard-ci warehouse-seeded/next-stripe
  • /wizard-ci warehouse-seeded/next-stripe-declined

Test against a wizard branch:

  • /wizard-ci all wizard:my-branch

Add wizard:<branch> to any command above to pin the wizard branch. It defaults to main.

Results will be posted here when complete.

edwinyjlim and others added 3 commits October 29, 2026 12:49
…verride label

The agents-frozen check runs in its own workflow, so adding or removing the
label re-runs only that check. With the label it passes with a warning to make
the same fix in the wizard's copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The context/agents README says the wizard bundles its own copy of the
prompts and that a prompt change goes in both places; review keeps the
two in step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@edwinyjlim edwinyjlim changed the title feat(menu): describe skills with title, description and tags; freeze agent prompts feat(menu): describe skills with title, description and tags Oct 29, 2026
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