Skip to content

Commit ac04ca2

Browse files
authored
feat: Stabilize session/resume (#1051)
1 parent 28f83b2 commit ac04ca2

14 files changed

Lines changed: 311 additions & 76 deletions

Cargo.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ unstable = [
2424
"unstable_session_additional_directories",
2525
"unstable_session_fork",
2626
"unstable_session_model",
27-
"unstable_session_resume",
2827
"unstable_session_close",
2928
"unstable_session_usage",
3029
"unstable_message_id",
@@ -39,7 +38,6 @@ unstable_nes = []
3938
unstable_session_additional_directories = []
4039
unstable_session_fork = []
4140
unstable_session_model = []
42-
unstable_session_resume = []
4341
unstable_session_close = []
4442
unstable_session_usage = []
4543
unstable_message_id = []
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
title: Session Resume is stabilized
3+
sidebarTitle: Session Resume stabilized
4+
description: Announcement that the session/resume method is now part of the stable ACP protocol.
5+
---
6+
7+
**Published:** April 22, 2026
8+
9+
The Session Resume RFD has moved to Completed and the `session/resume` method is stabilized.
10+
11+
Unlike `session/load`, `session/resume` reconnects clients to an existing session without replaying the conversation history. This is a simpler primitive for agents that can restore context but don't implement full history replay, and it gives proxies and adapters a foundation they can build `session/load` semantics on top of.
12+
13+
For the shipped protocol, see [Resuming Sessions](/protocol/session-setup#resuming-sessions). For the design history, see the [Session Resume RFD](/rfds/session-resume).

docs/docs.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@
135135
},
136136
{
137137
"group": "Preview",
138-
"pages": ["rfds/session-close", "rfds/session-resume"]
138+
"pages": ["rfds/session-close"]
139139
},
140140
{
141141
"group": "Completed",
@@ -144,7 +144,8 @@
144144
"rfds/session-config-options",
145145
"rfds/session-list",
146146
"rfds/session-info-update",
147-
"rfds/acp-agent-registry"
147+
"rfds/acp-agent-registry",
148+
"rfds/session-resume"
148149
]
149150
}
150151
]
@@ -170,6 +171,7 @@
170171
{
171172
"group": "Announcements",
172173
"pages": [
174+
"announcements/session-resume-stabilized",
173175
"announcements/transports-working-group",
174176
"announcements/acp-agent-registry-stabilized",
175177
"announcements/session-info-update-stabilized",

docs/protocol/draft/schema.mdx

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,10 +1373,6 @@ and return it here. Absence of this field indicates the agent did not record a m
13731373
<a id="session-resume"></a>
13741374
### <span class="font-mono">session/resume</span>
13751375

1376-
**UNSTABLE**
1377-
1378-
This capability is not part of the spec yet, and may be removed or changed at any point.
1379-
13801376
Resumes an existing session without returning previous messages.
13811377

13821378
This method is only available if the agent advertises the `sessionCapabilities.resume` capability.
@@ -1386,10 +1382,6 @@ without replaying the message history (unlike `session/load`).
13861382

13871383
#### <span class="font-mono">ResumeSessionRequest</span>
13881384

1389-
**UNSTABLE**
1390-
1391-
This capability is not part of the spec yet, and may be removed or changed at any point.
1392-
13931385
Request parameters for resuming an existing session.
13941386

13951387
Resumes an existing session without returning previous messages (unlike `session/load`).
@@ -1433,10 +1425,6 @@ session.
14331425

14341426
#### <span class="font-mono">ResumeSessionResponse</span>
14351427

1436-
**UNSTABLE**
1437-
1438-
This capability is not part of the spec yet, and may be removed or changed at any point.
1439-
14401428
Response from resuming an existing session.
14411429

14421430
**Type:** Object
@@ -6172,12 +6160,7 @@ Whether the agent supports `session/fork`.
61726160
Whether the agent supports `session/list`.
61736161
</ResponseField>
61746162
<ResponseField name="resume" type={<><span><a href="#sessionresumecapabilities">SessionResumeCapabilities</a></span><span> | null</span></>} >
6175-
**UNSTABLE**
6176-
6177-
This capability is not part of the spec yet, and may be removed or changed at any point.
6178-
6179-
Whether the agent supports `session/resume`.
6180-
6163+
Whether the agent supports `session/resume`.
61816164
</ResponseField>
61826165

61836166
## <span class="font-mono">SessionCloseCapabilities</span>
@@ -6633,10 +6616,6 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte
66336616

66346617
## <span class="font-mono">SessionResumeCapabilities</span>
66356618

6636-
**UNSTABLE**
6637-
6638-
This capability is not part of the spec yet, and may be removed or changed at any point.
6639-
66406619
Capabilities for the `session/resume` method.
66416620

66426621
By supplying `\{\}` it means that the agent supports resuming of sessions.

docs/protocol/draft/session-setup.mdx

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,6 @@ interrupted.
190190

191191
## Resuming Sessions
192192

193-
<Note>
194-
This section describes the preview `session/resume` method. Clients MUST gate
195-
usage on the `sessionCapabilities.resume` capability being present during
196-
initialization.
197-
</Note>
198-
199193
Agents that advertise `sessionCapabilities.resume` allow Clients to reconnect to
200194
an existing session without replaying the conversation history.
201195

@@ -205,7 +199,7 @@ Before attempting to resume a session, Clients **MUST** verify that the Agent
205199
supports this capability by checking for the `sessionCapabilities.resume` field
206200
in the `initialize` response:
207201

208-
```json highlight={8-10}
202+
```json highlight={7-9}
209203
{
210204
"jsonrpc": "2.0",
211205
"id": 0,
@@ -351,9 +345,9 @@ active.
351345

352346
When advertised, Clients MAY include `additionalDirectories` on supported
353347
session lifecycle requests to expand the session's effective filesystem root
354-
set. In the stable lifecycle pages, that means `session/new` and `session/load`.
355-
The same unstable field is also available on `session/resume` and
356-
`session/fork` when those methods are supported.
348+
set. In the stable lifecycle pages, that means `session/new`, `session/load`,
349+
and `session/resume`. The same unstable field is also available on
350+
`session/fork` when that method is supported.
357351

358352
```json
359353
{
@@ -388,7 +382,7 @@ Clients use this ID to:
388382
- Send prompt requests via `session/prompt`
389383
- Cancel ongoing operations via `session/cancel`
390384
- Load previous sessions via `session/load` (if the Agent supports the `loadSession` capability)
391-
- Resume previous sessions via `session/resume` (if the Agent supports the preview `sessionCapabilities.resume` capability)
385+
- Resume previous sessions via `session/resume` (if the Agent supports the `sessionCapabilities.resume` capability)
392386

393387
## Working Directory
394388

docs/protocol/schema.mdx

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,73 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte
479479
Indicates why the agent stopped processing the turn.
480480
</ResponseField>
481481

482+
<a id="session-resume"></a>
483+
### <span class="font-mono">session/resume</span>
484+
485+
Resumes an existing session without returning previous messages.
486+
487+
This method is only available if the agent advertises the `sessionCapabilities.resume` capability.
488+
489+
The agent should resume the session context, allowing the conversation to continue
490+
without replaying the message history (unlike `session/load`).
491+
492+
#### <span class="font-mono">ResumeSessionRequest</span>
493+
494+
Request parameters for resuming an existing session.
495+
496+
Resumes an existing session without returning previous messages (unlike `session/load`).
497+
This is useful for agents that can resume sessions but don't implement full session loading.
498+
499+
Only available if the Agent supports the `sessionCapabilities.resume` capability.
500+
501+
**Type:** Object
502+
503+
**Properties:**
504+
505+
<ResponseField name="_meta" type={"object | null"} >
506+
The _meta property is reserved by ACP to allow clients and agents to attach additional
507+
metadata to their interactions. Implementations MUST NOT make assumptions about values at
508+
these keys.
509+
510+
See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
511+
512+
</ResponseField>
513+
<ResponseField name="cwd" type={"string"} required>
514+
The working directory for this session.
515+
</ResponseField>
516+
<ResponseField name="mcpServers" type={<a href="#mcpserver">McpServer[]</a>} >
517+
List of MCP servers to connect to for this session.
518+
</ResponseField>
519+
<ResponseField name="sessionId" type={<a href="#sessionid">SessionId</a>} required>
520+
The ID of the session to resume.
521+
</ResponseField>
522+
523+
#### <span class="font-mono">ResumeSessionResponse</span>
524+
525+
Response from resuming an existing session.
526+
527+
**Type:** Object
528+
529+
**Properties:**
530+
531+
<ResponseField name="_meta" type={"object | null"} >
532+
The _meta property is reserved by ACP to allow clients and agents to attach additional
533+
metadata to their interactions. Implementations MUST NOT make assumptions about values at
534+
these keys.
535+
536+
See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
537+
538+
</ResponseField>
539+
<ResponseField name="configOptions" type={<><span><a href="#sessionconfigoption">SessionConfigOption[]</a></span><span> | null</span></>} >
540+
Initial session configuration options if supported by the Agent.
541+
</ResponseField>
542+
<ResponseField name="modes" type={<><span><a href="#sessionmodestate">SessionModeState</a></span><span> | null</span></>} >
543+
Initial mode state if supported by the Agent
544+
545+
See protocol docs: [Session Modes](https://agentclientprotocol.com/protocol/session-modes)
546+
547+
</ResponseField>
548+
482549
<a id="session-set_config_option"></a>
483550
### <span class="font-mono">session/set_config_option</span>
484551

@@ -2594,6 +2661,9 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte
25942661
<ResponseField name="list" type={<><span><a href="#sessionlistcapabilities">SessionListCapabilities</a></span><span> | null</span></>} >
25952662
Whether the agent supports `session/list`.
25962663
</ResponseField>
2664+
<ResponseField name="resume" type={<><span><a href="#sessionresumecapabilities">SessionResumeCapabilities</a></span><span> | null</span></>} >
2665+
Whether the agent supports `session/resume`.
2666+
</ResponseField>
25972667

25982668
## <span class="font-mono">SessionConfigGroupId</span>
25992669

@@ -2899,6 +2969,25 @@ See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/exte
28992969
The current mode the Agent is in.
29002970
</ResponseField>
29012971

2972+
## <span class="font-mono">SessionResumeCapabilities</span>
2973+
2974+
Capabilities for the `session/resume` method.
2975+
2976+
By supplying `\{\}` it means that the agent supports resuming of sessions.
2977+
2978+
**Type:** Object
2979+
2980+
**Properties:**
2981+
2982+
<ResponseField name="_meta" type={"object | null"} >
2983+
The _meta property is reserved by ACP to allow clients and agents to attach additional
2984+
metadata to their interactions. Implementations MUST NOT make assumptions about values at
2985+
these keys.
2986+
2987+
See protocol docs: [Extensibility](https://agentclientprotocol.com/protocol/extensibility)
2988+
2989+
</ResponseField>
2990+
29022991
## <span class="font-mono">SessionUpdate</span>
29032992

29042993
Different types of updates that can be sent during session processing.

docs/protocol/session-setup.mdx

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ sequenceDiagram
3030
Agent->>Client: session/update
3131
Note over Agent,Client: All content streamed
3232
Agent-->>Client: session/load response
33+
else
34+
Client->>Agent: session/resume (sessionId)
35+
Note over Agent: Restore session context
36+
Note over Agent: Connect to MCP servers
37+
Agent-->>Client: session/resume response
3338
end
3439
3540
Note over Client,Agent: Ready for prompts
@@ -178,6 +183,71 @@ When **all** the conversation entries have been streamed to the Client, the Agen
178183

179184
The Client can then continue sending prompts as if the session was never interrupted.
180185

186+
## Resuming Sessions
187+
188+
Agents that advertise `sessionCapabilities.resume` allow Clients to reconnect to an existing session without replaying the conversation history.
189+
190+
### Checking Support
191+
192+
Before attempting to resume a session, Clients **MUST** verify that the Agent supports this capability by checking for the `sessionCapabilities.resume` field in the `initialize` response:
193+
194+
```json highlight={7-9}
195+
{
196+
"jsonrpc": "2.0",
197+
"id": 0,
198+
"result": {
199+
"protocolVersion": 1,
200+
"agentCapabilities": {
201+
"sessionCapabilities": {
202+
"resume": {}
203+
}
204+
}
205+
}
206+
}
207+
```
208+
209+
If `sessionCapabilities.resume` is not present, the Agent does not support resuming sessions and Clients **MUST NOT** attempt to call `session/resume`.
210+
211+
### Resuming a Session
212+
213+
To resume an existing session without replaying prior messages, Clients **MUST** call the `session/resume` method with:
214+
215+
- The [Session ID](#session-id) to resume
216+
- [MCP servers](#mcp-servers) to connect to
217+
- The [working directory](#working-directory)
218+
219+
```json
220+
{
221+
"jsonrpc": "2.0",
222+
"id": 2,
223+
"method": "session/resume",
224+
"params": {
225+
"sessionId": "sess_789xyz",
226+
"cwd": "/home/user/project",
227+
"mcpServers": [
228+
{
229+
"name": "filesystem",
230+
"command": "/path/to/mcp-server",
231+
"args": ["--mode", "filesystem"],
232+
"env": []
233+
}
234+
]
235+
}
236+
}
237+
```
238+
239+
Unlike `session/load`, the Agent **MUST NOT** replay the conversation history via `session/update` notifications before responding. Instead, it restores the session context, reconnects to the requested MCP servers, and returns once the session is ready to continue.
240+
241+
```json
242+
{
243+
"jsonrpc": "2.0",
244+
"id": 2,
245+
"result": {}
246+
}
247+
```
248+
249+
The response **MAY** also include initial mode, model, or session configuration state when those features are supported by the Agent.
250+
181251
## Session ID
182252

183253
The session ID returned by `session/new` is a unique identifier for the conversation context.
@@ -187,6 +257,7 @@ Clients use this ID to:
187257
- Send prompt requests via `session/prompt`
188258
- Cancel ongoing operations via `session/cancel`
189259
- Load previous sessions via `session/load` (if the Agent supports the `loadSession` capability)
260+
- Resume previous sessions via `session/resume` (if the Agent supports the `sessionCapabilities.resume` capability)
190261

191262
## Working Directory
192263

docs/rfds/session-resume.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,6 @@ This argues "session/resume" is the basic primitive which "session/load" builds
8383

8484
## Revision history
8585

86+
- 2026-04-22: RFD marked as Completed; `session/resume` is stabilized
8687
- 2026-04-14: Update capability shape to `sessionCapabilities.resume`
8788
- 2025-11-24: Update FAQ to mention session/resume vs session/load

docs/rfds/updates.mdx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ rss: true
66

77
This page tracks lifecycle changes for ACP Requests for Dialog. For broader ACP announcements, see [Updates](/updates).
88

9+
<Update label="April 22, 2026" tags={["Completed"]}>
10+
## session/resume RFD moves to Completed
11+
12+
The RFD for the `session/resume` method has been stabilized and is now a part of the protocol. Please review the [documentation](/protocol/session-setup#resuming-sessions) for more information.
13+
14+
</Update>
15+
916
<Update label="April 22, 2026" tags={["Draft"]}>
1017
## Streamable HTTP & WebSocket Transport RFD moves to Draft stage
1118

docs/updates.mdx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@ rss: true
66

77
This page is for larger ACP announcements and project updates. For lifecycle changes to Requests for Dialog, see [RFD Updates](/rfds/updates).
88

9+
<Update label="April 22, 2026" tags={["Protocol"]}>
10+
## Session Resume is Stabilized
11+
12+
The Session Resume RFD has moved to Completed and the `session/resume` method is stabilized.
13+
14+
This gives clients a way to reconnect to an existing session without replaying conversation history, and lets proxies and adapters build `session/load` semantics on top of the simpler primitive.
15+
16+
[Read the full announcement](/announcements/session-resume-stabilized).
17+
18+
</Update>
19+
920
<Update label="April 22, 2026" tags={["Working Groups"]}>
1021
## Transports Working Group
1122

0 commit comments

Comments
 (0)