Feishu/Lark¶
thea-lark connects Thea to Feishu or Lark and keeps one Harness session per
authorized user. It authenticates inbound events, authorizes senders, renders
progress and final cards, sends Observation images, and registers
query_user and notify_user.
Install¶
The root installer includes the channel:
./install.sh
For a manual installation:
python -m pip install './harness[anthropic]'
python -m pip install ./lark
Configure¶
LARK_APP_ID=cli_...
LARK_APP_SECRET=...
LARK_ALLOWED_OPEN_IDS=ou_trusted_user
ANTHROPIC_API_KEY=...
LARK_ALLOWED_OPEN_IDS is fail-closed. An unset or empty value authorizes no
parsed user message. Set LARK_BOT_OPEN_ID when the bot must identify group
mentions. Set LARK_REGION=global for Lark; the default cn uses Feishu
endpoints.
Start¶
The default WebSocket transport does not require a public callback URL:
./run.sh --mode channel --check
./run.sh --mode channel
A simulator or robot deployment supplies a channel composition factory:
./run.sh --mode robot \
--harness-factory my_runtime.robot:create_harness
The factory receives trusted configuration and a ChannelSessionContext, then
returns one Harness.
User interaction Tools¶
query_user pauses the active Agentic Loop until the same authorized user
answers, cancels, or the timeout expires:
{
"question": "Which bottle do you mean?",
"candidate_refs": ["bottle_12", "bottle_18"],
"observation_views": ["front", "wrist"]
}
Candidate refs are shown as structured choices. Named views resolve only from the latest Observation.
notify_user sends a one-way progress, warning, or completion update and
does not wait for a reply.
Operational boundary¶
Physical Tasks are serialized across user sessions by default. Increase
LARK_DEPLOYMENT_MAX_CONCURRENCY only when the deployment owns genuinely
independent physical resources.
The channel provides authentication, sender authorization, interaction delivery, and session routing. Low-level robot safety remains independent of the channel.