Documentation
ΒΆ
Overview ΒΆ
Package odek is a minimal Go agent loop runtime.
odek implements the ReAct (Reasoning + Acting) pattern β the "think, therefore act" loop that powers autonomous AI agents. It is not a framework or an SDK. It is a runtime: one loop, one binary, minimal deps.
Design ΒΆ
- Minimal external dependencies. stdlib + a few focused packages.
- Session isolation via Docker containers (--sandbox).
- LLM-agnostic. Any OpenAI-compatible endpoint works.
- Tool-first. Tools are the only extension point.
Security ΒΆ
When running with --sandbox, each session executes in a fresh Docker container. The container has no network access, no host mounts beyond the working directory, and is destroyed on exit. The agent can never access files outside its working directory.
Index ΒΆ
- Constants
- func BuildRuntimeContext(platform string) string
- func ComposeSecureSystem(identity string) string
- func DefaultUntrustedWrapper(source, content string) string
- func LoadProjectFile() string
- func ProfileLabel(model string) string
- type Agent
- func (a *Agent) Close() error
- func (a *Agent) EmitEvent(ev events.Event)
- func (a *Agent) LastPromptTokens() int
- func (a *Agent) MaxContextTokens() int
- func (a *Agent) Memory() *memory.MemoryManager
- func (a *Agent) RequestFinalization()
- func (a *Agent) Run(ctx context.Context, task string) (string, error)
- func (a *Agent) RunID() string
- func (a *Agent) RunWithMessages(ctx context.Context, messages []session.Message) (string, []session.Message, error)
- func (a *Agent) SetBackgroundNoticeProvider(fn func() string)
- func (a *Agent) SetEventSessionID(id string)
- func (a *Agent) SetMessagesPersistCallback(cb loop.MessagesPersistCallback)
- func (a *Agent) SetToolSessionID(id string)
- func (a *Agent) SkillManager() *skills.SkillManager
- func (a *Agent) SwitchModel(model string)
- func (a *Agent) SwitchThinking(thinking string)
- func (a *Agent) SystemPrompt() string
- func (a *Agent) Thinking() string
- func (a *Agent) TotalCacheCreationTokens() int
- func (a *Agent) TotalCacheReadTokens() int
- func (a *Agent) TotalCachedTokens() int
- func (a *Agent) TotalInputTokens() int
- func (a *Agent) TotalOutputTokens() int
- type Config
- type Tool
- type ToolFilterConfig
Constants ΒΆ
const ProjectFileName = "AGENTS.md"
ProjectFileName is the name of the project-level instructions file that odek automatically loads from the working directory.
const SecurityPillar = `` /* 5198-byte string literal not displayed */
SecurityPillar is the invariant runtime policy. Config.SystemMessage is an identity/persona surface; New always composes this policy into the effective system prompt so library embedders cannot accidentally construct an agent without the same boundary enforced by the CLI.
Variables ΒΆ
This section is empty.
Functions ΒΆ
func BuildRuntimeContext ΒΆ
BuildRuntimeContext returns a system prompt header with OS, hostname, working directory, current date/time, and platform-specific formatting rules for the given transport (platform). platform can be "telegram", "terminal", "web", or empty for generic.
This context eliminates the need for the agent to run shell commands to discover its own environment β the most common waste of tokens in CLI agent usage.
func ComposeSecureSystem ΒΆ added in v1.43.1
ComposeSecureSystem strips embedded copies and appends one authoritative pillar at the end. Appending, rather than accepting an identity containing the pillar unchanged, prevents scanner-clean trailing identity text from becoming the last instruction in the trusted block.
func DefaultUntrustedWrapper ΒΆ added in v1.43.1
DefaultUntrustedWrapper provides a safe boundary for embedders that do not install a surface-specific wrapper. CLI wrappers can still add guard scans and audit recording by supplying Config.UntrustedWrapper.
func LoadProjectFile ΒΆ
func LoadProjectFile() string
LoadProjectFile reads ProjectFileName from the current working directory. Returns the file content (trimmed) if it exists and is readable. Returns empty string if the file doesn't exist or can't be read. Checks for symlinks to prevent following attacker-controlled paths. The content is intended to be appended to the system message with a clear header β use it for project conventions, architecture notes, etc.
func ProfileLabel ΒΆ
ProfileLabel is the display name for a model. v2 has no static profile table β this is the model id. Serve may show ListModels display names.
Types ΒΆ
type Agent ΒΆ
type Agent struct {
// contains filtered or unexported fields
}
Agent is the agent loop runtime.
func New ΒΆ
New creates a new Agent with the given configuration.
If Config.SandboxCleanup is set, the cleanup function is called when Close() is invoked. The caller is responsible for creating the sandbox container and wiring up tool executables to use it before calling New().
func (*Agent) Close ΒΆ
Close cleans up resources. If a sandbox container was created, it is destroyed. Always call Close() when done with the agent.
Close first drains background memory work with a bounded wait: session-end episode extraction and consolidation run on tracked goroutines (see MemoryManager.RunBackground) and would otherwise be silently killed when the CLI process exits right after a run. This is the single choke point every CLI path reaches via `defer agent.Close()` (run, continue, REPL, serve, telegram), so the drain lives here rather than at each call site.
func (*Agent) EmitEvent ΒΆ added in v1.24.0
EmitEvent emits a caller-originated runtime event (e.g. session_saved from the session persistence layer, budget_exceeded from budget enforcement) through the same non-blocking, run-scoped pipeline as engine events. No-op when no EventHandler is configured.
func (*Agent) LastPromptTokens ΒΆ added in v1.43.1
LastPromptTokens returns the provider-normalized prompt size of the last parent-side LLM call β the parent conversation window (input + cache-read + cache-creation). Not a cumulative; sub-agent usage charged via ChargeExternalUsage never affects it.
func (*Agent) MaxContextTokens ΒΆ added in v1.43.1
MaxContextTokens returns the resolved model context limit (0 = unknown).
func (*Agent) Memory ΒΆ
func (a *Agent) Memory() *memory.MemoryManager
Memory returns the agent's memory manager. Used by the CLI layer to append buffer entries after each turn and signal session end. Returns nil if memory is disabled.
func (*Agent) RequestFinalization ΒΆ added in v1.28.0
func (a *Agent) RequestFinalization()
RequestFinalization asks the running agent to conclude at the next iteration boundary: no new tool batches start and the engine produces a partial-progress summary prefixed with the time-budget marker instead of running to the iteration cap. Non-blocking; intended for soft-deadline watchers that trade a hard kill for a bounded graceful conclusion.
func (*Agent) RunID ΒΆ added in v1.24.0
RunID returns the random identifier stamped on every runtime event of this agent's run, or "" when no EventHandler is configured.
func (*Agent) RunWithMessages ΒΆ
func (a *Agent) RunWithMessages(ctx context.Context, messages []session.Message) (string, []session.Message, error)
RunWithMessages executes the agent loop starting from a pre-built message history. Use this for multi-turn conversations where the full conversation context (system prompt, prior turns) has been loaded from a session file and the new user message appended.
Returns the final answer plus the complete updated message history. The caller should persist the history (e.g. to a session file) so the conversation can be continued in a future call.
func (*Agent) SetBackgroundNoticeProvider ΒΆ added in v1.38.0
SetBackgroundNoticeProvider registers a provider drained at the top of every iteration; its return value is injected as an observe-phase message (used for background-command completion notices). An empty return injects nothing. Safe to call between RunWithMessages calls.
func (*Agent) SetEventSessionID ΒΆ added in v1.24.0
SetEventSessionID stamps the session identifier on subsequent runtime events. Call it as soon as the session ID is known (events emitted earlier simply carry no session_id). No-op when no EventHandler is configured.
func (*Agent) SetMessagesPersistCallback ΒΆ added in v1.19.0
func (a *Agent) SetMessagesPersistCallback(cb loop.MessagesPersistCallback)
SetMessagesPersistCallback registers a callback the loop fires after each completed step β once a tool batch's result messages are appended, and again after the final assistant message β with a copy of the current message history. Callers use it to persist per-turn progress so an interrupted run (Ctrl-C, SIGTERM, crash) can be resumed from the last completed step. Safe to call between RunWithMessages calls.
func (*Agent) SetToolSessionID ΒΆ added in v1.43.1
SetToolSessionID stamps id onto every registered tool implementing sessionToolBinder (currently delegate_tasks, for artifact filing). Call it whenever the active session id becomes known or changes β serve binds per prompt because one connection can session_switch mid-flight; the single- session surfaces (run/continue/repl/telegram) bind once at startup or per agent construction. No-op on a nil agent or when no tool qualifies.
func (*Agent) SkillManager ΒΆ
func (a *Agent) SkillManager() *skills.SkillManager
SkillManager returns the agent's skill manager. Used by the CLI, WebUI, and Telegram layers to run learning heuristics after agent completion. Returns nil if skills are disabled.
func (*Agent) SwitchModel ΒΆ
SwitchModel updates the LLM model used by this agent at runtime. The model string must be a valid OpenAI-compatible model identifier. This is safe to call between RunWithMessages calls to switch models mid-session. Empty strings are silently ignored.
func (*Agent) SwitchThinking ΒΆ added in v1.0.0
SwitchThinking updates the reasoning/thinking mode used by this agent at runtime. Accepts Config.Thinking values: "disabled", "low", "medium", "high", aliases (enabled/on/off/mid/max), or "" (provider default). Unrecognized values are ignored (the current level stays). Safe to call between RunWithMessages calls to toggle thinking per-query.
func (*Agent) SystemPrompt ΒΆ added in v1.43.1
SystemPrompt returns the resolved system message after runtime context and project-file composition. Persisted session heads should stay empty; RunWithMessages restores this value at run time.
func (*Agent) Thinking ΒΆ added in v1.43.1
Thinking returns the agent's current reasoning depth (canonical, or empty when using the provider default).
func (*Agent) TotalCacheCreationTokens ΒΆ
TotalCacheCreationTokens returns the cumulative Anthropic cache creation tokens across all iterations of the most recent run.
func (*Agent) TotalCacheReadTokens ΒΆ
TotalCacheReadTokens returns the cumulative Anthropic cache read tokens across all iterations of the most recent run.
func (*Agent) TotalCachedTokens ΒΆ
TotalCachedTokens returns the cumulative OpenAI cached prompt tokens across all iterations of the most recent run.
func (*Agent) TotalInputTokens ΒΆ
TotalInputTokens returns the cumulative prompt tokens consumed across all iterations of the most recent RunWithMessages call.
func (*Agent) TotalOutputTokens ΒΆ
TotalOutputTokens returns the cumulative completion tokens generated across all iterations of the most recent RunWithMessages call.
type Config ΒΆ
type Config struct {
// Provider is the go-llm-sdk registry id (deepseek, openai, anthropic,
// gemini, zai, kimi, or a custom id from Providers). Empty defaults to
// deepseek.
Provider string
// Model is the LLM model identifier (e.g., "deepseek-v4-flash").
Model string
// BaseURL overrides the selected provider's base URL (legacy v1 alias
// and embedder override). Empty keeps the SDK default for Provider.
BaseURL string
// APIKey authenticates the selected provider. Empty falls back to the
// provider's env key (DEEPSEEK_API_KEY for the default provider).
APIKey string
// Providers holds per-id API key / base URL / format overrides.
Providers map[string]llmclient.ProviderOverride
// RequestTimeout is the per-request wall-clock budget. 0 uses 300s.
RequestTimeout time.Duration
// ContextWindow is an operator override for the trim budget. 0 means
// discover via ListModels, then the last-resort table for shipped ids.
ContextWindow int
// Thinking controls the model's reasoning depth. Public values:
// "disabled", "low", "medium", "high". Empty omits the field (provider
// default). Aliases (enabled/on β medium, off β disabled, mid β medium,
// max β high) are accepted inbound. go-llm-sdk maps the canonical
// values onto provider fields. v2 does not infer thinking from the
// model name β set it explicitly.
Thinking string
// Temperature controls LLM output randomness (0.0β2.0).
// Negative = omit from request (use provider default).
// 0.0 = deterministic, 1.0 = creative. Default: 0.0 for benchmark
// stability; set to -1 to use provider defaults.
Temperature float64
// ThinkingBudget is the maximum thinking tokens for Anthropic extended thinking (default 5000).
ThinkingBudget int
// Tools available to the agent.
Tools []Tool
// ToolFilter controls which auto-registered tools are exposed to the LLM
// (for example the memory tool when a MemoryManager is provided). It is
// not applied to caller-supplied Tools; callers are responsible for
// filtering their own tool slices. Enabled is a whitelist; Disabled is a
// blacklist. Empty Enabled means "no whitelist".
ToolFilter ToolFilterConfig
// MaxIterations caps the number of thinkβact cycles (default: 90).
MaxIterations int
// AnnounceBudget, when set, enables or disables budget-awareness
// telemetry: the engine injects one-line hints at 50/75/90% of the
// iteration, wall-clock, tool-call, token, or cost budget and emits
// budget_warning signals. Nil defaults on after MaxIterations is
// filled (90). Distinct from subagent.announce_budget, which still
// controls children. Set false to opt out.
AnnounceBudget *bool `json:"announce_budget,omitempty"`
// SystemMessage is the system prompt injected at the start of every run.
// Runtime context (OS, hostname, cwd, date, platform) is automatically
// prepended to this message before it reaches the LLM.
// If AGENTS.md exists in the working directory, its content is appended
// automatically. Set NoProjectFile to true to skip this.
SystemMessage string
// RuntimeContext, when set, prepends environment awareness to the system
// message: OS, hostname, working directory, current date/time, and
// platform-specific formatting rules. Each entry point (CLI, Telegram,
// WebUI) sets this automatically. When empty, BuildRuntimeContext("")
// provides generic terminal context.
RuntimeContext string
// NoProjectFile disables automatic loading of AGENTS.md from the
// working directory. By default, odek reads AGENTS.md and appends
// its content to the system message with a "Project Instructions" header.
NoProjectFile bool
// SandboxCleanup, if set, is called by Agent.Close() to destroy the
// Docker sandbox container. Set by the CLI when --sandbox is active.
// Programmatic API users can set this to their own cleanup logic
// (e.g., remove a container, delete a VM, tear down a network).
// When nil, Close() is a no-op.
SandboxCleanup func() error
// Renderer, if set, produces colored terminal output for each phase
// of the agent loop. When nil, the agent runs silently (programmatic API).
Renderer *render.Renderer
// ToolEventHandler, if set, is invoked for each tool call and result
// during the agent loop. Fires "tool_call" before and "tool_result"
// after each tool invocation. Used by the WebUI for live streaming.
ToolEventHandler func(event string, name string, data string)
// InteractionMode controls tool-call rendering: "engaging" (default), "enhance", "verbose", or "off".
InteractionMode string
// IterationCallback, if set, is invoked after each iteration of the
// agent loop with progress info (turn number, tokens, tools called).
// Used by the Telegram handler for periodic progress updates.
IterationCallback loop.IterationCallback
// Skills configures the skill system. When nil, skills are disabled.
Skills *skills.SkillsConfig
// SkillManager holds the loaded skill state. Passed by the CLI layer;
// when nil, New() auto-loads from default directories.
SkillManager *skills.SkillManager
// MemoryDir sets the directory for persistent memory storage.
// Default: ~/.odek/memory/
MemoryDir string
// MemoryConfig controls the memory system (facts, buffer, episodes).
// Default: memory.DefaultMemoryConfig()
MemoryConfig memory.MemoryConfig
// Guard is the prompt-injection detector shared across subsystems.
// When nil, subsystems fall back to local rule-based scanning on demand.
Guard guard.Guard
// GuardConfig is the resolved guard configuration used to decide which
// surfaces are scanned. It mirrors the guard instance passed above.
GuardConfig guard.Config
// PromptCaching enables Anthropic-format cache_control markers on the
// first system block and first user message. Markers are sent only when
// the bound client's format is Anthropic (never URL-sniffed). OpenAI-
// format providers are unaffected β they rely on prefix-stable separate
// system messages. Library default: false (opt in). The CLI resolves
// this to ON when unset; pass --no-prompt-caching to disable.
PromptCaching bool
// Stream enables SSE streaming of LLM responses for the main think
// step. Requires DeltaHandler to display anything incrementally;
// without one the behavior matches the buffered path. Auxiliary LLM
// calls (compaction, progress summaries, memory) always stay buffered.
// Library default: false (opt in). The CLI resolves this to ON when
// unset; pass --no-stream to disable. See docs/STREAMING.md.
Stream bool
// DeltaHandler receives streamed output fragments when Stream is
// enabled. It is invoked synchronously and must be non-blocking;
// returning an error aborts generation for that call.
DeltaHandler func(llmclient.Delta) error
// MaxToolParallel controls how many tool calls run concurrently per
// agent iteration. 0 = use default (4). Models that emit multiple
// parallel tool calls benefit from concurrent execution of I/O-bound
// tools like read_file, search_files, and web_search.
MaxToolParallel int
// SkillEventHandler, if set, is invoked when a skill lifecycle event
// occurs (loaded, autoloaded, saved, deleted, etc.). Used by WebUI
// (WebSocket streaming) and Telegram (inline messages).
SkillEventHandler func(event skills.SkillEvent)
// MemoryEventHandler, if set, is invoked when a memory lifecycle event
// occurs (fact add/merge/consolidate, episode store/dedup/evict/promote).
// Fans out alongside the terminal renderer so embedding programs, the WebUI
// (WebSocket streaming), and Telegram can observe memory activity that was
// previously silent.
MemoryEventHandler func(event memory.MemoryEvent)
// AgentSignalHandler, if set, is invoked on internal agent-loop signals
// (context-window trim, tool-failure recovery) that the engine previously
// handled silently. Used for observability across all surfaces.
AgentSignalHandler func(event loop.SignalEvent)
// EventHandler, if set, receives the structured runtime event stream
// (schema odek.event/v1 β see docs/EXTENSIONS.md): run_started,
// iteration_completed, tool_call_started/completed/failed,
// session_saved, context_trimmed, budget_exceeded, plan_created,
// plan_updated, plan_blocked, run_completed, run_failed.
//
// Dispatch is non-blocking (buffered channel, drop-on-full) and
// panic-isolated: a slow or panicking handler can never stall or crash
// the agent loop. Events never carry raw tool arguments by default
// (SHA-256 digest + sizes + a structured argv0/target/class summary
// only) and human-readable fields pass through secret redaction.
EventHandler func(event events.Event)
// EventsIncludeArgs opts the event stream into carrying the raw
// (secret-redacted) tool-call arguments in tool_call_started events.
// Default off: raw arguments can include sensitive task content, but
// incident review on an opt-in basis beats a stream that cannot answer
// "what actually ran?" once the session has been deleted.
EventsIncludeArgs bool
// ExternalRefs carries operator-supplied pointers to state that lives
// outside odek (schema odek-extension/v1 β see docs/EXTENSIONS.md).
// The caller attaches them to the session at creation time via
// session.Session.AddExternalRefs; odek stores and returns these refs
// verbatim and NEVER resolves or dereferences their URIs. New rejects
// invalid refs with a descriptive error.
ExternalRefs []session.ExternalRef
// Limits configures hard execution budgets for a run
// (odek-extension/v1 β see docs/EXTENSIONS.md): wall-clock runtime,
// tool-call count, cumulative input/output tokens, and estimated cost.
// The zero value disables enforcement. On exhaustion the loop emits a
// budget_exceeded event, persists the latest safe session state via the
// messages-persist callback, and returns a typed *budget.Error (match
// with budget.As). Cost enforcement is active only when MaxCostUSD and
// both per-million prices are configured β odek never hard-codes
// provider prices.
Limits budget.Limits
// Approver gates dangerous tool operations. When set and the LLM returns
// multiple tool calls in one iteration, a single batch approval prompt
// is shown instead of N individual prompts. If denied, no tools run
// for that iteration. If approved, individual tool-level PromptCommand
// calls are bypassed via SetTrustAll.
Approver danger.Approver
// DangerousConfig holds the user's risk class configuration (Allow/Deny/
// Prompt per risk class). Used by the batch gate to decide whether a
// tool call needs approval before showing the prompt. When nil, the
// batch gate plays safe and shows the prompt for any classified tool.
DangerousConfig *danger.DangerousConfig
// UntrustedWrapper, if set, is applied to skill and episode context before
// injection into the model's system context. It should wrap externally-
// sourced content with a nonce'd boundary (and record it for audit). When
// nil, skill/episode content is injected directly (not recommended for
// production surfaces).
UntrustedWrapper func(source, content string) string
// Compaction enables rolling compaction. When enabled, conversation
// turn groups dropped by context trimming are sketched extractively
// into a digest system message immediately, then a thinking-off side
// call replaces that sketch with a model digest on a later iteration
// if it succeeds. Long sessions retain a compressed memory of earlier
// work without stalling the next think step. Each compaction still
// costs one extra LLM call per trim. The CLI resolves it to ON by
// default (an explicit compaction=false, ODEK_COMPACTION=false, or
// --no-compaction disables it); library users of New must opt in
// explicitly here.
Compaction bool
}
Config configures an Agent instance.
type Tool ΒΆ
type Tool interface {
Name() string
Description() string
Schema() any // JSON Schema for the tool's parameters
Call(args string) (string, error)
}
Tool represents a single capability the agent can invoke.
type ToolFilterConfig ΒΆ added in v1.11.0
type ToolFilterConfig struct {
// Enabled is a whitelist. When non-nil, only tools whose names appear
// here are registered. An empty (but non-nil) slice means no tools.
Enabled []string
// Disabled is a blacklist. Tools whose names appear here are removed
// after the whitelist is applied.
Disabled []string
}
ToolFilterConfig controls which tools are exposed to the LLM.
Directories
ΒΆ
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
odek
command
|
|
|
internal
|
|
|
artifact
Package artifact implements parsing, validation, and model-facing rendering of odek.artifact-ref/v1 references carried inside odek.tool-result/v1 envelopes (see docs/EXTENSIONS.md).
|
Package artifact implements parsing, validation, and model-facing rendering of odek.artifact-ref/v1 references carried inside odek.tool-result/v1 envelopes (see docs/EXTENSIONS.md). |
|
bgproc
Package bgproc manages background processes started by the agent.
|
Package bgproc manages background processes started by the agent. |
|
budget
Package budget implements hard execution budgets for an agent run (odek-extension/v1 β see docs/EXTENSIONS.md): a Limits struct describing the configured caps, a typed Error returned when a cap is exhausted, and a Checker the loop engine consults at each enforcement point.
|
Package budget implements hard execution budgets for an agent run (odek-extension/v1 β see docs/EXTENSIONS.md): a Limits struct describing the configured caps, a typed Error returned when a cap is exhausted, and a Checker the loop engine consults at each enforcement point. |
|
config
Package config loads and merges odek configuration from multiple sources.
|
Package config loads and merges odek configuration from multiple sources. |
|
danger
Package danger classifies shell commands by risk level and provides a configurable approval system for dangerous operations.
|
Package danger classifies shell commands by risk level and provides a configurable approval system for dangerous operations. |
|
embedding
Package embedding is the shared text-embedding seam used by every semantic retrieval path in odek: memory (episode recall, dedup, ranking, fact merge), session search, and skill matching.
|
Package embedding is the shared text-embedding seam used by every semantic retrieval path in odek: memory (episode recall, dedup, ranking, fact merge), session search, and skill matching. |
|
events
Package events implements odek's structured runtime event stream (schema odek.event/v1, see docs/EXTENSIONS.md): a small Event type, a non-blocking panic-isolated Emitter that fans events out to a handler, and an append-only JSONL sink (jsonl.go).
|
Package events implements odek's structured runtime event stream (schema odek.event/v1, see docs/EXTENSIONS.md): a small Event type, a non-blocking panic-isolated Emitter that fans events out to a handler, and an append-only JSONL sink (jsonl.go). |
|
flock
Package flock provides a portable advisory file lock.
|
Package flock provides a portable advisory file lock. |
|
fsatomic
Package fsatomic provides a crash-durable atomic file write.
|
Package fsatomic provides a crash-durable atomic file write. |
|
guard
Package guard provides a pluggable prompt-injection detector for odek.
|
Package guard provides a pluggable prompt-injection detector for odek. |
|
llmclient
Package llmclient adapts go-llm-sdk for odek.
|
Package llmclient adapts go-llm-sdk for odek. |
|
loop
Package loop implements the ReAct (Reasoning + Acting) agent loop.
|
Package loop implements the ReAct (Reasoning + Acting) agent loop. |
|
maintenance
Package maintenance provides periodic storage hygiene for the odek home directory (~/.odek): session retention, audit-record retention, log rotation, Telegram plan/media cleanup, and skill skip-list garbage collection.
|
Package maintenance provides periodic storage hygiene for the odek home directory (~/.odek): session retention, audit-record retention, log rotation, Telegram plan/media cleanup, and skill skip-list garbage collection. |
|
mcp
Package mcp implements a Model Context Protocol server over stdio.
|
Package mcp implements a Model Context Protocol server over stdio. |
|
mcpclient
Package mcpclient implements an MCP client that connects to external MCP servers over stdio.
|
Package mcpclient implements an MCP client that connects to external MCP servers over stdio. |
|
memory
Package memory provides persistent, agent-managed memory across sessions.
|
Package memory provides persistent, agent-managed memory across sessions. |
|
memory/extended
Package extended implements the Extended Memory subsystem for odek.
|
Package extended implements the Extended Memory subsystem for odek. |
|
narrate
Package narrate produces human-friendly, emoji-rich transition messages describing what the agent is doing.
|
Package narrate produces human-friendly, emoji-rich transition messages describing what the agent is doing. |
|
pathutil
Package pathutil provides small, security-critical helpers for path confinement and symlink-aware resolution.
|
Package pathutil provides small, security-critical helpers for path confinement and symlink-aware resolution. |
|
redact
Package redact provides secret detection and redaction for odek output.
|
Package redact provides secret detection and redaction for odek output. |
|
render
Package render provides emoji-driven terminal rendering for the odek agent loop.
|
Package render provides emoji-driven terminal rendering for the odek agent loop. |
|
resource
Package resource implements @-prefixed resource discovery and inline resolution.
|
Package resource implements @-prefixed resource discovery and inline resolution. |
|
sandbox
Package sandbox builds and operates the Docker container that isolates the agent's shell and file-tool execution from the host.
|
Package sandbox builds and operates the Docker container that isolates the agent's shell and file-tool execution from the host. |
|
schedule
Package schedule provides a native, in-process task scheduler for odek.
|
Package schedule provides a native, in-process task scheduler for odek. |
|
session
Package session persists agent conversation history across runs.
|
Package session persists agent conversation history across runs. |
|
skills
Package skills β advanced skill matching using scoring-based approach.
|
Package skills β advanced skill matching using scoring-based approach. |
|
telegram
Package telegram provides Telegram bot integration.
|
Package telegram provides Telegram bot integration. |
|
tool
Package tool provides the clarify tool β ask the user a question and wait for a response.
|
Package tool provides the clarify tool β ask the user a question and wait for a response. |
|
transport
Package transport provides tuned HTTP transports for odek's API clients.
|
Package transport provides tuned HTTP transports for odek's API clients. |
|
ws
Package ws provides WebSocket constants used by cmd/odek/serve.go.
|
Package ws provides WebSocket constants used by cmd/odek/serve.go. |