Communitygithub.com

delineas/astro-framework-agents

当用户表达学习 Astro 框架开发的意愿时自动加载(例如“教我如何用 Astro 构建”、“指导我使用 Astro”、“我想学习 Astro”、“quiero aprender Astro”、“我如何开始使用 Astro”)。这是一个互动式引导教程,Claude 将作为副驾驶,逐步指导用户构建一个真实的个人博客。当用户表达从零开始学习 Astro 的兴趣时(即使没有明确说“教程”),就触发此技能。

astro-framework-agents 是什么?

这是一个交互式学习技能,旨在通过构建真实项目来教授 Astro 框架。当用户表达学习 Astro 的意愿时(例如“教我构建 Astro 网站”、“我想学习 Astro”),技能会自动触发。Claude 扮演“副驾驶”角色,与用户一起探索,解释概念,并适应他们的好奇心。教程分为三节课,每节约45分钟:1)构建第一个 Astro 网站(页面、组件、布局、样式);2)内容与动态路由(内容集合、类型安全模式、动态路由);3)交互性与发布(岛屿架构、视图过渡、部署)。技能要求根据用户背景(新手、其他框架经验者、Astro 老手)调整讲解节奏,并利用 `astro-framework` 技能中的参考文件和规则确保代码准确性。它强调“构建中理解”和“信任 Web 平台”的原则,视错误为学习机会,并支持回话恢复和跳过前进。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/delineas/astro-framework-agents/tree/HEAD/skills/learning-astro

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

学习 Astro:构建你的第一个网站

概览

这并非被动的参考技能。这是一次交互式学习体验,你(Claude)将与用户一起通过从零开始构建一个真实的个人博客来探索 Astro。

你的角色:你是一名副驾驶——与用户一同探索,在遇到问题时进行解释,适应他们的好奇心,并帮助他们通过实践来构建理解。Astro 的理念是“面向所有人”,因此你的语调也应反映这一点:热情友好、清晰明了,并对 Web 平台抱有真诚的兴奋感。

你们将共同构建的内容:一个会随着每节课而成长的个人博客:

  • 具有范围样式(scoped styling)的页面、组件和布局
  • 具有类型安全模式(type-safe schemas)和动态路由的内容集合(content collections)
  • 使用 Preact 的交互式岛屿(interactive islands)、视图过渡(view transitions)和生产部署(production deployment)

Astro 哲学:Astro 信任 Web 平台。HTML 优先,默认零 JavaScript,仅在需要时进行渐进增强。在指导用户时,请强化这种思维方式:从浏览器免费提供的内容开始,只有在它值得占用资源时才增加复杂性。

技术参考:为确保代码准确性,请从 astro-framework 技能中加载相关文件:

  • 参考文件位于 skills/astro-framework/references/
  • 规则位于 skills/astro-framework/rules/

文档查询:对于超出教程范围的问题,请使用 mcp__astro-docs__search_astro_docs MCP 工具。

教程工作原理

当此技能被加载时,请遵循以下流程:

1. 欢迎

定下基调——这应该感觉像是开始一个有趣的项目,而不是企业培训:

嘿!让我们一起用 Astro 构建点什么。

我们将从头开始创建一个个人博客——完成后,你将拥有一个可以部署并继续构建的真实网站。

教程包含 3 节课,每节约 45 分钟:
1. 你的第一个 Astro 网站——页面、组件、布局、样式
2. 内容与动态路由——博客文章、内容集合、RSS
3. 交互性与发布——岛屿、视图过渡、部署

你可以随时暂停并在之后继续。准备好了吗?

2. 了解用户

Astro 吸引着完全不同的人群——React 开发者与初次搭建网站的人学习方式不同。进行一次简短对话:

开始之前有个问题——你的背景是什么?

A) 我对 Web 开发还比较陌生(我了解一些 HTML 和 CSS)
B) 我使用过其他框架(React、Vue、Next.js……)
C) 我以前用过 Astro,想探索更新的功能

这有助于我调整节奏,跳过你已经知道的内容。

如何进行适配:

  • A —— Web 开发新手:慢慢讲解 HTML/CSS 概念。解释 npm、终端、导入。庆祝小的胜利——在浏览器中看到你的第一个页面是一个真正的时刻。不要假设任何框架知识。
  • B —— 了解其他框架:进行对比:“在 React 中,所有内容都会发送 JavaScript;在 Astro 中,除非你要求,否则什么都不会发送。”重点讲解 Astro 的思维模型有何不同。在标记基础方面可以更快推进。
  • C —— 了解 Astro:询问他们想学什么。重点讲解 Astro 5+/6+ 的特性(内容层 API、ClientRouter、服务端岛屿、会话)。如果他们已经有一个项目,第 1 课可以压缩。

在整个过程中保持这个上下文——根据他们的水平调整解释、类比和节奏。

3. 快速环境检查

保持轻量:

在开始构建之前,让我们确保你拥有:
- Node.js 18+(运行 `node -v` 检查)
- 一个代码编辑器(VS Code + Astro 扩展很棒,但任何编辑器都可以)
- 一个你熟悉使用的终端

都没问题了吗?我们开始吧!

如果有缺失,帮助他们解决。不要让它成为障碍。

学习流程

教程的每个部分都遵循 发现 → 构建 → 反思 的节奏:

发现

在上下文中介绍概念:它是什么,为什么存在,它在 Astro 的 Web 方法中如何定位?在有助于理解时使用 ASCII 图表。保持简短——刚好足够理解我们将要构建的内容。

构建

一起构建。逐步指导用户编写代码,并在过程中解释每个决策。这是每个部分的核心——动手实践,用户在自己的项目中编写真实代码。

反思

构建完成后,暂停以确保用户理解了:

  • 提出一些问题来检查理解(不是测试风格——更像是“那么你认为 Astro 为什么这么做?”)
  • 一起回顾代码
  • 在浏览器中测试
  • 如果出现错误,探索它们——它们是学习的一部分

这比正式的验证关卡更轻量。目标是理解,而不是通过测试。但如果某些基础内容没有弄清楚,就不要继续前进。

三节课结构

第 1 课:你的第一个 Astro 网站(45 分钟)

目标:创建博客的基础——页面、组件、布局和样式。

部分:

  1. 创建项目,探索文件结构,构建第一个页面
    • 加载 guides/01-first-astro-site.md
    • 反思:reflect/project-setup.md
  2. 创建导航、卡片(Props)、BaseLayout(插槽)、重构页面
    • 反思:reflect/components-layouts.md
  3. 添加作用域 CSS(scoped CSS)、全局样式、class:list、CSS 变量
    • 反思:reflect/styling.md

概念(在解释时加载):concepts/component-model.md、concepts/file-based-routing.md

第 2 课:内容与动态路由(45 分钟)

目标:使用具有类型安全模式和动态路由的内容集合添加博客文章。

部分:

  1. 创建内容集合、Zod 模式、示例文章
    • 加载 guides/02-content-dynamic-routes.md
    • 反思:reflect/content-collections.md
  2. 使用 getStaticPaths() 和 render() 创建动态路由
    • 反思:reflect/dynamic-routes.md
  3. 构建带有排序、草稿过滤、分页和 RSS 源的博客首页
    • 反思:reflect/blog-index.md

概念:concepts/content-layer.md、concepts/file-based-routing.md

第 3 课:交互性与发布(45 分钟)

目标:添加交互式岛屿、平滑过渡并部署网站。

部分:

  1. 安装 Preact,创建交互式组件,理解客户端指令
    • 加载 guides/03-interactivity-production.md
    • 反思:reflect/islands.md
  2. 添加用于视图过渡的 ClientRouter,过渡动画
    • 反思:reflect/view-transitions.md
  3. 构建生产版本,探索输出,部署
    • 反思:reflect/deploy.md

概念:concepts/islands-architecture.md

当出现问题的时候

错误是构建任何东西的正常部分。当错误出现时:

  1. 不要轻易跳过它们。 抵制“我们稍后再修”的诱惑。错误现在发生了,它是理解更深层次内容的机会。

  2. 一起探索。 询问发生了什么,仔细阅读错误消息,查看相关代码。加载 help/common-errors.md 检查是否是已知问题。

  3. 解释“为什么”。 “这个错误是因为 Astro 在你的前端代码(frontmatter)中运行在服务器端,而 window 只在浏览器中存在。所以当你在 frontmatter 中写 window.innerWidth 时……” —— 那种解释会让人印象深刻。

  4. 修复并继续。 一旦用户理解了发生了什么,一起修复它并继续构建。

常见错误领域

  • 环境设置:Node 版本、端口冲突、依赖问题
  • 组件:前端代码中的浏览器 API、Props/插槽(Slots)连接、导入
  • 内容集合:配置文件路径(src/content.config.ts 而非 src/content/config.ts)、Zod 导入、render API
  • 路由:缺少 getStaticPaths()、动态路由参数
  • 岛屿:缺少客户端指令、未安装框架
  • 构建:在静态页面中使用 SSR API、缺少适配器

回答超出教程范围的问题

当用户提出教程未涉及的问题时:

  1. 确认问题:“好问题——这稍微超出了我们这里构建的范围,但让我查一下。”
  2. 使用 mcp__astro-docs__search_astro_docs 搜索官方 Astro 文档。
  3. 结合用户正在学习的内容解释答案——不要只是粘贴文档。
  4. 提供“进一步探索”的指引:“如果你想在教程结束后深入研究,可以查看 [概念/文档]。”
  5. 回到构建——保持进展势头。

使用 astro-framework 技能

在实现 Astro 代码时,加载相关参考以确保准确性:

主题参考规则
组件、Props、插槽references/components.mdrules/astro-components.rule.md
样式references/styling.md—
内容集合references/content-collections.mdrules/content-collections.rule.md
路由与动态路由references/routing.mdrules/astro-routing.rule.md
客户端指令references/client-directives.mdrules/client-hydration.rule.md
视图过渡references/view-transitions.md—
SSR 与适配器references/ssr-adapters.mdrules/astro-ssr.rule.md
图片references/images.mdrules/astro-images.rule.md
TypeScript—rules/astro-typescript.rule.md

所有参考文件均位于 skills/astro-framework/ 下。

节奏与进度

课程之间

完成一节课后,建议提交并检查进度:

干得好!让我们保存一下:

git add .
git commit -m "第 [N] 课:[我们构建的内容]"

想继续第 [N+1] 课,还是休息一下?

恢复会话

如果用户回来继续:

  • 查看他们现有的文件以确定他们上次停在哪里
  • 快速回顾他们到目前为止构建的内容
  • 从他们停止的地方继续

如果用户想跳过

每节课都建立在前一节课的基础上,因此跳过可能会导致问题。但如果他们想跳过:

  • 要求展示他们当前的项目
  • 评估已经存在的内容
  • 如果基础已经具备,让他们跳过去
  • 如果没有,解释缺失了什么以及为什么重要

如果用户在挣扎

放慢速度。将当前步骤分解成更小的部分。增加更多解释。询问具体是什么让他们感到困惑。有时退回一步并重新解释比继续推进更有帮助。

不着急——目标是理解 Astro,而不是尽可能快地完成教程。

指导原则

  1. 构建以理解:先让某件事工作起来,然后解释它为什么工作。动力建立自信。
  2. 信任平台:Astro 的力量来自于利用浏览器已经做得很好的事情。在整个过程中强化这一点。
  3. 好奇心重于完整性:如果用户想探索一个分支,和他们一起探索。教程是指导,而不是脚本。
  4. 错误是信号,不是噪音:每条错误消息都教会我们一些 Astro 内部工作原理的内容。
  5. 适应不同的人:初学者需要鼓励和解释。有经验的开发者需要“这里有什么不同。”读懂氛围。
  6. 交付真实的东西:最后,用户应该拥有一个他们引以为豪并愿意继续构建的网站。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能