Agent skill

Project Guides

by GoogleChrome in GoogleChrome/modern-web-guidance-src

Best practices for authoring guidance. An agent skill from GoogleChrome/modern-web-guidance-src.

Apache-2.0Auto-check passed

Install Project Guides

skills CLI
$ npx skills add GoogleChrome/modern-web-guidance-src --skill project-guides -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install GoogleChrome/modern-web-guidance-src project-guides --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/GoogleChrome/modern-web-guidance-src.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/project-guides .claude/skills/project-guides && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
project-guides
GitHub stars
1.1k
Token cost
~3.9k tokens
SKILL.md length
1,985 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
Apache-2.0

At a glance

Best practices for authoring guidance. An agent skill from GoogleChrome/modern-web-guidance-src.

  • SKILL.md covers What a real-world coding agent… and Authoring expectations.md and…
  • Calls node

What it does

Project Guides is an agent skill from GoogleChrome/modern-web-guidance-src. Best practices for authoring guidance. Use this skill any time you're writing or reviewing guide.md files.

Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The licence is Apache-2.0.

Example prompts

  • “/project-guides”

What it can do on your machine

Read from SKILL.md and the folder at commit 271a550. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Project Guides loads about 3.9k tokens when it runs. Until then it costs about 31 tokens; SKILL.md has 1,985 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~31
When it runs · the whole SKILL.md, loaded when a task matches
~3.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from GoogleChrome/modern-web-guidance-src at commit 271a550, republished under its Apache-2.0 licence (© GoogleChrome). 1,985 words, ~3,939 tokens.

Download SKILL.mdSave it as .claude/skills/project-guides/SKILL.md (or your agent's skills folder).
name
project-guides
description
Best practices for authoring guidance. Use this skill any time you're writing or reviewing `guide.md` files.

Stage 2: Authoring guidance for a use case (Needs guidance)

This is the second of three stages in creating guidance:

  1. Stage 1: Identifying use cases for a feature
  2. Stage 2: Authoring guidance for a use case (you are here)
  3. Stage 3: Evaluating guidance for a use case

What a real-world coding agent sees

When a developer asks an AI coding assistant to implement something, the assistant retrieves the relevant guide.md via a RAG (vector search) system. guide.md is the only project file a real-world coding agent ever sees. Everything else in a use case directory is eval infrastructure:

File/DirectoryPurposeSeen by real-world agents?
guide.mdGuidance for implementing the use case✅ Yes — this is the only file
expectations.mdVerification criteria used to generate target evaluation suites❌ No
targets/<base_app>/solution.patchGolden diff against clean base app used to calibrate the grader❌ No
targets/<base_app>/zero-passrate.patchGuidance-absent diff used to verify grader assertions fail when requirements are not implemented❌ No
targets/<base_app>/grader.tsPlaywright test suite run against the eval agent's output❌ No
targets/<base_app>/task.mdSimulated developer prompts fed to the eval agent by the harness❌ No

Implication for authoring (guide.md & expectations.md): Authors and SMEs strictly author guide.md and expectations.md. You do not hand-author solution.patch, zero-passrate.patch, grader.ts, or task.md. Once guide.md and expectations.md are authored, running gd dev <guide> automatically loops across SUPPORTED_BASE_APPS (daily-grind and devtools-times) inside safe temporary /tmp/ sandboxes to generate and calibrate the evaluation capsules under targets/<base_app>/, runs agent evaluations, and produces an evaluation diagnostic report (test-app-results/report.md). Running gd pr <guide> then automatically commits, pushes, detects PR labels (gd-dev-content or gd-dev-eval), and opens the Pull Request.

Implication for guide.md: Because guide.md is the agent's only source of truth, it must be entirely self-contained. Do not rely on agents reading expectations.md, any target patch, or any external link to understand how to implement the use case.

MANDATORY RULES FOR WRITING guide.md:

1. YAML Frontmatter Schema

guide.md must start with this YAML frontmatter structure (added in Stage 1):

yaml
---
name: slugified-use-case-name
description: <do thing> <with feature> (e.g., "Create dynamic color systems using modern color syntax")
web-feature-ids:
  - webstatus-feature-id
---
  • web-features: Must be a list of accurate IDs found via webstatus.dev. Include ALL features referenced in the guide body, not just the primary one. If an ID is missing, inform the USER.
    • Pending Features (tmp- prefix): If a feature ID is pending upstream in @web-platform-dx/web-features (e.g. an open issue), use tmp-<candidate-slug> (e.g. tmp-scroll-axis-lock) in guide.md AND register it in features/pending-web-features.json along with its upstream issue link. Optionally add group (a web-features group ID like scrolling, or an array of them) so ATL triage routes it to that group's owner in guides/atls.json (then run node --experimental-strip-types guides/generate-feature-to-groups.ts), and compat_features (a @mdn/browser-compat-data key or array of keys, e.g. ["css.properties.scroll-axis-lock"]) so CI can detect when the feature graduates upstream even if web-features chooses a different final ID than <candidate-slug>. On the GitHub new-feature issue itself, annotate the predicted final ID without the tmp- prefix (<candidate-slug>); the sync and triage scripts automatically strip tmp- when matching guides to issues. When the feature ID is officially released upstream in web-features, validator checks will automatically fail in CI to prompt updating the frontmatter to the official ID.
  • draft (optional): Set draft: true (or any truthy value, e.g. draft: future) to withhold the guide from all distribution (search index, README, skills distribution) without deleting it. Set draft: stub when a stub includes author notes in the markdown body so it is still inventoried and validated as a stub. Omit for normal publishing.
2. Tone and Formatting
  • Formatting Directives: Use strict imperative directives (MANDATORY:, DO, DO NOT) only when emphasis is strictly needed (e.g., for critical constraints, security, or common pitfalls). Do not overuse them for every single instruction. Coding agents respond best to rigid constraints when they are selectively applied.
  • Focus: Keep the guidance focused on the specific use case and short. No fluff. No conversational text. Include a brief overview of the use case and explanation of why the solution outlined in the guide is the recommended approach.
  • Self-Contained: DO NOT include any external links in the markdown body ([link text](url)), and DO NOT rely on internal {{ GUIDE_REF("...") }} cross-references to supply required implementation details. All required knowledge to use the feature MUST be fully synthesized into the markdown body (or transcluded at build time via INCLUDE/FEATURE). Agents must not be slowed down or require additional retrievals to implement the guidance.
  • American English: Always author guidance in American English (behavior, color, synchronize, center, optimize, etc.) for consistency across documentation, RAG tokens, and search embeddings.
3. Code Snippets
  • Include short, heavily commented code snippets.
  • Put directives directly in code comments so they are impossible to miss (e.g., <!-- Always use the required attribute -->).
  • Code comments MUST explain why a value or approach is chosen, not just what the code does. An agent that copies magic values without understanding them will apply them incorrectly. If a value is context-dependent (e.g., a threshold that should vary by use case), say so explicitly.
  • Modern Standards: Exclusively use ES modules (import/export) in JavaScript code examples; avoid CommonJS (require).
  • Clarifying Arbitrary Values: Explicitly identify placeholder values (like 2rem or 50ms) as example-only in comments to avoid them being mistaken for strict technical constraints.
4. Implementation Steps
  • The implementation steps should assume any web feature can be used. Choose the best feature for the job, regardless of browser support.
  • DO NOT suggest modern features just because they are modern. If a modern feature has no distinct user-visible advantage over a legacy feature for the given use case — but will require a more complex fallback implementation — use the legacy feature.
  • DO NOT include cross-browser fallbacks in the implementation section. Those should only be mentioned in the fallback section.
  • Only mark steps as MANDATORY if they are truly required for the feature to function. Optional steps (e.g., adding scroll snap, adding an event listener for progressive enhancement) must be labeled as optional. Incorrect use of MANDATORY causes agents to implement unnecessary complexity.
  • The guide is the agent's only source of truth. DO NOT reference demo.html or any other file — agents won't have access to them. Everything the agent needs to implement the use case must be in guide.md.
  • When listing alternatives, say how to choose between them (which use cases favor which). Optional improvements are alternatives too: the choice is between adding them or not, so say when they're worth adding. Don't invent criteria; if the choice genuinely depends on context you can't anticipate, leave it to the agent.
5. Fallback Strategies

If the primary implementation uses features that are not Baseline Widely Available, you MUST include a fallback recommendation in this section.

  • Framing: Frame fallback necessity in terms of Baseline target (e.g., "If your Baseline target does not support X, use...").
  • Assessment: Start with a broad assessment of the fallback's robustness. Recommend the modern approach if the fallback is robust; highlight complexity/caveats and suggest alternatives (like userland solutions) if it is not.
  • Experience: MANDATORY: Explicitly describe the fallback experience (progressive enhancement vs. feature detection/graceful degradation).
  • Feature Detection: Checks should be tightly scoped to the interface rather than the instance (e.g. use Object.hasOwn(HTMLElement.prototype, 'onbeforematch') over 'onbeforematch' in window)
  • Fallback Options (in order of preference):
    1. Custom Code: Short, reliable reimplementation (<50 lines) using widely available features.
    2. Polyfill: A robust, performant polyfill (see guidelines below).
    3. Abstraction: A well-tested userland library.
    4. Graceful Degradation: Baseline Newly Available features that degrade gracefully.
    5. Progressive Enhancement: Frame as progressive enhancement only if no robust fallback exists.
  • Faithfulness: Fallbacks MUST be faithful to the use case. If the primary recommendation gracefully degrades but ultimately doesn't accomplish the core use case, suggest a different fallback if one is available. Graceful degradation IS acceptable for features that enhance, but are otherwise not core to the use case.
Show full SKILL.md (721 more words)Show less
Baseline Status Macros
  • MANDATORY: Include {{ FEATURE_FALLBACKS("feature-id") }} (preferred) or {{ BASELINE_STATUS("feature-id") }} as a standalone line for every non-widely available feature used.
    • Prefer FEATURE_FALLBACKS so that fallbacks can be centralized. If there is no features/<feature-id>.md, create it.
    • Use BASELINE_STATUS directly when you need the BCD-key second argument: {{ BASELINE_STATUS("feature-id", "bcd.key") }}. This is useful when a critical sub-feature's status differs from the overall feature status.
    • Use BASELINE_STATUS directly when the fallback strategy is too specific to the use case or the feature is only used in one guide, so creating a separate features/<feature-id>.md would be premature.
  • Baseline Widely Available Features: While fallback strategies are not required for Baseline Widely Available features, you SHOULD include {{ BASELINE_STATUS("feature-id") }} for features that became Baseline Widely Available within the last 12 months (such as subgrid or :has()), or that are commonly misjudged by coding agents as lacking support. This affirmatively reassures coding agents whose training data might predate wide availability that the feature is universally supported without needing defensive fallbacks.
  • Placement: Use separate subsections with their own macros if multiple features are used. DO NOT use these macros outside the fallback section.
Polyfill Guidelines
  • Conditional Loading: MANDATORY: ALWAYS conditionally load polyfills only when native support is missing. Prefer build-integrated conditional loading (code splitting) over CDNs.
  • Performance: DO NOT recommend polyfills with significant performance tradeoffs, or those requiring fetching/parsing CSS. Prefer abstractions/userland solutions instead.
  • Prohibited CDNs: DO NOT recommend polyfills from polyfill.io.
6. Build-time macros
MacroWhat it emits
{{ BASELINE_STATUS("feature-id"[, "bcd.key"]) }}"Baseline status for <Feature>: Widely/Newly available..." or "Browser support for <Feature>: Limited availability".
{{ INCLUDE("path[#section]") }}Whole markdown file (frontmatter + leading # H1 stripped) or one section (its heading dropped). Bare paths resolve from repo root; .//../ resolve relative to the calling file.
{{ FEATURE("feature-id", "section") }}Sugar for INCLUDE("features/<feature-id>.md#<section>").
{{ FEATURE_FALLBACKS("feature-id") }}### Fallbacks & browser support for <Feature name> + BASELINE_STATUS + the #fallbacks section. If #fallbacks is empty, emits only BASELINE_STATUS (no heading).
{{ FEATURE_ISSUES("feature-id") }}### Issues to be aware of when using <Feature name> + the #issues section. Returns "" if #issues is empty/missing.
{{ GUIDE_REF("guide-slug") }}Cross-reference to another guide (\guide-slug` (via `npx -y modern-web-guidance@latest retrieve "guide-slug"`)inskills-cli; relative path in local-dev; markdown link in static-site`).
  • Errors: invalid feature/guide ID or missing required argument → MacroError (build fails loudly). Missing referenced content in INCLUDE/FEATURE (file or section) → silent "", so guides can reference content that doesn't exist yet.
  • Section IDs: slugified heading text (### Fallback strategies → fallback-strategies), or an explicit {#id} suffix on the heading.
  • Recursion: macros inside transcluded content expand normally. No cycle detection — don't write self-referential includes.

Coding agents mostly discover and batch-retrieve guides upfront (retrieve "a,b") from search or list results, and rarely follow cross-references after reading a guide.

  • Never rely on GUIDE_REF for requirements of the current guide: Anything needed to implement this guide's use case — core rules, shared prerequisites, accessibility requirements, or fallbacks — must be inlined in guide.md or transcluded at build time via INCLUDE/FEATURE.
  • Use GUIDE_REF to point to a separate use case that is out of scope for the current guide:
    • Router / orientation hubs routing to specialized sub-guides (e.g., passkeys or web-components routing to specific use-case guides).
    • Disambiguating closely related sibling guides so an agent that retrieved the wrong primitive can pivot (e.g., progress-ring vs. spinner for determinate vs. indeterminate loading, or usage-aware-component-variations vs. design-token-reactivity).
    • Referencing an adjacent use case (e.g., forms pointing to ime-safe-enter-submit for Enter-key submission during IME composition).
7. Reusing per-feature content via features/

When the same feature-level content (intro, fallback patterns, a11y, gotchas) applies to multiple guides, extract it into features/<feature-id>.md and pull it in with the macros above. Rule of thumb: extract if two or more guides cover the same web-feature-id and repeat the same advice. Standard section names: ## Fallbacks (used by FEATURE_FALLBACKS), ## Issues (used by FEATURE_ISSUES); add others as needed and pull them with FEATURE. Verify your include resolved by inspecting the build output (serving/build/guides/<category>/<id>.md) — silent misses won't fail the build.

Authoring expectations.md and demo.html

  • expectations.md: Write a natural language, bulleted list of assertions that must be true if an agent implements the guide.md correctly. (e.g., "The input element is styled with a red border only AFTER a blur event").
  • demo.html: The demo.html file should be a clean example of a correct implementation of the use case. If possible, it should be self-contained with inline scripts and styles.
  • Warning-Free Demos: Documentation and demos must adhere to all browser console recommendations, including non-fatal warnings, to ensure clean evaluation runs.

© GoogleChrome, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/project-guides of GoogleChrome/modern-web-guidance-src.

Open the folder on GitHubat commit 271a550

Compare with similar skills

Project Guides next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Project Guides compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Project Guides this skillGoogleChrome/modern-web-guidance-src1.1k—~3.9kAutomated safety check: PassApache-2.0
Authoringautomagik-dev/genie346—~1kAutomated safety check: PassMIT
AuthoringOdradekAI/bundles-forge229—~3kAutomated safety check: PassApache-2.0
Authoringactiveing123/mcptoon2151 repos~559Automated safety check: PassApache-2.0
Hermes Agent Skill AuthoringNousResearch/hermes-agent252k—~3.6kAutomated safety check: PassMIT
Configuring Oauth2 Authorization Flowmukul975/Anthropic-Cybersecurity-Skills34k—~1.7kAutomated safety check: PassApache-2.0

Similar skills

  • Authoring

    automagik-dev/genie

    Write or revise a Genie skill so it survives the shipped contract — frontmatter, house size, starter card, and runtime-neutral voice.

    346 GitHub stars~1k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Authoring

    OdradekAI/bundles-forge

    A skill your agent uses when writing, completing, improving, or adapting SKILL.md and agents/.md in a bundle-plugin — integrating external skills, filling scaffolded stubs, or rewriting for better…

    229 GitHub stars~3k tokensUpdated 5 mo ago
    Agent WorkflowsAuto-check passed
  • Authoring

    activeing123/mcptoon

    Add or edit an MCP server entry in mcptoon's config correctly — stdio/streamable-http/sse shapes, command rules, placeholders, and validation.

    215 GitHub starsUsed in 1 repo~559 tokens
    Agent WorkflowsAuto-check passed
  • Hermes Agent Skill Authoring

    NousResearch/hermes-agent

    Author in-repo SKILL.md files: frontmatter and structure. An agent skill from NousResearch/hermes-agent.

    252k GitHub stars~3.6k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Configuring Oauth2 Authorization Flow

    mukul975/Anthropic-Cybersecurity-Skills

    Configures secure OAuth 2.0 authorization flows, including Authorization Code with PKCE, Client Credentials, and Device Authorization Grant, covering flow selection, PKCE implementation, token…

    34k GitHub stars~1.7k tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed
  • Authoring Skills

    vercel/next.js

    Official

    How to create and maintain agent skills in .agents/skills/. An agent skill from vercel/next.js.

    143k GitHub stars~1k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from GoogleChrome/modern-web-guidance-src

All 14 skills in this repo
  • Nightly Eval Investigation

    GoogleChrome/modern-web-guidance-src

    Downloads and analyzes the latest three distinct nightly evaluation runs (Claude Code, Codex CLI, and Jetski CLI) from the GCS remote dashboard to identify and flag unhealthy or low-performing tasks…

    1.1k GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Chrome Extensions

    GoogleChrome/modern-web-guidance-src

    Build and publish Chrome Extensions using Manifest V3 best practices.

    1.1k GitHub stars~6.6k tokensUpdated today
    Auto-check: notes
  • Coherence Auditor

    GoogleChrome/modern-web-guidance-src

    Run a document coherence, link integrity, and git repository status audit across repository markdown files using a dedicated subagent.

    1.1k GitHub stars~901 tokensUpdated today
    Auto-check passed
  • Privacy

    GoogleChrome/modern-web-guidance-src

    Action-oriented guidelines for privacy by design, data minimization, third-party audits, and modern browser privacy APIs.

    1.1k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Project Coding Standards

    GoogleChrome/modern-web-guidance-src

    Coding style, architectural conventions, and PR review standards for the modern-web-guidance-src (guidance) repository.

    1.1k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Project Discipline Guides

    GoogleChrome/modern-web-guidance-src

    Workflow for refactoring discipline-level guides (e.g., JavaScript, CSS) to remove "Common Knowledge" by generating and comparing against model-specific "Knowledge Mirrors".

    1.1k GitHub stars~1.1k tokensUpdated today
    Auto-check passed

Questions about Project Guides

What does Project Guides do?

Best practices for authoring guidance. An agent skill from GoogleChrome/modern-web-guidance-src. Project Guides is an agent skill from GoogleChrome/modern-web-guidance-src. Best practices for authoring guidance.

How do I install Project Guides in Claude Code?

Run `npx skills add GoogleChrome/modern-web-guidance-src --skill project-guides -a claude-code`. Or copy the skill folder (.agents/skills/project-guides in GoogleChrome/modern-web-guidance-src) into .claude/skills/project-guides in your project. Claude Code loads it when a task matches its description.

How do I install Project Guides in Codex?

Run `npx skills add GoogleChrome/modern-web-guidance-src --skill project-guides -a codex`. Or copy the skill folder (.agents/skills/project-guides in GoogleChrome/modern-web-guidance-src) into .agents/skills/project-guides in your project. Codex loads it when a task matches its description.

Can I use Project Guides in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add GoogleChrome/modern-web-guidance-src --skill project-guides -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/project-guides, .gemini/skills/project-guides, .github/skills/project-guides and .opencode/skills/project-guides in your project.

What does Project Guides need to run?

Going by SKILL.md and its folder, Project Guides needs the command-line tools its instructions call (node).

Does Project Guides access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Project Guides safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Project Guides use?

Project Guides is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Project Guides use?

About 3.9k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Project Guides?

Skills that share tags, products or a category with Project Guides: Authoring (automagik-dev/genie, 346 stars), Authoring (OdradekAI/bundles-forge, 229 stars), Authoring (activeing123/mcptoon, 215 stars) and Hermes Agent Skill Authoring (NousResearch/hermes-agent, 252k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Project Guides?

GoogleChrome (a GitHub organization) maintains it in GoogleChrome/modern-web-guidance-src, which has 1,138 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 8, 2026.

Source: GoogleChrome/modern-web-guidance-src on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.