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
harness_name: the harness and runtime name, also used as the knowledge-base and long-term-memory index name (envHARNESS_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 (envMODEL_NAME, flag--model-name).tools: built-in tool names (envTOOLS, flag--tools).skills: skill-hub names (envSKILLS, flag--skills).system_prompt: the agent instruction; empty uses the server default (envSYSTEM_PROMPT, flag--system-prompt).description: agent description used for discovery and generated AgentCards (envDESCRIPTION, flag--description).runtime: the agent runtime backend,adk(default) orcodex(envRUNTIME, flag--runtime).max_llm_calls: default maximum LLM calls per run;agentkit invoke --max-llm-callscan 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_idselects a space,top_klimits AgentCard retrieval, andendpointplusregionlocate the service.knowledgebase: a knowledge base. An emptytypedisables it; supported backends areviking,opensearch,redis— settype, then uncomment that backend’s connection params.long_term_memory: long-term memory. An emptytypedisables it; supported backends areviking,opensearch,redis,mem0.short_term_memory: the session store.typeislocal(default),sqlite,mysql, orpostgresql.auth(optional): omit it to use the default API-key auth (key_auth); setdiscovery_urlandallowed_idsto 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 inharness.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.
harness dev
Start the Harness service locally fromharness.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 fromharness.yaml.