用一个 Bash CLI 管理多款 AI 开发工具:jt-code-cli 实战与原理解析

项目地址:JTBlink/jt-code-cli

摘要

本文介绍一个轻量、可移植的 Bash 命令行工具集 jt-code-cli,旨在通过 npm 全局包统一管理多款 AI 开发工具(安装/升级/卸载),并提供一个独立的 MCP 诊断与清理脚本,帮助你在本地快速搭建顺畅的 AI 编程环境。文章包含快速上手、命令示例、实现架构、常见问题与后续规划,适合希望在 macOS/Linux 下以最少成本整合多家厂商 CLI 的开发者。


项目背景

  • 痛点:
    • AI 辅助编程相关 CLI 分散,安装方式不统一,升级与卸载也不一致。
    • 不同工具的版本与环境要求不一致,容易出现 PATH、权限、残留进程等问题。
  • 目标:
    • 用一套 Bash 脚本统一管理安装、升级、卸载,实现"一个命令管理多个工具"。
    • 提供对 MCP(Model Context Protocol)相关进程与配置的一站式诊断清理。
  • 适用人群:
    • 想快速试用或切换多款 AI 开发 CLI 的工程师。
    • 需要在 CI、脚本化环境中进行"非交互"批量安装/清理的用户。

仓库简介

  • 仓库定位:基于 Bash 的 CLI 工具集,不包含编译流程与单元测试框架。
  • 核心能力:
    • 统一管理通过 npm 安装的多款 AI CLI:iflow、claude-code、qwen、codebuddy、copilot、gemini。
    • 一条命令完成安装、升级、卸载单个或全部工具。
    • 独立的 MCP 诊断、清理、校验与重启脚本。
  • 支持平台:macOS(zsh/bash),Linux 同样适用(需具备同等工具链)。

项目目录结构(示意)

text 复制代码
jt-code-cli/
├─ jt-code.sh               # 主入口:解析路径,载入模块,分发子命令
├─ jt-code-setup.sh         # 在 ~/.local/bin 维护 jt-code 软链接
├─ mcp-manager.sh           # MCP 进程诊断/清理/校验/重启/全量重置
├─ modules/
│  ├─ core.sh               # 彩色日志、execute_command 封装
│  ├─ tools.sh              # Node 环境检查、工具列表与状态
│  ├─ iflow.sh              # @iflow-ai/iflow-cli 的安装/卸载/升级
│  ├─ claude-code.sh        # @anthropic-ai/claude-code(含 ~/.claude.json 标记)
│  ├─ qwen.sh               # @qwen-code/qwen-code
│  ├─ codebuddy.sh          # @tencent-ai/codebuddy-code
│  ├─ copilot.sh            # @github/copilot
│  └─ gemini.sh             # @google/gemini-cli
├─ README.md                # 简要说明
└─ WARP.md                  # 维护与操作指南(本篇主要依据)

功能特性

  • 统一入口命令:jt-code
    • 子命令:installuninstallupgradeliststatushelp
    • 支持目标:iflowclaude-codeqwencodebuddycopilotgeminiall
  • 一键管理:
    • 安装单个或全部工具
    • 升级单个或全部工具(优先 npm update -g,失败回退为"卸载后重装")
    • 卸载单个或全部工具
  • 环境感知:
    • 自动校验 Node/npm 是否可用(推荐 Node >= 18)
    • 列出各工具的安装状态与版本
  • MCP 辅助:
    • 诊断、清理与重启 MCP 相关进程
    • 校验 ~/.claude.json 及相关 VSCode 目录配置(需 jq

先决条件

  • Node.js 与 npm:建议 Node >= 18(脚本会检测并给出提示)
  • mcp-manager.sh 需要:jqpgreppkill(需在 PATH 中)
  • 网络:能访问 npm registry 的 HTTPS 网络

快速开始

方式一:安装软链接,系统范围使用

~/.local/bin 创建名为 jt-code 的软链接,指向仓库内 jt-code.sh。macOS/zsh 环境下,确保 ~/.local/bin 已加入 PATH。

bash 复制代码
# 在仓库根目录执行:
./jt-code-setup.sh install

# 如提示找不到命令,检查 PATH(zsh):
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

# 验证:
which jt-code
jt-code help

方式二:不安装软链接,直接本地运行

bash 复制代码
# 在仓库根目录:
./jt-code.sh status
./jt-code.sh install claude-code

常用命令

查看支持工具与当前状态:

bash 复制代码
jt-code list
jt-code status

安装单个工具:

bash 复制代码
jt-code install iflow
jt-code install claude-code
jt-code install qwen
jt-code install codebuddy
jt-code install copilot
jt-code install gemini

安装全部支持工具:

bash 复制代码
jt-code install all

升级工具:

bash 复制代码
jt-code upgrade claude-code
jt-code upgrade all

卸载工具:

bash 复制代码
jt-code uninstall qwen
jt-code uninstall all

关键实现与架构设计

1) 入口脚本 jt-code.sh

  • 解析自身真实路径(兼容软链接形式调用),设置 SCRIPT_DIR 后按需 source modules/
  • 分发子命令:install/uninstall/upgrade/list/status/help
  • all 的请求,依序调用各工具模块的对应函数,保证顺序与可控输出

2) 核心模块 modules/core.sh

  • 统一彩色日志接口:print_info/print_success/print_warning/print_error
  • execute_command 封装:支持"静默执行"以减少冗余输出,利于 CI 与自动化

3) 环境与工具模块 modules/tools.sh

  • check_nodejs:检测 Node 与 npm,Node < 18 给出警告但不强制阻断(视工具要求而定)
  • check_tool_status:如命令存在则打印版本(node、npm、iflow、claude、qwen、cbc/codebuddy、copilot、gemini)
  • list_tools:输出受支持工具与调用示例

4) 各工具安装器模块(基于 npm)

  • 模块化封装 install_<tool> / uninstall_<tool> / upgrade_<tool>
  • 升级策略:优先 npm update -g,失败则回退为"卸载后重装",在多源网络环境更稳健
  • claude-code 模块:写入 ~/.claude.jsonhasCompletedOnboarding 标记,减少首次交互摩擦

5) 软链接管理 jt-code-setup.sh

  • ~/.local/bin 维护名为 jt-code 的软链接,指向仓库内 jt-code.sh
  • 安全策略:对非软链接但同名可执行文件先备份,修复指向错误的软链接,为源脚本添加可执行权限

6) MCP 诊断与维护 mcp-manager.sh

  • 子命令:statuscleanuprestartvalidatediagnosefull-reset
  • validate:优先检测 ~/.claude.json;找不到时回退 VSCode 扩展目录;用 jq 校验 JSON 并输出服务器与文件系统参数
  • cleanup:通过 pgrep/kill 清理重复/残留的 MCP 进程(filesystem、context7、browser-tools、git、sequential-thinking、figma developer),包含安全检查与重试
  • diagnose:打印 npm registry 连通性、node/npm/npx/python/jq 存在与版本,便于定位环境问题

MCP 管理器示例

检查状态:

bash 复制代码
./mcp-manager.sh status

诊断环境与连通性:

bash 复制代码
./mcp-manager.sh diagnose

清理残留进程并重启:

bash 复制代码
./mcp-manager.sh cleanup
./mcp-manager.sh restart

校验配置(需要 jq):

bash 复制代码
./mcp-manager.sh validate

全量重置(谨慎):

bash 复制代码
./mcp-manager.sh full-reset

非交互式与稳定性考量

  • 避免交互阻塞:部分官方 CLI 在卸载时可能出现交互提示(例如是否删除配置)。在自动化/CI 中建议选择非交互路径或手动清理,保证流程可预测。
  • 冗余输出抑制:execute_command 支持静默输出,有利于日志整洁。
  • 升级回退策略:网络波动或 registry 差异导致 update 失败时,自动走"卸载后重装"路径提升成功率。

常见问题排查(FAQ)

  1. which jt-code 为空
  • 原因:~/.local/bin 未加入 PATH
  • 解决:
bash 复制代码
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
  1. npm 全局权限问题(EACCES)
  • 建议使用 nvm 安装 Node,避免用 sudo 安装全局包
  • 或配置 npm 全局前缀到用户目录:
bash 复制代码
npm config set prefix "$HOME/.npm-global"
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
  1. 网络访问 npm registry 失败
  • 使用国内镜像临时安装(按需),或配置代理:
bash 复制代码
npm config set registry https://registry.npmmirror.com
# 安装完成后可恢复官方:
npm config set registry https://registry.npmjs.org
  1. mcp-manager.shjq/pgrep/pkill 缺失
  • 安装依赖(macOS):
bash 复制代码
brew install jq
# pgrep/pkill 通常来自系统自带,macOS 自带 pgrep/pkill
  1. shellcheck 规范检查
  • 可在本地对脚本进行静态分析,提前发现潜在问题:
bash 复制代码
brew install shellcheck
shellcheck jt-code.sh jt-code-setup.sh mcp-manager.sh modules/*.sh

路线图(Roadmap)

  • 支持更多 AI CLI 工具与可选配置(如代理、源切换、环境变量注入)
  • 安装源可配置化(官方/镜像自动回退)
  • 增加自更新命令(自检版本并升级脚本本身)
  • 增强日志与错误码标准化,便于在 CI 中消费
  • 增加命令自动补全与更丰富的 help 文档
  • 引入轻量测试样例与示例场景脚本

最佳实践建议

  • 使用 nvm 管理 Node 版本,保持 Node >= 18
  • 在 CI/自动化中使用非交互路径,并固定 npm registry,提升稳定性
  • 安装/升级后先运行 jt-code status,确认可执行状态
  • 对 MCP 相关问题,先 diagnosecleanupvalidate,逐步缩小问题范围

结语

jt-code-cli 通过一套纯 Bash 的脚本把"多工具、多厂商、不同安装方式"的问题统一到了一个入口,让本地 AI 开发环境的安装、升级与移除更可控、更一致。如果你也在多款 AI CLI 之间切换,或需要在 CI/CD 中快速拉起环境,不妨试试这个工具集,并根据团队需求定制自己的模块与策略。

如果你已经在本地克隆了仓库,可立即按文中的"快速开始"章节进行体验;也欢迎基于你们的使用场景提出改进建议或提交 PR。祝你开发顺利!

相关推荐
张较瘦_2 小时前
[论文阅读] AI+软件工程 | 开发者 AI 需求新指南:任务感知视角下的负责任 AI 实证研究
论文阅读·人工智能·软件工程
VBA63373 小时前
数组与字典解决方案第三十讲:如何将记录集的数据记入数组
开发语言
m0_480502643 小时前
Rust 登堂 之 Cell 和 RefCell(十二)
开发语言·后端·rust
qq_252924193 小时前
PHP 8.0+ 极限性能优化与系统级编程
开发语言·性能优化·php
blues_C3 小时前
Playwright MCP vs Chrome DevTools MCP vs Chrome MCP 深度对比
前端·人工智能·chrome·ai·chrome devtools·mcp·ai web自动化测试
凤年徐3 小时前
【C++】string类
c语言·开发语言·c++
艾醒3 小时前
大模型面试题剖析:深入解析 Transformer 与 MoE 架构
人工智能·算法
qluka4 小时前
Android 窗口结构(三) Home Task 添加Home ActivityRecord
android·开发语言
Godspeed Zhao4 小时前
自动驾驶中的传感器技术64——Navigation(1)
人工智能·机器学习·自动驾驶