Documentation
¶
Overview ¶
Package apogee is the public, embeddable surface of the Apogee coding agent.
Apogee is a terminal coding agent for small local LLMs that owns the full agentic loop — build request, call the Upstream, parse the response, dispatch tools, apply Mechanisms — and ships as both a product (the cmd/apogee TUI/CLI) and this reusable library. The TUI, the optional `apogee headless` CLI, and the external bench (apogee-sim) are all consumers of this one package over the same engine. Everything not in this package (and its sibling public subpackages) is internal and carries no stability promise.
Layout (ADR 0010): this package is a THIN FACADE. The public types, interfaces, enums, and sentinel errors live in internal/domain (the ubiquitous language as Go); the engine lives in internal/agent; the provider seam lives in internal/provider. The root re-exports the public surface as type aliases, re-exported consts/errors, and forwarding constructors, and holds no engine logic. The invariant "internal/* never imports root" makes the dependency graph flow strictly downward toward internal/domain. example_test.go is a compile-time completeness guard: it names the full public surface so a forgotten alias fails the build.
It is grounded in:
ADR 0001 embeddable, steppable, no ambient state; snapshot/resume + hygiene
(forking is the bench's, composed from these primitives — not exposed)
ADR 0002 Tools are an open extension point; the Mechanism catalogue is curated
ADR 0003 Mechanisms are a constraint-declared registry → deterministic total order
ADR 0004 Auto mode requires Confinement, reported as a capability matrix
ADR 0005 sub-agent privileges are always ≤ the parent's
ADR 0006 Bypass mode — the honest "Mechanisms-off" floor
ADR 0007 Step / Turn / quiescent boundary; cancellation; recover-at-boundary
ADR 0008 Tools are stateless across Turns; external effects are non-forkable
ADR 0010 package layout: a domain core, an engine, and this thin root facade
Stability: v0.x, no stability promise through Phase 3; v1.0.0 is cut at the end of Phase 3. Events and hook points are additively extensible — a new variant is a minor bump (so consumers must treat the Event set and enums as open).
Example (CataloguedMechanisms) ¶
Example_cataloguedMechanisms plans a leave-one-out arm from CataloguedMechanisms() — the bench's idiom: to leave a Mechanism out, also drop every Mechanism that Requires it, so no half-armed stack reaches New (which would refuse with ErrMissingRequirement). Dropping tool_result_cap therefore also drops guided_decomposition, which Requires it.
package main
import (
"fmt"
"slices"
"github.com/airiclenz/apogee"
)
func main() {
const leaveOut = apogee.MechanismID("tool_result_cap")
var arm []apogee.MechanismID
for _, d := range apogee.CataloguedMechanisms() {
if d.ID == leaveOut || slices.Contains(d.Requires, leaveOut) {
continue // the left-out Mechanism, and any stack that Requires it
}
arm = append(arm, d.ID)
}
fmt.Println("left out:", leaveOut)
fmt.Println("guided_decomposition still armed:", slices.Contains(arm, "guided_decomposition"))
}
Output: left out: tool_result_cap guided_decomposition still armed: false
Example (EnableMechanismStack) ¶
Example_enableMechanismStack arms the guided_decomposition + tool_result_cap stack by ID through Config.EnableMechanisms. guided_decomposition Requires tool_result_cap (ADR 0014), so both must be enabled together — enabling one alone fails New with ErrMissingRequirement.
package main
import (
"fmt"
"github.com/airiclenz/apogee"
)
// discardSink is a no-op EventSink so the Examples construct an Agent hermetically — construction
// emits nothing and never dials the Endpoint.
type discardSink struct{}
func (discardSink) Emit(apogee.Event) {}
func main() {
cfg := apogee.Config{
Endpoint: "http://localhost:11434",
Model: "local-model",
Events: discardSink{},
EnableMechanisms: []apogee.MechanismID{"guided_decomposition", "tool_result_cap"},
}
ag, err := apogee.New(cfg)
if err != nil {
fmt.Println("construct:", err)
return
}
defer ag.Close()
fmt.Println("armed:", cfg.EnableMechanisms)
}
Output: armed: [guided_decomposition tool_result_cap]
Index ¶
- Constants
- Variables
- func IsReadOnly(t Tool) bool
- type Agent
- type ApprovalDecision
- type ApprovalEvent
- type ApprovalRequest
- type Approver
- type AskAnswer
- type AskRequest
- type Asker
- type AuditEvent
- type Budget
- type Capability
- type Config
- type ConfinementBox
- type ConfinementCaps
- type Confiner
- type ContextConfig
- type Conversation
- type ConversationView
- type ErrorEvent
- type Event
- type EventSink
- type ExternalEffectKind
- type ExternalEffectTool
- type ExternalEffects
- type FinishReason
- type HistoryRewriter
- type HookPoint
- type LoopView
- type Mechanism
- type MechanismDescriptor
- type MechanismFiredEvent
- type MechanismID
- type MechanismRegistry
- type Message
- type MessageEvent
- type Mode
- type ModelProfile
- type OrderingConstraints
- type PostResponseAction
- type PostResponseDecision
- type PostResponseHook
- type PostToolResultHook
- type PreRequestHook
- type PreToolExecHook
- type PresentMethod
- type PresentOutcome
- type PresentRequest
- type Presenter
- type ReadOnlyTool
- type ReasoningEvent
- type Request
- type ResolvedSkill
- type Response
- type Role
- type SamplingParams
- type Session
- type SkillResolver
- type StepResult
- type StepStatus
- type StreamResetEvent
- type SuppressionPolicy
- type ThinkingProfile
- type ThinkingStyle
- type TokenEvent
- type Tool
- type ToolCall
- type ToolCallEvent
- type ToolCallFormat
- type ToolDef
- type ToolRegistry
- type ToolResult
- type ToolResultEvent
- type UsageEvent
- type UserInput
Examples ¶
Constants ¶
const ( FormatNative = domain.FormatNative FormatMarkdownFenced = domain.FormatMarkdownFenced FormatCustomRegex = domain.FormatCustomRegex )
const ( ThinkingNone = domain.ThinkingNone ThinkingDelimited = domain.ThinkingDelimited ThinkingHarmony = domain.ThinkingHarmony )
const ( ModePlan = domain.ModePlan ModeAskBefore = domain.ModeAskBefore ModeAllowEdits = domain.ModeAllowEdits ModeAuto = domain.ModeAuto )
const ( StatusTurnComplete = domain.StatusTurnComplete StatusExchangeComplete = domain.StatusExchangeComplete StatusCancelled = domain.StatusCancelled )
const ( ApprovalAllow = domain.ApprovalAllow ApprovalDeny = domain.ApprovalDeny ApprovalAllowForSession = domain.ApprovalAllowForSession )
const ( PresentOpened = domain.PresentOpened PresentServed = domain.PresentServed PresentShown = domain.PresentShown )
const ( EffectNetwork = domain.EffectNetwork EffectMCP = domain.EffectMCP )
const ( HookPreRequest = domain.HookPreRequest HookPostResponse = domain.HookPostResponse HookPreToolExec = domain.HookPreToolExec HookPostToolResult = domain.HookPostToolResult HookHistoryRewrite = domain.HookHistoryRewrite )
const ( ActionRetry = domain.ActionRetry ActionIntercept = domain.ActionIntercept ActionDefer = domain.ActionDefer )
const ( CapOffRamp = domain.CapOffRamp CapProactiveNudge = domain.CapProactiveNudge CapResponseRepair = domain.CapResponseRepair )
const ( SuppressStrikesThree = domain.SuppressStrikesThree SuppressExempt = domain.SuppressExempt )
const ( RoleSystem = domain.RoleSystem RoleUser = domain.RoleUser RoleAssistant = domain.RoleAssistant RoleTool = domain.RoleTool )
const ( FinishStop = domain.FinishStop FinishLength = domain.FinishLength FinishToolCalls = domain.FinishToolCalls )
Variables ¶
var ( // satisfy the Auto gate (missing or insufficient capabilities). ErrAutoUnavailable = domain.ErrAutoUnavailable // when it cannot establish a confinement box for a subprocess, so dispatch gates // the call through Approval instead of running it unconfined (ADR 0012). ErrConfinementUnavailable = domain.ErrConfinementUnavailable // ErrOrderingCycle is returned by New / registry Add when Mechanism ordering // constraints form a cycle. ErrOrderingCycle = domain.ErrOrderingCycle // ErrIncompatibleMechanisms is returned by New when two registered Mechanisms // declare each other incompatible (IncompatibleWith) — they must never co-fire. ErrIncompatibleMechanisms = domain.ErrIncompatibleMechanisms // ErrMissingRequirement is returned by New / Resume when a registered Mechanism declares a // required peer (MechanismDescriptor.Requires) that is not itself registered — the dual of // ErrIncompatibleMechanisms: where that refuses two Mechanisms that must never co-fire, this // refuses one half of a benched stack (enable both or neither, ADR 0014 §4). Match with errors.Is. ErrMissingRequirement = domain.ErrMissingRequirement // ErrUnknownMechanism is returned by New / Resume when Config.EnableMechanisms names an ID that // is not in the catalogue — a typo'd or deferred ID fails construction loudly rather than // silently disabling a Mechanism (ADR 0015 §4). The wrapping error still names the known IDs; // match the sentinel with errors.Is. ErrUnknownMechanism = domain.ErrUnknownMechanism // ErrSessionVersion is returned by Resume / DecodeSession for a snapshot whose // schema version this build does not understand. ErrSessionVersion = domain.ErrSessionVersion // ErrInputPending is returned by Submit when an Exchange is already in progress. ErrInputPending = domain.ErrInputPending // ErrDuplicateTool is returned by ToolRegistry.Register on a duplicate tool name. ErrDuplicateTool = domain.ErrDuplicateTool // ErrInvalidTool is returned by ToolRegistry.Register for an unaddressable tool // (currently an empty Name). ErrInvalidTool = domain.ErrInvalidTool )
Functions ¶
func IsReadOnly ¶
IsReadOnly reports whether a Tool has declared itself read-only; an undeclared tool is treated as write-capable.
Types ¶
type Agent ¶
Agent is a single embeddable Apogee agent instance — the engine handle. Its methods (Submit / Step / Run / Mode / Snapshot / Close) are the public stepping surface; construct one with New or Resume. See internal/agent for the contract.
type ApprovalDecision ¶
type ApprovalDecision = domain.ApprovalDecision
ApprovalDecision is the Approver's verdict.
type ApprovalEvent ¶
type ApprovalEvent = domain.ApprovalEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type ApprovalRequest ¶
type ApprovalRequest = domain.ApprovalRequest
ApprovalRequest describes the pending tool call the human is asked to allow.
type AskRequest ¶
type AskRequest = domain.AskRequest
AskRequest is the free-text question put to the human (a struct for freeze-safety).
type Asker ¶
Asker is the host-supplied free-text Q&A delegate the ask_user tool routes a question to. It is distinct from Approver (free-text, not a safety gate); a nil Asker means ask_user is not registered. A headless host must supply an Asker that fails safe (no hang).
type AuditEvent ¶
type AuditEvent = domain.AuditEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type Capability ¶
type Capability = domain.Capability
Capability is what a Mechanism does — and what Bypass switches on.
type Config ¶
Config is the full construction surface (Upstream target, autonomy, delegates, registries, injected state roots). See domain.Config for the field contract.
type ConfinementBox ¶
type ConfinementBox = domain.ConfinementBox
ConfinementBox is the confinement policy for a run.
type ConfinementCaps ¶
type ConfinementCaps = domain.ConfinementCaps
ConfinementCaps is the capability matrix a Confiner reports.
type Confiner ¶
Confiner is the OS-level confinement facility required for Auto mode (ADR 0004). The interface is public (the host injects it via Config); the backends live in internal/platform.
type ContextConfig ¶
type ContextConfig = domain.ContextConfig
ContextConfig governs the structural context reducers (Budget, Compaction).
type Conversation ¶
type Conversation = domain.Conversation
Conversation is the serializable conversation state a history-rewrite hook edits.
type ConversationView ¶
type ConversationView = domain.ConversationView
ConversationView is read-only history with tool-call/result pairing helpers.
type ErrorEvent ¶
type ErrorEvent = domain.ErrorEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type Event ¶
Event is the sealed sum type of everything the loop reports. The seal (an unexported method) lives in internal/domain and is intentionally not re-exported, so external code switches on the variants but cannot add new ones.
type EventSink ¶
EventSink receives typed Events as the loop produces them, including inside a Step.
type ExternalEffectKind ¶
type ExternalEffectKind = domain.ExternalEffectKind
ExternalEffectKind classifies a non-forkable external effect.
type ExternalEffectTool ¶
type ExternalEffectTool = domain.ExternalEffectTool
ExternalEffectTool is an optional interface a Tool implements when it reaches state Apogee does not own (network, MCP).
type ExternalEffects ¶
type ExternalEffects = domain.ExternalEffects
ExternalEffects is the single injectable boundary for non-forkable external effects.
type FinishReason ¶
type FinishReason = domain.FinishReason
FinishReason is the model's stop reason (open set).
type HistoryRewriter ¶
type HistoryRewriter = domain.HistoryRewriter
The five hook interfaces a Mechanism (or bench experimental hook) may implement.
type MechanismDescriptor ¶
type MechanismDescriptor = domain.MechanismDescriptor
MechanismDescriptor is per-Mechanism metadata orthogonal to its hook point.
func CataloguedMechanisms ¶
func CataloguedMechanisms() []MechanismDescriptor
CataloguedMechanisms returns a descriptor for every catalogued Mechanism, sorted by ID and duplicate-free — the metadata needed to plan a Config.EnableMechanisms arm (each Mechanism's Capability, SuppressionPolicy, and its IncompatibleWith / Requires stacking relations) WITHOUT building any Mechanism. Each descriptor is a copy with its slice fields cloned, so a caller may traverse and mutate the result freely (e.g. compute a leave-one-out arm by dropping an ID and everything that Requires it). The catalogue's CONTENTS are data, not v1 contract — an ID may change in a minor with a CHANGELOG notice — while this query and the descriptor shape are the stable surface (ADR 0015 §3, locked decision 4).
type MechanismFiredEvent ¶
type MechanismFiredEvent = domain.MechanismFiredEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type MechanismID ¶
type MechanismID = domain.MechanismID
MechanismID is the canonical, stable identifier of a Mechanism.
type MechanismRegistry ¶
type MechanismRegistry = domain.MechanismRegistry
MechanismRegistry is the injectable catalogue plus the bench's experimental slots.
func NewMechanismRegistry ¶
func NewMechanismRegistry() *MechanismRegistry
NewMechanismRegistry returns a registry seeded with the built-in catalogue.
type MessageEvent ¶
type MessageEvent = domain.MessageEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type ModelProfile ¶
type ModelProfile = domain.ModelProfile
ModelProfile describes how the configured model speaks the wire — its tool-call format and inline thinking-channel style; the host sets it via Config.Profile (a zero profile is native tool calls with no inline thinking).
type OrderingConstraints ¶
type OrderingConstraints = domain.OrderingConstraints
OrderingConstraints declares a Mechanism's position relative to others.
type PostResponseAction ¶
type PostResponseAction = domain.PostResponseAction
PostResponseAction enumerates the post-response decisions.
type PostResponseDecision ¶
type PostResponseDecision = domain.PostResponseDecision
PostResponseDecision is the action a post-response Mechanism chooses.
type PostResponseHook ¶
type PostResponseHook = domain.PostResponseHook
The five hook interfaces a Mechanism (or bench experimental hook) may implement.
type PostToolResultHook ¶
type PostToolResultHook = domain.PostToolResultHook
The five hook interfaces a Mechanism (or bench experimental hook) may implement.
type PreRequestHook ¶
type PreRequestHook = domain.PreRequestHook
The five hook interfaces a Mechanism (or bench experimental hook) may implement.
type PreToolExecHook ¶
type PreToolExecHook = domain.PreToolExecHook
The five hook interfaces a Mechanism (or bench experimental hook) may implement.
type PresentMethod ¶
type PresentMethod = domain.PresentMethod
PresentMethod names the presentation-ladder rung that ran.
type PresentOutcome ¶
type PresentOutcome = domain.PresentOutcome
PresentOutcome reports which rung of the presentation ladder carried the document to the user (a struct for freeze-safety).
type PresentRequest ¶
type PresentRequest = domain.PresentRequest
PresentRequest is the document put in front of the user (a struct for freeze-safety).
type Presenter ¶
Presenter is the host-supplied delegate the present_document tool routes a finished deliverable to; the host picks the mechanism (the presentation ladder), the model supplies only a path. Like Asker it is mode-independent and not a safety gate, and a nil Presenter means present_document is not registered.
type ReadOnlyTool ¶
type ReadOnlyTool = domain.ReadOnlyTool
ReadOnlyTool is an optional interface a Tool implements to declare it performs no writes — the signal Plan mode and Ask-Before Approval gate on.
type ReasoningEvent ¶
type ReasoningEvent = domain.ReasoningEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type ResolvedSkill ¶
type ResolvedSkill = domain.ResolvedSkill
ResolvedSkill is one attached skill reduced to the fields the loop injects (ID, DisplayName, Body) — the return shape a SkillResolver produces.
type SamplingParams ¶
type SamplingParams = domain.SamplingParams
SamplingParams are the optional sampling overrides a pre-request hook may set.
type Session ¶
Session is the serializable, copyable conversation state (no live handles).
func DecodeSession ¶
DecodeSession deserializes a session, returning ErrSessionVersion if the schema version is newer than this build understands.
type SkillResolver ¶
type SkillResolver = domain.SkillResolver
SkillResolver maps a user's attached skill IDs (UserInput.SkillIDs) to their injectable bodies; the host injects it via Config.Skills (the binary loads a disk-backed catalog, but an embedder may supply any implementation). A nil resolver means an attached ID is reported and dropped. The concrete catalog lives in internal/skills, off the public surface.
type StepResult ¶
type StepResult = domain.StepResult
StepResult reports the outcome of one Step at the quiescent boundary.
type StepStatus ¶
type StepStatus = domain.StepStatus
StepStatus is the disposition of a completed Step (open set).
type StreamResetEvent ¶
type StreamResetEvent = domain.StreamResetEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type SuppressionPolicy ¶
type SuppressionPolicy = domain.SuppressionPolicy
SuppressionPolicy is how a Mechanism participates in self-regulation.
type ThinkingProfile ¶
type ThinkingProfile = domain.ThinkingProfile
ThinkingProfile selects a model's inline thinking-channel style (none / delimited / harmony).
type ThinkingStyle ¶
type ThinkingStyle = domain.ThinkingStyle
ThinkingStyle names a model's inline reasoning-channel format.
type TokenEvent ¶
type TokenEvent = domain.TokenEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type ToolCallEvent ¶
type ToolCallEvent = domain.ToolCallEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type ToolCallFormat ¶
type ToolCallFormat = domain.ToolCallFormat
ToolCallFormat selects how a model emits tool calls (native / markdown-fenced / custom-regex).
type ToolRegistry ¶
type ToolRegistry = domain.ToolRegistry
ToolRegistry is the injectable set of available tools.
func NewToolRegistry ¶
func NewToolRegistry() *ToolRegistry
NewToolRegistry returns an empty registry.
type ToolResult ¶
type ToolResult = domain.ToolResult
ToolResult is what a tool returns to the loop (pre tool-result-capping).
type ToolResultEvent ¶
type ToolResultEvent = domain.ToolResultEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
type UsageEvent ¶
type UsageEvent = domain.UsageEvent
The Event variants. The set is additively extensible (a new variant is a minor bump).
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
apogee
command
Command apogee is the terminal coding agent for small local LLMs.
|
Command apogee is the terminal coding agent for small local LLMs. |
|
internal
|
|
|
agent
Package agent is the embeddable agent loop: it builds requests, calls the Upstream, parses responses, dispatches tools, and applies Mechanisms at the loop's hook points.
|
Package agent is the embeddable agent loop: it builds requests, calls the Upstream, parses responses, dispatches tools, and applies Mechanisms at the loop's hook points. |
|
context
Package context manages the model's working context: Budget allocation, the context builder, generative Compaction (the default reducer), and tool-result capping.
|
Package context manages the model's working context: Budget allocation, the context builder, generative Compaction (the default reducer), and tool-result capping. |
|
domain
Package domain is the ubiquitous language (CONTEXT.md) rendered as Go: every type, interface, enum, sentinel error, and hook working-value in Apogee's public surface, plus the pure logic intrinsic to those types (the Mechanism registry's ordering-cycle detection, ConfinementCaps.AutoEligible, the Session envelope and its versioning).
|
Package domain is the ubiquitous language (CONTEXT.md) rendered as Go: every type, interface, enum, sentinel error, and hook working-value in Apogee's public surface, plus the pure logic intrinsic to those types (the Mechanism registry's ordering-cycle detection, ConfinementCaps.AutoEligible, the Session envelope and its versioning). |
|
domain/domaintest
Package domaintest is the hook seam's shared test adapter (the internal/platform/confinetest precedent): conversation fixtures and a settable LoopView fake, so a Mechanism or engine test builds history and loop state through one vocabulary instead of hand-rolled per-file literals.
|
Package domaintest is the hook seam's shared test adapter (the internal/platform/confinetest precedent): conversation fixtures and a settable LoopView fake, so a Mechanism or engine test builds history and loop state through one vocabulary instead of hand-rolled per-file literals. |
|
library
Package library is Apogee's cross-session, per-model learning substrate (CONTEXT "Library").
|
Package library is Apogee's cross-session, per-model learning substrate (CONTEXT "Library"). |
|
mcp
Package mcp is Apogee's Model Context Protocol client, built on the official Go SDK (github.com/modelcontextprotocol/go-sdk) over stdio / SSE / streamable-http.
|
Package mcp is Apogee's Model Context Protocol client, built on the official Go SDK (github.com/modelcontextprotocol/go-sdk) over stdio / SSE / streamable-http. |
|
mechanisms
Package mechanisms is the curated Mechanism catalogue: a constraint-declared registry that the loop resolves into a deterministic total order (topo-sort with a stable canonical-ID tiebreak — ADR 0003).
|
Package mechanisms is the curated Mechanism catalogue: a constraint-declared registry that the loop resolves into a deterministic total order (topo-sort with a stable canonical-ID tiebreak — ADR 0003). |
|
platform
Package platform abstracts shell execution and path handling across POSIX and Windows, and hosts the Confiner backends (seatbelt / landlock / AppContainer) that gate Auto mode as a capability matrix (ADR 0004).
|
Package platform abstracts shell execution and path handling across POSIX and Windows, and hosts the Confiner backends (seatbelt / landlock / AppContainer) that gate Auto mode as a capability matrix (ADR 0004). |
|
platform/confinetest
Package confinetest is the shared escape-probe harness both Confiner backends' acceptance tests call, so "confined" means the same thing on Linux landlock and macOS seatbelt (confinement-execution-contract §6).
|
Package confinetest is the shared escape-probe harness both Confiner backends' acceptance tests call, so "confined" means the same thing on Linux landlock and macOS seatbelt (confinement-execution-contract §6). |
|
present
Package present holds the HOST-SIDE mechanisms of the presentation ladder (ADR 0019): the locality/desktop detection that decides which rung applies, the OS opener that auto-opens a deliverable on a user's own desktop, and the capability-token doc server that makes one reachable from the user's machine when Apogee runs remotely.
|
Package present holds the HOST-SIDE mechanisms of the presentation ladder (ADR 0019): the locality/desktop detection that decides which rung applies, the OS opener that auto-opens a deliverable on a user's own desktop, and the capability-token doc server that makes one reachable from the user's machine when Apogee runs remotely. |
|
processing
Package processing turns an Upstream response into the loop's domain values: it parses tool calls into domain.ToolCall and strips inline thinking / harmony channels from the assistant's visible content.
|
Package processing turns an Upstream response into the loop's domain values: it parses tool calls into domain.ToolCall and strips inline thinking / harmony channels from the assistant's visible content. |
|
provider
Package provider talks to the Upstream: it owns the Responder seam (the interface the engine calls instead of net/http), the provider-local wire types, and the OpenAI-compatible Client that implements the seam — non-streaming Respond plus a streaming Stream, with bounded retries and timeouts, /v1/models discovery, and a local server-process manager.
|
Package provider talks to the Upstream: it owns the Responder seam (the interface the engine calls instead of net/http), the provider-local wire types, and the OpenAI-compatible Client that implements the seam — non-streaming Respond plus a streaming Stream, with bounded retries and timeouts, /v1/models discovery, and a local server-process manager. |
|
security
Package security holds Apogee's human-in-the-loop safety guardrails — the layer that runs in EVERY mode, distinct from Auto-mode Confinement (the OS-level Confiner in package platform).
|
Package security holds Apogee's human-in-the-loop safety guardrails — the layer that runs in EVERY mode, distinct from Auto-mode Confinement (the OS-level Confiner in package platform). |
|
session
Package session persists and reloads Agent snapshots — the same primitive the bench composes into forking and counterfactuals, which Apogee itself does not expose (ADR 0001).
|
Package session persists and reloads Agent snapshots — the same primitive the bench composes into forking and counterfactuals, which Apogee itself does not expose (ADR 0001). |
|
skills
Package skills discovers user-authored skills from disk and serves them as a catalog.
|
Package skills discovers user-authored skills from disk and serves them as a catalog. |
|
tools
Package tools holds the built-in Tool implementations that sit behind the public domain.Tool interface — an open extension point (ADR 0002).
|
Package tools holds the built-in Tool implementations that sit behind the public domain.Tool interface — an open extension point (ADR 0002). |
|
tui
Package tui is the Bubble Tea terminal UI: a thin renderer over the agent's typed Events that supplies the Approval delegate.
|
Package tui is the Bubble Tea terminal UI: a thin renderer over the agent's typed Events that supplies the Approval delegate. |
|
validated
Package validated implements the Validated-set runtime surface (ADR 0016 and its 2026-07-19 runtime-surface realisation): loading per-model Validated-set entries from the two sources (the embedded shipped bundle and the user-local drop-in dir), matching them against the resolved model fingerprint under the confidence-graded rule — auto-apply at ≥ medium confidence, offer at low, alias applies at any — and validating that an entry's enable set is whole and buildable against the current Mechanism catalogue (whole-set-or-nothing: a subset is an unvalidated stack and must not apply).
|
Package validated implements the Validated-set runtime surface (ADR 0016 and its 2026-07-19 runtime-surface realisation): loading per-model Validated-set entries from the two sources (the embedded shipped bundle and the user-local drop-in dir), matching them against the resolved model fingerprint under the confidence-graded rule — auto-apply at ≥ medium confidence, offer at low, alias applies at any — and validating that an entry's enable set is whole and buildable against the current Mechanism catalogue (whole-set-or-nothing: a subset is an unvalidated stack and must not apply). |