harness 命令组用于以无代码方式创建智能体:先初始化一个 harness.yaml,再逐项设置字段,最后直接部署为运行时,无需编写任何应用代码。
harness init
创建一个 harness 目录,包含harness.yaml 与 .env.example,用于Harness。
harness.yaml 是无代码智能体的唯一配置来源,harness deploy 会将其展开为运行时的环境变量。生成的文件里,常用字段处于启用状态,各组件的可选参数以注释形式按后端分组给出——设好组件的 type 后,取消注释该后端下的参数即可。完整内容如下:
harness.yaml
harness_name:harness 与运行时名称,同时用作知识库、长期记忆的索引名(envHARNESS_NAME,flag--name)。cloud:部署使用的云厂商和区域,由harness init写入;云厂商为volcengine或byteplus。cloud.network(可选):运行时网络配置。enable_public_network控制公网入口,enable_private_network启用私有 VPC,vpc_id、subnet_ids与security_group_ids指定私有网络资源,enable_shared_internet_access控制私有网络共享公网出口。启用私有网络时必须提供 VPC 与子网。model.name:推理模型名称(envMODEL_NAME,flag--model-name)。model.credential_mode(可选):设为obo_broker时启用共享 OAuth Harness 的托管模型出口。该模式要求同时配置auth,并提供model.provider、model.api_base、model.target_alias、model.target_audience、model.workload_discovery_url与model.workload_issuer;不要在该模式下写入模型 API Key。capacity(可选):运行时资源、并发和模型请求准入配置。可设置cpu_milli、memory_mb、min_instance、max_instance、max_concurrency、model_max_inflight、model_max_inflight_per_user、model_queue_timeout_seconds、model_request_timeout_seconds、model_max_output_tokens、session_db_pool_size、session_db_max_overflow、session_db_pool_timeout_seconds与session_db_pool_recycle_seconds。tools:内置工具名列表(envTOOLS,flag--tools)。skills:Skill Hub slug、空间或space:skill引用列表(envSKILLS,flag--skills)。system_prompt:智能体指令,留空则使用服务端默认(envSYSTEM_PROMPT,flag--system-prompt)。description:用于发现和生成 AgentCard 的智能体描述(envDESCRIPTION,flag--description)。runtime:智能体运行时后端,adk(默认)或codex(envRUNTIME,flag--runtime)。max_llm_calls:每次运行允许的默认最大 LLM 调用次数;agentkit harness invoke --max-llm-calls可为单次请求覆盖。structured_tool_calls/include_tools_every_turn:控制工具调用格式,以及是否在每轮模型调用中重复发送工具定义。sidecar(可选):托管 Harness Sidecar 配置。profile选择组件 profile,component_overrides控制context_engine、compressor、verifier、long_run_control与mcp_resilience等组件。registry:可选 A2A registry。space_id选择空间,top_k控制最多检索的 AgentCard 数量,endpoint与region指定服务位置。knowledgebase:知识库。type留空即禁用,支持viking、opensearch、redis;设好type后取消注释该后端下对应的连接参数。long_term_memory:长期记忆。type留空即禁用,支持viking、opensearch、redis、mem0。short_term_memory:短期会话存储。type为local(默认)、sqlite、mysql或postgresql。auth(可选):省略则使用默认的 API Key 鉴权key_auth;填入discovery_url与allowed_ids则改用 OAuth2/JWTcustom_jwt,网关仅接受该用户池签发、受众在白名单内的 token。
harness.yaml,当前不由 harness set 生成。
harness deploy 与 harness dev 会读取项目 .env 并解析 harness.yaml 中的 ${VAR},已有 shell 环境变量优先。数据库密码等敏感值应使用变量引用,并将 .env 排除出版本控制。.env.example 只包含可选的云凭据占位符;模型、组件、网络和容量在 harness.yaml 中配置harness set
设置harness.yaml 中的字段(局部更新,仅修改传入的字段)。不带任何标志运行时会列出当前字段。字段分为若干组:核心(模型 / 工具 / 技能 / 提示词 / 运行时)、knowledgebase、long-term-memory、short-term-memory 以及鉴权。设置某个组件时,请先设置其 --<组件>-type,再设置连接参数。
harness dev
根据当前目录的harness.yaml 在本地启动 Harness 服务,用于开发和调试。默认监听本机的 127.0.0.1:8000;如需从其它设备访问,可显式修改监听地址。
先准备 Python 3 与 Harness 服务依赖。命令启动时会输出依赖清单路径;缺少模块时,使用同一个
--python 解释器安装该清单后重试。此命令不会自动创建 Python 环境或安装依赖;修改 harness.yaml 后需重新启动,--reload 只监视服务代码
本地监听不代表离线运行:调用模型、MCP、知识库或远程数据库仍需要相应凭据与网络,并可能产生费用
harness deploy
构建 harness 镜像,并根据harness.yaml 创建或更新运行时。
auth 后,部署会创建 custom_jwt Runtime。部署完成后,将返回的 Runtime ID 与 HTTPS endpoint 发布到租户登录发现文档的 shared_harnesses 中,用户即可通过 agentkit chat <alias> 使用共享聊天。
harness invoke
调用已部署的 Harness,并可为本次请求临时覆盖模型、系统提示词、工具、技能、运行时后端或 A2A registry。覆盖项只影响当前请求,不会修改harness.yaml。
custom_jwt 鉴权的 Harness,可以通过 --token 显式传入 Bearer token,也可以先运行 agentkit login --identity-only <sso-address> 保存 OIDC 会话。CLI 只会在 Runtime endpoint 为 HTTPS、Runtime 的 discovery URL 与当前登录 issuer 匹配且当前 OAuth client ID 位于允许列表时自动转发缓存的 id_token。
harness sidecar catalog
输出 Harness Sidecar Product Component Catalog。该命令只打印 JSON,不创建或修改云资源;可用于在 Studio、CI 或脚本中展示当前 profile 下的可选组件、可用状态和默认选择。schema_version、catalog_version、profiles、selected_profile、components、total_component_count 与 selectable_component_count。其中 components[].selected_by_profile 表示该组件是否由当前 profile 默认选中,components[].availability.available 表示当前 Runtime 合约是否可用。
harness sidecar resolve
将 profile 与组件开关解析为确定性的 Harness Sidecar plan。该命令只输出 JSON 计划;当计划无效时会返回非零退出码,便于发布前校验harness_sidecar.component_overrides 是否可用。
effective_components 是最终启用组件;activation_targets 描述运行时组件、模型代理和 MCP 网关是否会被启用;warnings 列出有效但需要关注的选择结果;plan_hash 用于发布后核验运行时实际加载的计划。mcp_resilience 会自动带上 SQL 只读保护,sql_readonly 不能作为 --component 直接选择。使用 ops profile 但关闭 mcp_resilience 时,计划会提示 SQL 只读保护已关闭。
远程 MCP 服务
在harness.yaml 中配置 mcp_servers,即可与内置工具同时使用远程 MCP 服务。harness init 和 harness set 保存配置,harness dev、harness deploy 加载配置,harness invoke 可仅覆盖本次调用
harness.yaml
.env 中设置 MCP_API_KEY,并将 .env 排除在版本控制之外。init 和 set 保留占位符;部署、运行或调用时解析实际值。命令行 MCP 列表整体替换调用配置中的列表,[] 不能与其他 --mcp-server 同时使用。请求未指定 MCP 时沿用部署配置;显式空列表只清除远程 MCP,不清除内置工具
共享 OAuth Harness 只接受 mcp_servers 作为 Harness 覆盖项;其他覆盖字段会被拒绝
调用配置文件
使用--config 保存可复用的调用设置。命令行参数优先于调用文件,文件中的字段再作为本次请求发送;未指定的智能体字段沿用目标运行时支持的默认行为。配置文件不会修改 harness.yaml 或重新部署运行时
invoke.yaml
harness 中的模型、工具、技能、系统提示词和运行后端也可写在顶层;同名顶层字段覆盖嵌套字段,model.name 可作为模型名称来源。除 MCP 凭据占位符外,不应假定任意调用字段会展开环境变量;凭据优先使用登录会话或命令支持的默认凭据来源
定时任务
启用cronjob 后,可通过 harness cronjob 创建周期或一次性调用,查看结果,并暂停、恢复或取消执行。完整配置、参数与限制见 Harness 定时任务
验证与会话存储
部署后运行agentkit runtime show my-harness 确认当前版本,再用 agentkit harness invoke my-harness "你好" 验证模型响应。Runtime 就绪不能保证模型凭据、MCP 或数据库均可用;调用失败时查看 agentkit runtime logs my-harness --limit 200
本地内存会话随进程结束而丢失,SQLite 会话依赖单个实例的文件。共享 OAuth Harness 扩容到多个实例前,应配置 MySQL 或 PostgreSQL 短期记忆和可达的私有网络。托管 Sidecar 的地区、容量和鉴权限制见 Harness Sidecar