Ciridae CLI
Ciridae CLI。登录生产MCP一次,然后管理项目和
他们的部署通过生产坩埚。普通使用资源命令
操作和 api 其余的。
# Requires Node 24+:
npm install --global @ciridae/cli
ciridae init
ciridae auth login
ciridae auth status
ciridae auth whoami
ciridae organizations list
ciridae organizations current
ciridae config set project PROJECT_ID
ciridae config list
ciridae projects list
ciridae projects describe PROJECT_ID
ciridae deployments list
ciridae ghost-envs list
ciridae init 将一个规范的代理技能写入
~/.ciridae/skills/ciridae-cli/SKILL.md. 它总是链接共享的
~/.agents/skills 位置和链接 ~/.codex/skills, ~/.cursor/skills,
和 ~/.claude/skills 当这些代理目录存在时。命令打印
每一个探测到的目标。 ciridae init --check 报告链接和技能状态
是否在不更改文件的情况下保存生产凭证。
命令行拥有并刷新该技能 <!-- CIRIDAE USER GUIDANCE -->
分隔符。在分隔符后附加个人说明;更新保存
这个后缀并替换它之前的所有内容。没有分隔符的文件为
完全被下一个取代 ciridae init. 所有代理共享相同的用户后缀
通过他们的符号联系。普通平台命令静默刷新规范
因此,新的指导将随CLI更新一起到达,而无需另一个设置步骤。
组织有uuid和显示名称,而不是标识符。 organizations use 接受
UUID或精确的、不区分大小写的显示名称;重复的名称需要UUID。
它将此MCP端点的UUID与登录凭据分开保存。
organizations current 显示当前服务器端名称、UUID和已验证
目录访问。 organizations list 标记活动/默认行和报告
默认组织是否可访问。
拥有Crucible项目的Ciridae是内置的默认组织
(65a84feb-d9f1-43f0-8304-53303c96e1d1),但只有当它出现在
当前用户可访问的目录。显式保存的选择优先。
没有访问Ciridae的权限,选择另一个组织 organizations use NAME_OR_UUID.
不可用的已保存的组织需要重新选择,而不是静默切换到默认值。
自动默认值永远不会写入显式的用户选择。
项目列表的范围是它;拒绝项目详细信息和子资源读取
外部项目。通过 --organization NAME_OR_UUID 重写选择
对于一个命令,而不更改保存的默认值。每个命令验证
根据当前帐户的目录选择组织。
config set organization NAME_OR_UUID 还选择组织。使用
config set project PROJECT_ID 保存正在工作的项目 在这个组织中;
切换组织不会将项目带入新组织。
--project PROJECT_ID 为一个资源命令覆盖已保存的项目。
config get-value project 打印保存的ID; config unset project 清除它。
config unset organization 恢复可访问的Ciridae默认值。保存项目
在使用时根据当前服务器所有权进行检查,不被视为权限。
版本和更新
ciridae --version # Installed version only; offline
ciridae version # Installed version and an immediate npm lookup
ciridae version --json # { installed, latest, updateAvailable }
npm install --global @ciridae/cli@latest
普通的交互式命令检查npm的 latest 标记在一个独立的、有限的进程中
最多一小时一次。已知的新版本显示在每个符合条件的stderr上
调用,使用install命令。更新永远不会自动安装。
第一次查找在后续命令中可见; ciridae version 支票
马上,两秒内截止。如果npm不可用或
包没有发布,它报告而不是声称是最新的;
JSON返回 latest: null.
自动检查和通知对于管道输出、非交互式输入、
CI, Codex/Claude代理会话,JSON/原始/安静输出,以及何时
NO_UPDATE_NOTIFIER 是集。显式的 version 仍然执行其请求的查找。
咨询缓存位于 $XDG_CACHE_HOME/ciridae/npm-update.json (默认
~/.cache/ciridae/npm-update.json),与凭证分开。只发送支票
包名和CLI版本到npm,而不是MCP凭证或命令数据。
失败的检查保留最后一个已知的释放,并等待一个小时后重试。
资源的命令
命令模型如下 gcloud的约定:
资源组, list/describe/create,使用每个命令保存工作上下文
覆盖、自动分页和 --async 用于长时间运行的创建。
它不是一个完整的gcloud标志语言实现。
ciridae projects list --search agent --limit 20
ciridae projects list --all-organizations --format=json
ciridae deployments list --project PROJECT_ID
ciridae deployments describe DEPLOYMENT_ID
ciridae deployments logs DEPLOYMENT_ID --limit 100
ciridae deployments logs DEPLOYMENT_ID --follow --format=json
ciridae projects settings describe
ciridae full-environments list
ciridae full-environments describe ENVIRONMENT_ID
ciridae ghost-envs describe GHOST_ENV_ID
ciridae env-vars list
ciridae env-vars list --environment ENVIRONMENT_ID
ciridae env-vars list --ghost-env GHOST_ENV_ID
ciridae integrations list
ciridae service-keys list
ciridae templates list
ciridae workflows describe WORKFLOW_ID_OR_RUN_UUID
ciridae workflows wait WORKFLOW_ID_OR_RUN_UUID --timeout 600
ciridae ghost-envs exec GHOST_ENV_ID --command 'pwd' --cwd /workspace
资源列表默认为表;使用 --format=json 用于JSON数组。描述
默认为JSON。 organizations list 保留默认的JSON信封
主动/违约/访问注释。 projects list 遵循 所有页面 默认情况下;
--page-size 设置API批处理大小和 --limit 将所有选择的总数加起来
组织。 --all-organizations 显式忽略该列表的活动组织。
部署和幽灵环境列表 --project,而不是位置项目参数。
资源标志位于leaf命令之后,如上所示。
每个资源API读取都有一个60秒的响应截止日期,与总数无关
工作流等待超时。浏览器OAuth不受该截止日期的限制。没有请求
超时后自动重放;重试写操作前检查远程状态。
默认情况下,环境变量值在表和JSON中都是隐藏的。
--show-values 包括后端返回的任何值;将输出处理为
敏感。根据所选项目的目录检查完整环境id。
全局变量包括可编辑的和提供程序管理的条目。集成是
org-scoped;模板和服务密钥元数据是账户可见的集合。
工作流id是显式的,并使用所选项目的范围。
日志接受 --since/--until RFC3339时间戳,重复 --severity 和
--stream 旗帜。有限的JSON读取返回一个数组,最新的优先。 --follow
投票和打印未见过的条目,最古老的优先;JSON跟随输出为NDJSON。
每个民意调查最多看到 --limit 条目数(最多1000条)。这是一条尽最大努力的尾巴,
非无损档案输出;警告报告不重叠的轮询窗口。
workflows wait 报告stderr上的状态更改并打印完成的结果
stdout。失败、取消、超时或未知状态退出非零状态。超时,
Ctrl+C只停止本地等待,不停止远程操作。重试前检查。
工作流服务器拦截器: Crucible的工作流权限检查器要求
scope=project 和 project_id,但已部署的MCP/OpenAPI模式省略了这两者。
在实时冒烟测试中调用广告工具而不使用它们返回HTTP 500。
CLI提供正确的项目范围的参数,但是MCP模式必须是正确的
更新之前 workflows describe/wait 可以工作。没有权限绕过或原始api策略
变更包括在内。项目创建需要等待项目详细信息,所以需要等待
路径不依赖于此损坏的工作流端点。
创建一个项目
该文件是服务器的创建项目主体,不包括CLI选择的id。
例如,将其保存为 project.json:
{
"project_name": "Example Project",
"customer_name": "Ciridae",
"repository_name": "example-project",
"source_provider": "github",
"repository_only": true,
"deployment_mode": "gcp_kubernetes"
}
ciridae projects create example-project --template bundled-agent-template --file project.json
创作显示目标,要求确认; --quiet/-q 接受
脚本。默认情况下,它等待项目设置。 --async 返回已接受的
项目立即; --timeout 限制等待而不取消发放。
创建不会切换您的工作项目。用于环境和Azure DevOps
配置字段,检查服务器拥有的模式:
ciridae api describe proj__int-provisioning__post_plates_template_project_id_projects
执行运输限制
ghost-envs exec 分别打印stdout/stderr并传播远程退出
代码。 MCP当前缓冲整个响应,所以输出只出现在
完成。它不是一个交互式终端或直播流。网关的
30秒的上游读超时和有限的响应大小仍然适用;CLI
如果不更改服务器,就无法修复这些限制。一个不完整的响应失败了
未知的结果;命令永远不会自动重放。简称为:
只有有限的命令。上游执行路由还将原始块插入SSE;
多行块可能无法正确地构建。命令行拒绝接收畸形事件
而不是默默的丢线或报告成功。正确的服务器框架
而直播仍然是服务器工作。远程执行和项目创建还没有经过实际测试
作为只读烟雾通道的一部分。
原始API和身份验证
这是类似于ui的工作上下文,而不是简化的授权授予。 api call
仍然是一个显式的、未限定作用域的逃生舱口,并且不注入组织
参数。服务器权限仍然适用。登录/注销不会改变
保存选择;必须有另一个帐户可以访问它。
生产MCP是默认的。使用 --server URL 命令后只能进行测试
另一个MCP网关部署:
ciridae auth login --server http://localhost:8000/mcp
ciridae api list --server http://localhost:8000/mcp
ciridae api call TOOL_NAME --json '{}'
选择网关并不会选择其背后项目的环境。 项目和部署选择属于资源命令。生产仍然是 默认值,即使只保存另一个网关的凭据。Dev /分期 推迟坩埚实例的选择;更改网关URL则不会 保证不同的Crucible后端。现有的沙盒集成及其 访问设置保持不变。
在调用工具参数之前发现它们:
ciridae api list --search int-provisioning
ciridae api describe proj__int-provisioning__get_v1_projects
ciridae api list --search deployments --json
ciridae api call cir__whoami
工具发现遵循所有页面。每个工具有一行文本输出; --json
包括完整的描述和模式。 api describe 不执行工具。
使用 --format=json 获取资源JSON和 api call --raw 完整的MCP
信封。生 api call 当服务器提供结构化JSON时打印它。工具故障出口1
并保留JSON格式的服务器错误;无效参数退出2。计数,登录
指令和诊断将转到stderr,以便可以通过管道连接到stdout jq.
organizations list 提供用于选择活动组织的名称和uuid。
OAuth在默认浏览器中打开,并通过localhost回调返回。
保持命令运行,直到授权完成;它一直等着你
完成或按Ctrl+C。取消后,重新运行login并使用新打开的
浏览器页面,而不是旧的回调链接。
重复登录可以重用服务器客户端保存的回调端口
登记。通过身份验证的命令不监听该端口,除非浏览器
需要授权。如果端口正在使用,请关闭另一次登录尝试。
的用户专用文件中存储登录状态 ~/.config/ciridae 或者
$XDG_CONFIG_HOME/ciridae. 每个服务器主机和端口都有自己的注册
令牌对:登录或退出一个网关不会影响其他网关。
登录记录验证帐户的电子邮件,以便离线注销可以报告
Signed out EMAIL (SERVER_URL). 没有电子邮件记录的登录说明了这一点;日志记录
再次报道 Already signed out (SERVER_URL). 注销将删除本地凭据,
而不是服务器端安装或访问授权。
ciridae auth login
ciridae auth login --server http://localhost:8000/mcp
ciridae auth list
ciridae auth status
ciridae auth logout --server http://localhost:8000/mcp
auth list 和 auth status 脱机检查保存的凭据;他们没有
声明服务器已接受它们。 auth login 验证已登录的电子邮件
在印刷 Connected as EMAIL (SERVER_URL). 它不会发现工具
或要求坩埚访问。缺少或未经验证的身份使登录退出
非零。在使用工具时检查工具的可用性和权限;
服务器仍然强制执行每个调用。
命令选择网关的凭据,并让MCP SDK发现其OAuth 根据需要服务和刷新令牌。令牌不会在网关之间复制。
自动切换
正常运行命令。命令行设置HTTP User-Agent 自动从
呼叫座席环境: CLAUDECODE=1 选择
claude-code ciridae-cli/0.1.0;否则 CODEX_SHELL=1 选择
codex ciridae-cli/0.1.0. 没有任何标记,它发送 ciridae-cli/0.1.0.
这些标记标识产品,而不是其版本,因此不会猜测代理版本。
如果两者都是继承的,则Claude Code优先。
MCP clientInfo也标识 ciridae-cli via claude-code 或者
ciridae-cli via codex,保持CLI版本分离,避免合并
一次登录下的客户端观察。OAuth身份和授权不变;
User-Agent是自我报告的归属,而不是授权。
不需要自定义标志或特定于ciridae的环境变量。没有 本地命令度量或分析上传;归属使用了MCP的现有属性 服务器端活动跟踪。环境值、会话id、参数等 命令输出永远不会复制到User-Agent中。
粗略限制
这第一次切割是为了监督使用。并发CLI进程共享
凭据和保存的上下文。凭证刷新/持久化未序列化,
文件写入不是原子的;重叠刷新会失去可用的本地权限
状态。避免并行登录/刷新,直到加固。代理应该通过
显式的 --organization 和 --project 而不是更改共享默认值。
生 api call 可以改变生产并且没有cli级别的确认。不要把
秘密值直接进入shell-history-visible命令参数。专用的
带有file/stdin输入的秘密设置不属于第一次切割。过了一段时间
写错误,重试前检查远程状态。项目创建和远程执行
已经追踪到来源,但还没有针对一次性项目进行实际测试。
上面的工作流模式和执行流限制仍然是服务器的后续问题。
开发
源自monorepo词根:
pnpm install --frozen-lockfile --filter @ciridae/cli...
pnpm --filter @ciridae/cli typecheck
pnpm --filter @ciridae/cli lint
pnpm --filter @ciridae/cli format:check
pnpm --filter @ciridae/cli test
pnpm --filter @ciridae/cli build
pnpm --filter @ciridae/cli dev --help
pnpm --dir apps/ciridae-cli pack --out /tmp/ciridae-cli.tgz
npm install --global /tmp/ciridae-cli.tgz
专用的CLI工作流运行这些检查,并将npm tarball安装到
检查入口点、绑定回调资产和座席技能的新前缀。
命令行使用
Commander和官方的MCP TypeScript SDK,带root pnpm工作区锁。
它没有私有的后端包依赖,也不会更改公共的后端包
Python ciridae 分布。
npm版本
一揽子计划是公开的 @ciridae/cli; package.json 拥有自己的版本。检查
在发布前打包文件作为公共源。发布是手动的,不是触发的
通过合并:在PR中碰撞版本,合并它,然后分发 发布Ciridae CLI
在 main. 工作流验证、打包、冒烟测试和发布精确的
Tarball和 latest 通过标签 npm-publish GitHub的环境。
最初的 0.1.0 Tarball是从提交手动发布的 c63086953.
它的可信发布者被配置为存储库 ciridae-ai/ciridae、工作流
ciridae-cli-publish.yml、环境 npm-publish, npm publish 许可
只有。验证它 npm trust list @ciridae/cli. 第一次自动发布
仍然需要在工作流程启动后进行练习 main;请勿转载
不可变 0.1.0 的版本。这个存储库中不存储npm令牌。
看到 NPM可信发布.
这个存储库是私有的,所以不需要npm来源。
对于原型用户,使用 uv tool uninstall ciridae-cli
在NPM安装之前,然后运行 command -v ciridae 要确认哪个可执行文件
您的shell使用。保留现有的OAuth注册、令牌和工作上下文
它们的磁盘格式;没有提供第二个实现或迁移。低
破坏风险:本地运行时/install命令从Python更改为Node,
但是资源命令名和标志被保留。