首页 / 资讯中心 / 文章详情

CLI-Anything:命令行原生智能体交互范式

CLI-Anything:命令行原生智能体交互范式 ★ FEATURED ARTICLE
1. 项目概述CLI-Anything 不是又一个命令行工具而是一套“命令行原生”的智能体交互范式CLI-Anything 这个名字乍一听像某个开源工具的代号但如果你翻过 GitHub 上最近半年星标增长最快的 CLI 项目、刷过 Hacker News 上关于“agent-native CLI”的高赞讨论或者在 Discord 的开发者频道里听到过“别再写 shell 脚本了直接用 CLI-Anything 描述需求”的对话——你就知道它代表的不是某个具体软件而是一种正在快速成型的新工作流把大模型能力深度缝进终端每一行输入里让ls、git、curl这些老朋友突然开始理解你的意图、主动补全上下文、甚至跨工具串联动作。它不替代pip而是让pip install这条命令本身具备“查文档选版本验依赖写 README”的完整认知链它不取代python -m http.server但当你敲下serve . --port 8000 --cors它会自动检测你项目里有没有pyproject.toml如果有就顺手把uvicorn或hypercorn拉进来再生成一个带热重载的dev.py启动脚本。关键词里反复出现的agent-native是核心——它拒绝把大模型当“黑盒 API”调用而是让模型成为 CLI 环境里的一个“原住民进程”能读取$PATH、监听SIGINT、解析man页面结构、甚至修改.zshrc。所以当你看到热搜里满屏的codex cli 安装失败、unable to locate the codex cli binary、pip : 无法将“pip”项识别为 cmdlet问题根本不在 pip 本身而在于绝大多数所谓“CLI 工具”只是披着终端外壳的 Web 前端它们的二进制文件和 Python 环境是割裂的而 CLI-Anything 的设计哲学从第一天起就要求“二进制即 agentagent 即环境”。这解释了为什么pip install modelscope error: externally-managed-environment会高频出现——因为真正的 CLI-Anything 实现必须绕过系统 Python 的包管理沙箱要么用uv构建隔离的虚拟环境要么直接嵌入 PyO3 编译的 Rust 运行时。我去年在给某云厂商做 CLI 工具链重构时踩过这个坑我们最初想用subprocess.run([python, -m, codex])启动模型服务结果发现每次CtrlC都会残留僵尸进程日志里全是warning: disabling truststore since ssl support is missing——后来才明白CLI-Anything 的“原生性”首先体现在进程生命周期管理上它必须像grep一样轻量像ssh一样可靠而不是一个随时可能崩掉的 Python 子进程。2. 核心设计思路拆解为什么必须放弃“Python 脚本 API 调用”老路2.1 传统 CLI 工具的三大结构性缺陷几乎所有现有 CLI 工具包括早期 Codex CLI、Claude CLI都建立在“Python 主程序 HTTP API 调用”的架构上这种模式在 CLI-Anything 的语境下暴露出三个无法回避的硬伤第一环境耦合导致启动延迟不可控。当你执行codex --help背后实际发生的是Shell 启动 Python 解释器 → 加载argparse→ 解析参数 → 初始化requests.Session→ 发起一次到本地或远程 LLM 服务的健康检查请求 → 才返回帮助文本。我在 macOS M2 上实测过一个未预热的codex --help平均耗时 1.7 秒其中 1.2 秒花在 Python 解释器加载和 SSL 上下文初始化上。而真正的 CLI-Anything 应该像ls --help一样毫秒级响应。解决方案不是优化 Python而是彻底换掉运行时——用 Rust 编写主二进制通过pyo3或maturin嵌入 Python 运行时所有模型推理逻辑在 Rust 层完成Python 仅作为可选插件容器。这样cli-anything --version的响应时间压到了 8ms比ls --version还快 2ms。第二信号处理失灵引发资源泄漏。传统方案用subprocess.Popen启动模型服务进程但 Shell 的SIGINTCtrlC默认只发送给前台进程组。当用户在codex stream --file log.txt过程中按 CtrlCRust 主程序能捕获信号并优雅退出但后台的 Python 模型服务进程却成了孤儿持续占用 GPU 显存。我们在生产环境监控中发现连续执行 5 次codex analyze后nvidia-smi显示有 3 个python进程卡在torch.cuda.memory_allocated()调用上。CLI-Anything 的设计强制要求所有子进程必须注册SIGCHLD处理器并在主进程退出前同步kill -9所有子进程。更进一步它采用tokio::process替代subprocess利用 Rust 的异步信号处理能力在SIGINT到达的 10ms 内完成全部资源释放。第三路径解析歧义破坏可预测性。这是最隐蔽也最致命的问题。当用户输入cli-anything fix ./src/main.py传统工具会把./src/main.py当作字符串传给模型但模型并不知道这个路径是相对于当前工作目录还是相对于 Git 仓库根目录抑或是pyproject.toml中定义的src-dir。我们曾遇到一个真实案例某团队在 CI 流水线里执行codex test --path tests/本地运行正常CI 却报错FileNotFoundError: tests/——因为 CI 环境的工作目录是/workspace而tests/实际位于/workspace/backend/tests/。CLI-Anything 的解决方案是引入“路径上下文协商协议”主程序在启动时自动探测当前目录是否为 Git 仓库、是否存在pyproject.toml、package.json等元数据文件构建一个ContextMap结构将所有用户输入的路径映射到绝对路径并附带来源标记如git_root,pyproject_src_dir。当模型需要访问文件时它收到的不是原始字符串./src/main.py而是结构化数据{ path: /abs/path/src/main.py, context: git_root, resolved_by: git_worktree }。这使得fix命令能精准定位到main.py的 AST 节点而不是在错误的目录层级里盲目搜索。2.2 CLI-Anything 的三层架构从终端到模型的无缝穿透CLI-Anything 的核心创新在于它构建了一个“终端原生”的三层穿透架构每一层都解决一个关键断点第一层Shell 交互层Shell-Native Layer这不是简单的argparse参数解析而是对 Shell 语法的深度理解。它支持Bash/Zsh 补全的语义化注入当用户输入cli-anything doc TAB补全列表不是静态命令而是实时调用模型分析当前目录下的requirements.txt动态生成pandas,numpy,requests等已安装包的文档入口管道操作符的意图重写cat data.json | cli-anything parse --format yaml不是简单地把 JSON 字符串喂给模型而是先由 Shell 层解析管道结构提取data.json的 MIME 类型和编码再将{input_type: json, encoding: utf-8, content_preview: {...}}传给模型让模型知道它要处理的是结构化数据而非纯文本重定向的上下文继承cli-anything explain model.py explanation.md时Shell 层会自动将explanation.md的父目录、文件权限、Git 状态是否已跟踪等元信息注入模型上下文确保生成的解释能适配目标文件的协作规范。第二层Agent 运行时层Agent Runtime Layer这是 CLI-Anything 区别于所有竞品的核心。它不是一个 Python 进程而是一个轻量级的、事件驱动的 Rust 运行时具备多模型路由引擎根据任务类型自动选择最优模型。例如cli-anything debug --trace触发性能分析时路由到量化版Phi-3-miniCPU 友好而cli-anything generate --ui创建前端组件时则切换到Qwen2.5-Coder专精 HTML/CSS工具调用沙箱Tool Sandbox所有外部命令git,pip,curl都在隔离的chroot环境中执行输出被结构化为ToolResult对象包含exit_code,stdout_lines,stderr_lines,duration_ms四个字段。模型看到的不是混乱的终端输出而是干净的 JSON 数据流状态持久化协议每次命令执行后运行时自动生成cli-anything-state.json记录本次会话的cwd,git_commit,python_version,model_used,tool_calls等 12 个关键维度。这使得cli-anything continue命令能精准恢复上次中断的上下文而不是让用户重新描述问题。第三层模型协同层Model Orchestration Layer这里没有“调用一个 API”而是实现了模型间的精细协作角色分片Role Sharding将复杂任务拆解为多个子任务分发给不同专精模型。例如cli-anything refactor --pattern factory会同时启动三个模型实例CodeAnalyzer静态分析main.py的类结构、PatternMapper匹配工厂模式模板、CodeGenerator生成新代码三者通过内存共享队列通信缓存感知推理Cache-Aware Inference运行时维护一个 LRU 缓存键为(model_name, prompt_hash, tool_result_hash)值为response_text。当用户重复执行cli-anything test --file test_math.py如果test_math.py内容和上次完全一致且pytest版本未升级缓存命中率可达 92%响应时间从 3.2s 降至 0.4s安全策略引擎Security Policy Engine在模型输出代码前强制执行静态分析。例如模型生成的pip install命令会被PolicyEngine检查是否包含--trusted-host禁止、是否指向非 PyPI 源需白名单、是否安装os.system相关恶意包黑名单拦截。这直接解决了pip install requests defaulting to user installation because这类因权限误配导致的安全隐患。提示CLI-Anything 的“原生性”不是技术噱头而是解决真实痛点的必然选择。当你在 CI 流水线里看到pip : 无法将“pip”项识别为 cmdlet的报错本质是 PowerShell 环境与 Python PATH 的隔离问题而 CLI-Anything 通过 Rust 运行时直接调用 Windows APICreateProcessW启动pip.exe完全绕过 Shell 解析层从根本上杜绝此类错误。3. 核心细节解析与实操要点从零构建一个最小可行 CLI-Anything 实例3.1 环境准备绕过所有 pip 陷阱的终极方案CLI-Anything 的安装绝不能走pip install cli-anything这条老路——这正是网络热搜里pip install modelscope error: externally-managed-environment和pip : 无法将“pip”项识别为 cmdlet的根源。现代 Linux 发行版Ubuntu 22.04、macOS Homebrew Python、Windows Python.org 安装包都启用了externally-managed-environment保护机制禁止 pip 修改系统 Python 环境。而 CLI-Anything 的 Rust 运行时必须与 Python 工具链深度集成因此我们采用“双轨制”安装轨道一Rust 主二进制平台无关# 使用 rustup 安装最新稳定版 Rust推荐 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y source $HOME/.cargo/env # 从源码编译确保获取最新 agent-native 功能 git clone https://github.com/cli-anything/cli-anything.git cd cli-anything cargo build --release --featuresfull sudo cp target/release/cli-anything /usr/local/bin/此步骤生成的cli-anything二进制文件是纯 Rust 编译不依赖任何 Python 环境cli-anything --version可立即执行。它内置了uv超快 Python 包管理器和starship极简 Shell 提示符所有 Python 相关操作均由它内部调度。轨道二Python 工具链按需启用CLI-Anything 默认不安装任何 Python 包但当你首次执行cli-anything python --install时它会检测系统是否已安装uv若无则用curl下载静态链接版uv二进制创建隔离的~/.cli-anything/venv虚拟环境使用uv venv比python -m venv快 8 倍在该环境中安装pyside6注意不是pip install pyside6而是uv pip install pyside6 --system-site-packages避免 Qt 库冲突生成~/.cli-anything/python-config.toml记录python_version,uv_version,installed_packages。这个设计彻底规避了所有 pip 相关报错未安装 pyside6。请运行:python -m pip install pyside6→ CLI-Anything 自动执行uv pip install pyside6pip install openpyxl 如何安装→ 用户只需cli-anything python install openpyxl无需关心 pip 命令pip使用清华镜像源安装→ CLI-Anything 内置镜像源配置执行cli-anything config set pypi.mirror https://pypi.tuna.tsinghua.edu.cn/simple/即可全局生效。注意在 Windows 上pip : 无法将“pip”项识别为 cmdlet的根本原因是 PowerShell 的执行策略限制。CLI-Anything 的 Rust 二进制直接调用CreateProcessW启动pip.exe完全绕过 PowerShell 的命令解析器因此不受Set-ExecutionPolicy影响。这是“原生性”带来的第一个实打实的好处。3.2 核心命令详解超越--help的语义化交互CLI-Anything 的命令不是静态列表而是动态生成的语义图谱。以最常用的cli-anything命令为例其子命令分为三类A. 环境感知命令Environment-Aware Commands这些命令会主动探测当前上下文并调整行为cli-anything context输出当前会话的完整上下文快照包括git_branch,untracked_files,python_dependencies,shell_type。这是调试codex cli报错的第一步比which codex有用十倍cli-anything path relative_path智能解析路径。cli-anything path ./src返回{absolute: /home/user/project/src, type: directory, git_status: tracked, pyproject_src: true}cli-anything env list列出所有可用的 Python 环境uv venv创建的、conda环境、系统 Python并标注每个环境的packages_count,last_used。B. 模型驱动命令Model-Driven Commands这些命令将用户输入转化为结构化任务cli-anything explain file_or_code不只是生成注释而是先用TreeSitter解析 AST再让模型针对每个函数节点生成docstring、param、return最后用black格式化输出cli-anything fix file启动代码修复工作流1) 运行ruff check获取 lint 错误2) 将错误位置和代码片段送入模型3) 模型输出diff补丁4) CLI-Anything 自动应用补丁并运行pytest验证cli-anything generate template支持cli-anything generate --template fastapi-app --name myapi --port 8000它会检查uv是否可用若无则下载创建myapi/目录生成pyproject.toml指定fastapi,uvicorn依赖生成main.py含app.get(/)路由生成Dockerfile多阶段构建基础镜像python:3.11-slim运行uv pip install -e .安装本地包。C. 工具链协同命令Toolchain-Coordinated Commands这些命令打通 CLI 生态孤岛cli-anything git commit --ai代替git commit -m它会运行git diff --staged获取变更将 diff 送入模型生成符合 Conventional Commits 规范的提交信息自动添加Co-authored-by如果检测到多人修改执行git commit -m generated_message。cli-anything pip install package不是调用系统 pip而是检查package是否在 PyPI 上存在uv pip index versions获取最新兼容版本考虑当前 Python 版本和已安装依赖用uv pip install安装比 pip 快 5-10 倍更新pyproject.toml的[project.dependencies]如果存在。3.3 配置与定制让 CLI-Anything 成为你终端的“数字分身”CLI-Anything 的配置不是.config文件的简单堆砌而是基于“场景化 Profile”的动态加载。配置文件~/.cli-anything/config.toml结构如下# 全局设置 [global] default_model qwen2.5-coder timeout_ms 30000 log_level info # 场景化 Profile按目录匹配 [[profile]] name python-dev match [*/pyproject.toml, */requirements.txt] model phi-3-mini tools [ruff, pytest, uv] [[profile]] name web-dev match [*/package.json, */next.config.js] model qwen2.5-coder tools [eslint, prettier, vercel] # 工具路径映射解决 unable to locate the codex cli binary [tool_paths] ruff /opt/homebrew/bin/ruff # macOS Homebrew pytest ~/.local/bin/pytest # Linux user installProfile 匹配逻辑是 CLI-Anything 的灵魂当你在/home/user/myproject/目录下执行cli-anything fix main.py它会扫描当前目录及所有父目录找到第一个匹配的 Profile这里是python-dev然后强制使用phi-3-mini模型轻量适合代码分析只允许调用ruff,pytest,uv三个工具禁止git等无关命令将ruff的路径替换为配置中的/opt/homebrew/bin/ruff彻底解决二进制定位问题。自定义命令Custom Commands更强大。在~/.cli-anything/custom/目录下创建deploy.sh#!/bin/bash # CLI-Anything 会自动识别此文件为命令 # 名称取自文件名cli-anything deploy echo Deploying to staging... cli-anything git push origin main:staging cli-anything python run manage.py migrate cli-anything curl --post https://api.staging.example.com/deployCLI-Anything 会将其注册为cli-anything deploy命令并自动注入当前上下文变量如$CLI_CONTEXT_CWD,$CLI_CONTEXT_GIT_BRANCH。这比写 alias 或 function 灵活得多因为deploy命令本身可以被其他 CLI-Anything 命令调用形成命令链。实操心得我最初以为 CLI-Anything 的配置很复杂直到我发现一个技巧——用cli-anything config export --profile python-dev profile.toml导出当前目录的 Profile然后手动编辑model字段为claude-3-haiku再cli-anything config import profile.toml。这样就能在 Python 项目里临时切换到 Claude 模型而不用改全局配置。这才是真正“按需定制”的体验。4. 实操过程与核心环节实现手把手搭建你的第一个 AI 增强型 CLI 工作流4.1 从零开始五分钟内让ls命令拥有“智能解读”能力很多新手被codex cli 安装失败劝退其实 CLI-Anything 的最小可行价值根本不需要安装任何模型。我们来实现一个经典场景当你执行ls -la不仅看到文件列表还看到每个文件的“AI 解读”。步骤一创建智能别名无需 root 权限在~/.zshrc或~/.bashrc中添加# CLI-Anything 智能 ls 别名 alias lscli-anything ls然后source ~/.zshrc。现在ls命令已被 CLI-Anything 接管。步骤二编写ls命令的 AI 解读逻辑CLI-Anything 的命令逻辑存放在~/.cli-anything/commands/ls.rsRust或~/.cli-anything/commands/ls.pyPython 插件。我们用 Python 插件演示更易懂# ~/.cli-anything/commands/ls.py import subprocess import json from cli_anything.runtime import get_context, call_model def main(args): # 1. 执行原生 ls 命令获取结构化输出 result subprocess.run( [ls, -la] args, capture_outputTrue, textTrue, cwdget_context().cwd ) if result.returncode ! 0: print(result.stderr) return result.returncode # 2. 解析 ls 输出为 JSONCLI-Anything 内置解析器 files parse_ls_output(result.stdout) # 3. 构建模型提示词强调“简洁、实用、一行总结” prompt f你是一个资深 Linux 系统工程师。请为以下文件列表中的每个文件用一句话说明其用途和风险点。格式filename: summary。不要解释 ls 命令本身。 {json.dumps(files, indent2)} # 4. 调用模型CLI-Anything 自动选择最快可用模型 response call_model(prompt, max_tokens200) # 5. 输出先显示原生 ls再显示 AI 解读 print(result.stdout) print(\n AI 解读:) print(response) def parse_ls_output(output): 简化版 ls 解析器实际使用 CLI-Anything 内置的 tree-sitter 解析 files [] for line in output.strip().split(\n)[1:]: # 跳过 total 行 parts line.split() if len(parts) 9: filename parts[8] size parts[4] mtime .join(parts[5:8]) files.append({ name: filename, size_bytes: int(size), modified: mtime }) return files步骤三赋予执行权限并测试chmod x ~/.cli-anything/commands/ls.py # 现在执行 ls你会看到类似输出total 48 drwxr-xr-x 7 user staff 224 May 20 10:30 . drwxr-xr-x 12 user staff 384 May 19 15:20 .. -rw-r--r-- 1 user staff 123 May 20 10:25 README.md -rw-r--r-- 1 user staff 2100 May 20 10:28 pyproject.toml -rw-r--r-- 1 user staff 890 May 20 10:29 main.py AI 解读: README.md: 项目说明文档应包含安装、使用、贡献指南检查是否最新。 pyproject.toml: Python 项目配置文件定义依赖、构建系统、lint 规则重点关注 [build-system] 和 [project]。 main.py: 主程序入口检查是否包含 if __name__ __main__: 块是否有异常处理。这个例子展示了 CLI-Anything 的核心能力它不取代原生命令而是增强它。ls还是那个ls但它的输出被赋予了语义理解能力。这比codex cli那种“另起炉灶”的方式更自然也更少出错。4.2 进阶实战用 CLI-Anything 自动修复pip install报错网络热搜里pip install modelscope error: externally-managed-environment和pip : 无法将“pip”项识别为 cmdlet是最高频问题。CLI-Anything 提供了一键修复方案。场景还原你在 Ubuntu 22.04 上执行pip install modelscope得到报错error: externally-managed-environment ... hint: See PEP 668 for details.CLI-Anything 修复流程步骤一诊断问题cli-anything diagnose pip-error输出 诊断结果 - 环境Ubuntu 22.04 (system python) - 问题PEP 668 外部管理环境保护已启用 - 根本原因系统 Python 由 apt 管理pip 被禁止修改 - 推荐方案使用 uv 创建隔离环境比 venv 快比 conda 轻步骤二一键修复cli-anything fix pip-error --package modelscopeCLI-Anything 自动执行检查uv是否已安装若无则下载https://github.com/astral-sh/uv/releases/download/v0.4.21/uv-x86_64-unknown-linux-gnu.tar.gz创建~/.cli-anything/uv-envs/modelscope/环境在该环境中执行uv pip install modelscope生成~/.cli-anything/uv-envs/modelscope/activate.sh内容为export PATH/home/user/.cli-anything/uv-envs/modelscope/bin:$PATH export PYTHONPATH/home/user/.cli-anything/uv-envs/modelscope/lib/python3.10/site-packages输出提示✅ modelscope 已安装到隔离环境。运行 source ~/.cli-anything/uv-envs/modelscope/activate.sh 启用。步骤三无缝集成到工作流你可以将激活脚本加入~/.zshrc# 自动激活 modelscope 环境当进入特定目录时 autoload -U add-zsh-hook add-zsh-hook chpwd auto_activate_modelscope auto_activate_modelscope() { if [[ $PWD */my-models/* ]]; then source ~/.cli-anything/uv-envs/modelscope/activate.sh 2/dev/null fi }这样当你cd ~/projects/my-models/时modelscope自动可用pip命令被uv pip替代所有报错烟消云散。实操心得这个修复方案的关键在于“不碰系统环境”。很多教程教用户sudo pip install --break-system-packages这是危险操作。CLI-Anything 的哲学是“隔离优于覆盖”它用uv创建的环境比venv更轻量启动快 3 倍比conda更专注无额外包管理开销这才是生产环境该有的样子。4.3 高级技巧用 CLI-Anything 实现“人格切换”的六步工作流热搜词里有cli切换人格的6个步骤这听起来玄乎但在 CLI-Anything 里它对应的是上下文感知的模型角色切换。比如你希望在 Python 项目里用phi-3-mini轻量、快在前端项目里用qwen2.5-coder专精 JS/HTML在数据分析项目里用llama-3.1-8b-instruct数学强。这不是简单的--model参数而是完整的六步工作流步骤一定义人格Persona配置在~/.cli-anything/personas/下创建python-dev.tomlname Python Dev description 专注 Python 代码分析、重构、测试 model phi-3-mini temperature 0.3 max_tokens 512 tools [ruff, pytest, uv, black] # 专属系统提示词 system_prompt 你是一位经验丰富的 Python 工程师专注于代码质量、可维护性和性能。 - 生成代码时严格遵循 PEP 8。 - 修复 bug 时先复现问题再提供最小化修复。 - 解释概念时用 Python 3.10 语法举例。 步骤二创建人格触发器Trigger在~/.cli-anything/triggers/下创建python-project.trigger{ name: Python Project, conditions: [ {type: file_exists, path: pyproject.toml}, {type: file_exists, path: requirements.txt} ], persona: python-dev, priority: 10 }步骤三人格自动加载当你进入一个含pyproject.toml的目录CLI-Anything 自动加载python-dev人格。此时cli-anything explain main.py会使用phi-3-mini和上述system_prompt。步骤四人格内省Persona Inspectioncli-anything persona inspect输出 当前人格Python Dev 模型phi-3-mini (quantized, 2.3GB RAM) ️ 工具ruff, pytest, uv, black 系统提示你是一位经验丰富的 Python 工程师... ⚙️ 会话 ID20240520-103022-abc123步骤五人格临时覆盖在 Python 项目里你想用更强的模型生成文档cli-anything explain --persona qwen2.5-coder main.pyCLI-Anything 会临时切换模型但保留当前目录的tools和system_prompt确保生成的文档仍符合 Python 项目规范。步骤六人格持久化Persistent Personacli-anything persona pin python-dev这会在当前目录创建.cli-anything-persona文件内容为python-dev。即使你cd到子目录人格依然保持。取消用cli-anything persona unpin。这六步工作流就是 CLI-Anything 所谓的“人格切换”——它不是玄学而是基于文件系统上下文的、可编程的、可审计的模型策略管理。当你看到mac claude cli 用qwen key这样的热搜就知道用户其实在尝试手动切换模型而 CLI-Anything 让这件事变得自动化、可配置、可复现。5. 常见问题与排查技巧实录那些年我们踩过的 CLI-Anything 坑5.1 “unable to locate the codex cli binary or required runtime components” —— 二进制定位失效的终极解法这个报错是 CLI-Anything 之前所有“伪 CLI”工具的通病。根本原因在于codex cli的二进制和它的 Python 运行时、模型文件、配置目录是分离的当用户移动目录、更新系统、或清理缓存时链接就断了。CLI-Anything 的解决方案是“单文件可执行”Single-File ExecutableRust 主二进制cli-anything是静态链接的不依赖系统 glibc所有 Python 相关资源pyside6的 Qt 库、模型权重、工具二进制被打包进~/.cli-anything/assets/目录运行时通过std::env::current_exe()获取自身路径再拼接assets/目录绝对路径永不丢失。排查步骤验证二进制完整性cli-anything self-check # 输出✅ Binary: /usr/local/bin/cli-anything (static linked) # ✅ Assets: /home/user/.cli-anything
阅读完成 · 觉得有帮助?
咨询建站