Usage¶
Thea is a provider-neutral Harness for embodied agents. It owns the Agentic Loop, context lifetimes, Tool execution, post-execution Evaluation, and the boundaries through which a deployment supplies physical-world evidence.
The public release can be used in five ways:
Deployment |
What you provide |
What Thea provides |
|---|---|---|
Local terminal |
A configured model credential |
The complete Agentic Loop and terminal-backed user interaction without Lark or a robot |
Feishu/Lark channel |
App credentials, authorized users, and a configured model |
Per-user Harness sessions, cards, images, clarification, and notifications |
Harness library |
A model and model-visible Tools |
Agentic Loop, Context, Tool Protocol, Memory, Skills, hooks, and logs |
Simulator |
A LIBERO or RoboTwin 2.0 environment and primitive policy |
Observation projection, policy-backed Tool integration, and evaluator wiring |
Physical robot |
Robot SDK adapters, sensing, policies, Scene Graph, and post-execution evidence |
The same runtime and public interfaces used in simulation |
The root launcher maps these paths to four modes:
Command mode |
Process started |
Additional requirement |
|---|---|---|
|
Interactive terminal, or one instruction with |
Model configuration and credential |
|
Feishu/Lark channel with the default Harness |
Model and Lark credentials |
|
Feishu/Lark channel with a simulator Harness factory |
Lark credentials, importable factory, and |
|
Feishu/Lark channel with a robot Harness factory |
Lark credentials and importable factory |
simulation and robot are channel-hosted deployment modes, not standalone
simulator or hardware executables. Applications without Lark compose Harness
in Python and call run_stream() directly. Run ./run.sh --help for the
complete launcher options.
Choose a starting point¶
Run the Harness in a terminal¶
Install the repository, configure a real model in .env and config.yaml,
then start the interactive terminal:
./install.sh
./run.sh --mode cli --check
./run.sh --mode cli
This path requires no Lark credential and no simulator or physical robot. It also supports a single instruction:
./run.sh --mode cli --instruction \
"Notify the user that the Harness is ready, then explain what ran."
Run the complete channel¶
Install all public packages, configure a model and Feishu/Lark credentials, then start the channel:
./install.sh
./run.sh --mode channel --check
./run.sh --mode channel
The channel creates one Harness session per authorized user and registers
query_user and notify_user as model-visible Tools.
Connect a simulator¶
Install the selected benchmark environment separately, build a factory that
returns one Harness, configure the Lark credentials described above, and run
the preflight before starting the channel:
my_runtime.sim:create_harness is an example import path. Implement it using
the simulation guide before running this command:
./run.sh --mode simulation --check \
--harness-factory my_runtime.sim:create_harness
./run.sh --mode simulation \
--harness-factory my_runtime.sim:create_harness
The factory connects the benchmark episode, primitive policy Tools, Observation provider, and evaluator. See Simulation for the LIBERO and RoboTwin 2.0 adapter boundaries.
Connect a physical robot¶
Keep hardware SDKs and deployment-specific code outside the Harness package. Expose them through the public interfaces, configure the Lark credentials, and validate the factory before starting the channel:
my_runtime.robot:create_harness is an example import path and must resolve to
the factory in your deployment package:
./run.sh --mode robot --check \
--harness-factory my_runtime.robot:create_harness
./run.sh --mode robot \
--harness-factory my_runtime.robot:create_harness
The factory owns the robot connection and must return one configured
Harness. Start from Port to Your Robot,
then connect Scene Graph and
Evaluation when physical execution is ready.
Extend an Existing Harness¶
Use the smallest public boundary that matches the new capability:
Goal |
First step |
Detailed guide |
|---|---|---|
Change the model |
Configure |
|
Add a Tool |
Register an annotated callable, |
|
Add current evidence |
Implement |
|
Add reusable task guidance |
Create a directory-backed |
|
Add persistent world state |
Implement |
|
Add physical outcome checks |
Connect post-execution evidence and |
How one task runs¶
One user instruction starts one Task. Each Turn follows the same reactive cycle:
refresh evidence
-> model decision
-> execute at most one selected Tool
-> run configured hooks
-> record the result
-> refresh again
The model may return text together with one Tool Call. A Task ends when the model returns no Tool Call or when the Harness terminates the run. The final text becomes the task report.