Documentation / Concepts
Runtime modes
Three separate ideas that are easy to mix up: how you reach Seshat, how it executes, and who approves its actions.
When people talk about “modes” they usually mean one of three different things. Seshat keeps them separate.
| Question | Setting | Values |
|---|---|---|
| How do I reach the runtime? | Entry surface | Terminal (CLI), Go SDK, gRPC server |
| How does it behave? | Execution mode | execute, plan |
| Who approves what it does? | Permission mode | onRequest, acceptEdits, auto, never, granular, bypass |
You can combine them freely: for example, plan mode with onRequest approvals through the SDK.
Entry surfaces
All surfaces drive the same runtime, so the same sessions, tools and providers are behind each of them.
- Terminal:
seshat chatandseshat run, for your own work. - Go SDK:
sdk.NewClient, to embed an agent in an application. - gRPC server:
cmd/grpc, to run the agent as a service for other programs. The gRPC surface is experimental and partial: one service,SeshatService, withQuery,QueryStream, skills, MCP, models and health methods. See the gRPC API.
Execution modes
| Mode | What it does today |
|---|---|
execute | The default. Tools run normally |
plan | The agent explores, asks you questions and writes a plan, then asks you to approve it before it starts changing things |
Plan mode
The agent enters plan mode by calling the enter_plan_mode tool, or a Go host can do it with session.ForcePlanMode(). It then receives instructions: explore with read-only tools, ask about unclear requirements, design the steps, and call exit_plan_mode with the full plan. You are asked to approve the plan. On approval the plan is saved to a file, the earlier permission mode comes back, and the agent starts implementing, usually with the task tools.
In the terminal interface, shift+tab enters and leaves plan mode, so you can design a plan with the agent yourself. When the host supports it, the plan is submitted for your review with submit_plan. While it waits for your answer, exit_plan_mode is refused: the agent has to wait for your decision, or revise the plan and submit it again if you ask for changes. A Go host that shows plans in its own interface records the approval with session.ApprovePlan(), or with sdk.ApprovePlan(sessionID) for a session that is reloaded on every turn.
Permission modes
These decide who approves the agent’s actions, not what it does. The full table is in Using the CLI.
Updated on 2026-10-13