A session is a lightweight orchestration handle. It carries metadata, the list of participants, the current agent, and any pending approval — but it holds no messages. Conversation history lives in the harness. That single fact explains most of how sessions behave.Documentation Index
Fetch the complete documentation index at: https://docs.karta.sh/llms.txt
Use this file to discover all available pages before exploring further.
A session is a handle, not a store
| Field | Meaning |
|---|---|
id | The session identifier (maps to a harness thread under the hood). |
metadata | Arbitrary key/values you set — route and look sessions up by these. |
participants | The humans and AIs in the conversation. |
current_agent | Which agent is handling turns right now. |
status | active, etc. |
pending_input | A request_id awaiting an approval decision, if any. |
permission_mode | How approval prompts are handled for this session. |
Participants and attribution
A session isn’t limited to one human and one bot. Multiple participants — humans and AIs — can share a session, and every message is attributed to its sender.Agent handoff
A session has a current agent, and you can hand off mid-conversation to a specialist. The handoff fires anagent.handoff
lifecycle hook.
Pending input & approvals
When the harness needs permission — to run a tool, write a file — it emits aninput_required event and the
session records pending_input. You resolve it with a decision:
approve_once, approve_session, or deny. How aggressively Karta prompts is
governed by permission_mode and the
input_required_policy config.
Over HTTP
The same model is exposed on the wire: create a session, send (or stream) messages, resolve inputs. See the Sessions and Messages API reference.Agents
Discovery, routing, and handoff.
Gateway
Fan-out delivery to participants, in-process and across instances.