1. 从CLI-Anything说起命令行工具正在经历一场静默革命第一次看到CLI-Anything这个标题我脑子里蹦出来的不是某个具体工具而是一种趋势判断——命令行界面正在从人敲命令进化成人和智能体共用一套接口。过去我们聊CLI聊的是ls、grep、curl这些命令怎么组合现在聊CLI聊的是Codex CLI、Claude CLI、Pi CLI这些工具怎么把大模型能力塞进终端以及Agent怎么通过CLI去调用外部能力。这个项目标题背后的核心命题其实很直接能不能让任何东西都拥有一个CLI入口并且这个入口既能被人用也能被Agent用换句话说CLI不再只是人类开发者的效率工具它正在变成Agent与操作系统、与外部服务、与工具链之间的标准握手协议。你去看最近的热搜词就明白了——codex cli使用教程claude clipi agentagent框架与编排agent skill这些词全部指向同一个方向终端正在成为Agent的主战场。我之所以对这个方向特别有感触是因为过去大半年我一直在折腾各种Agent框架和CLI工具的集成。踩过的坑包括但不限于Codex CLI在Windows上装完找不到二进制、Claude CLI配置Qwen Key时环境变量死活不生效、某个Agent执行到一半突然报agent execution terminated due to error然后没有任何日志。这些问题看起来零散但根子上都指向同一件事——CLI工具和Agent之间的接口约定还不够成熟。所以这篇博文我想围绕CLI-Anything这个主题把CLI工具在Agent时代的定位、安装配置的实操细节、多Agent协作时的CLI编排思路、以及那些文档里不会写的避坑经验一次性讲透。适合谁看如果你是刚接触Agent开发、想搞清楚CLI在其中扮演什么角色的新手这篇能帮你建立完整的认知框架如果你已经在用Codex CLI或Claude CLI做日常开发这篇里的排查技巧和配置细节应该能帮你省下不少折腾时间。2. CLI-Anything的核心思路为什么是CLI而不是GUI或API2.1 CLI作为Agent的母语有其必然性很多人会问Agent调用外部能力直接用API不就行了为什么要绕一层CLI这个问题我一开始也想不通直到我自己写了一个Agent去操作本地文件系统才发现API的局限性有多明显。API是为特定服务定制的。你要调GitHub得用GitHub API要调本地数据库得用数据库驱动要压缩文件得找压缩库。每接一个新能力Agent的代码里就多一套适配逻辑。而CLI是操作系统层面的通用接口——任何能在终端里跑的东西理论上都能被Agent调用。git、ffmpeg、pandoc、curl、jq这些工具的共同点是什么它们都有稳定的命令行接口输入输出都是文本流Agent只需要会拼命令、会读输出就能驱动它们。这就是CLI-Anything的第一层含义把CLI当作Agent的通用工具总线。Agent不需要知道ffmpeg内部怎么解码视频它只需要知道ffmpeg -i input.mp4 output.gif这个命令能完成格式转换。这种抽象层级恰到好处——比直接调API灵活比让Agent自己写代码安全。2.2 人机共用的接口设计才是关键但光有CLI还不够。传统的CLI是给人用的输出格式、错误提示、交互方式都是按人类习惯设计的。Agent用起来会有问题人类能看懂Error: something went wrongAgent需要的是结构化的错误码人类能接受交互式确认Agent需要的是非交互式的确定性行为。所以CLI-Anything的第二层含义是CLI工具需要同时服务人类用户和Agent调用者。这就解释了为什么Codex CLI、Claude CLI这类工具会同时提供交互模式和--non-interactive之类的批处理模式。我实测下来一个设计良好的Agent友好型CLI通常具备这几个特征支持--json或--output-format json输出结构化结果有明确的退出码约定0成功非0失败不同错误码对应不同失败类型非交互模式下不会卡在确认提示上日志输出和结果输出分离stderr走日志stdout走结果提示如果你在开发自己的CLI工具并打算让Agent调用务必把非交互模式当作一等公民来设计而不是事后补一个--yes参数。我见过太多工具在Agent场景下因为一个交互式确认而整个流程卡死。2.3 CLI-Hub与Agent Skill的生态位热搜词里出现了CLI-Hub和agent skill这两个概念其实回答了CLI-Anything的第三层含义CLI工具需要被发现、被编排、被复用。CLI-Hub可以理解为一个CLI工具的注册中心——Agent在需要某个能力时先去Hub里查有没有现成的CLI工具而不是每次都自己写。这和Agent Skill的思路是一致的Skill本质上是把某类任务的完成方法封装成可复用的单元而CLI工具天然就是Skill的一种实现形式。我自己的做法是维护一个本地的CLI工具清单每个工具记录工具名、用途、关键参数、典型调用示例、已知坑点。当Agent需要完成某个任务时先查清单命中就直接调用没命中再考虑写新代码。这个习惯让我在多个Agent项目之间复用了大量能力省下的时间相当可观。3. 主流CLI工具安装配置实操Codex CLI、Claude CLI与Pi CLI3.1 Codex CLI安装Windows和Mac的差异处理Codex CLI是目前讨论度最高的Agent CLI工具之一但它的安装过程在不同平台上差异很大这也是codex cli windows安装安装codex cli这类搜索词热度居高不下的原因。先说我实测下来最稳的安装路径。在Mac上如果你有Node.js环境直接npm install -g openai/codex-cli装完之后用codex --version验证。如果报command not found大概率是npm全局bin目录没在PATH里用npm config get prefix找到路径手动加进.zshrc或.bash_profile。Windows上就麻烦一些。最常见的问题是装完之后运行报unable to locate the codex cli binary or required runtime components。这个错误的根因通常是三个一是Node.js版本太老建议18以上二是npm全局安装路径有空格导致二进制找不到三是杀毒软件把下载的二进制文件隔离了。我的处理顺序是这样的先node -v确认版本再npm config get prefix确认路径没有空格和中文然后临时关闭杀毒软件重新安装。如果还不行用npm install -g openai/codex-cli --force强制重装再手动去%APPDATA%\npm\node_modules\openai\codex-cli\bin目录下确认二进制文件是否存在。注意Windows上还有一个隐蔽的坑——如果你同时装了WSL和Windows原生Nodecodex命令可能指向WSL里的版本但你在PowerShell里运行。用where codex确认实际调用的路径避免版本混淆。3.2 Claude CLI配置Qwen Key的完整流程mac claude cli 用qwen key这个搜索词说明很多人想在Claude CLI里接入其他模型。这个需求本身合理——Claude CLI的交互体验做得好但模型选择上大家各有偏好。配置的核心是环境变量。Claude CLI通常读取ANTHROPIC_API_KEY或类似的变量要接入Qwen你需要找到它支持的兼容接口配置方式。一般流程是export ANTHROPIC_BASE_URL你的兼容接口地址 export ANTHROPIC_API_KEY你的key然后在Claude CLI的配置文件通常在~/.claude/config.json或类似位置里指定模型名称。这里的关键是接口兼容性——不是所有模型服务都完全兼容Claude的API格式你需要确认服务方提供了兼容层。我踩过的坑是环境变量设了但CLI不生效。排查下来发现是shell配置文件加载顺序的问题——我把export写在了.bash_profile但Mac默认用zsh读的是.zshrc。改过来就好了。另一个坑是key里有特殊字符没加引号导致shell解析出错。3.3 Pi CLI与Agent框架的集成要点Pi CLI和Pi Agent在热搜里出现频率很高它代表的是一类轻量级Agent运行时。和Codex CLI偏重代码生成不同Pi CLI更强调Agent的编排能力。集成Pi CLI时我建议先搞清楚harness和agent区别这个基础问题。简单说harness是执行框架负责调度、状态管理、错误处理agent是决策逻辑负责根据当前状态决定下一步做什么。Pi CLI通常同时提供这两层但你可以只用它的harness把agent逻辑换成自己的。安装Pi CLI的通用步骤# 确认Node环境 node -v # 全局安装 npm install -g pi-cli # 初始化配置 pi init # 验证 pi --help初始化时会让你配置模型provider和API key。这里建议把配置写在项目级而不是全局方便不同项目用不同模型。Pi CLI一般支持pi.config.json放在项目根目录。4. Agent与CLI协作的编排实战从单Agent到多Agent4.1 单Agent调用CLI的标准模式先讲最基础的场景一个Agent需要调用CLI工具完成任务。这个模式看起来简单但要做好需要处理好几个细节。标准流程是这样的Agent先分析任务确定需要哪个CLI工具然后构造命令包括参数和输入接着执行命令捕获stdout和stderr最后解析输出判断成功还是失败决定下一步。我用Python写过一个通用的CLI调用封装核心逻辑是import subprocess import json def run_cli(command, args, timeout60): try: result subprocess.run( [command] args, capture_outputTrue, textTrue, timeouttimeout ) return { success: result.returncode 0, stdout: result.stdout, stderr: result.stderr, returncode: result.returncode } except subprocess.TimeoutExpired: return {success: False, error: timeout} except FileNotFoundError: return {success: False, error: command not found}这个封装的关键点是超时必须有防止Agent卡死、returncode必须检查不能只看有没有异常、stderr单独返回方便排查。提示Agent调用CLI时最容易被忽略的是命令注入风险。如果命令参数来自用户输入或模型生成一定要做转义或白名单校验。我见过Agent被诱导执行rm -rf的案例虽然是在沙箱里但也够吓人的。4.2 多Agent协作时的CLI编排策略多agent协作和agent框架与编排是热搜里的高频词。当多个Agent需要协作时CLI的角色会变得更复杂——它不仅是工具接口还是Agent之间的通信媒介。我实践下来比较有效的模式是CLI作为共享工具层每个Agent有自己的职责但它们共享同一套CLI工具。比如一个Agent负责数据抓取调curl一个负责数据处理调jq一个负责报告生成调pandoc。它们之间通过文件系统或消息队列传递中间结果而不是直接互相调用。这种模式的好处是解耦。每个Agent只需要知道自己要调什么CLI不需要知道其他Agent的存在。编排层负责决定执行顺序和依赖关系。另一种模式是CLI作为Agent的对外接口每个Agent把自己封装成一个CLI命令其他Agent通过调用这个命令来使用它的能力。这其实就是Agent Skill的一种实现——把Agent能力标准化成CLI接口。4.3 Agent记忆与CLI的配合agent记忆和agent记忆框架以及选型也是热门话题。CLI在Agent记忆体系里扮演什么角色我的理解是CLI是记忆的读写接口。Agent的记忆通常存在文件、数据库或向量库里。CLI工具可以封装这些存储的读写操作让Agent用统一的命令来存取记忆。比如# 写入记忆 agent-memory write --key user_preference --value 喜欢简洁回复 # 读取记忆 agent-memory read --key user_preference # 搜索相关记忆 agent-memory search --query 用户偏好这样Agent不需要关心底层用的是SQLite还是向量数据库只需要会调这几个命令。换存储方案时只改CLI实现Agent代码不动。我自己的Agent项目里记忆层就是用这种方式封装的。实测下来这种抽象让记忆模块的替换成本从改几十处代码降到改一个CLI实现。5. 常见问题与排查技巧实录5.1 CLI安装类问题速查问题现象可能原因排查步骤解决方案command not foundPATH未配置which codex/where codex手动添加npm全局bin到PATHunable to locate binary安装不完整或被杀毒隔离检查node_modules下bin目录关闭杀毒重装或手动下载二进制版本不兼容Node版本过老node -v升级到Node 18权限错误全局安装权限不足看npm报错信息用nvm管理Node避免sudo安装卡住网络问题看npm日志换registry源或重试这个表是我自己踩坑总结的基本覆盖了90%的安装问题。特别说一下node_modulesopencode\cli\bin\opencode.exe 与你运行的windows版本不兼容这个错误——这通常是下载的二进制架构不对比如下了arm64的包在x64机器上跑解决办法是确认系统架构然后找对应版本的包。5.2 Agent执行中断类问题排查agent execution terminated due to error这个报错信息太笼统了几乎等于没说。我排查这类问题的思路是分层定位第一层确认是Agent逻辑问题还是CLI调用问题。看日志里最后一条成功的操作是什么下一个操作是什么。如果卡在CLI调用就是CLI层的问题。第二层如果是CLI问题手动执行那条命令看报什么错。Agent环境和你手动执行的环境可能有差异——PATH不同、环境变量不同、工作目录不同。第三层如果是Agent逻辑问题检查是不是陷入了循环、是不是上下文超长、是不是模型返回了无法解析的格式。我遇到最多的情况是上下文超长导致Agent中断。解决办法是在Agent框架里设置上下文窗口监控接近上限时主动触发摘要或截断。5.3 那些文档不会写的避坑经验说几个我踩过的、文档里基本不会提的坑。第一个CLI工具的输出编码问题。有些工具在Windows上默认输出GBK编码Agent按UTF-8解析就乱码。解决办法是在调用时显式指定编码或者用chcp 65001切换代码页。第二个CLI工具的交互式提示。有些工具即使加了--yes还是会在某些情况下弹确认比如检测到配置文件不存在时。Agent遇到这种就会卡死。我的做法是先用echo y |管道喂输入或者找工具的--non-interactive模式。第三个环境变量污染。Agent进程继承的环境变量可能和你shell里的不一样特别是通过systemd或docker启动的Agent。排查时用env命令打印Agent实际看到的环境变量对比一下就知道差异在哪。第四个CLI工具的版本漂移。同一个工具你本地是2.0Agent环境是1.5行为可能完全不同。建议在Agent项目里锁定CLI工具版本用package.json的engines字段或类似的机制。6. Agent开发学习路线与CLI能力建设6.1 从CLI使用者到Agent开发者的进阶路径agent开发学习路线和agent for beginner是很多新手关心的。结合CLI这个主题我建议的路径是这样的第一阶段熟练使用至少5个常用CLI工具git、curl、jq、ffmpeg、pandoc理解它们的输入输出模式。这个阶段的目标是建立CLI能做什么的直觉。第二阶段写一个简单的Agent让它调用1-2个CLI工具完成一个具体任务。比如给定一个URL下载网页并提取标题。这个阶段的目标是理解Agent和CLI的交互模式。第三阶段引入Agent框架Pi Agent、LangChain等学习编排、记忆、错误处理。这个阶段的目标是能构建多步骤、有状态的Agent。第四阶段设计自己的CLI工具让它同时服务人类和Agent。这个阶段的目标是理解CLI-Anything的设计哲学。我自己的经验是第二阶段到第三阶段的跨越最难。很多人卡在能跑通demo但做不了实际项目。突破的关键是找一个真实需求硬着头皮做完踩够坑就通了。6.2 Agent Skill与CLI工具的设计原则skill和agent的区别这个问题我的理解是Agent是会做决策的主体Skill是可复用的能力单元。CLI工具是Skill的一种实现形式。设计Agent友好的CLI工具我总结了几条原则单一职责一个CLI工具只做一件事做精做透。不要搞万能工具Agent很难正确使用。幂等性同样的输入执行多次结果应该一致。Agent可能会重试幂等性能避免副作用。可组合输出能被其他工具消费。优先输出JSON等结构化格式。自描述--help要清晰说明用途、参数、示例。Agent可以读help来学习怎么用。快速失败参数错误立即报错不要静默使用默认值。Agent需要明确的反馈。6.3 Agent安全与CLI权限控制agent安全和a-memguard这类词的出现说明大家开始重视Agent的安全问题。CLI层面能做的主要是权限控制。我的做法是给Agent用的CLI工具做一层包装限制它能执行的操作。比如Agent只能调用白名单里的命令只能访问特定目录只能使用有限的参数组合。这层包装可以用shell脚本实现也可以用专门的权限控制工具。另一个重点是审计日志。Agent执行的每条CLI命令都要记录包括时间、命令、参数、结果。出问题时能追溯也能用于分析Agent的行为模式。注意不要让Agent拥有无限制的shell执行权限。即使是在沙箱环境也要做最小权限原则。我见过Agent因为一个错误的命令把整个工作目录清空的案例虽然数据能恢复但浪费的时间很可惜。7. 我对CLI-Anything这个方向的个人判断折腾了这么多CLI工具和Agent框架我越来越觉得CLI-Anything不是一个具体的项目而是一个正在成型的范式。它的核心洞察是在Agent时代CLI的价值不是降低了而是被重新定义了。过去CLI是给人用的效率工具评价标准是人用起来顺不顺手。现在CLI还要给Agent用评价标准变成了Agent能不能可靠地调用。这两个标准有重叠但不完全一样。一个对人类友好的CLI对Agent可能并不友好——交互式提示、彩色输出、进度条这些对人类是体验加分项对Agent是解析负担。所以如果你在开发CLI工具我建议从现在开始就把Agent可用性纳入设计考量。加一个--json输出选项加一个--non-interactive模式把错误码定义清楚把日志和结果分离。这些改动成本不高但能让你的工具在Agent生态里获得更大的适用面。如果你在开发Agent我建议把CLI当作一等公民的工具接口来对待。不要每个能力都自己写代码实现先看看有没有现成的CLI工具能用。维护一个自己的CLI工具清单记录每个工具的用途、参数、坑点。这个清单会成为你Agent项目最宝贵的资产之一。最后分享一个我最近的小发现把常用的CLI调用封装成Agent的肌肉记忆——也就是预置的命令模板——能显著提升Agent的执行效率。Agent不需要每次从零构造命令而是从模板库里选一个填参数就行。这个思路和Agent Skill的理念是一致的只是更轻量。我实测下来任务完成率提升了大概三成错误率也降了不少。如果你也在做Agent开发不妨试试这个方向。
企业数字化 ERP 产品动态
相关推荐
知识图谱如何提升大型语言模型的隐式奖励机制 1. 项目背景与核心价值知识图谱与大型语言模型的结合正在成为AI领域的前沿研究方向。普林斯顿大学这项工作的创新点在于,他们发现知识图谱能够为LLM提供一种"隐式奖励"机制,这种机制不依赖于传统的人工标注或强化学习中的显式奖励信号。我在实… · 2026/11/4 5:54:19
kxapp:iOS开发编译加速工具链详解 1. 项目概述作为一名iOS开发者,我深知应用编译流程中的痛点。每次修改代码后漫长的等待时间,不同环境下的配置差异,以及调试过程中频繁的断连问题,都在消耗着开发效率。今天要介绍的这个kxapp工具,正是为了解决这些实际… · 2026/11/4 5:54:19
知识图谱如何提升LLM训练效果 1. 项目背景与核心价值知识图谱与大型语言模型(LLM)的结合一直是AI领域的热点研究方向。普林斯顿团队这项工作的创新点在于,他们发现知识图谱能够为LLM训练提供隐式奖励信号,这种机制可以显著提升模型在知识密集型任务中的表现。传… · 2026/11/4 5:54:19
Hermes Agent架构解密:可扩展AI代理系统的设计模式与实现原理 Hermes Agent架构解密:可扩展AI代理系统的设计模式与实现原理
Hermes Agent是一款面向开发者和架构师设计的可扩展AI代理框架,它通过模块化架构实现了多平台集成、工具调用管理和上下文压缩等核心功能。该项目采用Python技术栈,支持OpenAI工… · 2026/11/4 19:24:44
Hermes Agent与自动驾驶仿真平台集成:CARLA与LGSVL Simulator完整指南 Hermes Agent与自动驾驶仿真平台集成:CARLA与LGSVL Simulator完整指南
Hermes Agent是一款功能强大的开源AI代理工具,能够自主执行各类任务并不断学习成长。本文将详细介绍如何将Hermes Agent与主流自动驾驶仿真平台CARLA和LGSVL Simulator进行集成&… · 2026/11/4 19:19:41
Hermes Agent与区块链智能合约测试框架:Truffle与Hardhat全解析 Hermes Agent与区块链智能合约测试框架:Truffle与Hardhat全解析
在区块链开发领域,智能合约的安全性与可靠性至关重要。Hermes Agent作为一款强大的AI驱动开发工具,能够与主流智能合约测试框架无缝集成,显著提升开发效率与代码质… · 2026/11/4 19:19:41
优化Hermes Agent的网络连接:TCP优化与连接复用实用指南 优化Hermes Agent的网络连接:TCP优化与连接复用实用指南
Hermes Agent作为一款强大的AI代理工具,其网络通信效率直接影响整体性能。本文将详细介绍如何通过TCP优化和连接复用技术提升Hermes Agent的网络连接稳定性与响应速度,帮助用户获得更… · 2026/11/4 19:19:41
Hermes Agent性能监控告警集成:Slack、Email与PagerDuty全攻略 Hermes Agent性能监控告警集成:Slack、Email与PagerDuty全攻略
Hermes Agent 是一款功能强大的开源智能代理框架,支持多平台集成与自动化任务处理。本文将详细介绍如何为 Hermes Agent 配置性能监控告警系统,实现 Slack 实时通知、Email 详细… · 2026/11/4 19:19:41
优化Hermes Agent的存储性能:RAID级别与存储协议选择 优化Hermes Agent的存储性能:RAID级别与存储协议选择
在处理大规模数据和高并发任务时,Hermes Agent的存储性能直接影响整体运行效率。本文将详细介绍如何通过选择合适的RAID级别和存储协议,显著提升Hermes Agent的存储吞吐量、数据可靠性和响… · 2026/11/4 19:19:41
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38