Skip to main content
The harness command group creates an agent without writing any application code: initialize a harness.yaml, set its fields, then deploy it directly as a runtime.

harness init

Create a harness directory (harness.yaml + .env.example) for a Harness.
harness.yaml is the single source of configuration for a code-free agent; harness deploy expands it into the runtime’s environment variables. In the generated file, common fields are active and each component’s optional params are shown commented-out, grouped by backend — set a component’s type, then uncomment the params under that backend. The complete file looks like this:
harness.yaml
Field reference:
  • harness_name: the harness and runtime name, also used as the knowledge-base and long-term-memory index name (env HARNESS_NAME, flag --name).
  • cloud: deployment cloud provider and region written by harness init; provider is volcengine or byteplus.
  • model.name: the reasoning model; on deploy its Ark auth comes from the runtime’s IAM role, so you don’t set it here (env MODEL_NAME, flag --model-name).
  • tools: built-in tool names (env TOOLS, flag --tools).
  • skills: skill-hub names (env SKILLS, flag --skills).
  • system_prompt: the agent instruction; empty uses the server default (env SYSTEM_PROMPT, flag --system-prompt).
  • description: agent description used for discovery and generated AgentCards (env DESCRIPTION, flag --description).
  • runtime: the agent runtime backend, adk (default) or codex (env RUNTIME, flag --runtime).
  • max_llm_calls: default maximum LLM calls per run; agentkit harness invoke --max-llm-calls can override it for one request.
  • structured_tool_calls / include_tools_every_turn: control the tool-call format and whether tool definitions are sent on every model turn.
  • registry: optional A2A registry. space_id selects a space, top_k limits AgentCard retrieval, and endpoint plus region locate the service.
  • knowledgebase: a knowledge base. An empty type disables it; supported backends are viking, opensearch, redis — set type, then uncomment that backend’s connection params.
  • long_term_memory: long-term memory. An empty type disables it; supported backends are viking, opensearch, redis, mem0.
  • short_term_memory: the session store. type is local (default), sqlite, mysql, or postgresql.
  • auth (optional): omit it to use the default API-key auth (key_auth); set discovery_url and allowed_ids to switch to OAuth2/JWT (custom_jwt), where the gateway only accepts tokens issued by that user pool whose audience is on the allow-list.
Expansion: harness deploy flattens top-level fields and model into environment variables (e.g. model.name → MODEL_NAME) and maps component params to the DATABASE_<BACKEND>_* variables that backend reads; empty values are skipped and the server falls back to its defaults. The .env.example written by harness init contains only optional Volcengine AK/SK placeholders — all agent configuration lives in harness.yaml.

harness set

Set fields in harness.yaml (partial update; only the flags you pass are changed). Run with no flags to list the current fields. Fields fall into groups: core (model / tools / skills / prompt / runtime), knowledgebase, long-term-memory, short-term-memory, and auth. When configuring a component, set its --<comp>-type first, then its connection parameters.
Only the flags you pass are changed. To configure a component, set its --<comp>-type first, then supply its connection parameters.

harness dev

Start the Harness service locally from harness.yaml for development and debugging. By default, it listens on 127.0.0.1:8000. Set a different host explicitly if other devices need to access it.

harness deploy

Build the harness image and create or update the runtime from harness.yaml.

harness invoke

Invoke a deployed Harness and optionally override its model, system prompt, tools, skills, runtime backend, or A2A registry for this request. Overrides affect only the current request and do not modify harness.yaml.
For a Harness protected by custom_jwt, pass a bearer token explicitly with --token, or first run agentkit login --identity-only <sso-address> to save the OIDC session. The CLI forwards the cached id_token only when the Runtime endpoint uses HTTPS, the Runtime discovery URL matches the active login issuer, and the active OAuth client ID is in the allowed list.

harness sidecar catalog

Print the Harness Sidecar Product Component Catalog. This command only prints JSON and does not create or modify cloud resources. Use it from Studio, CI, or scripts to show selectable components, availability, and the default selection for a profile.
The output includes schema_version, catalog_version, profiles, selected_profile, components, total_component_count, and selectable_component_count. components[].selected_by_profile indicates whether the current profile selects the component by default, and components[].availability.available indicates whether the current Runtime contract can use it.

harness sidecar resolve

Resolve a profile and component switches into a deterministic Harness Sidecar plan. This command only prints the JSON plan. It exits non-zero when the plan is invalid, which makes it suitable for validating harness_sidecar.component_overrides before release.
In the output, effective_components is the final enabled component list, activation_targets describes whether runtime components, the model proxy, and the MCP gateway are enabled, and plan_hash is used after release to verify the plan loaded by the runtime. mcp_resilience automatically includes SQL read-only protection; sql_readonly cannot be selected directly with --component.
Last modified on September 19, 2026