Sahara Agent Harness
The agent runtime behind the Scitrera Platform
A generic, embeddable Go agent runtime: a native tool-calling turn loop with pluggable seams for transport, memory, tool catalog, and tool gating.
A Harness, Not a Framework
Modern models can plan, but they need a reliable loop to act in. Sahara provides that loop and gets out of the way. Every integration point is an interface with a simple default, so the same agent runs on a laptop against a local model or as a multi-tenant worker inside the Scitrera Platform.
Native Tool-Calling Loop
Bounded tool iterations, streaming output, cancellation, context compaction, and token-aware overflow recovery for long-running work.
Pluggable Seams
Transport, memory, tool catalog, tool approval, session replay, subagent execution, and goals are interfaces with simple defaults you can swap.
Run It Anywhere
Terminal UI, browser UI, stdin CLI, ACP agent over stdio, or a headless worker over Aether that several frontends can drive at once.
Bring Your Own Model
Talks to any OpenAI-compatible endpoint (Ollama, vLLM, OpenAI, or your own gateway), with multi-model configuration and reasoning-effort control.
Subagents & Durable Goals
In-process subagents that can become real Aether tasks on remote executors, plus durable goals with bounded continuation and token budgets.
Skills, MCP & Observability
Filesystem skills and slash commands, an MCP client, OpenTelemetry spans, and a branch-aware execution ledger for audit and replay.
Swap Any Seam
The core ships with file-backed and in-memory reference implementations and no external dependencies. Replace a seam when your application needs something more.
| Seam | Interface |
|---|---|
| Transport | channel |
| Memory | turn.MemoryService |
| Tool catalog | catalog.Provider |
| Tool approval | hooks |
| Subagent execution | subagent.TaskBackend |
| Goals | goal.Service |
Run It Locally
Point the reference CLI at any OpenAI-compatible endpoint. It opens the terminal UI by default; pass --web for the browser UI or --acp to run as an editor agent.
export SAHARA_LLM_BASE_URL=http://localhost:11434/v1 export SAHARA_LLM_MODEL=llama3.1 go run ./cmd/agent-harness --workspace ./workspace # or: a headless worker over Aether, # driven by any number of frontends agent-harness --serve --aether 127.0.0.1:50051 agent-harness --tui --aether 127.0.0.1:50051
From Harness to Platform
Sahara ships in two layers. Use the core on its own, or get the full multi-tenant runtime through the Scitrera Platform.
Sahara Core
- Standalone Go agent runtime and reference CLI
- TUI, web, CLI, ACP, and headless worker modes
- Filesystem skills, slash commands, and MCP client
- Embeddable in your own Go services
Platform Sahara
- Durable execution with Aether tasks and work profiles
- Sandboxed Python and TypeScript code execution
- MemoryLayer-backed memory, skills, and tool catalogs
- Tenant-scoped model routing through SparkRoute
Both layers speak the open ecosystem messaging spec, so frontends, tools, and agents built in Python, TypeScript, or Go share one message and tool-call contract.
Build your agents on Sahara.
Start with the open-source harness on its own, or run it as part of the full Scitrera Platform.
