选什么初始项目作为vibecodeing的初始化,最适用于AI全栈的开发框架one-is-all(二)

在上一期中,我介绍了one-is-all的选型,以及初始化。中间各种事情穿插,也没有好好整理和发文,这一期,我将详细讲解一下
命名与形象
oia,中文读作「咿呀」。名字取自希腊圣托里尼岛的伊亚镇(Oia)——那个悬崖边上看”全世界最美日落”的艺术家村落。而她的全称是 one is all,「一即是全」:希望她能直接作为模型实现所有程序的基座。声调”咿呀”像孩童学语,也预示着这个项目将蹒跚学步,随着模型与智能体一同前进。
一句话定义:oia 是一个面向 AI Agent 的全栈框架脚手架。它不是提供给人类开发者的,而是便于模型理解、修改、运行一个安全完整的程序——包含前后端,乃至跨平台。
当前版本基于 Deno + Fresh 2.3.3 + Preact + Vite,配套 npx @oia-ai/oia-skill 一键安装的 Claude Code skill。
选型
有人会问:模型写 fresh/deno 的能力明明不如 next 和 node,为什么不直接用 next,反而要造轮子?
因为我看到的是另一个方向:deno 正在蓬勃地向 AI 靠拢,而 next/node 生态背着太多为”人类旧生态”设计的包袱。混乱的旧生态,有没有可能被一套原生适用于 AI 的新生态取代?oia 就是这个问题的实验田。
基于此,框架存在三条底层共识:
- 前后一体。前后端必须在一个目录里,对模型来说,一个仓库就是一份完整上下文,减少跨项目切换的认知成本。
- 选型最小化。依赖越少,模型越容易理解全貌,开发环境秒起,CI/CD 也快。
- 用 skill 和 spec 约束模型。不给模型自由发挥的空间,而是用规范收拢它。
设计
落到架构上,oia 的核心是「可预测性」。
目录即文档。routes、islands、components、features、server——每个目录职责单一且高度可预测,模型看目录结构就能推断系统边界,不需要猜测。相同类型的问题永远用相同的解法:路由薄、用例编排、仓储隔离,route → service → repository 的调用链是一条直线。
交互局部化。Fresh 的 Islands 架构被放在首要位置:默认组件都是服务端渲染,只有真正需要浏览器交互的部分(输入框、拖拽、WebSocket)才做成 Island。目标是把 JavaScript 限制在真正需要交互的边界,SSR 优先,小 JS 优先。
最小化运行时。默认数据库是 SQLite——单文件、零运维、随部署走。Redis、消息队列、独立搜索服务这些中间件一概不默认引入,只在真实需求出现时才通过明确的接口边界接入。禁止”为了看起来像生产架构”而堆砌中间件。
约定优于魔法。这可能是最反直觉的一条:框架拒绝 BaseRepository、AbstractController 这类”为了架构感”的抽象。当一个实现看起来更工程化,却需要更多隐含上下文时,优先选择更简单、更显式的方案。
与 AI 协作:Rules 不等于 Skills
讨论框架如何”深度结合 AI 开发”,我想先澄清一个很容易被搞混的概念:
Rules ≠ Skills。
Rules 是告诉 Agent「这个项目用 Deno、组件用函数式写法、不要直接修改生成文件、所有 API 必须有输入验证」——它是常驻上下文(Always-on Context),无论做什么任务都生效。
Skills 回答的则是另一类问题:「如何初始化一个项目」「如何设计一个 API」「如何做一次 code review」——它是按需加载的工作流(Workflow / Capability),只有相关任务出现时才被唤起。
这一区分正在被整个 Coding Agent 生态采纳:从最早一份 CLAUDE.md / AGENTS.md 包打天下,到独立的 Skills,再到把需求 → 计划 → 执行 → 验证 → Review 串成完整的 Agent Workflow,方向已经相当清晰。因此 oia 从第一天起就没打算把所有指令塞进一个巨大的规则文件,而是分成两层:宪法归宪法,技能归技能。
一部宪法,一套技能
oia 仓库里最重要的一份文件不是代码,是 AGENTS.md——一部写给 Agent 的宪法。
它有近三千行,从最高优先级规则、推荐目录结构、路径职责表,到 Fresh 路由规范、错误处理分层、Deno 权限模型、AI Prompt 安全(区分 Instruction 与 Data,防注入)、测试最低标准,事无巨细。它甚至规定了 Agent 完成任务后的输出格式与检查清单。
此部分将在下个版本中重写,重写原因在该文章
‘认真思考后,我重构了oia的上下文管理,给oia增加渐进式披露’
宪法解决的是「永远不能违反什么」,而反复出现的具体工作流,则沉淀为 Skill。第一个落地的技能是 oia-skill:它把「检查 Deno 环境 → 执行 npx @oia-ai/oia-fresh init 脚手架 → 启动开发服务器 → 轮询 5173 端口验证」这套初始化流程完整封装,Agent 一句”帮我初始化一个 oia 项目”就能可靠跑完。它随 npm 包 @oia-ai/oia-skill 发布,一条命令即可安装:
npx @oia-ai/oia-skill # 安装到当前项目npx @oia-ai/oia-skill --global # 安装到用户目录下一步
一部宪法加一个初始化技能,只是起点。我心目中的终局,是让 oia 覆盖完整的研发闭环:
需求 → 设计 → 开发 → 测试 → 部署 → 上线 ↑ ↓ └────────── 经验沉淀为新 Skill ──────────┘Agent 在项目里踩过的坑、验证过的最佳路径,应该能被识别、结构化、沉淀成下一次可复用的 Skill——让项目拥有自己的”长期记忆”。到那时,主题就不再是”AI 帮我写代码”,而是”项目本身拥有一套可持续运转的 AI 工程系统”。
全部信条收敛为一句:
这个项目不是为了让人类写出最多代码,而是为了让 Agent 用最少上下文写出正确代码。
Predictability > Cleverness,Explicitness > Magic。
咿呀学步,与模型同行。下一期,讲讲实际用 oia 跑通一个完整项目的开发实录。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













