尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

NewsBlur 功能发布工作流:用 Claude Code 命令同步生产 Features Board 与推文

发布时间:2026/9/29 22:23:44

资讯中心
01
ARTICLE

NewsBlur 功能发布工作流:用 Claude Code 命令同步生产 Features Board 与推文

NewsBlur 功能发布工作流:用 Claude Code 命令同步生产 Features Board 与推文
后端前端社交人工智能【免费下载链接】NewsBlurNewsBlur is a personal news reader that brings people together to talk about the world. A new sound of an old instrument.项目地址https://gitcode.com/gh_mirrors/ne/NewsBlur点击查看免费下载导读feature.md是 NewsBlur 仓库中为 Claude Code 定制的一条斜杠命令slash command它把「发布新功能公告」这件事做成了可复用的 Agent 工作流自动检索匹配的博客文章、按既有风格生成多个功能描述候选、经用户确认后直接写入生产数据库的 Features Board并附带 3 至 5 组现成推文。本文结合仓库源码拆解该命令的完整设计从命令的 frontmatter 声明、上下文注入到七步执行流程再到Feature模型的底层实现、权限控制与 Features Board 的前端渲染让你既能照搬这套发布流程也能理解它背后的数据链路。一、命令定位.claude/commands/feature.md是什么在 NewsBlur 仓库的.claude/commands/目录下存放着一批面向 AI 编码助手Claude Code的自定义命令feature.md是其中之一专门负责「向生产环境的 Features Board 发布一条新功能并撰写配套推文」。命令文件采用标准的 YAML frontmatter 声明元信息--- description: Post a feature to the Features Board on production and write tweets allowed-tools: Bash, Read, Glob, Grep, AskUserQuestion ---description描述命令用途供 Agent 理解何时该调用这条命令allowed-tools白名单限定本次任务只允许使用 Bash执行命令、Read读文件、Glob文件匹配、Grep搜索和 AskUserQuestion向用户提问五类工具其余能力被显式禁用。同目录还包含blog-post.md、commit.md、worktree.md等命令可见该项目把常见的「写博客、提 commit、发布功能」等维护动作全部脚本化成了 Agent 可执行的命令feature.md就是其中连接「博客内容」与「产品公告」的环节。二、上下文注入让 Agent 先「看清现场」命令正文的开头是 Context上下文部分包含两条动态指令要求 Agent 在动手前先收集两类现场信息# 1. 最近发布的博客文章 !ls -t blog/_posts/*.md | head -10 # 2. 生产环境当前已上线的功能列表 !./utils/ssh_hz.sh -n happ-web-01 docker exec -t newsblur_web python manage.py shell -c \from apps.reader.models import Feature; [print(f{f.date.strftime(\\\%b %d, %Y\\\)}: {f.description}) for f in Feature.objects.all()[:6]]\这两条指令一前一后形成了任务的参照系第一条用ls -t按修改时间倒序列出blog/_posts/下最近 10 篇博客文章用于后续「找一篇与功能主题匹配的文章」第二条则是真实的运维链路通过 utils/ssh_hz.sh 登录到生产应用机别名happ-web-01在newsblur_web容器内用 Django shell 查询apps.reader.models.Feature表最近 6 条记录作为风格模板。仓库中blog/_posts/目录确实按YYYY-MM-DD-slug.md命名例如2026-03-25-daily-briefing.md、2026-04-06-premium-pro.md与命令中推导博客 URL 的规则完全对应。ssh_hz.sh如何工作utils/ssh_hz.sh 是整条链路的关键基础设施。它从ansible/inventories/hetzner.ini中按别名解析主机 IP再以固定密钥发起 SSH支持-n|--noninteractive非交互模式-n后的第一个参数是服务器别名其余参数全部作为远程命令透传别名解析逻辑先在 ini 中做整行精确匹配grep ^$1[[:space:]]失败则回退到子串匹配同时跳过以;或#开头的注释行连接参数固定为-o StrictHostKeyCheckingno -o UserKnownHostsFile/dev/null -i /srv/secrets-newsblur/keys/docker.key登录用户为nb$HOST在仓库中ansible/inventories/hetzner.ini是一个指向/srv/secrets-newsblur/configs/hetzner.ini的符号链接实际主机清单存于保密目录而 ansible/inventories/hetzner.yml 定义了主机分组逻辑happ-web-01属于django/hdjango组以happ-web开头即承载 Django Web 服务的生产实例。也就是说这条 Context 指令是经过真实生产环境验证的写法SSH 进 Django 容器、用manage.py shell -c执行单行查询全程无人值守。三、写作风格拒绝「AI 味」命令用一节专门约束所有产出的文风功能描述与推文都要像人写的不使用 em dash 或双连字符甚至「不用破折号做标点」而是重组句子不要过度打磨、不要企业腔保持直接、自然不要套话例如 excited to announce、were thrilled、game-changer 这类空泛短语写作基调像开发者向用户介绍自己的产品一样朴实。这节是命令的灵魂Features Board 和推文都是面向真实用户的内容一旦写得像模板生成的营销文案功能公告的可信度与可读性都会下降。四、七步执行流程命令将整个任务拆成 7 个明确步骤每一步都有可验证的产出物。Step 1定位匹配的博客文章在blog/_posts/中搜索与主题命令参数{{ arguments }}匹配的博文并通读全文重点提取功能做什么关键能力与亮点哪些订阅套餐tier可使用博文日期与 URL slug。博客 URL 由文件名推导规则为https://blog.newsblur.com/YYYY/MM/DD/slug-from-filename/例如blog/_posts/2026-03-25-daily-briefing.md对应https://blog.newsblur.com/2026/03/25/daily-briefing/。这条规则与仓库中博客文件的命名习惯如2026-04-01-mcp-server-and-cli.md、2026-07-17-good-reads-and-a-redesigned-global-shared-stories.md一一对应。Step 2研究现有功能的风格基线以 Context 部分取回的 6 条生产记录为样本归纳出 Features Board 条目的格式规范长度1 至 3 句精炼有力语气产品导向突出「新在哪、有什么用」结构功能描述正文 a href...Read the blog post/a内容先讲功能做什么再压缩关键细节偶尔提及套餐可用性字段性质description字段存放的是原始 HTML博客链接是其中的a锚点标签。这一点在源码中能得到印证templates/reader/features_module.xhtml 直接以{{ feature.description|typogrify }}渲染该字段说明描述内嵌 HTML 是设计使然前端会原样输出。Step 3产出 4 至 5 个候选描述在既有风格内做多角度变体差异点包括突出功能的广度还是深度、长度短 vs 略长、纳入哪些细节分节、投递方式、自定义选项、套餐信息。所有候选以纯文本形式呈现在对话中避免使用 AskUserQuestion 的预览框预览会截断 HTML。Step 4让用户拍板用 AskUserQuestion 单选不带预览让用户选择选项标签要能体现每个候选的角度差异例如 Balanced, both features 或 Problem-first framing。Step 5写入生产数据库核心命令用户选定后通过以下命令在happ-web-01的生产环境创建 Feature 记录./utils/ssh_hz.sh -n happ-web-01 docker exec -t newsblur_web python manage.py shell -c \ from apps.reader.models import Feature import datetime f Feature( descriptionTHE CHOSEN DESCRIPTION WITH HTML LINK, datedatetime.datetime.utcnow() datetime.timedelta(minutes1) ) f.save() print(fCreated Feature #{f.id}: {f}) \这条命令的要点通过ssh_hz.sh直达生产机再docker exec进入newsblur_web容器直接以 ORM 方式构造Feature对象并save()不经过任何 HTTP 接口日期刻意设为「当前 UTC 时间 1 分钟」避免因时钟偏差导致记录时间戳早于当前时刻命令结束后打印Feature #id用于回执。命令末尾特别强调嵌套 shell 命令中必须正确转义描述内容里的引号。因为描述字段含 HTML 锚点本身就有引号而整段代码又经过 bash → ssh → docker exec → python shell 四级嵌套引号层级稍有错乱就会导致命令中断或字段截断。Step 6确认上线向用户回报生成的 Feature ID并确认该条目已在生产环境生效。Step 7撰写推文集产出 3 至 5 组推文每组 2 至 3 条可作为一条 Thread 或独立发布每条的硬性要求长度在 280 字符以内URL 不计入Twitter 会自动缩短以博客 URL 独占一行结尾遵守上文写作风格不用破折号、不写 AI 套话。各组从不同角度切入有的同时覆盖两个功能、有的聚焦单一功能、有的给出具体示例、有的短小精悍。推文候选直接在对话中以纯文本、编号形式展示方便用户直接复制不再走 AskUserQuestion与 Step 4 刻意形成差异化交互。五、底层支撑Features Board 的数据链路feature.md命令写入的其实是 NewsBlur 首页 Dashboard 上的一块「类博客功能公告板」它的完整数据链路如下1. 模型层apps/reader/models.py 第 3196 至 3208 行定义了极简的Feature模型class Feature(models.Model): Simple blog-like feature board shown to all users on the home page. description models.TextField(default) date models.DateTimeField(defaultdatetime.datetime.now) def __str__(self): return [%s] %s % (self.date, self.description[:50]) class Meta: ordering [-date]description公告正文含 HTML 博客链接date发布时间模型默认datetime.datetime.now命令则显式改为 UTC 时间并加 1 分钟Meta.ordering [-date]查询结果默认按日期倒序最新公告排在最前。配套测试工厂 apps/reader/factories.py 中的FeatureFactory用 Faker 生成description与date方便在测试环境复现公告数据。2. 表单层apps/reader/forms.py 的FeatureForm复刻了命令的日期逻辑class FeatureForm(forms.Form): use_required_attribute False description forms.CharField(requiredTrue) def save(self): feature Feature( descriptionself.cleaned_data[description], datedatetime.datetime.utcnow() datetime.timedelta(minutes1), ) feature.save() return feature可见「utcnow 1 分钟」并非命令独有而是 Web 端新增公告Dashboard 上的 Add Feature 表单与 CLI 命令共用的同一套约定。3. 视图层与权限apps/reader/views.py 有两个相关视图add_feature第 4602 至 4615 行处理 Web 表单提交以request.user.is_staff校验管理员权限非 staff 直接返回HttpResponseForbidden()。生产运维走命令行的原因也与此一致命令行方式天然绕过了 Web 表单需要操作者掌握 SSH 与容器权限load_features第 4618 至 4632 行对外提供 JSON 接口按[page * 3 : (page 1) * 3 1]分页即每页取 4 条其中第 4 条用于判断是否还有下一页并把日期按用户时区格式化为%b %d, %Y。两条路由注册在 apps/reader/urls.py^add_featurename 为add-feature与^featuresname 为load-features。4. 展示层templates/reader/features_module.xhtml 渲染公告板表格{% for feature in features %} tr classNB-module-feature {% if forloop.last %}last{% endif %} {% if feature.date user.profile.last_seen_on %}NB-module-feature-new{% endif %} td classNB-module-feature-date{% localdatetime feature.date %b %d, %Y %}/td td classNB-module-feature-description{{ feature.description|typogrify }}/td日期以本地化格式显示描述经typogrify过滤器做排版优化正确处理智能标点等若公告日期晚于用户上次访问时间user.profile.last_seen_on自动加NB-module-feature-new类做「新公告」视觉高亮。该模块被嵌入首页仪表盘 templates/reader/dashboard.xhtml并配合一段 JS$(#add-feature-button).click(...)控制「Add」表单的显隐。也就是说用户在首页看到的每一条功能公告都对应着Feature表里的一行记录而这正是feature.md命令直接操作的对象。六、实战要点与注意事项把feature.md的工作流搬到自己的发布流程中时有几处细节值得留意引号转义是最大的坑描述中的 HTML 链接a href...带双引号整条命令要穿透 bash、ssh、docker exec、python shell 四层解释器建议先在本地用单层python -c验证描述字符串再套进完整命令。时间戳策略date使用utcnow timedelta(minutes1)既保证记录出现在「现在」之后又能容忍一定时钟偏差前端正是依据这个时间戳做「新功能」高亮。权限边界Web 端的add_feature视图受is_staff保护命令行发布依赖ssh_hz.sh的密钥/srv/secrets-newsblur/keys/docker.key与容器访问权两条路径的权限模型不同生产操作前应确认具备对应凭据。风格一致性Features Board 与推文都面向真实用户命令用「长度 1 至 3 句、产品导向、含博客链接、避免 AI 套话」四条基线约束全部产出保证任何 Agent 生成的内容都与历史公告同源同质。可回滚与可验证save()后打印Feature #id作为回执也可以随时用 Context 中的查询命令复核最新 6 条记录确认公告已生效。七、总结feature.md完整展示了 NewsBlur 团队如何把「内容运营」也纳入自动化它一端连接blog/_posts/的写作产出一端连接生产库Feature表的写入中间用「风格基线 用户确认 多角度候选」三件套保证输出质量。理解这条命令不仅能用它发布公告更能看到 NewsBlur 首页 Features Board 从模型、表单、视图到模板的完整实现链路。如果你也在维护一个带公告板或 Changelog 的产品这套「命令定义 动态上下文 生产直写」的范式值得直接借鉴。赞分享后端前端社交人工智能【免费下载链接】NewsBlurNewsBlur is a personal news reader that brings people together to talk about the world. A new sound of an old instrument.项目地址https://gitcode.com/gh_mirrors/ne/NewsBlur点击查看免费下载相关推荐NewsBlur 仓库的智能提交与推送基于 Claude Code 的 commit-push 工作流解析NewsBlur 仓库的智能提交与推送基于 Claude Code 的 commit push 工作流解析 导读 在 NewsBlur 这类大型开源仓库中A后端前端社交人工智能ruflo release-manager用 Claude Code 命令构建 Swarm 协同的多包发布流水线ruflo release manager用 Claude Code 命令构建 Swarm 协同的多包发布流水线 本文以 rufloclaude flow人工智能AI Agent多智能体Agent 编排Agent 记忆工具调用代码智能体MCP 服务AI 评测使用 Claude Code /prp-mcp-execute 命令从 PRP 到生产级 MCP 服务器的可执行工作流使用 Claude Code /prp mcp execute 命令从 PRP 到生产级 MCP 服务器的可执行工作流 导读 /prp mcp execute文档教程提示工程人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。