Blog

标签页太多拖累 SEO?别急着用 robots.txt 屏蔽

给这个 Astro 博客的标签页、分类页做 SEO 收尾:35 篇文章却有 69 个标签,将近一半只挂着一篇,是典型的薄内容。本来第一反应是 robots.txt 里 Disallow 掉,结果发现这是个常见误区——Disallow 只挡爬取不挡收录,真正想让薄页面退出索引,得用 meta robots 的 noindex, follow,并且 robots.txt 还得保持全开。附 Astro 里的具体改法。

skills-lock.json:给 Agent Skills 上一把锁

上一篇我把博客那套加工具的规矩做成了一个 Skill。这回换个角度:当我装的 skill 从「自己写的一个」变成「从别人仓库拉来的一堆」,怎么保证队友、CI、还有未来的我,装到的是同一批、同一个版本?答案是 skills-lock.json——Agent Skills 版的 package-lock.json。这篇按 WHW 捋一遍:它是什么、怎么工作怎么用、以及为什么一旦 skill 成了依赖,就该有把锁。老规矩,官方说的和我自己机器上看到的分开讲。

从一份 CPU profile 定位到 Turbopack 持久缓存把 CPU 打满

本地 next dev 启动后风扇狂转、CPU 长期高占用,但页面其实正常。本文记录完整的排查路径:用 macOS 自带的 sample 抓一份 CPU profile,先从「在睡觉的线程」里分出真正烧 CPU 的,再靠 Sort by top of stack 聚合表反推出「密集文件 I/O + 锁竞争」,层层下钻到 .next/dev/cache/turbopack 里 GB 级的 LSM SST 文件,最终定位到 Next.js 16 默认开启的 Turbopack 持久缓存在后台空转做 compaction。附止血与复发处理。

A2A 协议:智能体之间怎么对话,以及它到底解决了什么

A2A(Agent2Agent)是 Google 去年放出、今年 3 月刚发布 1.0、现在挂在 Linux Foundation 名下的智能体互联协议。我平时泡在 MCP 那一套生态里,这篇把 A2A 的几个核心概念——Agent Card、Task、Message、Artifact——从头捋一遍,讲清它和 MCP 的分工,最后以一个独立开发者的角度说说:它现在值不值得碰。

用了大半年 Claude Code,我才搞懂:关键往往不在模型,而在 harness

聊 AI coding 的时候,大家总在比模型——Opus 还是 GPT,谁分高。但我自己每天用下来,真正决定一个 agent 好不好使的,常常是模型外面那层叫 harness 的东西:那个跑工具、管上下文、卡权限的循环。这篇把我理解的 harness 拆开讲讲,它是什么、由哪几块拼成、为什么同一个模型套不同的壳能差出十万八千里。

我把那些反复粘贴的指令,做成了一个 Skill

我的博客挂着一个小工具区,每加一个工具都有一套自己的规矩:文件放哪、逻辑写在哪、写完要去哪登记。以前每加一个都得重新跟 Claude 交代一遍。这次我把它们收进一个 Skill,顺手把 Agent Skills 这套东西从机制到取舍捋了一遍——它到底是什么、progressive disclosure 解决了什么、和 CLAUDE.md / MCP / 子代理差在哪一层,以及我保留的几点判断。

MCP 是怎样工作的?把模型上下文协议拆开看一遍

MCP 被叫做「AI 应用的 USB-C」,但这个比喻没说清它到底是什么。这篇从「为什么需要它」讲起,拆开它底下的 JSON-RPC 消息、Host/Client/Server 三层架构、初始化握手,以及 Tools/Resources/Prompts 三类原语分别由谁来控制——最后附我自己接 MCP 服务器时保留的几点判断。

Understand Rust Ownership

介绍 Rust 所有权机制的核心概念:作用域、move、clone、copy,以及引用和借用规则。

MySQL 是怎样通讯的?

深入介绍 MySQL 客户端-服务端通信协议,包括握手包、能力标志、HandshakeResponse、响应包格式、结果集解析,以及用 Go 手写 MySQL 客户端的完整实现。