* feat(website): rebuild site on Primer Brand design prototype
Replace the Astro + Starlight site with the Brand Engineering design
prototype, ported component-for-component onto plain Astro + React
islands. The prototype is treated as the authority on markup and
styling; dynamic data is injected into its components rather than the
components being reinterpreted.
Framework:
- Remove @astrojs/starlight entirely, along with its document shell,
search, footer and language selector. BaseLayout.astro now owns the
document head, CSP, social meta and analytics.
- Add @primer/react-brand and @astrojs/react. Alias the package to its
ESM build in vite.resolve, since the default CJS entrypoint breaks
named-export detection during SSR, and mark it noExternal so its
stylesheet imports resolve.
- Promote pagefind to an explicit devDependency; it was previously
pulled in transitively by Starlight.
Pages: home, the five catalogs, the five detail routes, contributors,
Playbook index and articles, and the cookbook are all rendered by
ported prototype components inside a shared PageShell.
Detail pages share a DetailChassis (hero, breadcrumbs, sticky TOC with
scroll-spy, prev/next) while keeping what makes each type distinct: a
file switcher over bundled skill assets, an included-items grid and
external provenance for plugins, and a hero-scale preview for
extensions.
i18n: resolve translated Playbook entries via Astro.currentLocale
inside the shared article route instead of separate [locale] routes.
The explicit routes collided with the i18n fallback routes, so
translated articles were being shadowed by their English originals and
900 nonsensical double-locale pages were emitted.
Search: TopNavSearch now queries the Pagefind index client-side in
addition to the static resource index, merging on href and degrading
to the static index in dev, where no index has been built.
Also delete the superseded vanilla-TS page renderers and Astro
partials, which the ported React components fully replace.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): resolve accessibility violations in ported detail pages
Fixes the three axe violations surfaced by the a11y audit after the
Primer Brand redesign:
- aria-prohibited-attr: `aria-label` was set on roleless `div`s in
InstructionDetail and PluginDetail. The "Applies to" list now uses
list/listitem roles; plugin provenance uses a group role.
- scrollable-region-focusable: the install command `code` element
overflows horizontally but was not keyboard reachable. Added
tabIndex to all three render sites.
- color-contrast: the Playbook "New" label used the brand's
success-fg on success-subtle, reaching only 4.09:1 in light mode.
Stepped one down the same green ramp for 6.14:1. Scoped to light
mode; dark mode already passed and its green-7 is near-black.
Also corrects the stale route list in the audit script: /hooks/,
/workflows/ and /tools/ have never existed as pages.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): collapse long filter facets and unpin detail-page footer
Two issues surfaced by review of the redesigned site:
Catalog facets rendered every option. The prototype's filter groups were
built from small hardcoded arrays, but real data produces 193 tool options
on /agents/ and 245 "Applies to" values on /instructions/. The sidebar grew
to ~10,000px and stretched the whole catalog row, pushing the (already
present) pagination control far below the fold so it read as missing.
Adopt the prototype's own solution for this, which it had already applied to
the extensions page: collapse groups past 10 options behind a "Show N more"
toggle, and cap .filterOptions with an internal scroll area. Ported verbatim
to the agents, instructions, skills, and plugins catalogs.
Detail pages scroll inside .scrollHost rather than the document, but the
footer came from PageShell, outside that element, so it stayed pinned over
the content instead of appearing at the end. The prototype renders its
footer inside the scroll host; PageShell now takes a renderFooter flag so
DetailChassis can do the same. LearningArticleLayout already did this.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): source contributor count from .all-contributorsrc
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Removing playwright-mcp files
* fix(website): resolve article text colour inside themed scope
Injected markdown inherited color from body, which sits outside the
ThemeProvider and always resolved the light-mode token, making body
copy unreadable in dark mode.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): drop 'In this article' TOC from resource detail pages
Resource detail pages (agent, instruction, skill, plugin, extension) are
not articles, and their markdown headings do not form a meaningful
outline. Playbook and cookbook articles keep their TOC.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* style(website): thin the sidebar scrollbar on detail pages
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): use themed link colour for markdown links in dark mode
Raw markdown-injected <a> elements previously fell back to the browser's
default blue/purple link colours, which are harsh against the dark-mode
background. Route them through --brand-color-text-link-rest (and the
pressed/hover token) instead.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): apply ThemeProvider to Playbook article layout so dark mode works
LearningArticleLayout replaces PageShell for Playbook articles but never
wrapped itself in a ThemeProvider, so its useTheme() call always fell back
to Primer's light default regardless of the site's actual theme preference.
Split the component into a thin ThemeProvider wrapper plus the existing
implementation (now LearningArticleLayoutBody), matching the pattern already
used by PageShell.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): align raw markdown code blocks with prototype styling
Astro's default Shiki config bakes in the fixed 'github-dark' theme's
literal colors, ignoring the site's actual light/dark mode - this made
plain markdown-fenced code blocks (as opposed to the prototype's own
SyntaxHighlightedCode component) always render a hardcoded dark box
regardless of theme.
Switch shikiConfig to the 'css-variables' theme so highlighted tokens
resolve through --astro-code-* custom properties instead, then map
those to the same brand color tokens the prototype's codeBlock uses
(canvas-subtle background, border-muted border, brand text/link/accent
colors for tokens). Raw markdown code blocks now match the prototype's
bordered, canvas-subtle surface in both color modes.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): show real contributor count on every page shell
The contributor badge rendered 0 on Playbook, Cookbook, home and custom
pages, and reverted to 0 on hydration everywhere else.
Two causes:
- Shells that bypass PageShell (LearningArticleLayout, PlaybookIndex,
PlaybookArticleBody, CookbookIndex, HomePage, TopNav, Custom) defaulted
contributorsTotal to 0 instead of the site-data value.
- site-data read .all-contributorsrc with node:fs at module scope. Those
shells are client:load hydrated, so the read threw in the browser and
the count reset to 0 after hydration.
The count is now read once in astro.config.mjs and inlined through
vite.define as __CONTRIBUTORS_TOTAL__, so it is a literal in both the
server render and the client bundle.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* style(website): soften catalog filter list scrollbars
The filter option lists only set scrollbar-width: thin, so they rendered
the platform default scrollbar. They now use the same muted, transparent
track treatment as the article sidebar, which resolves through
--brand-color-border-muted in both colour modes.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* refactor(website): remove Access from tools panel from plugins catalog
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* feat(website): make Copilot app deep link the default plugin install
Plugin detail pages exposed only a copyable CLI command. They now lead
with a ghapp://plugins/install deep link in the same split-button
ActionMenu the other detail pages use, keeping the CLI command available
as a Copy action in the menu.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): migrate markdown remark plugins to unified processor
Astro 7 deprecates markdown.remarkPlugins in favour of passing a
unified() processor from @astrojs/markdown-remark. Moves the GitHub
admonitions plugin into markdown.processor, clearing the startup
deprecation warning. shikiConfig stays at the markdown level as it is
not part of UnifiedProcessorOptions.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): fail the build when the contributor manifest is unreadable
Silently falling back to 0 is how the contributor badge regressed before,
so a missing or malformed .all-contributorsrc now throws in production
builds and warns in dev instead of shipping a wrong count.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Fix codespell and CodeQL findings in website components
- Fix real typos flagged by codespell: 'Couldn't' -> 'Couldn't'
(plain apostrophe, matching convention elsewhere in JSX) and
'Unparseable' -> 'Unparsable' in catalogFilters.ts
- DetailChassis.tsx: replace sequential HTML entity unescaping with a
single-pass replace to avoid double-unescape/injection risk flagged
by CodeQL
- SyntaxHighlightedCode.tsx: make the markup HTML comment regex match
newlines so multi-line comments cannot break out of the token
(Bad HTML filtering regexp)
- pagefindSearch.ts: strip HTML tags in a loop until stable so nested/
malformed markup can't survive a single-pass strip (Incomplete
multi-character sanitization)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): harden detail heading sanitization
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* github-app settings
* Fix light-theme flash before dark mode applies on page load
ThemeProvider colorMode="auto" from @primer/react-brand only resolves
the real OS colour-scheme preference inside a useEffect, so its first
render is always light. Add a synchronous inline script in <head> that
reads prefers-color-scheme and stamps data-color-mode onto <html>
before first paint, using the same attribute Primer Brand's CSS
already keys off. React's own data-color-mode on the inner element
takes over once it hydrates.
Fixes#2820
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Fix light-mode scrollbar rendering in dark mode on Playbook articles
.scrollHost (the article scroll region shared by Playbook articles,
cookbook recipes, and extension detail pages) never declared a
color-scheme, so the browser always painted its native scrollbar using
light-mode chrome regardless of the site's active theme. Set
color-scheme: light dark as a baseline and pin it explicitly to the
resolved data-mode, and add scrollbar-color so Firefox picks up the
themed thumb colour too.
Fixes#2822
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Widen and center extension card preview image
The Canvas Extensions overview card thumbnail was fixed at 360px, leaving
uneven left/right margins within the card. Let it grow up to 440px and
center it with margin-inline: auto so the image is balanced within the
card.
Fixes#2823
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Link Submit CTAs to each resource's contribution section
The bottom "Submit" CTA on every catalog page pointed at the top of
CONTRIBUTING.md, forcing readers to scroll and hunt for the relevant
"how to contribute" instructions for that specific resource type.
Point each catalog's CTA directly at the section that documents how to
contribute that resource: agents, instructions, plugins, and skills
link to their dedicated docs/README.*.md "How to Contribute" section,
and canvas extensions link to CONTRIBUTING.md's "Adding Canvas
Extensions" section (extensions have no dedicated README doc).
Fixes#2824
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Center-align "View on GitHub" source link with its icon
The source-link label sat on the default inline text baseline instead
of being vertically centered against the GitHub mark icon next to it,
so the two visually drifted apart. Wrap the icon and label in an
inline-flex container with align-items: center so they share the same
vertical center.
Fixes#2825
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Fix mobile resource and Playbook article layout issues
Clean up the shared resource detail and Playbook article styling so mobile pages no longer show unintended divider lines or overflow horizontally.
- remove article-section divider borders so content separates with spacing instead of white/muted horizontal rules
- drop the detail-page breadcrumb divider on mobile to match the Playbook mobile treatment
- constrain raw markdown pre/code blocks to their column and let long code scroll horizontally
- allow metadata chips to wrap inside the mobile sidebar instead of widening the page
Fixes#2827Fixes#2828Fixes#2829
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Only show language selector on pages with real translations
Most of the site is English-only, but the language selector rendered
unconditionally on every page even though only the
learning-hub/copilot-workshops/app track has mirrored translations.
Add hasTranslations() to playbook-routes.ts, thread a showLanguageSelect
prop through PageShell, TopNav and LearningArticleLayout, and compute
it from the article's englishId in learning-hub/[...slug].astro so only
translated Playbook articles show the selector.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Add Workshop recommended card to Playbook index
The copilot-workshops hands-on tracks (VS Code, CLI, App, Cloud harnesses) existed and rendered correctly at direct URLs, but had no entry point in the new Playbook index UI -- the Articles grid intentionally excludes nested multi-page tracks by design, and the only prior link was buried in body prose.
Adds a 'Workshop' recommended card (following the existing cli-for-beginners precedent) linking to /learning-hub/copilot-workshops/, and registers the route in pageHref.ts.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Add a Workshop content-type filter to the Playbook
The hands-on workshop tracks (CLI for Beginners, and the copilot-workshops harnesses) had no shared way to discover them from the Articles grid -- each had a recommended card, but no consistent categorization.
Tags both workshop landing pages 'workshop', adds a new 'Workshop' Kind/content-type facet (derived the same way as the existing Terminology/Tutorial/Example kinds), and includes both landing pages in the Articles grid dataset so filtering by Content type > Workshop surfaces exactly the two tracks.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Fix P0/P1 items from Brand Engineering audit (brand-experience#458)
- P0: html lang now reflects the actually-rendered locale for a page,
not the requested URL locale (BaseLayout.astro, playbook-routes.ts,
PlaybookArticle.astro)
- P0: markdown tables get tabindex=0 via enhanceMarkdownA11y, which
Playbook articles were never running (PlaybookArticle.astro)
- P0: long inline content and breadcrumbs no longer clip on narrow
viewports (dotnet-upgrade.module.css, github-copilot-app.module.css)
- P1: strip the markdown document's own leading H1 so detail pages
don't render the title twice (detail-page.ts)
- P1: document the hero secondary-CTA hex and InstructionsCatalog
illustration colors as intentional prototype-fidelity values rather
than defects (styles.module.css)
- P1: add explicit Heading size props in PlaybookIndex.tsx
Ref: github/brand-experience#458
* Rename Playbook to Learning Hub across UI and code
Renames PlaybookIndex.tsx -> LearningHubIndex.tsx, PlaybookArticle.astro
-> LearningHubArticle.astro, PlaybookArticleBody.tsx ->
LearningHubArticleBody.tsx, PlaybookIcon.tsx -> LearningHubIcon.tsx,
lib/playbook-routes.ts -> lib/learning-hub-routes.ts, and
lib/playbook-article.ts -> lib/learning-hub-article.ts. Updates all
call sites, UI copy, TopNav's playbookLabel prop, nav/search entries,
and home page CTA data to use Learning Hub terminology. URLs under
/learning-hub/* are unchanged.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Port github-copilot-app as bespoke Learning Hub article
Adopts the prototype's github-copilot-app.tsx directly as a dedicated React
component instead of rendering it through the generic markdown pipeline,
preserving its video carousel, comparison list, learn-more band, and other
bespoke JSX exactly as designed.
- New GithubCopilotApp.tsx under components/brand/learning-hub/, ported
near-verbatim from the prototype (data-wiring only: pageHref import swap,
media paths).
- The two large source videos (~23MB, ~32MB) are not committed; the article
falls back to their poster/webp images with a TODO to host them externally.
- learning-hub-bespoke-articles.ts lists slugs that bypass the generic
LearningHubArticle.astro pipeline.
- [...slug].astro branches to the bespoke component for "github-copilot-app"
(English only for now); all other slugs and locales keep the generic path.
* Port bespoke Learning Hub articles
Add bespoke Learning Hub article components for the remaining prototype-backed
article pages, wire the cookbook index to the data-driven port, and route the
CLI overview page through the new bespoke component.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Resolve merge validation blockers in astro config
* Regenerate README docs after merging origin/main
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Fix Learning Hub Get started pages disappearing after opening (#2960)
The bespoke Learning Hub article components (GithubCopilotApp,
AgentsAndSubagents, CopilotConfigurationBasics,
GithubCopilotTerminologyGlossary, UsingAutomationsInCopilotApp,
WhatAreAgentsSkillsInstructions, WorkingWithCanvasExtensions,
CliForBeginnersOverview, CookbookIndex) received the `pageHref` helper
as a function prop passed into a `client:load` React island. Functions
cannot survive Astro's client-hydration prop serialization, so the
prop arrived as `undefined` on the client. The page rendered correctly
server-side (visible briefly), then React threw
`TypeError: pageHref is not a function` during hydration and unmounted
the tree, making the page appear to disappear.
Fixed by having each component import the `pageHref` singleton
directly (as AgentDetail, HomePage, and the other catalog components
already do) instead of receiving it as a prop, and removed the now
unnecessary `pageHref={pageHref}` prop and its import from the two
Astro routes that render these islands.
Verified in the dev server: all 9 previously affected routes now
hydrate without error, and `npm run build` completes successfully
(1097 pages).
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Strip stray trailing divider from Learning Hub articles (#2961)
Several Learning Hub markdown articles end their body with a trailing
--- thematic break, left over from an authoring template. Rendered
as-is it produced an unlabeled <hr> sitting directly above the page
footer, with no heading/section boundary to justify it.
Fix this generically in buildArticleSections() by stripping a single
trailing <hr> from the rendered HTML before it's split into sections,
rather than hand-editing every affected content file. This also
protects future articles authored with the same trailing-rule habit.
Legitimate mid-content dividers (e.g. between CLI lesson steps) are
left untouched.
* Remove emojis from Learning Hub article nav (#2962)
CLI for Beginners lessons decorate their ## headings with emoji
(e.g. "🎯 Learning Objectives"), which is fine inline in the article
body but read as stray glyphs once surfaced as plain-text labels in
the "In this article" nav — other Learning Hub pages don't
emoji-decorate their nav, so this was inconsistent.
Add a shared stripEmoji() helper and apply it to the nav labels built
from markdown headings in LearningHubArticle.astro. The article body
headings themselves are untouched.
* Fix hero code blocks blending into background (#2963)
Detail page hero install-command code blocks (SyntaxHighlightedCode via
heroExtras) used the same background token as the hero surface itself
(--brand-color-canvas-subtle), making them visually indistinguishable
except for a thin border.
Add a scoped .heroContent .codeBlock override in both shared style
modules (dotnet-upgrade.module.css for catalog Detail pages/Cookbook,
github-copilot-app.module.css for Learning Hub) that sets the
background to --brand-color-canvas-default instead, so hero code
blocks stand apart from the hero background.
The base .codeBlock rule is left untouched since body-content code
blocks (e.g. Cookbook recipe steps) correctly rely on canvas-subtle
being distinct from the page's canvas-default background.
* Tie color-scheme to dark mode for native scrollbars (#2964)
Native scrollbars (the page scrollbar, and any overflow container
without custom scrollbar styling, e.g. code block <pre> elements) are
painted by the browser based on the color-scheme CSS property, not our
design tokens. Only a handful of scoped containers (.scrollHost,
.filterOptions, .sidebarSticky) had custom scrollbar-color rules; the
page scrollbar and plain code-block overflow scrollbars had no
color-scheme set at all, so they rendered with light OS-default
scrollbars even when data-color-mode="dark" was set on <html>.
Add a global rule tying html's color-scheme to the same
data-color-mode attribute BaseLayout.astro already stamps on <html>,
so every native scrollbar (and other UA-drawn form controls) follows
the site's theme.
* Unify article/detail page typography, tables, and dividers (#2965)
Raw markdown injected into .articleSection (Skill/Agent/Instruction/
Plugin/Extension Detail pages via dotnet-upgrade.module.css, and
Learning Hub articles via github-copilot-app.module.css) had no styling
for headings, tables, horizontal rules, blockquotes, or inline code, so
it fell back to inconsistent browser UA defaults -- most visibly,
tables rendered with no borders or header emphasis at all.
Add a shared set of rules to both CSS modules, scoped under
.articleSection, that:
- map raw h1-h6 onto the brand type scale (font, weight, line-height)
- give hr a full-width divider matching the border-muted token
- style blockquote with a left accent bar
- render inline `code` (outside <pre>) as a small chip, matching
.inlineCode used elsewhere for hand-authored tokens
- style table/th/td with bordered cells and a canvas-subtle header row,
scrolling horizontally on narrow viewports
Also fix skills/acquire-codebase-knowledge/SKILL.md: a stray blank
line inside the "Bundled Assets" table split it into a lone header row
and a second block with no header, so GFM table parsing stopped after
the first row and the remaining rows rendered as literal pipe-delimited
text instead of a table -- this was the exact bug shown in the issue
screenshot.
* fix: align previous/next navigation links horizontally on Detail pages
Detail page Previous/Up next links were stacked vertically. Change
.nextUp to a row layout (space-between) so Previous sits left-aligned
and Up next right-aligned on the same row, with a max-width: 40rem
media query reverting to a stacked column layout on small screens.
Use an explicit .nextUpNext modifier class (applied to the "Up next"
link specifically) with margin-inline-start: auto instead of a
positional :last-child selector, so the link right-aligns correctly
even when it is the only link present (e.g. the first item in a
catalog, which has no Previous link).
Fixes#2966
* fix: align callout blocks with article content width
The .proTip callout (Note/Tip/Caution admonitions in Learning Hub
articles, and the "Maintained outside this repository" notice on
external Plugin Detail pages) had its own 32px horizontal margin.
The prototype places this callout as a sibling of .articleSection
(which has no horizontal padding of its own), using that margin to
align its edges with the section's own 32px padding. Our port always
renders it nested *inside* an already-padded .articleSection, so the
extra margin doubled up with that padding, making the callout visibly
narrower than the surrounding paragraph/table text -- most obvious on
narrow viewports.
Remove the horizontal margin (keep only the bottom spacing) in both
dotnet-upgrade.module.css and github-copilot-app.module.css so the
callout's internal padding lines up with the article text on both
edges, at all viewport widths.
Fixes#2967
* fix: standardize mobile card padding across resource pages
Agents, Instructions, Skills, and Plugins catalog cards (.item) used
the desktop 60px padding at every viewport, including phone widths,
because their @media (max-width: 47.99rem) block never reduced it --
unlike the Extension catalog, which drops to a 32px inset at that
breakpoint. This made cards on those four catalogs look inconsistently
over-indented on mobile compared to Extension cards.
Add the same `.item { padding: var(--base-size-32); }` override to the
mobile media query in agents.module.css, instructions.module.css, and
skills.module.css. plugins.module.css already had an override, but
with an asymmetric 32px/24px padding -- normalized it to the same 32px
on all sides used everywhere else.
Fixes#2968
* fix(website): address PR review feedback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): preserve legacy resource links
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): bump transitive js-yaml to patched versions
Force astro's js-yaml dependency to 4.3.2 and front-matter/gray-matter's to 3.15.2 via npm overrides, fixing GHSA-52cp-r559-cp3m and GHSA-5p4m-2wfm-xmqj (quadratic-complexity DoS via YAML merge keys and !!omap resolution). Addresses github/vuln-mgmt#209786.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): address redesign follow-up issues
Fix light-mode favicon contrast with an adaptive SVG mark, allow YouTube embeds through the site CSP, and align resource catalog sort controls with the Playbook article sort treatment across Agents, Instructions, Skills, Plugins, and Extensions.
Addresses #3006, #3007, #3008.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): address PR review feedback
Respect reduced-motion preferences in detail TOC scrolling, restore default search indexes for bespoke Playbook pages, add pagination scroll/focus handling to the Agents catalog, sanitize contributor and cookbook URLs before rendering external links, index extension records in Pagefind, and restore install affordances for marketplace-backed external extensions.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): revert Learning Hub naming from Playbook rename
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* chore(website): update stale Playbook comments to Learning Hub
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): align source label in detail sidebar
Fixes#3207
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* fix(website): address security review feedback
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 80686fef-efe3-4cdd-8cd6-bfa61a5d0af6
* Add Advanced Copilot CLI course to the Learning Hub
Mirror the github-samples/advanced-copilot-cli course into the Learning
Hub and add a weekly sync workflow to keep it aligned, matching the
pattern used for the CLI for Beginners series.
- New agentic workflow advanced-copilot-cli-sync (+ compiled lock) that
checks the upstream course weekly and opens a PR when content changes
- Source-faithful mirror of the 9 course modules plus an overview page
under learning-hub/advanced-copilot-cli/, with route-safe links and
localized chapter-03 diagrams
- Sidebar group and Learning Hub landing-page entry for the new course
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 3a4d8212-b18b-446f-bb8d-a0a81241fa05
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: GeekTrainer <GeekTrainer@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Aaron Powell <me@aaron-powell.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Copilot-Session: 3a4d8212-b18b-446f-bb8d-a0a81241fa05
* docs: update Copilot app learning hub page with recent features
Adds documentation for stacked pull request support in Agent Merge,
requesting/re-requesting Copilot code reviews from the app, background
running via tray/dock, and the Worktree location setting. Adds a
Further Reading section linking to the app and CLI changelogs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Update website/src/content/docs/learning-hub/github-copilot-app.md
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Aaron Powell <me@aaron-powell.com>
* Seed Copilot Workshops Learning Hub mirror
Perform the initial import of github-samples/copilot-workshops
(@b543d2f) into the Learning Hub, since a first-run import from the
scheduled sync workflow exceeds the 100-file safe-output PR cap.
Also update the sync workflow prompt so future runs are always
incremental and stay under the file cap.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Stop codespell flagging mirrored workshop content
codespell only knows English, so the localized Learning Hub mirrors
(es-es, ja-jp, ko-kr, pt-br, zh-cn) produce ~150 false positives such as
"comando ==> commando". Skip those locale directories, and allow the two
valid English words the mirrored pages use verbatim.
Mirrored pages must stay source-faithful, so the fix belongs in
.codespellrc rather than in the content. Note that in the sync workflow
so future runs handle new false positives the same way.
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
- copilot-configuration-basics: document /model plan command (v1.0.74+) for
per-phase model selection in plan mode, and note Claude Opus 5 availability
- installing-and-using-plugins: add Open Plugin Spec v1 compatibility section
documenting mcp.json bundle support (v1.0.74+)
Sources:
- https://github.com/github/copilot-cli/blob/main/changelog.md (v1.0.74, v1.0.75)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add /ask and /refine to Essential Slash Commands table
- Add /ask tip and /refine tip after the table
- Add /env to Agent Environment commands table
- Fix shell quoting example: use single quotes for $HOME
- Add 'Esc twice to cancel' to Common Mistakes table
- Update Summary key takeaway to list all essential commands
- Bump lastUpdated to 2026-07-17
Upstream commits:
- 349aac6: fix shell quoting in Common Mistakes table
- 5ae1cbb: docs: add /refine command and /plugins dashboard documentation
- a67a260: docs: remove unverified /plugins command documentation
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Removing some features from the home page of the website
hooks, agentic workflows, and tools are removed - these are minimally used parts of the website
* Removing the pages and their references
* removing from the readme
* Adding the awesome copilot MCP server to our plugin and showing that in the rendered page
* Fix broken docs links and MCP plugin docs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 4215785a-7e6e-49c5-abaa-c39b0793a11e
* sync: update cli-for-beginners ch04 and ch06 from upstream
- Chapter 04: Add @-style imports section under Custom Instruction Files
(released in v1.0.66, 2026-06-30). Users can now reference other files
inside AGENTS.md or instruction files with @filepath syntax.
- Chapter 06: Add /mcp list to the Additional MCP Commands reference table.
Released in v1.0.69-1 (2026-07-04), /mcp list shows currently attached MCP
servers and can be run while Copilot is working. Also add /mcp auth command
and update enable/disable descriptions to note session persistence.
- Bump lastUpdated to 2026-07-10 in both files.
Upstream commits: c559ab4953a0 (2026-07-09)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: revert ch04 content changes, keep only date update
Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com>
* Apply suggestion from @aaronpowell
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com>
Co-authored-by: Aaron Powell <me@aaron-powell.com>
Per v1.0.69-3 (2026-07-07), the /allow-all auto mode now requires
experimental features to be active (/experimental on or --experimental).
The previous AUTO_APPROVAL env var approach has been removed.
Update the auto allow-all mode note in Copilot Configuration Basics
to document the experimental mode requirement and activation steps.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add /mcp list command (shows attached servers mid-turn) to understanding-mcp-servers
- Add stayInAutopilot setting to CLI settings table in copilot-configuration-basics
- Add auto allow-all mode (LLM judge-based approval) to copilot-configuration-basics
- Add kimi-k2.7-code model to the model selection table in building-custom-agents
- Update lastUpdated dates on all three modified pages
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document three new CLI commands from Copilot CLI v1.0.66 (2026-06-30):
- /pr auto: self-paced loop that fixes one failing item per run and
paces around CI to drive a PR to green
- /pr automerge: extends /pr auto to continue until the PR is fully
merged (CI passes, reviews approved, PR merged)
- /chronicle skills review: interactive review flow for agent-proposed
draft skill changes (accept, reject, or defer each draft)
Changes:
- copilot-configuration-basics.md: add /pr auto + /pr automerge section
in CLI Session Commands, extend /chronicle section with skills review
subcommand
- creating-effective-skills.md: add Q&A entry for /chronicle skills review
in the Common Questions section
Sources:
- https://github.com/github/copilot-cli/commit/c802cc3f06ffd2a57968cf8efabd3d550650ac5e
(changelog for v1.0.66)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Aaron Powell <me@aaron-powell.com>
* docs: update Learning Hub with CLI v1.0.64-1.0.65 features
Add five missing features from the past week's CLI releases:
- HTTP(S) proxy user setting (v1.0.64)
- /every command and /loop alias for in-session scheduled prompts (v1.0.64)
- Inline image rendering in the terminal (v1.0.64)
- Autopilot auto-handles elicitation/permission prompts (v1.0.64)
- Shell command history accessible in normal mode via up/down and Ctrl+R (v1.0.65)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: consolidate /every, /loop, /after docs and remove duplicate section
- Merge the duplicate /every+/loop section (added at line 640) into the
existing first-occurrence at line 521
- Add /after command documentation (from PR #2148 suggestion)
- Add example of /every invoking slash commands (/every 1d /chronicle standup)
- Add Ctrl+C as alternative to /every stop
- Add Experimental callout for /every, /loop, and /after
- Update lastUpdated to 2026-06-29
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Aaron Powell <me@aaron-powell.com>
- creating-effective-skills: add 'copilot skill' CLI subcommand for
listing, adding, and removing skills (v1.0.65); add '/skill' alias
- automating-with-hooks: document userPromptSubmitted additionalContext
injection into model-facing prompt (v1.0.65); update hook events table
- copilot-configuration-basics: add opt-in CI check status bar indicator
for current branch (v1.0.65)
- building-custom-agents: add note that /security-review is now available
to all users without --experimental (v1.0.64)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add automations learning hub guide and integrate into docs
- Create new learning hub article: "Using Automations in the GitHub Copilot app"
- Covers practical approach to getting started with automations
- Includes templates, work-surface audit technique, and real examples
- Features the in-app "Awesome Copilot daily PR summary" automation as concrete reference
- Integrates Ashley's Slack guidance on iterative refinement and discovery
- Link from main Learning Hub index and GitHub Copilot app article
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* docs: add canvas extensions learning hub guide
Add a new Learning Hub page for creating and iterating canvas extensions with /create-canvas, including examples and best practices for storage scope and joinSession/createCanvas handlers.
Wire the article into Fundamentals navigation and related Learning Hub pages, and add stable extension card anchors so docs can deep-link to specific entries in the Canvas Extensions listing.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Add a new 'Launching Sessions from the Terminal with Deep Links' section to the
GitHub Copilot app overview documentation. This section covers:
- Supported URL schemes (ghapp://, github-app://, gh://)
- session/new route with all supported parameters (repo, branch, pr, prompt, mode)
- Practical examples for common workflows
- Other useful deep links (chats, mywork, workflows, issues, PRs)
- Important limitations (repo-centric focus, local folder restrictions)
This addresses the request from the #github-app Slack channel discussion about
opening ghapp from the terminal for a better development experience.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add GitHub Copilot app learning hub page
- Create new learning hub page covering Copilot app basics, features, and use cases
- Include information about target audiences (developers, non-dev roles, teams with parallel work)
- Highlight key features: My Work view, isolated worktrees, canvases, Agent Merge
- Add installation and getting started instructions
- Update learning hub index to include app in Getting Started section
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Refine GitHub Copilot app learning hub page
- Add the app to the learning hub navigation
- Tighten the page copy around audiences, features, and getting started
- Keep canvases and automations high level as requested
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Add new 'Combining Multiple Skills in One Message' subsection to
Chapter 05 (Skills), mirroring upstream commit 5ed858b:
- Multiple skills can be invoked in a single message
- Skill slash commands can appear anywhere in the prompt (not just start)
- Updated lastUpdated to 2026-05-15
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- copilot-configuration-basics.md: document /fork with optional name (v1.0.47),
origin display in sessions dialog, and read-only gh CLI auto-approval (v1.0.46)
- using-copilot-coding-agent.md: document --resume support for cloud agent
sessions with no pushed changes (v1.0.47)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document two new CLI slash commands introduced in Copilot CLI v1.0.45
(released 2026-05-11):
- /autopilot: toggle between interactive and autopilot modes mid-session
- /fork: copy the current session into a new independent session
Both are added to the 'CLI Session Commands' section of the
Copilot Configuration Basics learning hub page.
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add documentation for features shipped in Copilot CLI v1.0.40 and
the v1.0.41 prerelease builds that weren't yet covered in the Hub:
- copilot-configuration-basics.md: document --attachment flag for
attaching images/documents in prompt mode (-p)
- automating-with-hooks.md: extend the prompt mode security callout
to cover the new GITHUB_COPILOT_PROMPT_MODE_EXTENSIONS env var
(user extensions load by default; project extensions need opt-in)
- building-custom-agents.md: note that ACP clients receive the
agent's live plan in real time for multi-step tasks (v1.0.40+)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- automating-with-hooks.md: Add prompt mode security gate note (v1.0.40)
— repo hooks and workspace MCP are disabled by default in -p prompt mode;
users must opt in via GITHUB_COPILOT_PROMPT_MODE_REPO_HOOKS and
GITHUB_COPILOT_PROMPT_MODE_WORKSPACE_MCP env vars
- agents-and-subagents.md: Add /research orchestrator/subagent note (v1.0.40)
and prompt mode security cross-reference for /fleet -p examples
- building-custom-agents.md: Document ACP agent list/switch capability (v1.0.40)
— ACP clients can now list and switch custom agents via agent config option
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>