跳转到内容

Qoder 插件

OpenLogos 为 Qoder CLI 提供一个自足的原生插件。openlogos init、adopt、sync、launch 会把它安装到项目中,并维护根 AGENTS.md 中的 OpenLogos 托管片段,Qoder CLI 会把该文件作为静态记忆读取。

本集成以 Qoder CLI 为验收对象,不覆盖 Qoder IDE 的 hook 行为。

执行 openlogos init --ai-tool qoder(或 all)之后:

project-root/
├── .qoder/
│ └── plugins/
│ └── openlogos/
│ ├── .qoder-plugin/
│ │ └── plugin.json # 插件清单(name: openlogos,version 与 CLI 版本一致)
│ ├── skills/<name>/SKILL.md # OpenLogos 方法论 Skills
│ ├── commands/<name>.md # OpenLogos 命令(status、next、change、merge、verify 等)
│ ├── agents/change-reviewer.md
│ └── hooks/
│ ├── hooks.json # SessionStart + PreToolUse
│ ├── runtime.mjs
│ └── runtime.cjs
└── AGENTS.md # OpenLogos 托管片段(静态记忆)
  • 所有资产来自 npm 包,安装时不联网下载。
  • Qoder 设置(.qoder/settings.json)、用户级 ~/.qoder/AGENTS.md、AGENTS.local.md、.qoder/rules/** 与其他插件不会被修改。
  • 你放在 .qoder/plugins/openlogos/ 里的额外文件,sync 时会保留。
  • 目标目录属于其他 owner 或不完整时,部署会停止,不会覆盖。

hooks/hooks.json 注册两个 hook,都以单一参数形式执行 node "${QODER_PLUGIN_ROOT}/hooks/runtime.mjs",路径含空格也不受影响:

Hook匹配作用
SessionStartstartup|resume|clear|compact|new注入当前 lifecycle、活跃变更、proposal_step、允许范围与下一确认点
PreToolUse所有工具放行或拒绝调用;拒绝时以退出码 2 结束并给出原因

Qoder 上没有注册事后检查 hook。

每次调用都从磁盘重新读取项目状态,SessionStart 上下文与 AGENTS.md 都不会被当作授权。

  • 已知只读工具(Read、Glob、Grep、WebFetch、WebSearch、Task、TodoRead)始终放行;可能写盘的未知工具一律拒绝(fail-closed)。
  • initial 生命周期:写工具不启用硬门禁。
  • launched 模块且无活跃提案:拒绝文件写入,请先运行 openlogos change <slug>。
  • launched 模块且有活跃提案:按提案步骤放行。编写提案阶段只允许写该提案的 proposal.md 与 tasks.md;编写 delta 阶段只允许写其 deltas/** 与 tasks.md;等待 openlogos merge 时不允许任何写入;merge 之后允许写项目文件,其他提案目录除外。
  • launched 模块中的 shell 命令:只放行少量单条只读命令:pwd、ls、cat、sed、rg、git status|log|diff|show|branch|rev-parse|ls-files、openlogos status|next|flow。命令中含 ;、&、|、>、<、反引号、$ 或括号时一律拒绝。openlogos change、openlogos merge、openlogos verify、测试与构建等其他命令请你在终端自行执行。
  • 输入非法、路径越界、symlink 逃逸与 runtime 异常都会转换为拒绝并以退出码 2 结束。Qoder 把其他非零退出码视为非阻断错误,OpenLogos 不依赖它们。
命令插件变体行为
init --ai-tool qoder / allinitial全量预检后写入
adopt --ai-tool qoder / alllaunched保留已有资产,接入后可直接 openlogos change
sync当前 lifecycle幂等刷新;全部宿主成功后才写版本戳
launchlaunched全部宿主资产成功后才提交 lifecycle

插件目录整体替换,失败时恢复原目录。init、sync、launch 之后请新建 Qoder CLI session 以加载刷新后的插件快照;已有 session 的门禁判定仍按磁盘最新状态执行。

Qoder CLI 把根 AGENTS.md 作为静态记忆加载。OpenLogos 只维护其中的托管片段(<!-- OPENLOGOS:BEGIN --> … <!-- OPENLOGOS:END -->),片段外内容保持原样。托管片段是自含的,包含语言策略、Why → What → How、delta / guard 规则、reporter 要求与人类确认点,不依赖子目录记忆或 Qoder rules 被加载。Qoder 是唯一配置的工具时,片段会附带指向插件 Skills 的 Qoder 段落。静态记忆只起指导作用,真正的拦截来自 PreToolUse hook。详见 AGENTS.md。

Terminal window
openlogos init --ai-tool qoder # 新项目,或为已有项目补齐 Qoder
openlogos sync # 升级 CLI 后刷新

非交互运行 init / adopt 时,若设置了 QODER_PLUGIN_ROOT,会自动选择 qoder。