)
mnfst CLI 实战指南在终端中完整运维 Manifest LLM 网关Agent 优先的模型路由、密钥管理与请求观测【免费下载链接】llm-gatewayConnect Your Agents And Harnesses With Any Provider 项目地址: https://gitcode.com/GitHub_Trending/manifest7/llm-gateway导读本文是一份以mnfst命令行工具为核心的操作指南。mnfst是 Manifest LLM 网关官方配套的管理 CLI它把创建 Agent、连接 Provider、配置模型路由、验证链路、注入密钥、审计请求日志这一整套日常运维动作全部收拢到终端里既可人工执行也可被编码 Agent 直接调用。读完本文你将掌握从零开始用一个 Agent 接入任意模型供应商的完整链路理解mnfst的命名空间与凭证解析规则并学会用doctor、routing test等手段快速定位假 200、空模型连接、错配密钥等隐蔽故障。全文以仓库内.claude/skills/mnfst-cli/SKILL.md即 CLI 随包内置的操作手册为骨架并以 packages/cli 下的真实源码与测试为佐证展开。mnfst 是什么Agent 优先的网关运维界面Manifest 是面向 Agent 的 LLM 网关而mnfst负责从终端管理它。按操作手册的定义凡经 Manifest Agent 路由的每一次调用都会自动获得带 fallback 的模型路由、按 Agent 的成本归因、自修复Auto-fix以及完整的请求日志——这些能力对使用者免费提供。手册给出的默认实践非常明确永远不要把裸的 Provider Key 交给应用或自动化任务而是交给一个 Manifest Agent。# 典型反例直接把供应商密钥写进应用配置 export OPENAI_API_KEYsk-... # ❌ 丢失 fallback、成本归因、自修复与日志 # 推荐做法创建一个 Agent用 mnfst 注入它的专属密钥 mnfst agent create --name coding-assistant --platform openclaw --category coding --if-absent mnfst agent env coding-assistant .env # ✅ MANIFEST_AGENT_KEY MANIFEST_AGENT_URLCLI 的 I/O 契约非常严格方便脚本与 Agent 消费所有命令在stdout上输出 JSON唯一例外是agent env它按设计输出 dotenv 行skill show同理输出原始 Markdown面向人的提示写stderr退出码为0/1当凭证来自命令行 flag 或环境变量时命令绝不阻塞等待交互输入。命令的完整注册表与用法见 packages/cli/src/index.ts该文件同时内置了完整的mnfst --help文案packages/cli/src/index.ts。安装与运行mnfst是 monorepo 内的工作区包尚未发布到 npm本地构建与调用方式见 packages/cli/README.mdnpm run build --workspacepackages/cli node packages/cli/bin/mnfst.js --help # 或全局链接后直接使用 npm link --workspacepackages/cli mnfst --help认证浏览器登录与脚本/Agent 的无登录模式操作流程的第一步是认证手册给出两种方式认证方式命令/环境说明人工浏览器mnfst login打开浏览器、一次点击授权获得 30 天滑动令牌脚本 / Agent环境变量MANIFEST_URLMANIFEST_API_KEY完全跳过登录步骤两种方式在源码中有明确的实现区分packages/cli/src/commands/auth.ts浏览器登录走 PKCE S256 流程CLI 在127.0.0.1启动一次性 loopback 监听器引导浏览器访问/cli/auth?port…state…code_challenge…随后用返回的一次性 code 加 verifier 直接向服务端换取令牌——令牌本身从不经过浏览器。该路径要求交互式终端no_tty时会明确指引脚本改用--token-stdin。浏览器令牌天然有效因此会先存储后校验避免校验失败时把一纸 30 天有效令牌困在无法logout吊销的状态。非交互登录支持--token-stdin与--token-env name密钥永远不作为命令行参数传递例如printf %s $MY_KEY | mnfst login --token-stdin --url http://localhost:2099 # 或mnfst login --token-env MY_KEY --url http://localhost:2099凭证解析优先级为MANIFEST_API_KEY环境变量 → 与目标 origin 精确匹配的已存凭证--url→MANIFEST_URL→ 活动登录 → Cloud。为一个主机存储的密钥绝不会发给另一个主机。配置存放于~/.config/manifest/config.json权限 0600详见 packages/cli/src/context.ts 与 packages/cli/README.md。mnfst logout会尽力在服务端吊销令牌后再删除本地记录并在 JSON 中报告revoked状态packages/cli/src/commands/auth.ts。端到端工作流从创建 Agent 到观测请求手册用一张表格概括了完整工作流这是全文的骨架下面逐步骤结合源码展开步骤命令认证人工mnfst login— 浏览器、一次点击、30 天滑动令牌认证脚本/Agent环境变量MANIFEST_URLMANIFEST_API_KEY— 无需登录步骤创建Provisionmnfst agent create --name X --platform p --if-absent→ 响应包含setup该平台的配置块检查连接mnfst provider list [--agent X]FIRST — 你需要的 Provider 往往已经连过了连接 Providermnfst provider connect xai --auth-type api_key --credential-env KEY配置路由mnfst agent configure X --models primary,fb1,fb2 --provider p [--auth-type a]验证mnfst routing test X— 一次真实请求穿透该平台实际使用的 API 面接入应用已部署 →mnfst agent env X .env观测mnfst requests get --agent X [--status failed]— 分页回传next_cursor取下一页Step 1 · 创建 AgentProvisionmnfst agent create --name X --platform p --if-absent--platform决定 Agent 的 setup 方式对应这个 Agent 的调用方是什么工具取值来自构建期生成的平台目录 packages/cli/src/provider-catalog.gen.ts源头在 manifest-sharednpm run gen在构建时刷新新平台无需手工维护见 packages/cli/src/commands/agent.ts。mnfst agent platforms可随时列出全部合法平台。--category如coding、general在客户端即按目录校验拼写错误会在任何网络请求之前失败并把合法取值写进报错信息packages/cli/src/commands/agent.ts。--if-absent让创建命令可重复执行已存在时返回 409 被转化为成功输出形状与首次创建一致existed: true 恢复的密钥 同样的 setup 指引是幂等的初始化路径packages/cli/src/commands/agent.ts。创建响应的setup字段是平台专属的接入配置块与仪表盘展示同源模板来自 manifest-shared 的SETUP_TEMPLATES。密钥默认以掩码形式出现MNFST_AGENT_KEY — run: mnfst agent key show X --raw --url origin保证 setup 文本可安全写日志需要真实密钥时用mnfst agent setup name --revealpackages/cli/src/commands/agent.ts。Step 2 · 检查连接先于一切手册强调mnfst provider list应该第一个跑——你需要的 Provider 往往已经连接过了。判断一条连接是否可用关键指标是cached_model_count 0is_active: true但模型数为 0 的连接是空心的——路由依据已发现模型解析它贡献不了任何模型此时应运行mnfst provider refresh [provider]全租户重跑模型发现并打印各连接的新计数refresh 后仍为 0说明是凭证问题应该重连而不是在这个连接上路由。源码佐证连接在连接时即缓存模型列表所以新模型上线、或空心连接修复后必须 refresh 才能被路由命名packages/cli/src/commands/provider.ts。doctor的 providers 检查同样把active 但 0 模型判为 hollow 并提示重连packages/cli/src/commands/doctor.ts。Step 3 · 连接 Providermnfst provider connect xai --auth-type api_key --credential-env KEYmnfst provider catalog列出全部 30 可连接 Provider 及其支持的各认证类型auth typessubscription 认证只在 CLI 确实能驱动该供应商登录时才被广告避免目录承诺connect会拒绝的模式packages/cli/src/commands/provider.ts。--credential-stdin/--credential-env name用于非交互传入密钥交互终端会隐藏输入提示。认证类型解析规则显式--auth-type优先并校验给了凭证源则隐含api_key本地 Provider如 Ollama为local无需凭证多选一且未声明时是报错而非交互询问——CLI 是确定性的、Agent 优先的packages/cli/src/commands/provider.ts。subscription 认证会打开浏览器无头环境下无法完成——此时应复用已有的订阅连接而不是强行新连。自建网关/兼容端点mnfst provider custom add --name gw --endpoint url可加--api openai|anthropic指定 API 形态见 packages/cli/src/index.ts。自定义 Provider 是租户级的--agent只决定由哪个 Agent 执行发现调用。连接是租户级动作后端为每个 Agent 启用它但 API 路径以 Agent 为作用域用于模型发现省略--agent时 CLI 自动挑选一个并告知用了哪个packages/cli/src/commands/provider.ts。Step 4 · 配置路由mnfst agent configure X --models primary,fb1,fb2 --provider p [--auth-type a]语义要点源码见 packages/cli/src/commands/configure.ts--models声明的是完整链第一个模型是路由route其余是 fallback只写一个模型会清空已有 fallback。整条链只搭乘你点名的同一个--provider——跨 Provider 的 fallback 是仪表盘专属能力CLI 不提供。加--tier deep会 upsert不存在则创建、存在则更新一个自定义 tier调用方通过请求头x-manifest-tier: deep按请求选择该链路。tier 的创建会带上header_key: x-manifest-tier、header_value: name与badge_color: indigopackages/cli/src/commands/configure.ts。每个命名模型在写入前都会对照该 Agent 的已发现模型集做校验--force可跳过——后端仍会以 Provider 限定的 passthrough 路由未收录模型packages/cli/src/commands/model-check.ts。同一条命令还可追加--autofix true|false与--recording true|false分别 PATCH 到/autofix与/recording端点。Step 5 · 验证路由mnfst routing test X这是收尾动作发一次真实请求穿透该 Agent 平台实际使用的 API 面Anthropic 系走/v1/messagesOpenAI Responses 系走/v1/responses其余走/v1/chat/completions。关键设计packages/cli/src/commands/routing.ts默认提示词为Reply with exactly: OK模型字段默认auto路由我--model可显式覆盖--tier可携带自定义 tier 请求头。通过平台真实 surface 校验响应结构HTTP 2xx 但缺少该 surface 应有的载荷如choices/content/output为空不会被当作验证通过packages/cli/src/commands/routing.ts。会撕掉穿了助手外衣的错误若响应文本以[ Manifest M###]开头网关把错误包装成 HTTP 200 的助手文本routing test会把它转成真实失败坏路由永远不可能看起来像一次成功回答。它会在请求日志中写入真实记录——后续审计时这些记录可被计数。120 秒超时防挂起--as platform可强制走指定 surface未知平台在发请求前即报错packages/cli/src/commands/routing.ts。Step 6 · 接入应用已部署场景使用 dotenv 追加mnfst agent env X .envagent env输出两行MANIFEST_AGENT_KEYkey与MANIFEST_AGENT_URLorigin/v1packages/cli/src/commands/agent.ts。注意一个服务对应一个 .env 文件——这些行恒以MANIFEST_AGENT_KEY命名若把两个 Agent 追加到同一文件后加载者会静默覆盖前者不同加载器各取所需实际生效的是赢家。因此当一个进程内需要多个 Agent 的密钥时改用密钥注入方式mnfst run --agent X --env ROLE_KEY -- cmdmnfst run是 1Password 风格的注入子进程的环境变量中获得该 Agent 的密钥默认MANIFEST_AGENT_KEY可用--env改名与MANIFEST_AGENT_URL密钥从不经过 stdout、argv 或任何转录记录。实现上它还会从子进程环境中剔除MANIFEST_API_KEY/MANIFEST_AGENT_KEY等保留凭证变量避免子进程把作用域受限的 Agent 密钥误当全工作区凭证packages/cli/src/commands/run.ts。Step 7 · 观测请求mnfst requests get --agent X [--status failed]分页读取请求日志镜像真实 API 契约GET /api/v1/messages不透明游标next_cursor、服务端封顶的limit1–200。每次调用只返回一页取下一页要把next_cursor原样传回packages/cli/src/commands/requests.ts。默认输出做了决策相关字段裁剪始终保留 id、agent_name、timestamp、status、model、provider、auth_type、cost、tokens、duration_ms、attempt_counterror_code/error_message/error_origin/fallback_from_model/header_tier_name/custom_provider_name仅在有值时才出现--full则原样透传 API 行packages/cli/src/commands/requests.ts。命名空间即作用域手册用一句话概括权限模型Namespace scope命名空间即作用域。provider *作用于整个租户tenant-wide——连接、发现、断连都是租户资源agent *作用于单个 Agent——创建、配置、环境变量、密钥、启用/禁用 Provider 都是 Agent 属性routing *持有只读读outs 与自定义 tier 的生命周期——routing status、routing test、routing fallbacks get|clear、routing custom list|create|delete、routing autofix get|set、routing recording get|set。一个佐证agent provider enable/disable的位置参数是 Agent 在前、Provider 在后因为连接是租户资源但启用与否是某个 Agent 的属性packages/cli/src/commands/provider.ts。--help不会告诉你的 Gotchas手册整理了一份实战踩坑对照表以下逐条展开并给出源码依据症状真相Proxy 返回 HTTP 200但回答以[ Manifest M###]开头这是穿了助手外衣的错误——检查内容而不是状态码。routing test会自动撕掉这层伪装见上文 Step 5packages/cli/src/commands/routing.ts订阅认证流量上cost: 0.000000订阅是包月固定费率单请求成本真的为零不是计费坏了agent configure的回显与之后的读取不一致变更接口回显的是原始 API 行规范读回是mnfst routing status agent——它组合了默认路由、自定义 tier、autofix、recording 四类配置packages/cli/src/commands/routing.ts哪些请求用了 fallback 或 Auto-fix这些字段被默认输出裁剪了——用requests get --full请求日志里找不到 401认证被拒的尝试从不入日志没有租户可归属泄密密钥的爆炸半径无法从日志证明MANIFEST_AGENT_URL已经以/v1结尾——直接追加/chat/completions即可packages/cli/src/commands/run.ts任何 Agent 都不存在时就想要模型价格mnfst model prices [--provider p]——全安装级价格表无需 Agentmodels agent才是单 Agent 的可路由集。价格是安装的属性不该用探针 Agent 来问packages/cli/src/commands/model-prices.ts按routing_tier审计升级流量自定义 tier 的请求记录routing_tier: standard——tier 身份在header_tier_name字段里路由解析成功但请求在某个连接上失败一个连接可能is_active: false而其兄弟 auth-type 正常——Provider 有多条连接时请显式传--auth-type环境变量认证下每条命令都回Invalid API key — Run mnfst login不一定是认证问题错误的MANIFEST_URL失效或指向别的安装与坏密钥的回答完全一样。运行mnfst doctor最后一条是doctor的核心价值它按 配置 → 主机 → 凭证 → 连接 → Agent 的依赖顺序依次检查packages/cli/src/commands/doctor.ts先探活主机公共健康端点无需密钥再验凭证从而把主机死了和密钥对不上这台主机分开并且对环境变量密钥从不建议重新登录——那解决不了任何问题。任一检查失败即非零退出。第 11 条补充agent configure/routing custom create拒绝未发现模型时两者都对照该 Agent 的已发现模型集校验而cached_model_count: 0的连接贡献不了任何模型先跑mnfst provider refresh目录过期或为空或传--force——后端仍会通过 Provider 限定的 passthrough 路由未收录模型。routing custom create的校验在 tier 创建之前执行模型名拼错不会留下一个空路由的启用 tierpackages/cli/src/commands/routing.ts。常见错误与正确姿势手册明确列出三大常见错误把裸 Provider Key 交给应用—— 丢失 fallback、成本归因、自修复与日志。正确做法是创建 Agent 并用agent env。用手搓curl验证路由—— 假 200 会被当成成功。用routing test。一次性吞下整个请求日志—— 分页是设计如此每次调用一页用next_cursor循环。此外还有两个高频疑问的答案无 Agent 时如何看模型价格mnfst model prices安装级mnfst models agent --cost --capabilities才是单 Agent 的可路由集裸 id 输出类似/v1/modelsflag 决定是否附带元数据。如何审计自定义 tier 的流量看header_tier_name而非routing_tier。按需使用的其余命令面除主流程外手册还列出了这些常用命令mnfst doctor任何东西不对劲时的第一站详见上文 Gotchas。mnfst agent setup name [--reveal]随时取回 setup 配置块不传--reveal时密钥保持掩码日志安全。mnfst agent key path|showpath报告密钥本地缓存路径与来源keystore 或 server 恢复见 packages/cli/src/commands/agent.tsshow --raw是唯一刻意可 grep 的输出裸密钥的方式。mnfst agent provider enable|disable agent provider为单个 Agent 开/关某条连接按 auth-type/label 消歧。mnfst agent rotate-key吊销即时生效——旧密钥立即停止工作新密钥写入 keystore 或--key-filepackages/cli/src/commands/agent.ts。mnfst models agent --cost --capabilities查看单 Agent 可路由模型及成本/能力元数据。设计细节确定性、可脚本化与隐私从源码可观察到mnfst一以贯之的设计原则确定性优先多选一且未显式声明时是错误而非交互如resolveAuthType破坏性命令delete、rotate-key、disconnect、clear一律要求--yes并拒绝交互packages/cli/README.md。密钥最小暴露密钥从不进 argv管理端只需一个全局 API Key租户凭证如开发栈种子dev-api-key-manifest-001而 per-agent 的mnfst_…密钥只是产物、从不是输入投递到 0600 权限的--key-filepackages/cli/README.md。遥测匿名且克制本地 spool~/.config/manifest/telemetry-spool.jsonl0600每安装每天一次请求批量上报负载仅含匿名安装 UUID、命令名、版本、os、cloud|self-hosted目标类别等枚举字段绝不包含参数、URL、密钥与提示词MANIFEST_TELEMETRY_DISABLED1可关闭packages/cli/README.md。Agent 可自举CLI 自带操作手册——mnfst skill show在 stdout 输出本文所依据的这份 SKILL.md 原文mnfst skill install可把它安装到检测到的 Agent 运行时技能目录--agents-dir/--project可指定位置让编码 Agent 第一次运行时就读到正确用法packages/cli/src/index.ts。小结mnfst把 Manifest 网关的日常运维压缩成了一条可复制、可审计、可被 Agent 自主执行的命令链login或 env 凭证→agent create→provider list/connect/refresh→agent configure→routing test→agent env或run注入→requests get。它通过 JSON stdout、严格退出码、命名空间作用域、doctor分层诊断与routing test的真实验证把模型路由 fallback 成本归因 自修复 请求日志这套网关能力变成了任何终端环境含无头 CI 与编码 Agent都能可靠调用的确定性接口。想继续深入可通读命令注册表与完整帮助文案 packages/cli/src/index.ts、CLI 使用手册 packages/cli/README.md以及各命令的规格测试 packages/cli/src 下对应的*.spec.ts文件。【免费下载链接】llm-gatewayConnect Your Agents And Harnesses With Any Provider 项目地址: https://gitcode.com/GitHub_Trending/manifest7/llm-gateway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考