Skip to content

feat(@schematics/angular): install official agent skills#33553

Closed
rainerhahnekamp wants to merge 1 commit into
angular:mainfrom
rainerhahnekamp:codex/install-angular-agent-skills
Closed

feat(@schematics/angular): install official agent skills#33553
rainerhahnekamp wants to merge 1 commit into
angular:mainfrom
rainerhahnekamp:codex/install-angular-agent-skills

Conversation

@rainerhahnekamp

Copy link
Copy Markdown

PR Checklist

PR Type

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • CI related changes
  • Documentation content changes
  • Other... Please describe:

What is the current behavior?

Angular CLI can generate AI context and MCP configuration for supported coding agents. It does not, however, install Angular's official Agent Skills. Developers must know that the skills exist, find them, and install them separately.

Current models produce better React code than Angular code. Public framework-level evaluation supports this gap: DesignBench found large differences between web frameworks, with Angular performing worst among the frameworks evaluated for code generation. Angular-specific, version-aligned guidance therefore has unusually high value, but today it is not available out of the box.

Issue Number: N/A

What is the new behavior?

When a user selects one or more supported AI tools during ng new or ng generate ai-config, the CLI also asks whether to install the official Angular Agent Skills. The default is yes, but the user can decline.

If accepted, the CLI runs the Skills CLI once after file generation and installs angular-developer and angular-new-app locally for every selected agent. Existing global skills remain available because no global installation or removal is performed. Agent names are translated to the identifiers understood by the Skills CLI, including GitHub Copilot for the VS Code integration.

The installation is deliberately best-effort. A failure, including an offline run, emits a warning but does not fail project generation. Telemetry for this subprocess is disabled. For new projects it runs after package installation and before Git initialization, so the generated local skill files are included in the initial commit.

The skills source is pinned to the Angular release line derived from the CLI's existing stamped latestVersions.Angular value. For example, a CLI built for 22.0.x installs from the 22.0.x branch of angular/skills, even after 22.1 has been published. This follows the CLI's existing release stamping instead of introducing another version constant. It assumes the corresponding branch in angular/skills is available when a CLI release is published.

Why this approach

Frameworks currently use several approaches:

  • Next.js exposes version-matched documentation and an AGENTS.md convention to make agents consult it.
  • Expo ships agent guidance and project-aware tooling as part of its developer workflow.
  • Laravel Boost provides an interactive installer that detects the project's IDEs and agents.
  • Flutter and Firebase document explicit Skills CLI installation commands.

The alternatives considered here were documentation only, embedding copies of the skills in Angular CLI, installing globally, installing without consent, and maintaining an Angular-specific installer. Documentation alone keeps the discovery problem. Embedded copies duplicate the separately maintained official skills and make updates harder. Global installation mutates user-wide configuration and can affect unrelated projects. Installation without a prompt is surprising and unsuitable for offline workflows. A custom installer would duplicate agent discovery and installation behavior already provided by the Skills CLI.

The selected design keeps the existing Angular CLI AI configuration flow, asks for consent, installs project-local copies for each selected agent, uses the official cross-agent installer, and couples the skills branch to the CLI release line.

Does this PR introduce a breaking change?

  • Yes
  • No

Other information

The implementation uses a private hidden schematic and RunSchematicTask; it does not add a public Angular DevKit task API or modify the shared package-manager executor.

Validation performed:

  • pnpm bazel test //packages/schematics/angular:test //packages/angular_devkit/schematics:schematics_api --test_output=errors
  • ESLint on the changed TypeScript files
  • Prettier check on all changed files
  • git diff --check

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant