Go SDK

HTTP client for the Pensyve REST API. Standard library only -- no external dependencies.

go get github.com/major7apps/pensyve-go

All methods accept context.Context as their first parameter for cancellation and timeouts.


Client

NewClient(cfg)

Create a new API client.

ParameterTypeDefaultDescription
cfgConfigrequiredClient configuration

Returns: *Client

client := pensyve.NewClient(pensyve.Config{
    BaseURL: "http://localhost:8000",
})

client := pensyve.NewClient(pensyve.Config{
    BaseURL: "https://api.pensyve.com",
    APIKey:  "sk-...",
    Timeout: 10 * time.Second,
})

Entity(ctx, name, kind)

Create or retrieve an entity.

ParameterTypeDefaultDescription
ctxcontext.ContextrequiredRequest context
namestringrequiredEntity name
kindstringrequiredOne of "agent", "user", "team", "tool"

Returns: (*Entity, error)

user, err := client.Entity(ctx, "alice", "user")
agent, err := client.Entity(ctx, "my-agent", "agent")

Recall(ctx, query, opts)

Search memories matching a query.

ParameterTypeDefaultDescription
ctxcontext.ContextrequiredRequest context
querystringrequiredSearch query
opts*RecallOptionsnilOptional filters (pass nil for defaults)

Returns: ([]Memory, error)

memories, err := client.Recall(ctx, "project X deadline", nil)

memories, err := client.Recall(ctx, "deployment steps", &pensyve.RecallOptions{
    Entity: "my-agent",
    Limit:  10,
    Types:  []string{"procedural"},
})

Remember(ctx, entity, fact, confidence)

Store a semantic memory.

ParameterTypeDefaultDescription
ctxcontext.ContextrequiredRequest context
entitystringrequiredEntity name
factstringrequiredThe fact to store
confidencefloat64requiredConfidence in [0, 1]

Returns: (*Memory, error)

m, err := client.Remember(ctx, "alice", "Alice prefers dark mode", 0.9)

Forget(ctx, entityName, hardDelete)

Archive or delete all memories for an entity.

ParameterTypeDefaultDescription
ctxcontext.ContextrequiredRequest context
entityNamestringrequiredEntity name
hardDeleteboolrequiredtrue to permanently delete

Returns: (int, error) -- count of forgotten memories

count, err := client.Forget(ctx, "alice", false)

Consolidate(ctx)

Trigger memory consolidation (promotion, decay, archival).

ParameterTypeDefaultDescription
ctxcontext.ContextrequiredRequest context

Returns: (*ConsolidateResult, error)

result, err := client.Consolidate(ctx)
// result.Promoted, result.Decayed, result.Archived

Health(ctx)

Check API server health.

ParameterTypeDefaultDescription
ctxcontext.ContextrequiredRequest context

Returns: (*HealthResult, error)

h, err := client.Health(ctx)
// h.Status == "ok"

StartEpisode(ctx, participants)

Begin an episode for recording messages. Returns a handle for adding messages and ending the episode.

ParameterTypeDefaultDescription
ctxcontext.ContextrequiredRequest context
participants[]stringrequiredEntity names participating

Returns: (*EpisodeHandle, error)

ep, err := client.StartEpisode(ctx, []string{"alice", "my-agent"})
if err != nil {
    log.Fatal(err)
}
err = ep.AddMessage(ctx, "user", "What's the status?")
err = ep.AddMessage(ctx, "assistant", "On track for Q2.")
ep.SetOutcome("success")
count, err := ep.End(ctx)
// count == 2

Types

Config

type Config struct {
    BaseURL string        // Required. Base URL of the REST API.
    APIKey  string        // Optional. Sent as X-Pensyve-Key header.
    Timeout time.Duration // Default: 30s.
}

Entity

type Entity struct {
    ID   string `json:"id"`
    Name string `json:"name"`
    Kind string `json:"kind"`
}

Memory

type Memory struct {
    ID         string  `json:"id"`
    Content    string  `json:"content"`
    MemoryType string  `json:"memory_type"`
    Confidence float64 `json:"confidence"`
    Stability  float64 `json:"stability"`
    Score      float64 `json:"score,omitempty"`
}

RecallOptions

type RecallOptions struct {
    Entity string   // Filter by entity name.
    Limit  int      // Max results (default: 5).
    Types  []string // Filter by memory type.
}

ConsolidateResult

type ConsolidateResult struct {
    Promoted int `json:"promoted"`
    Decayed  int `json:"decayed"`
    Archived int `json:"archived"`
}

HealthResult

type HealthResult struct {
    Status  string `json:"status"`
    Version string `json:"version"`
}

EpisodeHandle

Handle for an active episode. Not safe for concurrent use.

MethodSignatureDescription
AddMessage(ctx context.Context, role, content string) errorSend a message to the episode
SetOutcome(outcome string)Set outcome: "success", "failure", "partial"
End(ctx context.Context) (int, error)Close the episode, returns memories created

PensyveError

Returned when the API responds with a non-2xx status code.

FieldTypeDescription
StatusintHTTP status code
DetailstringError detail from API response
var perr *pensyve.PensyveError
if errors.As(err, &perr) && perr.Status == 401 {
    log.Fatal("invalid API key")
}