sipeed/picoclaw · error
seahorse context manager is unavailable on this platform
Error message
seahorse context manager is unavailable on this platform
What it means
The seahorse context manager depends on modernc.org/sqlite, which has no stable build path on some platforms; on those targets a stub is compiled instead (build tags: mipsle, netbsd, freebsd/arm — pkg/agent/context_seahorse_unsupported.go). Selecting agents.defaults.context_manager="seahorse" on such a build makes the factory return this error. resolveContextManager then logs a warning and falls back to the legacy manager, so the process keeps running without seahorse features.
Source
Thrown at pkg/agent/context_seahorse_unsupported.go:13
//go:build mipsle || netbsd || (freebsd && arm)
package agent
import (
"encoding/json"
"fmt"
)
// newSeahorseContextManager is unavailable on platforms where modernc sqlite/libc
// currently has no stable build path for this project.
func newSeahorseContextManager(_ json.RawMessage, _ *AgentLoop) (ContextManager, error) {
return nil, fmt.Errorf("seahorse context manager is unavailable on this platform")
}
func init() {
if err := RegisterContextManager("seahorse", newSeahorseContextManager); err != nil {
panic(fmt.Sprintf("register seahorse context manager: %v", err))
}
}
View on GitHub (pinned to 49183d7e8d)
Solutions
- Switch agents.defaults.context_manager to "legacy" (or remove it — legacy is the default) on that host
- Move the workload to a supported platform (linux/mac/windows on amd64/arm64) if seahorse retrieval is required
- Verify with: go version GOOS/GOARCH or check the build tags before choosing seahorse in shared configs
- Watch startup logs for the 'Failed to create context manager, falling back to legacy' warning to catch the silent downgrade
Example fix
// config — before
"agents": { "defaults": { "context_manager": "seahorse" } }
// after (on mipsle/netbsd/freebsd-arm)
"agents": { "defaults": { "context_manager": "legacy" } } Defensive patterns
Strategy: validation
Validate before calling
func seahorseSupported() bool {
if runtime.GOARCH == "mipsle" {
return false
}
switch runtime.GOOS {
case "netbsd":
return false
case "freebsd":
return runtime.GOARCH != "arm"
}
return true
}
if cfg.Agents.Defaults.ContextManager == "seahorse" && !seahorseSupported() {
return fmt.Errorf("seahorse not available on %s/%s; use legacy", runtime.GOOS, runtime.GOARCH)
} Prevention
- Centralize the supported-platform check wherever shared configs are generated
- Cross-compile CI (GOOS/GOARCH matrix) should assert the chosen context_manager is available
- Alert on the 'falling back to legacy' startup warning so silent downgrades are noticed
When it happens
Trigger: Config sets context_manager to seahorse while the binary was built for mipsle, netbsd, or freebsd/arm — e.g. self-hosted NAS/router devices or BSD SBCs.
Common situations: Copying a working config from an amd64 machine to a mipsle router; running on NetBSD/FreeBSD-ARM where the sqlite build tags exclude the engine; CI cross-compile checks that load the full config.
Related errors
- feishu channel is not supported on 32-bit architectures (arm
- channel %s not found
- failed to load MCP servers: %w
- tool discovery is enabled but neither 'use_bm25' nor 'use_re
- no default agent for heartbeat
AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15).
Data as JSON: /api/errors/39ade2ce2cc030cf.
Report an issue: GitHub.