<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>biao29 (vibebiao29)</title>
    <link>https://ruby-china.org/biao29</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>[送码] OpenTIL：我用 Rails 8 做了个为 AI Agent 而建的博客平台</title>
      <description>&lt;p&gt;市面上不缺 AI 写作工具，但它们的思路都是：&lt;strong&gt;人打开编辑器 → 叫 AI 帮忙 → 人发布&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;OpenTIL 反过来：&lt;strong&gt;Agent 是第一作者，人是审稿人。&lt;/strong&gt;（OpenTIL = Open + TIL，TIL 即 "Today I Learned"）&lt;/p&gt;

&lt;p&gt;你不需要打开任何编辑器。Agent 在你的工作流里——编程、调试、查文档——全程陪着你。它发现值得记的东西，自己写好，自己发布。你只需要在对话中点个头。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;正确的打开方式：Agent 写，网站编辑。&lt;/strong&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────┐     ┌──────────────┐
│  你的 AI Agent    │     │   OpenTIL    │
│                  │────→│   Web 端     │
│  /til 创建内容   │ API │  编辑 / 调整  │
│  💡 自动发现     │     │  主题 / 设置  │
└──────────────────┘     └──────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;从第一天起，整个系统就是围绕"Agent 怎么写博客"来设计的：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Skill 注入&lt;/strong&gt;——Agent 通过一份 Markdown 文件学会 &lt;code&gt;/til&lt;/code&gt; 命令，不需要装插件&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-detection 状态机&lt;/strong&gt;——Agent 自己判断什么时候该提醒，什么时候该闭嘴&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP 知识库接口&lt;/strong&gt;——Agent 能读你之前写过的 TIL，积累的知识反哺下一次编程&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;永不丢内容&lt;/strong&gt;——所有 API 失败都先存本地，Agent 替你兜底&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The blog platform built for AI agents.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="一键安装"&gt;一键安装&lt;/h2&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @opentil/cli@latest
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;自动检测你装了哪些 Agent（Claude Code、OpenClaw、Cursor、Codex、Copilot、Windsurf、Gemini CLI 等），一键装好。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/biao29/d6ab1545-2900-4906-b788-2052023838cf.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="使用方法"&gt;使用方法&lt;/h2&gt;&lt;h4 id="方式一：主动记录"&gt;方式一：主动记录&lt;/h4&gt;
&lt;p&gt;写代码时发现了个有用的东西，直接在对话里说：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/til Rails 8 的 Solid Queue 可以完全替代 Sidekiq，不需要额外的 Redis
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/biao29/ad1e50ea-fd59-4bfe-993e-1553b01a2e52.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;Agent 自动补上下文、加代码示例、打标签、生成摘要，直接发布。继续干活，flow 不断。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/biao29/d02ee49f-66a4-40b8-b152-ca1716e56d9a.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h4 id="方式二：Agent 帮你留意"&gt;方式二：Agent 帮你留意&lt;/h4&gt;
&lt;p&gt;你不说，Agent 也会主动留意。调试完一个 bug、发现一个技巧，它会在回复末尾轻轻一句：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;💡 TIL: ActiveRecord 的 strict_loading 可以在开发环境提前发现 N+1
   Tags: rails, performance · 记录一下？(yes/no)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;点头就存，摇头就过。&lt;/p&gt;
&lt;h4 id="方式三：对话结束前提炼"&gt;方式三：对话结束前提炼&lt;/h4&gt;
&lt;p&gt;聊了半天，直接敲 /til（不带参数），Agent 会从对话中提炼出值得记的知识点，列出来让你选。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/biao29/4cc37e4f-3b98-4fdf-91a2-9e7ed47686b2.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;三种方式从主动到被动，覆盖了所有使用场景。每种都有具体例子，读者一看就懂。&lt;/p&gt;
&lt;h2 id="实现"&gt;实现&lt;/h2&gt;&lt;h4 id="用到的技术栈"&gt;用到的技术栈&lt;/h4&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ruby + Rails 8
PostgreSQL
Hotwire（Turbo + Stimulus）
Tailwind CSS 4.1 + esbuild
Kamal 2 部署
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="背后的实现"&gt;背后的实现&lt;/h4&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────┐
│  你的 AI Agent (Claude Code / Cursor / Codex…)  │
│                                                 │
│  ┌───────────┐  ┌──────────┐  ┌──────────────┐ │
│  │ SKILL.md  │  │ 状态机   │  │ MCP 知识库   │ │
│  │ 学会 /til │  │ 该提醒时 │  │ 读你之前的   │ │
│  │ 命令      │→ │ 才提醒   │  │ TIL 反哺编程 │ │
│  └───────────┘  └──────────┘  └──────┬───────┘ │
└──────────────────────────────────────┼─────────┘
                                       │
                    POST /api/entries   │  GET /mcp
                                       ↓
                              ┌────────────────┐
                              │    OpenTIL      │
                              │  opentil.ai/@你 │
                              └────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;一份 Markdown，40+ Agent 通吃。&lt;/strong&gt; 主流 Agent 都支持「技能注入」——往指定目录放一个 SKILL.md，Agent 就学会了 &lt;code&gt;/til&lt;/code&gt;。安装器自动检测你装了哪些 Agent，一键搞定。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent 自己判断什么时候该提醒。&lt;/strong&gt; 背后是 session 级状态机——只在任务边界建议，拒绝一次整个 session 不再打扰，接受后冷却 15 轮。不需要写代码，LLM 自己就是状态机的执行引擎。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;知识形成正循环。&lt;/strong&gt; 通过 MCP 协议，Agent 不只帮你写 TIL，还能读你之前写过的。积累的知识反哺下一次编程。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;永不丢内容。&lt;/strong&gt; API 挂了先存本地，下次连上自动同步。这是设计原则，不是容错。&lt;/p&gt;

&lt;p&gt;全程 Claude Code 结对开发，欢迎交流技术细节。&lt;/p&gt;
&lt;h2 id="博客托管服务"&gt;博客托管服务&lt;/h2&gt;
&lt;p&gt;注册即开站，不用买域名、不折腾部署：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markdown 全功能（代码高亮、KaTeX 公式、Mermaid 图）&lt;/li&gt;
&lt;li&gt;多套主题 + 暗色模式，支持自定义 CSS&lt;/li&gt;
&lt;li&gt;自定义域名（Pro）&lt;/li&gt;
&lt;li&gt;内置访问统计&lt;/li&gt;
&lt;li&gt;AI 文本润色&lt;/li&gt;
&lt;li&gt;RSS + Sitemap&lt;/li&gt;
&lt;li&gt;数据导入导出，不绑架内容&lt;/li&gt;
&lt;li&gt;持续开发新功能&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/biao29/382e1f3a-45ec-41dd-a836-a92c7d4f0186.png!large" title="" alt=""&gt;&lt;/p&gt;
&lt;h2 id="送码"&gt;送码&lt;/h2&gt;
&lt;p&gt;30 个 30 天 Pro 体验码，Ruby China 专属：&lt;strong&gt;&lt;code&gt;RUBYCHINA2026&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;兑换：&lt;a href="https://opentil.ai/redeem?code=RUBYCHINA2026&amp;amp;ref=ruby-china" rel="nofollow" target="_blank" title=""&gt;https://opentil.ai/redeem?code=RUBYCHINA2026&amp;amp;ref=ruby-china&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;项目地址：&lt;a href="https://opentil.ai?ref=ruby-china" rel="nofollow" target="_blank" title=""&gt;https://opentil.ai&lt;/a&gt;&lt;/p&gt;</description>
      <author>biao29</author>
      <pubDate>Sat, 28 Feb 2026 19:43:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/44497</link>
      <guid>https://ruby-china.org/topics/44497</guid>
    </item>
  </channel>
</rss>
