Hi! 👋
First off, thank you for maintaining this SDK - it's been really helpful for building Go-based ACP clients.
Context
I'm building a chat workbench that integrates with Claude Code via ACP. I've been investigating how the Obsidian Agent Client plugin (using TypeScript SDK v0.12.0) successfully restores conversation context across sessions.
What I discovered
Through testing, I confirmed that Claude Code ACP reports loadSession: false and returns "Method not found": session/load when called:
AgentCapabilities.LoadSession: false
Error: {"code":-32601,"message":"\"Method not found\": session/load","data":{"method":"session/load"}}
However, the Obsidian plugin still achieves session restoration. Looking at their code, they check for unstable session capabilities:
// From session-capability-utils.ts
canLoad: agentCapabilities?.loadSession === true,
canResume: agentCapabilities?.sessionCapabilities?.resume !== undefined,
canFork: agentCapabilities?.sessionCapabilities?.fork !== undefined,
canList: agentCapabilities?.sessionCapabilities?.list !== undefined,
And use methods like:
connection.unstable_resumeSession({ sessionId, cwd })
connection.unstable_forkSession({ sessionId, cwd })
connection.unstable_listSessions({ cwd, cursor })
The gap in Go SDK v0.6.3
The Go SDK has:
- ✅
LoadSession() method
- ✅
AgentCapabilities.LoadSession field
But is missing:
- ❌
AgentCapabilities.SessionCapabilities struct with Resume, Fork, List fields
- ❌
UnstableResumeSession() method
- ❌
UnstableForkSession() method
- ❌
UnstableListSessions() method
Request
Would you consider adding these unstable session capabilities for parity with the TypeScript SDK? Specifically:
-
Types - Add to AgentCapabilities:
type SessionCapabilities struct {
Resume *ResumeCapability `json:"resume,omitempty"`
Fork *ForkCapability `json:"fork,omitempty"`
List *ListCapability `json:"list,omitempty"`
}
type AgentCapabilities struct {
// ... existing fields
SessionCapabilities *SessionCapabilities `json:"sessionCapabilities,omitempty"`
}
-
Client methods:
UnstableResumeSession(ctx, params) (ResumeSessionResponse, error)
UnstableForkSession(ctx, params) (ForkSessionResponse, error)
UnstableListSessions(ctx, params) (ListSessionsResponse, error)
Use case
This would enable Go clients to:
- Restore previous chat sessions with full AI context
- Show users a list of their previous conversations
- Fork conversations to explore different paths
References
Happy to help with implementation or testing if that would be useful!
Hi! 👋
First off, thank you for maintaining this SDK - it's been really helpful for building Go-based ACP clients.
Context
I'm building a chat workbench that integrates with Claude Code via ACP. I've been investigating how the Obsidian Agent Client plugin (using TypeScript SDK v0.12.0) successfully restores conversation context across sessions.
What I discovered
Through testing, I confirmed that Claude Code ACP reports
loadSession: falseand returns"Method not found": session/loadwhen called:However, the Obsidian plugin still achieves session restoration. Looking at their code, they check for unstable session capabilities:
And use methods like:
connection.unstable_resumeSession({ sessionId, cwd })connection.unstable_forkSession({ sessionId, cwd })connection.unstable_listSessions({ cwd, cursor })The gap in Go SDK v0.6.3
The Go SDK has:
LoadSession()methodAgentCapabilities.LoadSessionfieldBut is missing:
AgentCapabilities.SessionCapabilitiesstruct withResume,Fork,ListfieldsUnstableResumeSession()methodUnstableForkSession()methodUnstableListSessions()methodRequest
Would you consider adding these unstable session capabilities for parity with the TypeScript SDK? Specifically:
Types - Add to
AgentCapabilities:Client methods:
UnstableResumeSession(ctx, params) (ResumeSessionResponse, error)UnstableForkSession(ctx, params) (ForkSessionResponse, error)UnstableListSessions(ctx, params) (ListSessionsResponse, error)Use case
This would enable Go clients to:
References
@agentclientprotocol/sdkv0.12.0Happy to help with implementation or testing if that would be useful!