Skip to content
brain.GitHub
Developer docs OPEN SOURCE
Adapters

Go interfaces

Session, tool, database, harness, and checkpoint contracts generated from Go source.

Extracted directly from Go source during the documentation build. Application code imports public aliases from github.com/aexhq/brain for harnesses, providers, handlers, and session contracts. The public Server owns stock persistence and transport implementations. Repository and checkpoint adapter seams remain internal. See the Go application SDK.

harness

Factory

package harness // import "github.com/aexhq/brain/internal/harness"

type Factory interface {
	Open(context.Context, Options) (Runner, error)
	SupportsSteering() bool
}

Runner

package harness // import "github.com/aexhq/brain/internal/harness"

type Runner interface {
	Prompt(context.Context, string) error
	Steer(context.Context, string) error
	Interrupt(context.Context) error
	Checkpoint(context.Context) ([]core.NativeFile, error)
	Close() error
}

Options

package harness // import "github.com/aexhq/brain/internal/harness"

type Options struct {
	Lifetime  context.Context                                       `json:"-"`
	SessionID string                                                `json:"session_id"`
	Dir       string                                                `json:"dir"`
	Config    core.Config                                           `json:"config"`
	Tools     []core.Tool                                           `json:"tools"`
	Provider  Provider                                              `json:"provider"`
	Event     func(string, json.RawMessage) error                   `json:"-"`
	Call      func(context.Context, core.Call) (core.Result, error) `json:"-"`
}

RunnerFrame

package harness // import "github.com/aexhq/brain/internal/harness"

type RunnerFrame struct {
	Attachment string          `json:"attachment"`
	Turn       string          `json:"turn,omitempty"`
	ID         string          `json:"id,omitempty"`
	Method     string          `json:"method,omitempty"`
	Params     json.RawMessage `json:"params,omitempty"`
	Result     json.RawMessage `json:"result,omitempty"`
	Error      *core.Error     `json:"error,omitempty"`
	Event      string          `json:"event,omitempty"`
	Data       json.RawMessage `json:"data,omitempty"`
}

persistence

Objects

package persistence // import "github.com/aexhq/brain/internal/persistence"

type Objects interface {
	Put(context.Context, string, []byte, bool) error
	Get(context.Context, string) ([]byte, error)
}

func NewObjects(ctx context.Context, s Settings) (Objects, error)

Metadata

package persistence // import "github.com/aexhq/brain/internal/persistence"

// Metadata is an eventual discovery index, never a session ownership lock.
type Metadata interface {
	Put(context.Context, core.Session, string) error
	Get(context.Context, string, string) (core.Session, string, error)
	List(context.Context, string, string, int) ([]core.Session, error)
	Close() error
}

session

Repository

package session // import "github.com/aexhq/brain/internal/session"

// Repository is the local state consumed by the session owner. Metadata writes
// are durable before returning. Root and Dir identify the local workspace used
// by native harnesses and staged recovery; remote databases do not replace it.
// The composition root owns Close, after Engine.Shutdown has drained executions.
type Repository interface {
	Create(context.Context, core.Session) error
	Get(context.Context, string) (core.Session, error)
	Save(context.Context, core.Session) error
	List(context.Context, string, string, int) ([]core.Session, error)
	Scan(context.Context, string, int) ([]core.Session, error)
	Import(context.Context, core.Session) error
	Root() string
	Dir(string) (string, error)
}

ToolExecutor

package session // import "github.com/aexhq/brain/internal/session"

// ToolExecutor applies authorization and dispatch policy outside scheduling.
// Calls honor cancellation, do not retry, and return model-visible failures.
type ToolExecutor interface {
	Bind(context.Context, *core.Session) error
	Describe(context.Context, core.Session) ([]core.Tool, error)
	NeedsInspection(string) bool
	Invoke(context.Context, core.Session, core.ToolScope, core.Call, func(json.RawMessage)) (core.Result, error)
}

Checkpoints

package session // import "github.com/aexhq/brain/internal/session"

// Checkpoints publishes and restores immutable snapshots without inference.
// List is eventual discovery; it must never be used as an ownership lock.
type Checkpoints interface {
	Publish(context.Context, persistence.Snapshot) (persistence.Manifest, error)
	Restore(context.Context, string, string, string, string) (persistence.Manifest, string, error)
	List(context.Context, string, string, int) ([]core.Session, error)
}

store

Metadata

package store // import "github.com/aexhq/brain/internal/store"

// Metadata is the authoritative local session database, not an eventual index.
// Writes are durable on return. Save and Import must never change a tenant.
// List and Scan return ascending IDs strictly after the supplied cursor.
// Missing Get/Save returns core.NotFound; conflicting Import returns core.Forbidden.
// Implementations must support concurrent calls and context cancellation.
type Metadata interface {
	Create(context.Context, core.Session) error
	Get(context.Context, string) (core.Session, error)
	Save(context.Context, core.Session) error
	List(context.Context, string, string, int) ([]core.Session, error)
	Scan(context.Context, string, int) ([]core.Session, error)
	Import(context.Context, core.Session) error
	Close() error
}

tools

Transport

package tools // import "github.com/aexhq/brain/internal/tools"

// Transport executes a single authorized, validated call. It must honor ctx,
// bound protocol reads, preserve outcome ambiguity, and never retry an action.
// The registry owns transports after NewWithTransports succeeds.
type Transport interface {
	Call(context.Context, Binding, Request, func(json.RawMessage)) core.Result
	Close()
}

Binding

package tools // import "github.com/aexhq/brain/internal/tools"

type Binding struct {
	Handler    Handler      `json:"-"`
	Credential string       `json:"-"`
	Stdio      *StdioConfig `json:"-"`
	core.Tool
	Transport      string   `json:"transport,omitempty"`
	URL            string   `json:"url"`
	MCPTool        string   `json:"mcp_tool,omitempty"`
	TokenEnv       string   `json:"token_env,omitempty"`
	Tenants        []string `json:"tenants"`
	TimeoutSeconds int      `json:"timeout_seconds,omitempty"`
	MaxOutputBytes int64    `json:"max_output_bytes,omitempty"`
	InspectSession bool     `json:"inspect_session,omitempty"`
}

func DiscoverMCP(ctx context.Context, binding Binding, names []string) ([]Binding, error)

Request

package tools // import "github.com/aexhq/brain/internal/tools"

type Request struct {
	core.ToolScope
	Arguments json.RawMessage `json:"arguments"`
}

On this page