Skip to content

Feature Request: Add unstable session capabilities (sessionCapabilities.resume/fork/list) #14

@toontimbermont

Description

@toontimbermont

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:

  1. 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"`
    }
  2. 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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions