Reasonix 插件包完全指南:Skills、Hooks、MCP 与代码型扩展的安装、管理与 Manifest 规范
发布时间:2026/9/12 2:46:05 锦皓数字建站

Reasonix 插件包完全指南Skills、Hooks、MCP 与代码型扩展的安装、管理与 Manifest 规范【免费下载链接】DeepSeek-ReasonixDeepSeek-native AI coding agent for your terminal. Engineered around prefix-cache stability — leave it running.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-ReasonixReasonix 插件包Plugin Packages把 skills、hooks、MCP servers、prompts、主题和代码型扩展组织成单一可安装单元让能力可以像软件包一样被安装、启用、禁用、诊断和移除。本文以 docs/PLUGIN_PACKAGES.zh-CN.md 为主线结合仓库源码CLI 实现、install-source 后端、pluginpkg 解析器与桌面端 host 命令展开读者读完后将掌握通过reasonix plugin与桌面端「设置 → 插件」安装管理插件包的完整操作流程、原生 Manifest 与 Manifest v2扩展的编写规范、Codex/Claude 插件的兼容映射规则以及代码型扩展的完全信任FULL TRUST安全模型。插件包是什么Reasonix 插件包把多种能力统一装进一个“可安装单元”skills—— 可复用的技能定义会话中以/插件名:技能名直接调用hooks—— 绑定生命周期事件的钩子如SessionStart、UserPromptSubmit、PreToolUse、PostToolUseMCP servers—— 通过普通工具调用流程暴露给 agent 的 MCP 工具prompts—— 提示词模板Manifest v2 新资源主题——.reasonix-theme文件Manifest v2 新资源代码型扩展runtime—— 由 Reasonix 启动的 Sidecar 进程Manifest v2。插件包当前按全局范围安装状态与内容分别写入~/.reasonix/plugin-packages.json ~/.reasonix/plugins/name/在源码中这两个位置由 internal/pluginpkg/pluginpkg.go 的StateFilename、StatePath()、PluginsDir()、InstallRoot()直接定义第 26-30、272-282 行。状态文件记录每个插件的name、source、root、version、manifestKind、enabled、commit等字段并使用原子写入tmpfile rename保证并发读取时不会看到半写入文件SaveState第 303-314 行。通过 CLI 安装插件包CLI 入口为reasonix plugin子命令分派逻辑见 internal/cli/plugin.go 的pluginCommand第 18-48 行install、list、show、remove/uninstall、enable、disable、doctor、migrate。支持的安装来源install接收一个来源sourceGitHub 仓库例如git:github.com/obra/superpowers或https://github.com/obra/superpowersGitHub 分支或子目录 URL例如https://github.com/owner/repo/tree/main/path/to/plugin本地目录目录内需要包含reasonix-plugin.json、.codex-plugin/plugin.json或.claude-plugin/plugin.json三者之一。从源码看git:github.com/...前缀会被转换为https://github.com/...GitHub URL 会做浅克隆--depth1可指定--branch并记录 HEAD commit SHAtree/branch/path形式的子目录路径会经过pluginRootFromClone校验拒绝\、绝对路径与逃逸克隆仓库的..路径确保插件根目录始终位于克隆树内部internal/installsource/plugin_package.go 第 501-571 行。先预览再确认只预览安装计划、不写任何文件reasonix plugin install git:github.com/obra/superpowers --dry-run确认计划后执行安装reasonix plugin install git:github.com/obra/superpowers --yes关键约束如果运行reasonix plugin install source时既没有--dry-run也没有--yesCLI 会拒绝写文件并提示使用其中一个参数重新运行。对应实现位于pluginInstallCommand第 62-71 行if !opts.dryRun !opts.yes { fmt.Fprintln(os.Stderr, plugin install writes files; re-run with --yes to apply, or --dry-run to preview) return 2 }覆盖名称与替换已安装插件reasonix plugin install git:github.com/obra/superpowers --name superpowers --replace --yes--name覆盖插件 manifest 里的名称作为本次安装名称--replace允许当前来源替换已安装的同名插件copy 模式下installCopiedPlugin在目标已存在且未指定replacetrue时返回ErrAlreadyExists。开发模式链接本地目录reasonix plugin install /path/to/plugin --link --replace --yes--link模式不复制插件而是在~/.reasonix/plugins/name/建立指向源目录的符号链接适合开发与调试移动或删除该目录会导致链接插件失效。源码中replaceSymlink在创建链接前会校验isLinkTargetSafe防止把链接指向 Reasonix 工作区与 home 之外的目录第 460-466、674-687 行。CLI 安装参数一览参数作用--dry-run只规划和校验安装不写文件--yes确认执行会写文件的安装--replace允许当前来源替换已安装的同名插件--name name或--namename覆盖插件 manifest 里的名称作为本次安装名称--link链接本地插件目录而不是复制到 Reasonix 的插件存储目录--name支持空格分隔与两种写法参数解析见parsePluginInstallArgs第 97-132 行。安装命令的输出安装与移除命令会输出结构化 JSON因为它们底层复用桌面端同一套 install-source 后端runInstallSourceJSON将请求体{source, kind: plugin, apply, mode, replace, name}序列化后交给installsource.NewTool(...).Execute见第 170-190 行。这保证了 CLI 与桌面端对“计划 → 审批 → 落地”同一契约plan 与 apply 走同一个pluginSource函数解析来源计划中记录的 commit SHA 会参与计划 ID 指纹apply 时若远端 HEAD 已漂移会先把克隆 pin 回审批过的快照再安装internal/installsource/plugin_package.go 第 421-445 行。通过 CLI 管理插件包列出已安装插件reasonix plugin list输出格式为名称 状态 版本 来源状态为enabled/disabled见pluginListCommand第 192-217 行。查看插件详情reasonix plugin show superpowersshow输出插件的元数据name、version、enabled、kind、root、source以及各能力数量skills / commands / prompts / hooks / mcpServers / themes若能读取到能力明细还会输出具体清单printPluginInventory第 252-333 行skills展示建议的/插件名:技能名调用方式和描述commands展示/插件名:命令名调用方式、参数提示argument-hint和描述prompts展示提示词模板名称、参数提示与描述hooks展示生命周期事件、matcher、命令或上下文文件mcpServers展示服务器名称、传输方式stdio / http和启动目标。诊断插件reasonix plugin doctor superpowersdoctor检查 manifest 是否可解析、requires/provides声明、所有 skill/command/prompt 根目录是否存在、runtime 命令是否可执行以及 Hook 运行所需的 Shell 依赖比如 Windows 上缺少 Git Bash 时给出明确的 remediation 提示全部通过后输出ok: name (root)pluginDoctorCommand第 386-469 行。工作区级能力总览skills / hooks / MCP 合并 / 包根目录的全局能力诊断见 能力诊断reasonix doctor capabilities --json # 桌面端设置 → 诊断 # Agent /reasonix-guide启用 / 禁用 / 移除reasonix plugin disable superpowers reasonix plugin enable superpowers reasonix plugin remove superpowers --yesremove也可以写作uninstall它会写入状态并删除复制安装的插件内容因此同样需要--yes链接模式安装的本地插件在移除时外部源目录会保留只删除链接与状态记录applyRemovePluginPackage第 689-713 行禁用只翻转plugin-packages.json里的enabled标志不会卸载任何文件SetEnabled。旧原生 manifest 迁移除了文档列出的命令CLI 还提供reasonix plugin migrate name --to-v2把不带apiVersion的旧版原生 manifest 迁移到 v2迁移前会先备份为reasonix-plugin.json.bak写完后立即重新解析校验pluginMigrateCommand第 335-384 行MigrateManifestToV2/WriteMigratedManifestV2见 internal/pluginpkg/manifest_v2.go 第 281-383 行。doctor遇到“missing apiVersion”错误时会直接建议这条 remediation 命令。在 CLI 会话中使用已安装插件已安装插件不会打开独立聊天界面。插件启用后Reasonix 会把它的能力加载到普通交互会话里在交互会话里运行/plugins列出已安装插件包运行/plugins show name可在不离开聊天的情况下查看该插件导出的 skills、hooks、MCP servers 和使用提示Skills出现在/skills中可用/插件名:技能名 [args]直接调用也可以自然描述任务让 agent 按 description 选择匹配的 skillHooks在配置的生命周期事件里自动运行例如SessionStart、UserPromptSubmit、PreToolUse或PostToolUseMCP servers进入正常 MCP/工具流程用户只需描述任务Reasonix 会在相关时调用插件提供的工具。插件能力并入会话的实现依据启用插件的 skill roots 会被mergeInstalledPluginPackages追加到内存配置的Skills.PathsMCP servers 转为PluginEntry追加到cfg.Plugins来源标记为MCPSourcePluginPackage同名冲突时配置作者定义的 server 优先插件包条目被跳过并产生警告internal/config/plugin_packages.go 第 18-72 行。提示如果是在另一个终端里安装、启用、禁用或更新插件而当前已有reasonix会话正在运行建议开启新会话或重新打开/skills确认当前会话能看到预期技能。桌面端设置打开设置 → 插件可以不用 CLI 直接安装和管理插件包。桌面端逻辑位于 desktop/plugin_packages_app.go其插件视图模型PluginView与 CLIshow展示同一套能力明细且两者共用 install-source 后端因此 CLI 与桌面端的安装行为完全一致。安装插件安装区有两种模式本地目录点击选择插件目录从磁盘选择一个插件目录选中路径会显示在按钮右侧Git 仓库填写 Git 来源例如git:github.com/obra/superpowers。安装名称可选可覆盖插件 manifest 声明的名称用于本次安装或覆盖。选择来源和选项后使用操作按钮预检校验来源并展示计划安装动作不写入文件安装插件按当前来源和选项执行安装刷新插件从磁盘和配置重新读取已安装插件列表。安装选项覆盖同名插件允许当前来源替换已安装的同名插件关闭时同名安装会失败而不是覆盖已有内容开发模式链接源目录只在本地目录模式出现不复制插件而是直接链接所选目录适合开发或调试移动或删除该目录会导致链接插件失效。对新的 Git 来源或本地插件目录建议先点预检。管理已安装插件已安装插件列表会展示每个插件包及其导出的 skills、hooks 和 MCP servers。通过应用外编辑插件文件或配置后可点刷新插件重新读取。展开插件行后可以启用或禁用插件查看使用方法了解该插件导出的 skills、hooks 和 MCP servers使用更新拉取或刷新具备更新来源的插件使用诊断检查插件 manifest并查看警告或诊断信息使用移除插件确认后卸载该插件包。在桌面端使用已安装插件桌面端与 CLI 使用同一套运行模型展开已安装插件可看到使用方法区域在任意桌面会话里输入/plugins列出已安装插件输入/plugins show name直接从聊天界面查看同一套使用详情Skills 展示带插件名的直接命令例如/superpowers:writing-plans在会话中也可通过/skills浏览插件命令统一以带插件名的形式展示和调用例如/superpowers:planHooks 和 MCP servers 作为透明能力清单展示不需要单独的“运行”按钮启用的 hooks 会自动触发MCP 工具通过普通工具调用流程可用如果当前打开的会话没有反映插件变更刷新插件列表并开启新会话。原生 Manifestreasonix-plugin.jsonReasonix 原生插件在根目录声明reasonix-plugin.json{ name: example, version: 1.0.0, description: Example plugin, skills: skills, hooks: { SessionStart: [ { command: hooks/session-start, args: [], description: Load startup context }, { command: printf ready ./hooks/audit, shell: bash, description: Run a compound shell script } ] }, mcpServers: { helper: { command: bin/helper } } }要点相对路径都按插件根目录解析Reasonix 安装插件时不会执行第三方安装脚本manifest 解析顺序为reasonix-plugin.json→.codex-plugin/plugin.json→.claude-plugin/plugin.json前一个存在但解析失败会直接报错只有文件缺失才落到下一个ParseDir见 internal/pluginpkg/pluginpkg.go 第 390-411 行。插件 Hook 的执行形态是显式的只要出现args包括args: []就使用exec formcommand是可执行文件每个参数按原值直接传递不经过 Shell 解析或变量展开未提供args且提供shell时使用shell form完整command原样交给bash、powershell/pwsh、cmd仅 Windows或autoWindows 上auto优先选择 Git Bash找不到时回退 PowerShell既未声明args也未声明shell的已有原生 Hook 继续使用 Reasonix 历史 Shell 命令行为shellCommand: true仍作为 shell form 的旧写法兼容。这个“字段存在性”而非“参数个数”的判定在源码中有明确注释与自定义 JSON 编解码保障Hook.UnmarshalJSON会记录args字段是否出现含空数组MarshalJSON则保证空数组在 JSON 往返后不会被omitempty抹掉从而悄悄把 exec form 变成 shell form第 183-229 行。合法的 shell 值被限制为auto、bash、powershell、pwsh、cmdvalidHookShell第 810-817 行。Manifest v2扩展reasonix.io/plugin/v2Reasonix 原生扩展使用精确的 v2apiVersion{ apiVersion: reasonix.io/plugin/v2, name: example, version: 1.0.0, description: Example extension, requires: [], provides: [ { namespace: plugin/example, kind: interceptors, id: default, version: 1.0.0 } ], contributes: { skills: [skills], agents: [agents], commands: [commands], prompts: [prompts], hooks: {}, mcpServers: {}, themes: [themes/*.reasonix-theme] }, runtime: { command: ${REASONIX_PLUGIN_ROOT}/bin/example, args: [], env: {}, required: true, priority: 0, intercepts: [input.receive, tool.before], replaces: [], capabilities: [interceptors] } }解析规则原生reasonix-plugin.json必须声明精确值reasonix.io/plugin/v2v1 与缺失版本都会被拒绝不提供 v1 双读或自动迁移路径checkAPIVersionV2只接受冻结字符串见 internal/pluginpkg/manifest_v2.go 第 64-71 行v2 是严格的根对象或contributes/runtime下的任何未知字段都会报错并指明字段路径避免拼写错误静默失效strictDecodev2 的资源发现是显式的Reasonix 只加载原生 manifest 中声明的 skills、agents、commands、prompts、hooks、MCP servers、themes 与 runtime不会隐式导入根目录CLAUDE.md、hooks/hooks.json、.claude/settings.json或.mcp.json等宿主专用 sidecarminor 别名如reasonix.io/plugin/v2.0、v2.1及未知 major version 都会被拒绝requires与provides声明依赖约束和能力上限Sidecar handshake 不能超出该上限ProvidesCapabilities()/Requires()直接投影为 kernel 的extensioncontract.Capability/Requirement并校验重复providesv2 可以同时使用受支持的顶层资源字段skills、hooks、mcpServers等与contributes完全相同的路径去重同名但定义不同的条目报 Manifest 错误并指明键名所有相对路径与 glob 必须位于插件根目录内拒绝路径穿越、绝对路径、逃逸 symlink 和非普通 theme 文件cleanPortableRelativePath同时兼容 Windows 盘符/UNC 形式保证一个插件包在各宿主 OS 上解析一致见 internal/pluginpkg/pluginpkg.go 第 827-842 行。新资源类型prompts使用与 commands 相同的模板语义和参数替换公开名为/plugin:namecommands保持兼容别名themes.reasonix-theme文件在 Desktop 设置中以只读插件主题展示ID 为plugin:plugin:theme不会复制进用户主题库插件被禁用或卸载时若当前使用的是它的主题界面回退到基础样式但保留该 ID重新安装同一插件后自动恢复。主题路径支持逐段 glob如themes/*.reasonix-theme解析结果经过去重与排序themeRefs。runtime 块代码型扩展runtime块声明的是代码型扩展——由 Reasonix 启动、通过 Extension Protocol基于 stdio 的 JSON-RPC 2.0方法索引见 docs/EXTENSION_PROTOCOL.generated.mdGo SDK 见 sdk/go/README.md驱动的 Sidecar 进程command/args/env仅支持exec formcommand 即可执行文件绝不经过 Shell 解释${REASONIX_PLUGIN_ROOT}展开为插件安装根目录intercepts声明要拦截的事件如input.receive、tool.before、permission.decisionreplaces声明可以持有的替换槽system_prompt、context、provider_request、provider_response、compaction、session_policy、permission、frontend_events、tool:name、provider:ref。同一替换槽在所有已安装插件中只能有一个 owner争用会导致构建失败并列出来源capabilities按能力族授权interceptors、strategies、providers、ui。Sidecar 在握手时声明的任何超出 Manifest 的能力都会被拒绝扩展提供的模型以plugin/plugin/provider/model形式出现在模型选择器中该 ref 同样可用作default_model包括首次启动并可在/model、Desktop 与 ACP 的模型切换中使用。完全信任FULL TRUST安全模型代码型扩展运行在 Sandbox 之外继承未过滤的完整环境它可以读取完整会话与环境、绕过权限、直接操作本机扩展在permission.decision上的 allow 可以覆盖宿主的 deny。安装、更新、替换或--link一个带有runtime块的插件即代表授权——不会有二次确认--link模式在内容变化后自动保持信任。因此以下界面都会显著展示FULL TRUST区块列出 Runtime 命令、Interceptors、替换槽和 Provider/UI 能力安装预览previewreasonix plugin show能力诊断reasonix doctor capabilitiesDesktop 安装界面。安装前请确认该区块内容只安装你完全信任的运行时。源码侧的风险分级与之对应pluginPackageAction会把带 hooks 的插件标记为高风险并给出风险原因带 runtime 的插件额外附加 FULL TRUST 说明“reads the full session and environment, bypass permissions, and operate this machine directly”见 internal/installsource/plugin_package.go 第 381-392 行。另外只有通过插件安装流程写入插件状态的 Runtime 才能启动项目配置无法声明代码型 Sidecar。Codex 与 Claude 兼容Reasonix 也会读取.codex-plugin/plugin.json和.claude-plugin/plugin.json常量见 internal/pluginpkg/pluginpkg.go 第 27-29 行。兼容性分级与安装拦截安装预检会结构化显示“完全兼容 / 部分兼容 / 不兼容”、已映射能力和每个被跳过的条目。非原生插件如果没有任何可映射能力会直接阻止安装不再留下“安装成功但不可用”的记录。关于“完全兼容”的定义需要澄清它指清单里声明的每个能力都成功解析并映射到了 Reasonix 的对应实现并不代表导入 Hook 的每一种运行时决策都被遵守。PreToolUse/PermissionRequest的“拒绝”与PermissionRequest的“批准”已经实现但 Hook 的updatedInput以及PreToolUse的ask/defer决策是脚本在实际运行时通过 stdout 决定的并非清单里的静态字段因此安装阶段无法据此标记——具体已实现范围见下文 Hook 条目。Claude Marketplace 整库安装GitHub 仓库若在.claude-plugin/marketplace.json中通过./plugins/example或plugins/example这类相对字符串列出多个插件可以直接从仓库根目录安装预检会在写入前逐项展示安装动作。填写可选安装名称时可只选择 marketplace 中的同名插件。marketplace 解析约束internal/installsource/plugin_package.go 第 107-265 行单仓库最多 64 个插件maxMarketplacePlugins相对字符串来源必须落在 marketplace 仓库内部metadata.pluginRootsource拼接后拒绝逃逸插件名在计划阶段就校验合法性坏条目在预览时暴露而不是在 apply 中途失败对象来源仅接受 GitHub 仓库 URL 加完整 commit SHA40 字符十六进制未固定版本的外部字符串、npm、strict: false以及其他高级 marketplace 协议在整库安装时跳过按名称选中时直接报错整库安装时同一 clone 被复用保证 apply 阶段每个复制出来的插件都是计划中act.Commit对应的快照。skills / commands / agents 的兼容约定对于 Superpowers 和 Claude 风格 skill 包Reasonix 映射以下兼容约定原生 v2 manifest 只使用显式声明不应用这些回退规则skills映射到 Reasonix skill root。Claude 清单若未声明skills字段会回退到约定目录skills/或.claude/skills/与 Claude 自身的自动发现一致claudeConventionSkillDirs第 541-550 行。插件 skill 统一以/插件名:技能名展示和调用无歧义的/技能名仍作为隐藏兼容别名接受输入。项目和用户 skill 保留短名称多个插件导出的同名 skill 只能通过各自的限定名称独立调用。这一用户侧命名空间不会改变模型 skill 索引或run_skill工具使用的内部短标识commandscommands/以及.claude/commands/映射为 Reasonix 自定义斜杠命令每个name.md提示词模板统一以/插件名:命令名展示和调用frontmatter 的description/argument-hint以及$ARGUMENTS/$1..$N替换均生效。短名称无歧义时/命令名仍作为隐藏兼容别名接受输入但不会出现在补全、帮助、桌面菜单、ACP 命令发现或提供给模型的命令清单中。用户和项目命令始终占有自己的短名称多个插件导出同名命令时不会生成短名称别名。显式自定义命令也可以占用限定名称Desktop 插件详情会报告该冲突。原生reasonix-plugin.json清单也可以通过commands路径列表显式声明。约定目录是否被采纳由运行时加载器internal/command把关保证“采纳门槛”和实际加载永不背离dirContainsCommandMd第 613-620 行agentsagents/*.md映射为插件所属、需要手动调用的子代理配置。Claude 模型别名会继承当前 Reasonix 模型内联tools列表会转换为 Reasonix 工具名并支持mcp__*__search这类 MCP 通配符。Agent 使用独立的/插件:agent:名称命名空间因此上游 Agent 与 Skill 同名时不会互相遮蔽Codex 兼容包存在hooks/session-start-codex时映射为 ReasonixSessionStarthook插件根目录的CLAUDE.md映射为内置的SessionStart上下文 hookReasonix 直接读取该文件不通过 shell 命令。Claude 插件 manifest 会忽略该文件与 Claude Code 的插件契约保持一致parseCodexLike中includeCodexSessionStartHook的差异第 500-511 行。Claude Hook 的映射与执行契约.claude/settings.json和hooks/hooks.json里的 command hooks 会按同名事件映射matcher、args、shell、async、env和 timeout 均会保留。Claude 的执行契约完整保留只要出现args即使是空数组就按 exec form 执行逐项原样传参省略args才按 shell form 执行把原始命令交给声明的 Bash 或 PowerShellmatcher以及 Hook 脚本看到的tool_name会在 Reasonix 与 Claude 的工具名之间互译bash↔Bash、write_file↔Write等因此Bash这类 matcher 能正确触发Reasonix 里所有会启动子代理的工具task、read_only_task、parallel_tasks以及专用的explore/research/review/security_review包装工具都会映射到 Claude 唯一的Agent工具matcher 里旧名Task依然可用tool_input字段名不同的键也会改名每个映射后的Agent载荷都会包含 Claude 必填的prompt和descriptionReasonix 调用省略可选描述时补一个稳定的操作标签Read/Write/Edit/MultiEdit的path改成file_pathNotebookEdit的path改成notebook_pathSkill的name/arguments改成skill/argsTaskOutput/TaskStop的job_id改成task_id专用子代理包装工具的task改成Agent的promptparallel_tasks则把各子任务的 prompt 合成为Agent的prompt原tasks数组保留——这样读取.tool_input.file_path或.tool_input.prompt的防护 Hook 才不会因为拿到空值而失败放行旧的BashOutput/KillShellmatcher 仍能触发但下发名称和字段使用 Claude 当前词汇bash_output会补齐TaskOutput的非阻塞必填字段wait也映射为TaskOutput单任务等待时包含task_id无限等待时省略可选的timeout而不是谎报 0 毫秒预算AskUserQuestion会补省略的multiSelect:false和空选项描述TodoWrite会用任务内容补省略的activeFormNotebookEdit从 Reasonix 接受的别名补new_source删除或空单元格操作补空串相对的file_path/notebook_path按载荷cwd解析为绝对路径与 Claude 文件工具契约一致前缀匹配的防护 Hook 检查的就是工具实际访问的路径Bash的tool_response按 Claude 的{stdout, stderr, interrupted}形态下发Reasonix 的合并输出放在stdout失败错误文本作为stderr官方 security-guidance 插件的 commit/push 检查读取的正是这些字段其他工具的结果仍按原样透传导入 Hook 的 stdin 使用 Claude 兼容的 snake_case 载荷包括hook_event_name宿主在启动进程前展开${CLAUDE_PLUGIN_ROOT}和${REASONIX_PLUGIN_ROOT}也兼容不带花括号的$NAME与 Windows%NAME%写法因此插件相对路径不再依赖目标 shell 的环境变量语法Windows 上未显式指定 Shell 的 shell-form Hook 和 Reasonix Shell 工具一样优先选择 Git Bash找不到时回退 PowerShell指向带 POSIX shebang 的脚本文件时宿主把 Windows 路径转换为 Bash 可用形式显式 Bash Hook 以及旧式裸sh -c/bash -cHook 会复用 Git for Windows Bash 探测即使 Bash 不在cmd.exe的PATH中也能执行带目录的显式解释器路径保持不变机器确实没有可用 Bash 时hook 返回清晰的依赖提示而不是本地化的“无法识别 sh”乱码通过[tools.shell] prefer bash和path .../bash.exe配置的非标准目录或便携版 Bash 也会被显式 Bash Hook 复用reasonix plugin doctor 名称和reasonix doctor capabilities会在 Hook 首次触发前报告缺失的 Shell 依赖旧代码页输出也会在进入界面前转换为 UTF-8PreToolUse和UserPromptSubmithook 仍可通过退出码 2 或退出码 0 时的 JSON 拒绝形态拒绝该次调用PreToolUse用hookSpecificOutput.permissionDecisionUserPromptSubmit用顶层decision:block导入的PermissionRequesthook 还能直接代答权限弹窗拒绝或自动批准而不只是发通知通过退出码 2 或hookSpecificOutput.decision.behavior实现与 Claude 官方语义保持一致。尚未实现 / 部分兼容的部分updatedInput暂未应用到实际工具调用参数Hook 的if条件和asyncRewake字段也不会被求值声明Stop/SubagentStophookReasonix 中不能阻止本轮结束或 matcher 覆盖三种无法无损表达的输入时插件都会报告部分兼容并附具体警告WebFetch.prompt、Reasonix 以cell_number调用时的NotebookEdit.cell_id以及 Reasonixwait同时覆盖多个/全部任务时的TaskOutput.task_id每类结构性缺口在每个 hooks 文件里只报告一次通配 matcher 的插件每类缺口只会看到一条警告而不是每个 hook 一条不支持的 Claude hook item type 会跳过并产生 warning。.mcp.json 的映射插件根目录.mcp.json会映射为已安装 MCPClaude 的local会转换为 stdio中文等显示名称会生成稳定内部 ID重复声明会去重导入服务器默认auto_startfalse由用户按需连接避免启动时改变提供给模型的工具 schema。插件 Hook 的环境变量插件 hook 会收到以下环境变量pluginPackageEnv见 internal/config/plugin_packages.go 第 162-176 行REASONIX_PLUGIN_ROOTREASONIX_PLUGIN_NAMEREASONIX_PLUGIN_VERSIONREASONIX_HOMEREASONIX_WORKSPACE_ROOTCLAUDE_PROJECT_DIRCLAUDE_PLUGIN_ROOT桌面端后端方法Desktop 通过 host command 暴露插件包操作定义见 desktop/plugin_packages_app.goPluginsPlanPluginInstallInstallPluginRemovePluginSetPluginEnabledUpdatePluginPluginDoctor其中PlanPluginInstall对应 CLI 的--dry-run预检InstallPlugin对应--yes落地执行两者与 CLI 共用 internal/installsource/plugin_package.go 的同一套 plan/apply 后端这正是文档反复强调“CLI 与桌面端同一套运行模型”的源码依据。从源码理解插件包的整体架构将文档与源码对应起来插件包的完整生命周期可以概括为四条链路解析Parseinternal/pluginpkg/pluginpkg.go 统一识别三种 manifest原生 / Codex / Claudev2 原生走 internal/pluginpkg/manifest_v2.go 的严格解析兼容包走claude_compat.go的约定目录与工具名映射最终产出统一的Package含能力清单Inventory与兼容性报告Compatibility安装Installinternal/installsource/plugin_package.go 负责浅克隆、commit 锁定、marketplace 展开、copy/link 两种落地方式copy 模式先暂存、校验能力集一致后再原子换入失败时保留旧版本并写入~/.reasonix/plugin-packages.json合并Mergeinternal/config/plugin_packages.go 在内存配置层把已启用插件的 skill roots、agent roots、命令目录与 MCP servers 并入运行配置冲突时产生警告并保留配置作者优先级且从不改写用户的config.toml消费Consume交互会话通过/plugins、/plugins show、/skills与普通 MCP 工具流程消费这些能力代码型扩展通过 Extension Protocol 以 Sidecar 进程方式接入docs/EXTENSION_PROTOCOL.generated.md、sdk/go/README.md。对插件作者来说选择 manifest 的决策树很简单纯资源型skills/commands/prompts/hooks/MCP/主题用原生reasonix-plugin.jsonv2 必须精确声明reasonix.io/plugin/v2需要运行时进程拦截、策略、Provider、UI则必须使用带runtime块的 v2 manifest并理解随之而来的 FULL TRUST 授权语义已有 Claude/Codex 生态的插件包则可以直接安装Reasonix 会在预检阶段给出可映射能力与跳过条目的结构化清单把兼容性决策透明地交给用户。【免费下载链接】DeepSeek-ReasonixDeepSeek-native AI coding agent for your terminal. Engineered around prefix-cache stability — leave it running.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSeek-Reasonix创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。