<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Appaloft 工程博客</title>
    <link>https://www.appaloft.com/zh-CN/blog</link>
    <description>关于 Agent 应用交付、部署证据、Blueprint、控制面设计与 TypeScript DDD 的工程文章。</description>
    <language>zh-CN</language>
    <lastBuildDate>Sat, 29 Aug 2026 07:44:55 GMT</lastBuildDate>
    <atom:link href="https://www.appaloft.com/zh-CN/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Appaloft 的 Grok Bot 插件</title>
      <link>https://www.appaloft.com/zh-CN/blog/appaloft-plugin-for-grok-bot</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/appaloft-plugin-for-grok-bot</guid>
      <pubDate>Sat, 29 Aug 2026 00:00:00 GMT</pubDate>
      <description>在 Grok Bot 插件目录里搜索 Appaloft，点 Add，再 Authenticate。现有 skill 和托管 MCP 装在同一个插件里。</description>
      <category>AI</category>
      <category>Agents</category>
      <category>MCP</category>
      <category>Grok</category>
    </item>
    <item>
      <title>把部署能力装进 Cursor 和 OpenCode</title>
      <link>https://www.appaloft.com/zh-CN/blog/teach-cursor-opencode-appaloft-setup-agent</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/teach-cursor-opencode-appaloft-setup-agent</guid>
      <pubDate>Wed, 26 Aug 2026 00:00:00 GMT</pubDate>
      <description>appaloft setup agent 如何把 skill 与 MCP 写入本机 coding agent，同时保留登录、确认、部署和结果回读的清晰边界。</description>
      <category>AI</category>
      <category>Agents</category>
      <category>MCP</category>
      <category>CLI</category>
    </item>
    <item>
      <title>笔记本关机后，agent 的工作区还在</title>
      <link>https://www.appaloft.com/zh-CN/blog/agent-workspace-architecture</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/agent-workspace-architecture</guid>
      <pubDate>Mon, 27 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 1.4 把 Agent Workspace 做成公共 Sandbox 入口工作流：远程 harness、协作租约、休眠恢复，以及带证据门槛的发布路径。本文讲架构、和 OpenSandbox 等产品的对比，以及哪些门禁还没关完。</description>
      <category>AI</category>
      <category>Agents</category>
      <category>Sandbox</category>
      <category>架构</category>
      <category>Agent Workspace</category>
    </item>
    <item>
      <title>构建应用的 agent，不该是那个点发布的角色</title>
      <link>https://www.appaloft.com/zh-CN/blog/agents-should-not-publish-their-own-work</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/agents-should-not-publish-their-own-work</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 新的 sandbox agent runtime 让 coding agent 在隔离、会过期的沙箱里干活，然后把产物冻结成不可变 artifact，只有沙箱外的角色才能 promote。这篇文章讲清楚这条边界划在哪里、为什么这么划。</description>
      <category>AI</category>
      <category>Agents</category>
      <category>Sandbox</category>
      <category>部署</category>
    </item>
    <item>
      <title>我们怎样构建交付证据链</title>
      <link>https://www.appaloft.com/zh-CN/blog/delivery-evidence-chain</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/delivery-evidence-chain</guid>
      <pubDate>Tue, 21 Jul 2026 00:00:00 GMT</pubDate>
      <description>AI Agent 十分钟就能写出一个应用，证明真正上线的究竟是哪一份代码却难得多。这篇拆开 Appaloft 的交付证据链，也说明它刻意不证明什么。</description>
      <category>部署控制</category>
      <category>Runtime 验证</category>
      <category>AI</category>
      <category>Agent</category>
    </item>
    <item>
      <title>控制面密钥轮换：从密钥保管到故障恢复</title>
      <link>https://www.appaloft.com/zh-CN/blog/control-plane-key-rotation</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/control-plane-key-rotation</guid>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何为控制面秘密设计版本化 keyring、OIDC 短期身份、plan digest、原子迁移与独立恢复演练。</description>
      <category>Security</category>
      <category>Key rotation</category>
      <category>Postgres</category>
      <category>GitHub Actions</category>
    </item>
    <item>
      <title>“已部署”不是健康检查</title>
      <link>https://www.appaloft.com/zh-CN/blog/deployment-proof-running-workload-changed</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/deployment-proof-running-workload-changed</guid>
      <pubDate>Thu, 16 Jul 2026 00:00:00 GMT</pubDate>
      <description>一次部署需要证明 artifact、进程、服务和公网路由都属于目标版本。</description>
      <category>Deployment control</category>
      <category>Runtime verification</category>
      <category>Docker</category>
      <category>AI</category>
    </item>
    <item>
      <title>回滚按钮不是恢复方案</title>
      <link>https://www.appaloft.com/zh-CN/blog/compose-rollback-contract</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/compose-rollback-contract</guid>
      <pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate>
      <description>单机 Docker Compose 更新要守住五条约束：镜像预检、候选版本验证、证据保留、定向清理，以及明确的数据恢复边界。</description>
      <category>Docker Compose</category>
      <category>Deployment</category>
      <category>Rollback</category>
      <category>自托管</category>
    </item>
    <item>
      <title>部署到底归谁管：小团队如何划分 Git、CI、服务器和发布状态</title>
      <link>https://www.appaloft.com/zh-CN/blog/who-owns-the-deploy</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/who-owns-the-deploy</guid>
      <pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate>
      <description>从 Git 仓库、CI Runner、自有服务器到部署记录，拆清小团队部署链路里的四种所有权，以及 Appaloft 负责和不负责的边界。</description>
      <category>Deployment control</category>
      <category>Docker Compose</category>
      <category>Self-hosting</category>
      <category>CI/CD</category>
    </item>
    <item>
      <title>部署平台不该假设所有应用都跑在 3000 端口</title>
      <link>https://www.appaloft.com/zh-CN/blog/one-repo-many-runtime-shapes</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/one-repo-many-runtime-shapes</guid>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
      <description>从 Vite、Python、Go 到 Docker Compose，Appaloft examples 如何用明确的部署契约覆盖不同 runtime，而不是靠平台猜测。</description>
      <category>Deployment control</category>
      <category>Runtime</category>
      <category>Docker</category>
      <category>Examples</category>
    </item>
    <item>
      <title>复制环境形状，不要复制生产里的秘密</title>
      <link>https://www.appaloft.com/zh-CN/blog/copy-the-environment-shape-not-the-secrets</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/copy-the-environment-shape-not-the-secrets</guid>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何把环境复制做成 plan-first 工作流：拓扑和意图可以带走，数据库、域名、卷数据和 secret 值必须留下决策。</description>
      <category>Environments</category>
      <category>Deployment control</category>
      <category>CLI</category>
      <category>Safety</category>
    </item>
    <item>
      <title>部署失败以后，平台应该留下什么？</title>
      <link>https://www.appaloft.com/zh-CN/blog/deployment-failure-should-leave-a-recovery-path</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/deployment-failure-should-leave-a-recovery-path</guid>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <description>部署失败不是一个足够有用的状态。Appaloft 如何把失败位置、已完成的工作、可重试动作和回滚目标留在同一条恢复路径里。</description>
      <category>Deployment control</category>
      <category>Recovery</category>
      <category>Rollback</category>
      <category>AI</category>
    </item>
    <item>
      <title>一个自定义域名接入 Appaloft 的过程</title>
      <link>https://www.appaloft.com/zh-CN/blog/custom-domain-onboarding-flow</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/custom-domain-onboarding-flow</guid>
      <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
      <description>从输入 hostname 到 DNS 授权、readback、TLS、路由生效和失败处理，Appaloft 如何把自定义域名接入做成可检查的部署流程。</description>
      <category>Custom Domains</category>
      <category>DNS</category>
      <category>Routing</category>
      <category>Deployment control</category>
    </item>
    <item>
      <title>MCP Tool 已经是产品 API，不是 Demo 接口</title>
      <link>https://www.appaloft.com/zh-CN/blog/mcp-tools-are-product-apis</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/mcp-tools-are-product-apis</guid>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <description>为什么 Appaloft 从 operation catalog 生成 MCP tools，并让它们回到同一套 CommandBus/QueryBus、authz、audit 和 readback，而不是手写 agent 专用工具。</description>
      <category>AI</category>
      <category>MCP</category>
      <category>API</category>
      <category>部署控制面</category>
      <category>Agents</category>
    </item>
    <item>
      <title>一个部署 URL，应该说清楚什么会变</title>
      <link>https://www.appaloft.com/zh-CN/blog/what-a-deploy-url-should-promise</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/what-a-deploy-url-should-promise</guid>
      <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
      <description>部署 URL 也是部署契约的一部分：有些链接不能移动，有些 alias 可以带审计地移动，自定义域名则必须有所有权证明。</description>
      <category>Deployment control</category>
      <category>Routing</category>
      <category>Rollback</category>
      <category>AI</category>
    </item>
    <item>
      <title>安装进度不该是一条孤立的日志</title>
      <link>https://www.appaloft.com/zh-CN/blog/install-progress-should-not-be-disconnected-logs</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/install-progress-should-not-be-disconnected-logs</guid>
      <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 为什么把 Blueprint 安装显示成一个用户能读懂的进度，而不是让用户在组件日志、后台任务和失败信息之间自己拼答案。</description>
      <category>Blueprint</category>
      <category>Marketplace</category>
      <category>产品体验</category>
    </item>
    <item>
      <title>从 GitHub Actions 到 Appaloft：一次部署应该留下哪些证据</title>
      <link>https://www.appaloft.com/zh-CN/blog/github-actions-appaloft-deployment-evidence</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/github-actions-appaloft-deployment-evidence</guid>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何把 GitHub Actions 触发的部署变成可审计的证据链：commit SHA、image digest、config snapshot、provenance、readback 和 rollback。</description>
      <category>GitHub Actions</category>
      <category>Deployment control</category>
      <category>Provenance</category>
      <category>AI</category>
    </item>
    <item>
      <title>AI Agent 生成了静态站点，接下来该怎么上线？</title>
      <link>https://www.appaloft.com/zh-CN/blog/ai-agent-static-site-deployment</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/ai-agent-static-site-deployment</guid>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何把 agent 产出的 dist 变成可审计的 static artifact publishing 流程，而不是让 AI 直接拿云厂商密钥上传文件。</description>
      <category>AI</category>
      <category>Static Artifacts</category>
      <category>部署控制面</category>
      <category>Agents</category>
    </item>
    <item>
      <title>Appaloft 里的 TypeScript DDD（四）：Specification</title>
      <link>https://www.appaloft.com/zh-CN/blog/ddd-specification-appaloft-typescript</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/ddd-specification-appaloft-typescript</guid>
      <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 在 TypeScript 里轻量使用 Specification，包括 selection spec、readiness gate、policy decision 和 drift report。</description>
      <category>DDD</category>
      <category>Specification</category>
      <category>TypeScript</category>
    </item>
    <item>
      <title>AI Agent 登录不该复制 Cookie</title>
      <link>https://www.appaloft.com/zh-CN/blog/ai-agent-cli-auth-token-handoff</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/ai-agent-cli-auth-token-handoff</guid>
      <pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 为什么把人类 browser login、CI token 和 AI agent token handoff 分成三条路径，而不是让 agent 代替用户登录。</description>
      <category>AI</category>
      <category>CLI</category>
      <category>Auth</category>
      <category>Agents</category>
    </item>
    <item>
      <title>Skill 不是 MCP：AI Agent 如何安全地调用部署控制面</title>
      <link>https://www.appaloft.com/zh-CN/blog/skills-are-not-mcp-ai-deployment-control-plane</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/skills-are-not-mcp-ai-deployment-control-plane</guid>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 为什么把 AI skill、MCP tools、CLI 命令和 operation catalog 分成不同职责，而不是给 agent 单开一条部署捷径。</description>
      <category>AI</category>
      <category>MCP</category>
      <category>部署控制面</category>
      <category>Agents</category>
    </item>
    <item>
      <title>Blueprint 不是 Marketplace：Appaloft 的一键部署为什么先生成计划</title>
      <link>https://www.appaloft.com/zh-CN/blog/blueprints-are-not-marketplace-cards</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/blueprints-are-not-marketplace-cards</guid>
      <pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何把 Blueprint 建模为可版本化、可实例化的应用拓扑，而不是普通市场卡片，并用 dry-run install plan 守住部署边界。</description>
      <category>Blueprint</category>
      <category>部署控制面</category>
      <category>Marketplace</category>
      <category>AI</category>
    </item>
    <item>
      <title>Appaloft 里的 TypeScript DDD（三）：Value Object</title>
      <link>https://www.appaloft.com/zh-CN/blog/ddd-value-objects-appaloft-typescript</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/ddd-value-objects-appaloft-typescript</guid>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 的 TypeScript value-object 风格：schema version、literal union、id、secretRef、masked connection 和 provider 边界 alias。</description>
      <category>DDD</category>
      <category>Value Object</category>
      <category>TypeScript</category>
    </item>
    <item>
      <title>Appaloft 里的 TypeScript DDD（二）：Aggregate Root</title>
      <link>https://www.appaloft.com/zh-CN/blog/ddd-aggregate-root-appaloft-typescript</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/ddd-aggregate-root-appaloft-typescript</guid>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何用 TypeScript 把 InstalledApplication 建模为 aggregate root，守住 plan acceptance、readback、failure 和 rollback 的状态转换。</description>
      <category>DDD</category>
      <category>Aggregate Root</category>
      <category>TypeScript</category>
    </item>
    <item>
      <title>Appaloft 里的 TypeScript DDD（一）：先划边界，再谈目录</title>
      <link>https://www.appaloft.com/zh-CN/blog/ddd-in-appaloft-typescript-architecture</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/ddd-in-appaloft-typescript-architecture</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何把 DDD 落到 TypeScript：Blueprint plan、InstalledApplication、DependencyResource、runtime composition，以及 public core 和 Cloud overlay 的边界。</description>
      <category>DDD</category>
      <category>TypeScript</category>
      <category>架构</category>
    </item>
    <item>
      <title>面向 AI 时代的部署控制面</title>
      <link>https://www.appaloft.com/zh-CN/blog/ai-native-deployment-control-plane</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/ai-native-deployment-control-plane</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>Appaloft 如何把部署建模为 CLI、GitHub、AI 工具、蓝图和 Cloud 共享的可审计操作路径。</description>
      <category>AI</category>
      <category>部署控制面</category>
      <category>Cloud</category>
    </item>
    <item>
      <title>我们用 Bun 做 Appaloft：一次不太营销的工程复盘</title>
      <link>https://www.appaloft.com/zh-CN/blog/we-built-appaloft-with-bun</link>
      <guid isPermaLink="true">https://www.appaloft.com/zh-CN/blog/we-built-appaloft-with-bun</guid>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <description>一篇工程复盘：Appaloft 如何用 Bun 做 TypeScript 脚本、编译二进制、嵌入 Web/docs 静态资源、PGlite runtime，以及多平台发布打包。</description>
      <category>Bun</category>
      <category>自部署</category>
      <category>工程复盘</category>
    </item>
  </channel>
</rss>
