ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

用 Claude Code Skill 复刻 last30days:TaoToken 统一 Key 接入 GitHub 与 Playwright 的搜索工作流

用 Claude Code Skill 复刻 last30days:TaoToken 统一 Key 接入 GitHub 与 Playwright 的搜索工作流 1. 为什么我要自己复刻一个 last30dayslast30days 这个 Skill 最近在 Claude Code 圈子里讨论度很高核心能力一句话说清把过去 30 天里某个话题在 GitHub、Reddit、X 等平台上的高赞、高热内容汇总成一份简报。它解决的是传统搜索的一个硬伤——搜出来的东西经常是半年前的而你想知道的是“现在大家在聊什么、在骂什么、在为什么掏钱”。但直接用现成的 last30days 有两个问题。第一它主要覆盖海外平台国内场景适配有限第二它的抓取逻辑是黑盒你想改成“只盯 GitHub 仓库动态 某个具体页面”这种定制需求改起来不顺手。所以我决定用 Claude Code Skill 的机制自己搭一个最小可用的版本从 GitHub 拉仓库近 30 天动态用 Playwright 抓指定页面内容再通过 TaoToken 统一 Key 调用模型做摘要最后输出一份结构化简报。这篇适合谁已经在用 Claude Code、想把自己的检索流程做成可复用 Skill 的开发者以及想搞清楚 Skill 目录结构、settings.json 怎么配、Playwright 怎么在 Skill 里跑起来的人。整套链路的目标是一键跑通“抓取—摘要—输出”不需要你手动在多个工具之间来回切。我试过把这套流程拆成三步手动跑光是复制粘贴 GitHub API 返回的 JSON 再喂给模型就够烦的。做成 Skill 之后一条命令出结果这才是它值得复刻的理由。2. TaoToken 前置统一 Key 与 API 通道在动手写 Skill 之前先把模型调用这条链路理顺。整个工作流里GitHub 抓取和 Playwright 抓页面都是本地行为不需要外部服务真正需要外部通道的是“把抓到的内容喂给模型做摘要”这一步。这里用 TaoToken 做统一入口好处是一个 Key 管所有模型调用不用在 Skill 里维护多套鉴权逻辑。TaoToken 的定位是统一 API 通道你拿到一个 Key 之后模型对话、编码类请求都走同一个 base_url。对 Skill 来说这很关键——Skill 的配置越简单越不容易在环境变量传递上出错。你需要准备的东西一个 TaoToken 账号登录后在控制台生成 API Key本地装好 Node.jsPlaywright 依赖和 Python 3.10Skill 脚本用Claude Code 已安装并能正常启动获取 Key 的入口在控制台的 API Keys 页面生成后复制保存后面 settings.json 里要用。如果你还没配过建议先跑一次模型对话确认 Key 可用再去接 Skill这样排障时能快速定位是 Key 的问题还是 Skill 的问题。注意Key 不要硬编码进 Skill 的脚本文件里统一走环境变量或 settings.json 的 env 字段避免提交到 Git 仓库时泄露。模型对话入口https://taotoken.net/api API Keys 管理https://taotoken.net/api-keys 接入文档https://taotoken.net/doc3. Skill 目录骨架与 settings.json 配置Claude Code 的 Skill 本质是一个带SKILL.md的目录Claude Code 启动时会扫描并加载。我复刻的这套叫last30days-lite目录结构如下last30days-lite/ ├── SKILL.md ├── settings.json ├── scripts/ │ ├── fetch_github.py │ ├── fetch_page.py │ └── summarize.py └── output/ └── .gitkeepSKILL.md是 Skill 的说明书Claude Code 靠它判断什么时候触发这个 Skill、执行哪些步骤。内容要写清楚触发条件和执行流程--- name: last30days-lite description: 汇总指定 GitHub 仓库近30天动态与指定页面内容调用模型生成简报 --- ## 触发条件 用户提到近30天最近动态仓库更新汇总时触发。 ## 执行步骤 1. 运行 scripts/fetch_github.py 拉取仓库近30天 commit 与 issue 2. 运行 scripts/fetch_page.py 用 Playwright 抓取目标页面正文 3. 运行 scripts/summarize.py 调用 TaoToken 接口生成摘要 4. 结果写入 output/ 目录settings.json负责把环境变量和权限配好这是最容易踩坑的地方。Claude Code 的 Skill 执行脚本时需要知道 API Key 和 base_url配置片段如下{ skills: { last30days-lite: { enabled: true, env: { TAOTOKEN_API_KEY: sk-your-key-here, TAOTOKEN_BASE_URL: https://taotoken.net/api, GITHUB_TOKEN: ghp-your-token-here }, permissions: { allow: [Bash(python scripts/*), Bash(playwright *)] } } } }几个参数说明TAOTOKEN_BASE_URL固定填https://taotoken.net/api不要带路径后缀GITHUB_TOKEN是为了避免 GitHub API 的速率限制没配也能跑但容易 403permissions.allow里放行脚本执行权限否则 Claude Code 每次都会弹确认。fetch_github.py的核心逻辑是调 GitHub REST API 拿近 30 天的 commit 和 issueimport os, requests from datetime import datetime, timedelta token os.environ[GITHUB_TOKEN] repo mvanhorn/last30days-skill since (datetime.utcnow() - timedelta(days30)).isoformat() Z headers {Authorization: ftoken {token}} commits requests.get( fhttps://api.github.com/repos/{repo}/commits, headersheaders, params{since: since} ).json() for c in commits[:10]: print(c[commit][message].split(\n)[0])fetch_page.py用 Playwright 抓页面关键是等networkidle再取正文否则拿到的是空壳from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch() page browser.new_page() page.goto(https://example.com/target, wait_untilnetworkidle) text page.inner_text(article) print(text[:3000]) browser.close()summarize.py把前两步的输出拼成 prompt走 TaoToken 接口import os, requests resp requests.post( f{os.environ[TAOTOKEN_BASE_URL]}/v1/chat/completions, headers{Authorization: fBearer {os.environ[TAOTOKEN_API_KEY]}}, json{ model: claude-sonnet-4-20250514, messages: [{role: user, content: prompt}] } ) print(resp.json()[choices][0][message][content])4. 端到端验证一次跑通抓取—摘要—输出配置写完之后别急着在 Claude Code 里触发先在终端手动跑一遍确认每个环节都通。这一步能帮你把“Skill 没触发”和“脚本本身报错”两类问题分开。第一步验证 GitHub 抓取cd last30days-lite python scripts/fetch_github.py正常输出应该是近 30 天的 commit 标题列表。如果报 403检查GITHUB_TOKEN是否配了、有没有过期如果返回空列表说明这个仓库近 30 天确实没提交换个活跃仓库试。第二步验证 Playwright 抓页面python scripts/fetch_page.py第一次跑会提示装浏览器内核执行playwright install chromium即可。输出应该是页面的正文文本。如果拿到的是空字符串多半是选择器写错了把article换成body先确认能抓到内容再逐步收窄。第三步验证模型调用python scripts/summarize.py这一步会真正打到 TaoToken 接口。成功的话你会看到模型返回的摘要文本。如果报 401是 Key 的问题报 404检查 base_url 是不是多写了/v1报超时先单独用 curl 测一下接口连通性。三步都通之后回到 Claude Code 里触发 Skill。输入类似“帮我汇总 last30days-skill 仓库近30天的动态”Claude Code 会加载SKILL.md并按步骤执行。最终output/目录下会生成一份 markdown 简报包含 commit 摘要、页面要点和模型生成的总结。验证成功的标志output/里出现带时间戳的文件内容里既有 GitHub 的 commit 信息也有页面的关键段落还有一段模型写的归纳。三者都在说明整条链路通了。5. 本篇常见错排查Skill 不触发最常见的原因是SKILL.md的description写得太泛Claude Code 匹配不到。把触发词写具体比如加上“近30天”“仓库动态”这类关键词。另外确认settings.json里enabled是true。Playwright 报浏览器未安装playwright install chromium要在 Skill 的运行环境里执行不是全局装一次就够。如果你用虚拟环境确认装在了同一个 env 里。TaoToken 接口 401九成是 Key 没传对。检查settings.json的 env 字段有没有被正确注入脚本里读的是os.environ[TAOTOKEN_API_KEY]字段名要对上。另外确认 Key 没有多余空格。GitHub API 速率限制不带 token 时每小时只有 60 次请求跑几次就超了。配GITHUB_TOKEN后提到 5000 次基本够用。摘要结果太短或跑题prompt 里要把抓到的内容截断到合理长度太长会超上下文太短模型没信息可总结。我一般控制在 3000 字符以内并在 prompt 里明确要求“基于以下内容归纳不要编造”。输出目录为空检查output/目录是否存在且有写权限。Skill 脚本里的相对路径是相对于 Skill 根目录的不是相对于你当前终端所在目录。6. 把这条链路用起来这套 Skill 跑通之后你可以把它改成任何“定期盯某个信息源”的场景。比如把fetch_github.py里的仓库换成你关注的三个竞品把fetch_page.py的目标换成行业新闻页摘要 prompt 改成“提炼出对我产品决策有用的三条信息”。改的都是配置和 prompt骨架不用动。如果你后面想把这套流程接到更长期的编码或 Agent 任务里比如让 Claude Code 每天定时跑一次并把结果推到某个地方可以考虑用 Coding Plan 来管理这类持续性的调用额度比单次按量更省心。模型对话入口https://taotoken.net/api Coding Planhttps://taotoken.net/coding-plan 接入文档https://taotoken.net/doc真正让这套东西有价值的不是 Skill 本身而是你把“我关心的信息源”固化下来之后每次跑都是围绕你的主题而不是搜索引擎给你的通用结果。这个角度不一样结果也就不一样。
返回列表