
OpenHuman 集成 Claude Code CLI以claude-code:前缀路由推理工作负载的完整实战指南【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhumanOpenHuman 允许把任意聊天工作负载chat / reasoning / agentic从直连 Anthropic HTTP API 切换到AnthropicclaudeCLI子进程来处理CLI 负责模型选择、认证与 prompt-cache 管理OpenHuman 则按轮次驱动该子进程、解析其 stream-json 输出并通过 MCP 把 OpenHuman 自身的只读工具重新暴露回 CLI让模型能够触达原生状态memory、threads、channels、people。读完本文你将掌握claude-code:model前缀的配置语法、安装与状态校验 RPC、认证解析顺序、每轮子进程的行为细节以及权限模型与工具面边界。为什么需要一个 CLI Provider直接调用 Anthropic HTTP API 时模型选择、认证API Key / OAuth 订阅、prompt-cache 管理这些职责都由 OpenHuman 自己实现。而 Claude Code CLI 是 Anthropic 官方维护的编程代理客户端它内置了这些能力尤其是订阅账户的登录态与缓存策略。OpenHuman 的 Claude Code Provider 的思路是OpenHuman 把claudeCLI 作为每轮per-turn子进程拉起而非常驻通过 stdin 喂入 stream-json 格式的对话解析 stdout 的 JSONL 流式输出通过 MCP 将 OpenHuman 自己的工具回灌给 CLI保证模型的工具调用仍指向 OpenHuman 本地状态记忆、线程、频道、联系人而不是 CLI 自带的内置工具。从源码看该 Provider 实现位于 src/openhuman/inference/provider/claude_code/以mod.rs中的ClaudeCodeProvider为核心实现了ChatModel()traitinvoke与stream两个入口并对外暴露PROVIDER_PREFIX claude-code:常量见 mod.rs。前置要求接入前需要满足三项条件Claude Code CLI ≥ 2.0.0且位于PATH中或者通过环境变量OPENHUMAN_CLAUDE_CLI/abs/path/to/claude显式指定二进制路径。版本门限定义在 types.rs 的MIN_CLI_VERSION 2.0.0——低于该版本时 Provider 拒绝启动以避免把不兼容的 stream-json schema 喂给解析器。认证二选一设置ANTHROPIC_API_KEY环境变量或已通过claude login完成登录存在~/.claude/.credentials.json。openhuman-core二进制在磁盘上OpenHuman 会拉起openhuman-core的 MCP 服务供 CLI 调用 OpenHuman 工具路径通过std::env::current_exe()发现。version_check.rs中resolve_binary()的实现细节值得注意version_check.rs它优先读取OPENHUMAN_CLAUDE_CLI覆盖值存在即用否则在PATH上查找claudeWindows 下会按PATHEXT依次尝试.EXE;.CMD;.BAT;.COM。随后执行claude --version并解析首行如2.0.4 (Claude Code)的第一个空白分隔 token 作为 semver与2.0.0做数值比较支持-rc.1这类预发布后缀剥离。将工作负载路由到 CLI工厂语法Claude Code Provider 通过推理设置中的标准**角色role**字符串生效。工厂语法接受新前缀claude-code:model[temperature]。# 通过 JSON-RPC 更新端点 openhuman-core rpc openhuman.inference_update_model_settings \ --json {chat_provider:claude-code:claude-sonnet-4-5}角色字符串更新的字段作用域chat_provider前台聊天回复日常对话reasoning_provider长上下文推理负载深度推理agentic_provider多步 agentic 循环智能体任务从工厂代码factory_part_03.rs可以确认完整的解析链路字符串先strip_prefix(claude-code:)剩余部分再拆分为模型与temperature后缀需要注意temperature后缀目前被接受但不会真正传递给 CLI工厂会打出the temp suffix is ignored的 warn 日志模型为空时会报错use claude-code:model-id随后通过ClaudeCodeProvider::from_env()构造 Provider其中会调用version_check::probe()检查 CLI 是否安装、版本是否达标失败则直接bail出具体原因未安装 / 版本过低 / 二进制不可用。设置为claude-code:model后每次轮询都会拉起全新的claude子进程同一ClaudeCodeProvider实例上的并发上限为MAX_CONCURRENT_TURNS 4mod.rs。该信号量通过tokio::sync::Semaphore实现在run_chat入口先acquire_owned()获得许可再运行避免过量并发子进程耗尽资源。验证安装状态与认证 RPC状态 RPC 位于既有的推理命名空间下openhuman-core rpc openhuman.inference_claude_code_status返回结构对应CliStatus枚举定义在 types.rsSerde 以status字段作为 tag返回示例含义{status:ok,version:2.0.4,path:/usr/local/bin/claude}就绪{status:not_installed}claude不在PATH上{status:outdated,version:1.9.0,min_required:2.0.0,path:…}需要升级 CLI{status:unusable,path:…,reason:…}二进制存在但版本探测失败spawn 失败、非零退出、无法解析版本同一状态也会渲染在设置面板中由前端组件ClaudeCodeStatusCard承担app/src/components/settings/panels/ai/ClaudeCodeStatusCard.tsx。此外还有openhuman.inference_claude_code_auth_status探测认证状态不拉起聊天子进程openhuman.inference_claude_code_settings读取持久化的 Provider 设置即 full-access 开关openhuman.inference_claude_code_set_full_access写入 full-access 开关。这些 RPC 的 schema 与 handler 注册可见于 schemas_part_01.rs。认证状态探测的跨平台细节auth_status.rs通过claude auth status --json结构化输出来判定认证来源而不是直接读~/.claude/.credentials.json——原因在于macOS 上 CLI 把凭据存放在 KeychainserviceClaude Code-credentials而非该文件直接读文件会把已登录用户误报为登出。claude auth status抽象了文件 vs Keychain的差异且只返回非敏感元数据登录标志、认证方式、账户邮箱、订阅类型绝不触碰 access token。探测子进程有 10 秒硬超时AUTH_STATUS_TIMEOUT超时后 kill 并报告Unknown绝不误报为已登出。解析逻辑parse_auth_status_jsonauth_status.rs以loggedIn为唯一载荷字段authMethod claude.ai判定为订阅Pro/Max其他具名方式按 API Key 处理缺失authMethod时拒绝猜测、返回Unknown。每轮行为从 UUID 到流式输出driver.rs中的run_turn()是每轮的核心driver.rs完整步骤如下解析/创建会话 UUID从workspace/claude-code-sessions.json读取当前 thread 对应的 CC 会话 UUID。新 thread 生成 RFC-4122v4UUIDCLI 的--resume只认 v4session_store.rs的is_uuid_v4会校验 version nibble 必须为4、variant nibble 必须为8/9/a/b已存在的会话则复用。映射文件格式为{sessions: {thread_id: uuid}}session_store.rs。写入 MCP 配置在临时目录生成openhuman-mcp-config.json指向 OpenHuman 进程内的HTTP MCP 服务器ensure_local_http()带 per-process Bearer token 认证。从源码看MCP 服务器运行在未被沙箱包裹的 core 进程中claude通过 loopback 访问因此即使 CC 自身工具被 OS 级 jail 拒绝访问~/.openhuman记忆桥仍然存活。组装并拉起子进程基础参数-p --input-format stream-json --output-format stream-json --verbose --include-partial-messages--add-dir project_dir把用户的工程根目录config.action_dir授予文件工具访问权CLI 的 cwd 也设置为该目录--permission-mode acceptEdits|bypassPermissions见下文权限模型首轮--session-id uuid后续--resume uuid--model modelclaude-code:后缀部分--append-system-prompt-file系统提示词写入临时文件而非 argvWindows argv 有 32,767 UTF-16 单元上限文件 flag 无此限制存在 MCP config 时追加--mcp-config tmp --strict-mcp-config。写入 stdininput_builder.rs逐行输出 JSON{type:user,message:{role:role,content:[{type:text,text:…}]}}。新会话发送完整历史剔除 system 与 tool 行system 走--append-system-prompt--resume会话只发送最后一个 user turnCLI 服务端已持有此前上下文。流式消费 stdoutStreamJsonParser按行缓冲的 JSONL 解析器→EventMapper映射为ProviderDelta→ 请求的 stream sink。超时与错误处理每轮硬超时TURN_TIMEOUT 300sdriver.rsCLI 卡死网络停滞、死循环、MCP 死锁时 kill 子进程并报超时退出码非零时stderr截断至 16 KiB作为错误信息上抛。权限模型默认acceptEdits显式开启bypassPermissions这是 Claude Code Provider 的用户可配置安全开关默认关闭开启 CC 本身不会自动授予 shell / 网络权限默认安全姿态acceptEditsCC 可以读写项目文件并自动应用编辑但其余动作被门控。驱动器通过--disallowedTools禁用危险内置工具名单见DISALLOWED_CC_BUILTINSdriver.rsBash、BashOutput、KillShell、WebFetch、WebSearch、Task。完整访问bypassPermissions授予 CC 完整原生工具集含 Bash / 网络 / 子代理不追加--disallowedTools。判定顺序claude_code_full_access()driver.rs环境变量OPENHUMAN_CLAUDE_CODE_PERMISSION_MODEbypass/bypassPermissions/full强制开启acceptEdits/edits/default/off/false/0强制关闭供调试与高级用户使用否则读取持久化的 UI 开关~/.openhuman/claude_code_settings.json中的full_access布尔值settings.rs。该文件由inference.claude_code_set_full_accessRPC 写入、驱动层每轮读取独立于中心 config读取失败时安全失败为关闭fail safe绝不 fail open。设置面板中该开关由ClaudeCodeModal的 Full access Switch 承载并有 macOS 专属的沙箱提示文案ClaudeCodeStatusCard.tsx。macOS Seatbelt 沙箱保护 OpenHuman 内部状态在 macOS 上/usr/bin/sandbox-exec存在且未设置OPENHUMAN_CLAUDE_CODE_SANDBOX0退出claude的 spawn 会被包裹进 Seatbelt 配置文件driver.rs策略为默认放行唯独拒绝~/.openhuman*整棵树的读写——CC 的原始工具既不能破坏也不能外泄 OpenHuman 内部状态记忆库、会话、认证 token、config实现上会从 workspace 目录向上回溯到第一个.openhuman*祖先再整树 deny因为敏感文件如core.token、credentials 也位于根目录只 deny 子目录会留下可读缺口CC 仍可通过 MCP HTTP 服务器访问 OpenHuman 记忆——因为该服务器运行在未沙箱的 core 进程中不在claude的子进程树内。Linux / Windows 上目前没有 OS 级围墙CC 在非完整访问模式下依赖--disallowedTools裁剪完整访问模式则不受限运行。认证解析顺序ANTHROPIC_API_KEY环境变量最高优先级设置到子进程上每个 thread / agent 的 key来自ChatRequestconfig标注为未来接入尚未接线~/.claude/.credentials.jsonCLI 自身经claude login获得的 OAuth tokenPro / Max 订阅。OpenHuman从不读取或回写 access token认证探测仅检查该文件的非敏感元数据无认证CLI 将以 auth error 失败。对应实现中auth::resolve()auth.rs仅区分两种来源进程环境中有非空ANTHROPIC_API_KEY→EnvApiKey并把 key 注入子进程 env否则 →CliCredentials不设置 env让 CLI 自己读凭据文件。inference_claude_code_auth_statusRPC 则在不拉起聊天子进程的前提下探测来源 1 与 3以及 macOS Keychain结果展示在 Settings → AI 面板。暴露给 CLI 的工具面CLI 侧看到的是mcp__openhuman__name前缀的工具由既有 MCP 服务器提供src/openhuman/mcp/server/工具规格定义在 tools/specs.rscore.list_tools、core.tool_instructionsmemory.search、memory.recalltree.read_chunk、tree.browse、tree.top_entities、tree.list_sourcesagent.list_subagents、agent.run_subagent写操作按 MCP 规范标记destructiveHint: truesearxng_search需searxng.enabledtrue配置MCP 服务器对所有工具执行SecurityPolicy::ToolOperation检查除agent.run_subagent外全部为只读。工具调用如何回流当模型决定调用mcp__openhuman__memory_search时CLI 的 stream-json 输出会携带content_block_starttypetool_use 一系列input_json_deltapartial_json增量content_block_stop。EventMapper将这些依次映射为ProviderDelta::ToolCallStart、ToolCallArgsDelta并在块结束时聚合为完整的ToolCallevent_mapper.rs。文本与思维块同理text_delta→TextDeltathinking_delta→ThinkingDelta。流式输出解析与使用量计费stream_parser.rs实现了一个容错的逐行 JSONL 解析器stdout 字节块被喂入feed_bytes遇换行切分并serde_json解码事件类型按type判别system/user/assistant/stream_event/rate_limit_event/result/error。关键设计是变体一律保持宽松载荷均存为serde_json::ValueCLI schema 小幅升级不会弄坏解析器未知事件类型降级为ParseError事件而非崩溃。终末result事件的处理event_mapper.rs值得单独说明usage解析为UsageInfoinput_tokens、output_tokens、cache_read_input_tokens缓存命中、cache_creation_input_tokens缓存写入CLI 在result上报告的total_cost_usd被映射为UsageInfo.charged_amount_usd使下游成本模块无需按token × 模型单价重新计价即可记录。不过按设计文档的 v1 标注该成本字段虽已解析出来但尚未完整接入 OpenHuman 的账单聚合层src/openhuman/platform/cost/ 仍处于演进中。端到端验证可参考 tests/claude_code_stream_e2e.rs该测试把一段捕获的 CC 2.x stream-json 实录含 system 会话、文本增量、tool_use 增量与 result 计费分块喂给StreamJsonParser→EventMapper断言文本 delta 顺序、ToolCall 聚合、usage含 cache_read与 session_id 捕获全部正确——这正好印证了上文描述的整条解析链路。已知限制v1视觉输入不转发需要图片时请把vision_provider设置为其他 Provideragentic 运行共享同一把Semaphore(4)负载高时 CC turn 排队等待而非快速失败成本账目待接入result.total_cost_usd已由 mapper 捕获但尚未接线到 OpenHuman 的账单层。排查清单claude --version是否 ≥ 2.0.0可用OPENHUMAN_CLAUDE_CLI指向特定二进制openhuman.inference_claude_code_status返回什么not_installed/outdated/unusable均需先修 CLI 本身认证ANTHROPIC_API_KEY是否设置macOS 用户是否已claude loginKeychain用claude auth status --json手动核对权限默认acceptEdits下 CC 无法跑 Bash / 网络如需完整工具集在设置面板开启 Full access或临时用OPENHUMAN_CLAUDE_CODE_PERMISSION_MODEbypass覆盖调试用会话异常检查workspace/claude-code-sessions.json中的 UUID 是否仍为合法 v4旧格式会被自动视为缺失并重新生成。【免费下载链接】openhumanOpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.项目地址: https://gitcode.com/GitHub_Trending/op/openhuman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考