资讯动态

如何在脚本和 CI 中无头运行 Jan Agent(jan cli agent run)?

发布时间:2026/9/11 4:58:20 来源:尧图企业网站定制
如何在脚本和 CI 中无头运行 Jan Agentjan cli agent run【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/janJan Agent 的jan命令不带子命令时会打开交互式控制台但在脚本或 CI 流水线里你需要的是不弹界面、跑完即退出的执行方式。这正是jan cli agent run的用途把一段任务文本作为位置参数传进去Agent 会一直运行到任务完成或会话 token 预算耗尽然后用退出码告诉你结果。适用前提是机器上已安装 Jan Agent CLI并且已配置好至少一个模型 provider——Jan Agent 不自带推理引擎模型始终运行在 provider 侧云端、Tokamak 或你自己的 OpenAI 兼容端点。准备条件在 CI 机器或跑脚本的终端上先装好 CLI。macOS / Linuxcurl -fsSL https://delta.jan.ai/jan-cli/install-jan-agent.sh | bashWindowsPowerShellirm https://delta.jan.ai/jan-cli/install-jan-agent.ps1 | iex安装脚本默认装到~/.local/bin可以用环境变量JAN_INSTALL_DIR覆盖安装目录例如JAN_INSTALL_DIR/usr/local/bin并确保该目录在PATH上。验证方式jan --version如果报jan: command not found说明安装目录不在PATH中把~/.local/bin加进 shell profile 即可。然后确认 provider 可用。Jan Agent 不带本地推理必须有一个远程 provider。四种配置来源按优先级从高到低是单次运行的--provider/--api-key或环境变量JAN_API_KEY/PROVIDER_API_KEY如ANTHROPIC_API_KEY→ 项目agent.toml中的[provider]→ Jan Desktop 的settings.json仅继承不覆盖→~/.jan/config.toml。CI 场景通常走环境变量或jan config setjan config set --provider anthropic --api-key sk-ant-...确认配置是否就绪API key 会被打码jan config list注意jan config list可能显示为空而jan cli models list列出了模型——这不是 bug后者还会包含从 Jan Desktop 继承的 provider。基本运行jan cli agent runrun子命令以位置参数接收任务文本跑完即退出。文档给出的示例形态jan cli agent run fix the failing test in tests/auth jan cli agent run --project ~/code/app update the changelog jan cli agent run --model gpt-4o add unit tests for the parser jan cli agent run --safe run the migration # approve each step与无头运行相关的关键 flagFlag说明--project PATH项目根目录默认.--model ID模型 id覆盖[agent].model--safe写文件、shell 命令和 MCP 工具调用前要求批准--sandboxshell 命令在 OS 隔离下运行默认关闭--no-sandbox覆盖持久化的sandbox设置本次不隔离运行--resume[ID]恢复最近一次会话或指定 id 的会话-c,--continue恢复最近一次会话--provider,--api-key本次运行的凭据覆盖--output-format FORMATtext默认流式输出回答json打印一个结果对象两个必须知道的行为边界没有轮数上限。Agent 会跑任务需要的所有轮次唯一的上限是agent.toml里[budget].max_tokens未设置时默认128000设为0表示不限或者你主动取消。--resume必须用等号形式。因为run的位置参数会吃掉空格分隔的 id所以要写--resume3f7a91c2而不是--resume 3f7a91c2。用 JSON 输出驱动脚本把--output-format json加上后流式回答被抑制运行结束时在 stdout 打印一个对象进度和诊断信息走 stderr所以 stdout 可以直接管道给jqjan cli agent run --output-format json review auth.rs | jq -r .result成功时文档给出的示例输出示例结果字段值会随任务变化{ type: result, is_error: false, result: APPROVED: the retry loop is correct..., stop_reason: end_turn, session_id: 3f7a91c2, model: tokamak-1-preview, num_turns: 3, duration_ms: 48213, usage: { prompt_tokens: 9011, completion_tokens: 655, total_tokens: 9666 } }失败时对象会多出error字段stop_reason变为errorresult里是中断前模型已经说出的部分回答session_id为null{ type: result, is_error: true, result: I started reviewing auth.rs and..., stop_reason: error, error: { code: upstream_error, message: [400] tool_choice does not match any of the specified tools }, session_id: null, model: tokamak-1-preview, num_turns: 1, duration_ms: 1204, usage: { prompt_tokens: 8123, completion_tokens: 0, total_tokens: 8123 } }字段含义摘自 CLI Reference 的字段表字段说明result最终回答或失败那一轮的部分回答推理内容会被剥离stop_reason上游 finish reason或errorerror.codecontext_overflow、upstream_error、setup_error或原始错误码session_id供--resume用的短会话 id运行在产出 id 前就失败时为nullnum_turns本 Agent 花费的轮数子 Agent 轮次不计入usage整个运行所有请求的累计值含子 Agent退出码不随输出格式变化成功0失败1。CI 判断可以直接用退出码需要结果文本时再解析 JSON。CI 中的完整示例文档给出的 CI 模式凭据从环境来、全程无交互export ANTHROPIC_API_KEY$SECRET_KEY jan cli agent run \ --project . \ --provider anthropic \ update the changelog for the current release这里没有加任何审批 flag 是刻意的工具调用默认自动批准这正好是 CI runner 需要的状态因为没有人坐在键盘前回答提示。千万不要在这种无 TTY 的环境传--safe——stdin 上没有 TTY 时无法回答批准提示每个提示都会被拒绝运行会在第一次写操作处卡死。需要提醒的安全边界默认自动批准同时意味着 shell 命令不做沙箱隔离批准过的命令会以你runner 用户的权限运行。如果你希望 CI 里命令被限制在项目目录内加--sandboxLinux 用 bubblewrap、macOS 用 Seatbelt、Windows 用 AppContainer隔离生效时命令只能写项目目录及其 scratch 目录网络访问也受[tools].allow_network控制。注意一个组合行为enabled: true但机器上没有可用 sandbox backendjan cli agent status会报告backend时bash工具会被整个扣住命令根本不会执行。验证运行环境与结果无头运行前后都可以用非交互命令核对状态# 查看解析后的项目配置与可用 provider也是首次 scaffold .jan/agent/ 的方式 jan cli agent status jan cli agent status --project ~/code/appstatus会打印解析后的项目配置其中包括 sandbox 实际会怎样运行文档示例sandbox: { enabled: false, backend: bubblewrap }运行结束后会话按项目保存在.jan/agent/threads下可以从 shell 直接检查输出是 JSON可接jqjan cli threads list jan cli threads messages THREAD_ID如果要在后续脚本步骤里续接上一次无头运行用等号形式的 resumejan cli agent run --resume3f7a91c2 carry on注意会话是按项目存储的从别的目录 resume 找不到会话属于预期行为不是 bug。相关配置与限制预算[budget].max_tokens是单次运行唯一的长度上限统计的是所有轮次新增的 token 花费重放的上下文不重复计费。在 CI 里它是防止失控运行的主要手段设为0可禁用上限。工具策略.jan/agent/agent.toml的[tools]段决定默认档位read-only/deny/allow、白名单和黑名单。deny永远优先于allow。无论哪种模式.jan/agent/内部文件、[tools] deny中的条目都是硬性禁止任何模式都解不开。项目级 provider某个项目必须用特定 provider 时写在agent.toml的[provider]段。文档建议不要把它提交到仓库时带着api_keykey 应留在~/.jan/config.toml或环境变量里。项目目录约定建议把agent.toml、AGENT.md、skills/、subagents/提交进版本库让团队共享同一套 Agent 配置threads/是个人会话记录应加入.gitignore。无 TTY 的硬限制--safe在无 TTY 环境下不可用第一次写入即卡死这也是文档在 run modes 中单独警告的点。更多 flag 与子命令jan cli agent step单轮调试、jan plugin、jan cli mcp等见 CLI Reference权限模型细节见 Tool Permissions预算与agent.toml全字段见 Project Configprovider 优先级见 Providers。【免费下载链接】janJan is an open source alternative to ChatGPT that runs 100% offline on your computer.项目地址: https://gitcode.com/GitHub_Trending/ja/jan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价