Codex 教程
按顺序阅读,循序渐进掌握相关 AI 工具与实战方法。
同一个服务,怎样让不同插件组看到不同实例?靠 Cordis 的服务隔离(service isolation):cordis.yml 中的 isolate 配置配合 group 插件把插件分组,让同一服务按组独立实例化:
# 文件:scratch-plugin/cordis.yml
- id: group-a
name: '@deepseek-ai/cordis-plugin-group'
group: true
isolate:
shell: true # 本组内的 shell 服务独立实例化
config:
- name: '@deepseek-ai/dsh-bash-local'
config:
timeoutMs: 5000 # group-a 的 Bash 超时 5 秒
- name: './src/plugin-a.ts'
- id: group-b
name: '@deepseek-ai/cordis-plugin-group'
group: true
isolate:
shell: true
config:
- name: '@deepseek-ai/dsh-bash-local'
config:
timeoutMs: 60000 # group-b 的 Bash 超时 60 秒
- name: './src/plugin-b.ts'
两个插件各自看到本组的 Bash 实例,一边超时 5 秒、一边 60 秒,互不影响。隔离的意义在于:不同任务对同一能力的需求可能完全不同——快速交互要短超时,长任务要给足时间,隔离让服务按组配置、按组生效,而非全局一刀切。
scope 是按 agent(智能体)划分的注册单位,只有两层、扁平结构。一项贡献(工具、提示词段、变量、限制、监听器)要么是全局的,要么恰好归属于一个 scope key——一个活跃 agent 就是其自身 scope 的不透明标识。相关概念:
tools.restrict 为单个 scope 过滤全局工具集合,多个 restriction 取交集。注意:带作用域的注册不会向下继承给 subagent,子树行为通过 lineage 数据表达,而不是通过 scope 结构。
shadowing 用于按 agent 定制 persona 与工具变体:带作用域的工具只在该 scope 内替换同名全局工具,其他 agent 仍看到全局版本。restriction 则让被过滤的全局工具既不进入提示词、也拒绝执行,与不存在的工具无法区分——agent 彻底「看不见」这些工具,而不是调用时才被拒绝。
isolate 让同一服务按组实例化,scope 按 agent 划分注册,shadowing 与 restriction 分别实现同名替换与全局过滤。自测:isolate: { shell: true } 让两组的 Bash 实例是什么关系?带作用域的注册会不会继承给 subagent?shadowing 与 restriction 各解决什么问题?