Documentation / Guides
Upgrading
What changed between versions of Seshat that can break a program or a deployment, from the most recent to the oldest, with what to do about each.
This page lists the changes that can break something for you, from version 1.7 back to 1.3, with what to do. It is not the full history: every change is in CHANGELOG.md of the repository. If you are older than 1.3, upgrade to 1.3 first and read the changelog of the versions you skip.
1.7 and 1.6: plan approval and task reminders
Behaviour only. No code changes are needed, but a host that shows plans in its own interface should read the first point.
- A plan waits for your answer. While a plan submitted with
submit_planis waiting for you,exit_plan_modeis refused. A Go host that shows plans in its own interface must now record the approval, withsession.ApprovePlan(), or withsdk.ApprovePlan(sessionID)for a session reloaded on every turn (1.7). Without it,exit_plan_modestays refused while a submitted plan is waiting. See Runtime modes. - A turn does not end while tasks are open. When the model stops while its task list still has unfinished items, the loop reminds it, up to 3 times by default.
ClientConfig.TaskNudgeLimitchanges the number, and a negative value turns the reminder off (1.6, field added in 1.7). - New shortcut.
shift+tabenters and leaves plan mode in the terminal interface (1.6). - Keys are hidden. The provider key field of the configuration screens shows bullets, never the key (1.6).
1.5: the module is now seshat-runtime
Go hosts only. The repository and the Go module changed name. The old address redirects, but the import paths do not.
| Before | After |
|---|---|
github.com/KPO-Tech/seshat | github.com/KPO-Tech/seshat-runtime |
To migrate, run go get github.com/KPO-Tech/seshat-runtime@v1.5.0, then replace the old prefix in the imports of your .go files and in your go.mod. A sed over those files is enough. Packages, functions and behaviour are the same, and the binaries are still called seshat and seshat-grpc. Releases up to 1.4.1 stay published under the old path.
1.4: removed API, and tools that really are restricted
This version fixed several behaviours that did not do what they claimed. Some programs relied on the old behaviour.
Go hosts
RegisterHookreturns two values. It now returns(string, error), and the error says that the event you asked for is never emitted by the runtime. Updateid := client.RegisterHook(...)toid, err := client.RegisterHook(...). See Streaming, events and hooks.pair_programmingis gone. The execution mode andsdk.ExecutionModePairProgrammingare removed. Onlyexecuteandplanremain.- MCP OAuth is gone.
ConnectWithOAuth,ShouldUseOAuth,GetOAuthConfig,MCPOAuthConfigand the variablesSESHAT_MCP_CLIENT_ID,SESHAT_MCP_CLIENT_SECRET,SESHAT_MCP_AUTH_URL,SESHAT_MCP_TOKEN_URLandSESHAT_MCP_SCOPESwere removed: they never performed an OAuth sign-in. If a server accepts a token, pass it inHeaders.RegisterPluginMcpServerandGetPluginMcpServerswere removed too. - No default fallback to another vendor. The default routing of a model no longer falls back to another provider, for example from Anthropic to OpenAI. Only models of the same provider are tried. If you relied on the old fallback, configure the fallback providers yourself. See Providers and authentication.
Everyone
- Plan mode no longer allows writes without a question. In plan mode,
write_fileandedit_fileare refused. See Runtime modes. - Sub-agent tool lists are enforced. The tool list of an agent type, and the
toolsparameter of a call, were accepted but had no effect on any path. They restrict the sub-agent now, so an agent that quietly used a tool that was not on its list loses it. See Agents and delegation. - A
neversession keeps its sub-agents innever. Before, they always ran inbypass. automode without a classifier asks, or refuses. It asks in an interactive session and refuses in a session without an interface. It no longer allows everything.- Workflow steps use
agentandmax_turns. The default executor now applies them. See Workflows. - A skill’s
shell.beforecommands run. They are added to the skill’s text and the agent runs them, after asking permission.
1.3: closed by default
Server deployments. The gRPC server (seshat-grpc) used to listen on every interface with no authentication and no TLS, and ConnectMCP could start any program on the host. It is now closed by default.
- It listens on
127.0.0.1. To reach it from outside its host or container, setSESHAT_GRPC_HOST=0.0.0.0andSESHAT_GRPC_AUTH_TOKEN. On any other address it refuses to start without a token, unlessSESHAT_GRPC_ALLOW_INSECURE_REMOTE=true. - With a token, every call except
HealthCheckneedsauthorization: Bearer <token>. SESHAT_GRPC_TLS_CERTandSESHAT_GRPC_TLS_KEYturn TLS on.ConnectMCPrefuses a stdio server unlessSESHAT_GRPC_ALLOW_STDIO_MCP=true.- The contract no longer declares
FileServiceandSystemService: they were never implemented, so a client generated from the old file got stubs that always failed. Generate your client again.
Everyone.
- Project files are not trusted until you say so. The terminal interface ignores the sections of a project’s
seshat.jsonthat start programs or decide where keys go, until you runseshat trust. See Configuration file. - Commands do not inherit your secrets. The
bashtool no longer passes variables such as*_API_KEYor*_TOKENto the commands the model runs. A command that really needs one can get it throughSESHAT_BASH_ENV_ALLOW. See Security and trust. - A
.envfile cannot run a command. An entry with$(...)or a backquote is ignored, with a warning. - The engine does not write on the standard output. Diagnostics go through
log/slog. A host that read them from the output will find them in its logs.
Before you upgrade
- Read the sections above for the versions between yours and the target.
- Run your tests with the new version.
- For a Go host, compile your program against the new version: the compiler finds the changed
RegisterHookand the removed names at once. - For a server, start it in a test environment first: the 1.3 change makes a deployment that worked fail to start rather than run open.
Updated on 2026-10-13