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).
  • 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 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.
Last modified on September 19, 2026