用途:指导在 Agent Native 工作区中新增应用。用户通过 Dispatch 聊天或 Slack、Telegram 的 @agent-native 提出创建、构建、搭建或生成“agent”时,需先分类:提醒、摘要、监控、路由规则、保存指令、周期工作流等简单 Dispatch 原生行为可留在 Dispatch 作为周期任务/资源/目标;需要独立 UI、数据模型、动作、集成或领域工作流的独特产品或“队友”应成为 apps/<app-name> 下的独立工作区应用,挂载在 /<app-name>。除非用户明确要求修改现有应用,否则不要往 apps/chat 等已有应用加路由、页面、组件或文件。
主要能力与约定:Dispatch 的 vault 访问默认对整个工作区开放,所有已保存密钥对所有工作区应用可用;仅当 vault 访问设为手动模式时才创建或申请按应用授权。应用需要提供商凭据时,使用应用作用域密钥或工作区连接解析器,让 Dispatch 保持为唯一事实来源;不要让非管理员构建者把密钥写入本地项目设置或 .env,缺失密钥走 Dispatch 的 vault 请求流程,且不要把值写进应用代码。工作区应用通过 apps/<app-name>/package.json 被发现,没有单独的应用注册表;应在其中保存简洁的人类可读描述,Dispatch 列表和 A2A 已连接代理上下文使用应用名加描述。使用相对工作区链接如 /<app-name>,不要在应用卡片、说明、重定向或导航中硬编码 localhost、127.0.0.1、8080、8100 或任何开发端口。React Router 应用必须在 app/entry.client.tsx 中通过 appBasePath() 保留 APP_BASE_PATH / VITE_APP_BASE_PATH。标准 UI 使用 shadcn/ui 组件和 @tabler/icons-react,不要添加 lucide-react 或其他图标库;添加、更新或调试 shadcn 组件前先读 .agents/skills/shadcn-ui/SKILL.md。
数据与数据库:普通应用数据必须经由 actions 流动。代理可执行的 CRUD 应在 actions/ 中创建 defineAction 文件,读取标记 http: { method: "GET" },并在 React 中用 useActionQuery / useActionMutation 调用。不要为同一数据在 /api/* 下添加重复的 JSON CRUD 路由,除非用于上传、流式传输、webhook、OAuth 等仅路由关注点;也不要添加主要工作是包装、代理或再导出 action 的路由,action 端点已存在于 /_agent-native/actions/:name。应用数据库代码必须与提供商无关:用 @agent-native/core/db/schema 助手定义模式,用 Drizzle 查询构建器和可移植的 drizzle-orm 操作符读写,不要在应用模板中从 drizzle-orm/sqlite-core 或 drizzle-orm/pg-core 导入;原始 SQL 仅用于增量迁移、健康检查或范围明确的维护,不要写仅 SQLite 或仅 Postgres 的产品代码;不要用 SQL 做对象存储,文件字节应放在上传/私有 blob 提供商,应用表中只保存引用。
脚手架与完成:本地开发时在工作区根目录运行 pnpm exec agent-native create <app-name> --template=<template>。生产环境中 Dispatch 将新应用请求发送到 Builder 分支创建,Builder 仍应搭建独立工作区应用。工作区开发网关(pnpm dev)会自动检测新的 apps/<app-name> 目录。使用 chat 模板时仅将其视为脚手架,完成的应用必须按请求的应用进行品牌化,拥有自己的主屏、导航、包元数据、清单和领域工作流,不要留下可见的 Chat、Starter、Blank app、Start building 或 New app UI。相关技能包括 workspace-conventions、actions、composable-mini-apps、portability、shadcn-ui。