contenox

module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2026 License: Apache-2.0

README

contenox

Declare an agent in one Markdown file. Run it in your terminal.

Every action it takes is checked against policy you wrote — and when it needs you, it waits, durably: answer from your terminal or your phone, days later, and the run resumes exactly once.

Docs: contenox.com


Start here

curl -fsSL https://contenox.com/install.sh | sh

Prefer to read it first?

curl -fsSLO https://contenox.com/install.sh
less install.sh
sh install.sh

Pre-built binaries are on the releases page.

contenox setup                          # pick a provider and model, once
contenox beam                           # the front door: talk to an agent here

contenox beam is the first-party terminal client. The transcript is your native scrollback, the composer takes / commands and @ file mentions, and a gated tool call raises an approval card inline — one keystroke answers it. Bare contenox on a terminal opens beam.

contenox doctor reports anything missing; its first line is the verdict:

Ready: yes — run: contenox beam

contenox init marks the project — it writes .contenox/workspace.id here, and seeds the agents, envelopes and config into ~/.contenox/ so every project on the machine starts from them (contenox init --local seeds workspace copies instead). contenox vet checks a policy before anything runs under it. Sessions persist: contenox session list and contenox session switch <name> pick past contexts back up.


You don't build an agent. You declare one.

An agent is one file:

---
name: reviewer
description: Reviews a file for correctness problems
tools: Read, Glob, Grep
---

You are a code reviewer. Read the file you are asked about, then list the
problems you can point at in what you actually read.

Drop it in .contenox/agents/ and the next run picks it up. No build step, no plugin API, no release:

.contenox/
  agents/
    reviewer.md      one agent
    triage.md        another
  agents.toml        the knobs a declaration cannot reach

Already have agents? .claude/agents/ and .agents/agents/ are read where they are. Claude Code, Copilot, Cursor, OpenCode and Antigravity declarations all import — nothing to move or convert, it is the same file.

contenox agent list

A directory of declarations is a workflow. The agent.md at the top reads the request and answers with one label; the branch of that name takes it from there, with its own instruction, its own tools, its own budget:

.contenox/agents/
  triage/
    agent.md         reads the request, answers with one label
    code/
      agent.md       the branch that label routes to
      recovery.md    its second attempt, when the first stops short
    docs/
      agent.md       tools: Read, Glob, Grep — it cannot write
    failure.md       what it says when every branch has given up

default: in the router's frontmatter names the branch an unrecognised answer falls to — the narrowest one, never the most capable.

Behind each declaration contenox compiles a chain that says what happens and a policy that says what is permitted, into .generated/. Both are JSON Schema-validated, both are yours to read, and neither is yours to maintain — edit the declaration and they follow. Every policy denies .ssh, .aws and .kube under every permission setting.

Model routing is configuration too: contenox backend add, contenox config set default-provider.


Three shapes

The same runtime, the same declarations, the same envelope. What differs is who is accountable for the machine it runs on.

contenox beam — you, at the keyboard, on your own device. The terminal client above: filesystem and terminal work natively, and a gated call stops in front of you.

contenox beam                           # or just: contenox

contenox run — a program is the caller: CI, cron, another agent. It runs the task with the tools on that machine and prints the report to stdout, exit 0 when the work landed and nonzero when it did not. Nobody is at the keyboard, so what the task may touch is bounded by its envelope: a gated file write or shell command becomes a durable ask that waits for contenox approvals respond.

contenox run "summarise what changed under ./internal since Friday"
contenox run reviewer "review the payment retry change"

With no agent named it runs the preseeded run declaration.

contenox serve — the organization's shape: a standing host on a box somebody else looks after. It serves exactly one workspace, fixed when you launch it, and it has no filesystem and no terminal tools, ever — every capability it has is an MCP server you attached. Connectors and event triggers drive it through the relay, and it can run on Postgres, NATS and Valkey when one host is not enough.

contenox serve                          # the workspace is your home directory
contenox serve ~/src/api                # or the path you name

One instance serves one workspace. There is no workspace picker anywhere, because there is nothing to pick: the app discovers instances and the sessions they are already holding.


The durable ask

Any harness can pause for a human while it holds the connection open. Holding a connection is not the hard part — surviving the wait is.

A run that stops for a person checkpoints where it stopped, saves the ask, and releases the process. Restart the box, close the laptop, let days pass: when the answer arrives, the run resumes from that exact point, exactly once.

contenox approvals list
contenox approvals respond 8f3c --answer "yes, send them"
contenox inbox list

The gate sits at the tool boundary: every call is checked against the envelope before it leaves contenox, whether it is headed for your terminal or an MCP server you attached. Gated actions ask a human first — the approval card in beam, your editor's permission UI, or your phone.

From your phone. Everything above runs locally, with no account. To reach a running session from elsewhere — reading the transcript, answering approvals — pair the machine with the hosted relay: sign in at app.contenox.com, tap Pair device, and enter the key as /pair <key> in the session. The machine dials out and sends exactly two things, the key and its hostname. Free for you and three teammates, one machine each, opt-in per machine. How pairing works.


Integrations

Editors. Zed, JetBrains, AionUi and OpenClaw spawn contenox as an ACP subprocess over stdio — no plugin lock-in, and approvals route through the editor's own permission UI. Per the protocol the editor owns the workspace, so the session works in the project you already have open.

contenox acp                            # speak ACP over stdio to any ACP client

Missions and events. contenox mission fire sends a one-line intent to a declared agent under a named envelope and leaves a durable record; internal domain events land in a durable log where operator-authored trigger-*.json files fire chains from them (opt-in, beta).


We ship no tools. That is the point.

contenox owns the tool boundary and you decide what stands on the other side of it. Every tool you do not need is tokens burned on every turn, and one more thing to govern. Tools cross that boundary two ways, and both are yours to choose.

From the client. beam and every ACP client — your editor — carry fs/* and terminal/* as capabilities. contenox forwards the call and the client performs it, in the workspace already open. local_fs is five tools: read_file, write_file, edit_file, sed, read_file_range. Listing and search go through the shell, on the client's side of the line. contenox serve has neither, by construction.

From the operator. Anything reachable over MCP or described by an OpenAPI spec becomes a policy-scoped tool your agents can name:

# Connect any Model Context Protocol (MCP) server
contenox mcp add notion https://mcp.notion.com/mcp --auth-type oauth

# Wrap an internal HTTP API using its OpenAPI specification
contenox tools add erp_billing \
  --url https://erp.internal.example.com \
  --spec ./billing-subset.yaml

A declaration can also bring its own, scoped to that agent, reachable by no other one, retired when you delete the file:

mcpServers:
  filesystem:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
remoteTools:
  billing:
    url: https://internal.example.com
    spec: https://internal.example.com/openapi.json

What you connected yourself with contenox mcp add stays yours and is never touched.


Guardrails

Every run is bounded by an envelope: a JSON policy naming what passes silently, what stops for a human, and what is denied outright, plus hard ceilings on tool calls and tokens. Anything no rule matches fails closed — it asks. Six presets ship with contenox init, and the knobs a declaration cannot reach live in agents.toml. Every session leaves reviewable local state on disk.

The sandbox — Landlock filesystem and exec confinement, scrubbed environment, Linux-only — confines foreign agent code you choose to run locally.


What people use it for

  • Standing, scheduled agents — declare one, call it with contenox run from cron or CI. Each run starts clean.
  • Request processing — intake, classify, draft, hold for a human, send. The hold is the feature.
  • Wrapping internal APIs — expose a subset of an OpenAPI spec as a tool, with sensitive arguments filled in by config rather than the model.
  • Release evidence — aggregate git logs, PRs, tickets and CI output into changelogs and reviewer packets.
  • Live operations — query dashboards, scripts or MCP tools under scoped policies instead of broad credentials.

Backends

Mix local and hosted freely:

# Local & private-network inference
contenox backend add ollama --type ollama
contenox backend add myvllm --type vllm --url http://gpu-host:8000

# Hosted providers
contenox backend add openai    --type openai    --api-key-env OPENAI_API_KEY
contenox backend add anthropic --type anthropic --api-key-env ANTHROPIC_API_KEY
contenox backend add gemini    --type gemini    --api-key-env GEMINI_API_KEY

# Defaults
contenox config set default-provider ollama
contenox config set default-model    qwen2.5:7b

Also supported: Gemini, Vertex AI, and Amazon Bedrock.


The argument

Before Apache, serving a website meant writing your own server: parse the request, hold the connection, decide what to send — all of it welded to the content it existed to deliver. Apache made serving something you install, and HTML the thing you author. Everyone building an agent today is back on the wrong side of that line, hand-rolling the same machine — the loop, the tool gate, the approval flow, session persistence — welded to one prompt and rewritten at the next company.

contenox makes that machine infrastructure and the declaration the artifact. Where the analogy stops: Apache shipped no browser, and contenox ships one. contenox beam is it — a first-party client, in-tree, so the front door is never somebody else's product. It is still a client, and the policy it renders is enforced underneath it rather than by it.


Managed

We provision and run contenox agents for you, on your terms. Tell us what the work is and we will get you set up: hello@contenox.com — or see the hosted app at app.contenox.com.


Building from source

Pure Go, no C toolchain:

git clone https://github.com/contenox/contenox
cd contenox
task build        # https://taskfile.dev — or: CGO_ENABLED=0 go build ./cmd/contenox

This repository is a release mirror: every commit on main is one release and every tag a signed one, built into binaries by CI. Contributions are applied upstream and credited — CONTRIBUTING.md.


Questions: hello@contenox.com

Directories

Path Synopsis
cmd
contenox command
Command contenox is the contenox agent server and its CLI.
Command contenox is the contenox agent server and its CLI.
core module
internal
kernel/agentinstance
Package agentinstance spawns and owns running ACP agent instances on a server-rooted context, independent of any client connection, and lets multiple viewers attach to a session's event stream.
Package agentinstance spawns and owns running ACP agent instances on a server-rooted context, independent of any client connection, and lets multiple viewers attach to a session's event stream.
kernel/nativeturn
Package nativeturn is the serve-level survival layer for native ACP chain turns: an in-flight turn runs on a serve-rooted Registry, so a dropped connection detaches a viewer without cancelling the turn.
Package nativeturn is the serve-level survival layer for native ACP chain turns: an in-flight turn runs on a serve-rooted Registry, so a dropped connection detaches a viewer without cancelling the turn.
kernel/taskengine
Package taskengine orchestrates an agent: it drives LLM turns, tool calls and routing in a loop, defined as a JSON chain.
Package taskengine orchestrates an agent: it drives LLM turns, tool calls and routing in a loop, defined as a JSON chain.
kernel/taskengine/llmretry
Package llmretry wraps a single LLM call with classified retry, exponential backoff, and an optional model fallback.
Package llmretry wraps a single LLM call with classified retry, exponential backoff, and an optional model fallback.
libsandbox
Package libsandbox confines a spawned foreign agent to "the wall": every path out of its tools and workspace — filesystem, network, environment — is absent by construction.
Package libsandbox confines a spawned foreign agent to "the wall": every path out of its tools and workspace — filesystem, network, environment — is absent by construction.
models/llmrepo
Package llmrepo provides a unified facade over LLM backends discovered via runtimestate: prompt, chat, streaming, embedding, and tokenization through a single ModelRepo interface.
Package llmrepo provides a unified facade over LLM backends discovered via runtimestate: prompt, chat, streaming, embedding, and tokenization through a single ModelRepo interface.
models/modelrepo
Package modelrepo defines the provider-facing contracts for LLM backends: the Provider interface, per-capability client interfaces, and shared request/response types.
Package modelrepo defines the provider-facing contracts for LLM backends: the Provider interface, per-capability client interfaces, and shared request/response types.
models/modelrepo/anthropic
Package anthropic is a direct (non-Vertex) provider for the Anthropic API, which speaks the Messages API.
Package anthropic is a direct (non-Vertex) provider for the Anthropic API, which speaks the Messages API.
models/modelrepo/bedrock
Package bedrock is a provider for AWS Bedrock via the unified Converse API.
Package bedrock is a provider for AWS Bedrock via the unified Converse API.
models/modelrepo/codec/chatcompletions
Package chatcompletions is a transport-agnostic codec for the OpenAI Chat Completions wire format.
Package chatcompletions is a transport-agnostic codec for the OpenAI Chat Completions wire format.
models/modelrepo/codec/messages
Package messages is a transport-agnostic codec for Anthropic's Messages API wire format.
Package messages is a transport-agnostic codec for Anthropic's Messages API wire format.
models/modelrepo/gemini
Package gemini implements the modelrepo.Provider contract against Google's Gemini Generative Language API.
Package gemini implements the modelrepo.Provider contract against Google's Gemini Generative Language API.
models/modelrepo/ollama
Package ollama implements the modelrepo.Provider contract against Ollama HTTP endpoints.
Package ollama implements the modelrepo.Provider contract against Ollama HTTP endpoints.
models/modelrepo/openai
Package openai implements the modelrepo.Provider contract against the OpenAI HTTP API and OpenAI-compatible endpoints.
Package openai implements the modelrepo.Provider contract against the OpenAI HTTP API and OpenAI-compatible endpoints.
models/modelrepo/vertex
Package vertex implements the modelrepo.Provider contract against Google Vertex AI publisher endpoints, using OAuth bearer tokens minted from service-account credentials.
Package vertex implements the modelrepo.Provider contract against Google Vertex AI publisher endpoints, using OAuth bearer tokens minted from service-account credentials.
models/modelrepo/vllm
Package vllm implements the modelrepo.Provider contract against vLLM OpenAI-compatible HTTP endpoints.
Package vllm implements the modelrepo.Provider contract against vLLM OpenAI-compatible HTTP endpoints.
models/ollamatokenizer
Package ollamatokenizer provides Tokenizer implementations used by llmrepo to count and split tokens for a given model: an HTTP client, a heuristic estimator, and a mock.
Package ollamatokenizer provides Tokenizer implementations used by llmrepo to count and split tokens for a given model: an HTTP client, a heuristic estimator, and a mock.
models/runtimestate
Package runtimestate reconciles the declared state of LLM backends against their observed state, read-only, intended to run repeatedly from a background task.
Package runtimestate reconciles the declared state of LLM backends against their observed state, read-only, intended to run repeatedly from a background task.
relayacp
Package relayacp carries ACP over a relay connection, so a remote client is just another ACP client of this runtime, routed by librelay.Frame.Session to its own libacp.AgentSideConnection.
Package relayacp carries ACP over a relay connection, so a remote client is just another ACP client of this runtime, routed by librelay.Frame.Session to its own libacp.AgentSideConnection.
relaycreds
Package relaycreds reads and writes the relay enrolment a machine obtained with `contenox login`: the instance token, the relay's public key, and the endpoint both apply to.
Package relaycreds reads and writes the relay enrolment a machine obtained with `contenox login`: the instance token, the relay's public key, and the endpoint both apply to.
relaylink
Package relaylink is the runtime half of the relay connection: it dials a relay, completes the librelay handshake, holds the connection, proves the peer is alive with heartbeats, and redials with backoff when it is not.
Package relaylink is the runtime half of the relay connection: it dials a relay, completes the librelay handshake, holds the connection, proves the peer is alive with heartbeats, and redials with backoff when it is not.
relaypair
Package relaypair redeems a pairing key for this machine's relay credentials via one POST; what comes back is what relaycreds stores.
Package relaypair redeems a pairing key for this machine's relay credentials via one POST; what comes back is what relaycreds stores.
relaytest
Package relaytest is an in-memory stand-in for a relay, for testing a connector without a network.
Package relaytest is an in-memory stand-in for a relay, for testing a connector without a network.
services/accessview
Package accessview computes HITL policy verdicts (reachability plus read/write decisions) for a batch of workspace-relative paths, always returning the full reason rather than only the interesting cases.
Package accessview computes HITL policy verdicts (reachability plus read/write decisions) for a batch of workspace-relative paths, always returning the full reason rather than only the interesting cases.
services/agentdecl
Package agentdecl reads agent declarations — Markdown with a YAML frontmatter header — and renders each as the task chain and human-in-the-loop policy that run it.
Package agentdecl reads agent declarations — Markdown with a YAML frontmatter header — and renders each as the task chain and human-in-the-loop policy that run it.
services/agenthost
Package agenthost is the runtime's client/host-role primitive for driving another ACP agent over stdio.
Package agenthost is the runtime's client/host-role primitive for driving another ACP agent over stdio.
services/agentregistryservice
Package agentregistryservice stores declared agent configurations ("external_acp" or "chain") as the single source of truth for what can be spawned.
Package agentregistryservice stores declared agent configurations ("external_acp" or "chain") as the single source of truth for what can be spawned.
services/agentservice
Package agentservice runs prompts against a task chain and persists their session history.
Package agentservice runs prompts against a task chain and persists their session history.
services/agentview
Package agentview computes, for a workspace path, the access the agent would actually have, by running the agent's own gates rather than a parallel reimplementation.
Package agentview computes, for a workspace path, the access the agent would actually have, by running the agent's own gates rather than a parallel reimplementation.
services/chainagents
Package chainagents seeds the declared-agent registry from the runtime's own task chains.
Package chainagents seeds the declared-agent registry from the runtime's own task chains.
services/chatservice
Package chatservice persists the conversation thread.
Package chatservice persists the conversation thread.
services/clikv
Package clikv reads and writes the CLI's persisted settings (the cli.* KV namespace) and owns the scope of every one of them.
Package clikv reads and writes the CLI's persisted settings (the cli.* KV namespace) and owns the scope of every one of them.
services/echotool
Package echotool is the wiring fixture: one tool, `echo`, that returns its input and nothing else.
Package echotool is the wiring fixture: one tool, `echo`, that returns its input and nothing else.
services/eventlog
Package eventlog is the service tier over the durable, append-only domain event log, which itself lives in internal/store/runtimetypes.
Package eventlog is the service tier over the durable, append-only domain event log, which itself lives in internal/store/runtimetypes.
services/eventtrigger
Package eventtrigger routes durable events to the task chains operators configured to react to them, declared in trigger-*.json files.
Package eventtrigger routes durable events to the task chains operators configured to react to them, declared in trigger-*.json files.
services/fleetservice
build.go composes an in-process fleet: agent registry, agentinstance kernel, operator inbox, report router, and the fleet Service, so a host process can dispatch missions as subagents of itself.
build.go composes an in-process fleet: agent registry, agentinstance kernel, operator inbox, report router, and the fleet Service, so a host process can dispatch missions as subagents of itself.
services/gointel
Package gointel is the agent's in-process Go code intelligence: a warm, type-checked view of the Go module under the workspace root, exposed as read-only tools (go_describe, go_definition, go_references, go_implementations, go_symbols, go_diagnostics).
Package gointel is the agent's in-process Go code intelligence: a warm, type-checked view of the Go module under the workspace root, exposed as read-only tools (go_describe, go_definition, go_references, go_implementations, go_symbols, go_diagnostics).
services/gojatool
Package gojatool is the agent's embedded ECMAScript sandbox: script tools (operator *.js files) and goja_eval (model-driven bounded compute) on one goja runtime.
Package gojatool is the agent's embedded ECMAScript sandbox: script tools (operator *.js files) and goja_eval (model-driven bounded compute) on one goja runtime.
services/hitlservice
Package hitlservice evaluates approval policies for tool calls, returning allow/deny/approve decisions.
Package hitlservice evaluates approval policies for tool calls, returning allow/deny/approve decisions.
services/jqtool
Package jqtool is the agent's jq engine: one tool, `jq_query`, that runs a jq program (github.com/itchyny/gojq, pure Go) over a JSON or YAML document and returns the emitted values.
Package jqtool is the agent's jq engine: one tool, `jq_query`, that runs a jq program (github.com/itchyny/gojq, pure Go) over a JSON or YAML document and returns the emitted values.
services/localtools
Package localtools provides tools that fire around chain execution: approval gates and host-side helpers.
Package localtools provides tools that fire around chain execution: approval gates and host-side helpers.
services/localtools/mcpoauth
Package mcpoauth implements the MCP OAuth 2.1 Authorization Code + PKCE flow for CLI clients: server metadata discovery (RFC 8414), dynamic client registration (RFC 7591), and the local callback server.
Package mcpoauth implements the MCP OAuth 2.1 Authorization Code + PKCE flow for CLI clients: server metadata discovery (RFC 8414), dynamic client registration (RFC 7591), and the local callback server.
services/mcpserverservice
Package mcpserverservice stores MCP server configs.
Package mcpserverservice stores MCP server configs.
services/mcpworker
Package mcpworker keeps MCP server connections alive across chain steps.
Package mcpworker keeps MCP server connections alive across chain steps.
services/missionchanges
Package missionchanges answers two oversight questions from a mission's already-journaled work: what the unit changed, and whether its attention wandered outside its workspace.
Package missionchanges answers two oversight questions from a mission's already-journaled work: what the unit changed, and whether its attention wandered outside its workspace.
services/missionservice
Package missionservice stores mission records: the durable, agent-reportable half of the fleet manager.
Package missionservice stores mission records: the durable, agent-reportable half of the fleet manager.
services/missiontools
Package missiontools is the per-mission tool grant a dispatched unit holds while running unattended: report progress, ask for attention, maintain a living plan, end with a verdict, and heartbeat.
Package missiontools is the per-mission tool grant a dispatched unit holds while running unattended: report progress, ask for attention, maintain a living plan, end with a verdict, and heartbeat.
services/onboarding
Package onboarding is the first-run zero-config path: it registers a probed local Ollama backend and sets it as default.
Package onboarding is the first-run zero-config path: it registers a probed local Ollama backend and sets it as default.
services/operatorinbox
Package operatorinbox is the durable attention surface for mission reports that reached no live supervising session.
Package operatorinbox is the durable attention surface for mission reports that reached no live supervising session.
services/oracletools
Package oracletools is the oracle's tool grant: one model-facing tool, submit_verdict, bound to one durable ask for one chain execution.
Package oracletools is the oracle's tool grant: one model-facing tool, submit_verdict, bound to one durable ask for one chain execution.
services/presence
Package presence lets an editor-spawned contenox process self-register into the shared store so the fleet board can show it.
Package presence lets an editor-spawned contenox process self-register into the shared store so the fleet board can show it.
services/project
Package project owns a project's portable identity marker at <projectRoot>/.contenox/workspace.id: a stable UUID plus an optional friendly Name, travelling with the directory rather than the host-local grant list.
Package project owns a project's portable identity marker at <projectRoot>/.contenox/workspace.id: a stable UUID plus an optional friendly Name, travelling with the directory rather than the host-local grant list.
services/reportrouter
Package reportrouter delivers missionservice's report, ask, status and plan-revision events to the session that fired the mission, falling back to the operator inbox when none is live.
Package reportrouter delivers missionservice's report, ask, status and plan-revision events to the session that fired the mission, falling back to the operator inbox when none is live.
services/searchtool
Package searchtool exposes the workspace retrieval index to an agent as one local toolset, provider "workspace", one tool: workspace_search.
Package searchtool exposes the workspace retrieval index to an agent as one local toolset, provider "workspace", one tool: workspace_search.
services/sessionservice
Package sessionservice stores CLI chat sessions so conversations persist across terminal restarts.
Package sessionservice stores CLI chat sessions so conversations persist across terminal restarts.
services/setupcheck
Package setupcheck evaluates local runtime readiness (defaults, backends) for the CLI.
Package setupcheck evaluates local runtime readiness (defaults, backends) for the CLI.
services/shellenvservice
Package shellenvservice persists the operator-defined environment variables contenox injects into shells it spawns, layered on top of the environment scrub so they always win.
Package shellenvservice persists the operator-defined environment variables contenox injects into shells it spawns, layered on top of the environment scrub so they always win.
services/toolguidance
Package toolguidance appends short orientation lines to a tool's textual result, derived from per-session counters.
Package toolguidance appends short orientation lines to a tool's textual result, derived from per-session counters.
services/vfs
Package vfs is the single home for workspace-root containment: resolving a candidate path against a root and rejecting anything that escapes it, symlinks included.
Package vfs is the single home for workspace-root containment: resolving a candidate path against a root and rejecting anything that escapes it, symlinks included.
services/workspacegrants
Package workspacegrants owns the durable, hot-reloadable workspace-root allowlist beyond serve's launch-time roots: a durable config value plus a fire-and-forget bus doorbell that tells a running serve to reload.
Package workspacegrants owns the durable, hot-reloadable workspace-root allowlist beyond serve's launch-time roots: a durable config value plus a fire-and-forget bus doorbell that tells a running serve to reload.
services/workspaceindex
Package workspaceindex builds and queries a local retrieval index over a workspace: `contenox index` fills it, `contenox search` reads it, and a local tool exposes the same read to the agent.
Package workspaceindex builds and queries a local retrieval index over a workspace: `contenox index` fills it, `contenox search` reads it, and a local tool exposes the same read to the agent.
surfaces/beam/app
Package app is beam's composition loop: the app-shell that owns the single select over terminal input, the engine-bridge event stream, and one deterministic ticker, folding each event into component state and committing exactly one frame per iteration.
Package app is beam's composition loop: the app-shell that owns the single select over terminal input, the engine-bridge event stream, and one deterministic ticker, folding each event into component state and committing exactly one frame per iteration.
surfaces/beam/comp/approval
Package approval renders beam's in-session HITL card: tool, arguments, policy rule, and diff, in that order — diff last, closest to the y/n line — across pending/resolved/cancelled.
Package approval renders beam's in-session HITL card: tool, arguments, policy rule, and diff, in that order — diff last, closest to the y/n line — across pending/resolved/cancelled.
surfaces/beam/comp/brand
Package brand renders beam's identity device: the fresh-session welcome header and the persistent status-bar identity segment, both built around the vertical brand-mint beam-bar `▌` and, once per session, the logo-mark as block art.
Package brand renders beam's identity device: the fresh-session welcome header and the persistent status-bar identity segment, both built around the vertical brand-mint beam-bar `▌` and, once per session, the logo-mark as block art.
surfaces/beam/comp/composer
Package composer owns beam's input buffer: a pure state machine over text, agnostic to terminals and key encodings, behind the bottom-fixed composer region.
Package composer owns beam's input buffer: a pure state machine over text, agnostic to terminals and key encodings, behind the bottom-fixed composer region.
surfaces/beam/comp/fileaddr
Package fileaddr sources the candidates behind beam's @-mention picker: the files of the session's grant-bounded workspace root (via vfs, the only dependency on it under beamtui), filtered like the agent's own find_files, ranked and capped by comp/picker.
Package fileaddr sources the candidates behind beam's @-mention picker: the files of the session's grant-bounded workspace root (via vfs, the only dependency on it under beamtui), filtered like the agent's own find_files, ranked and capped by comp/picker.
surfaces/beam/comp/palette
Package palette owns slash-command discovery for beam's composer: the merged remote+local command set, the case-insensitive `/` prefix filter, and the overlay rows drawn in the live region.
Package palette owns slash-command discovery for beam's composer: the merged remote+local command set, the case-insensitive `/` prefix filter, and the overlay rows drawn in the live region.
surfaces/beam/comp/picker
Package picker is beam's generic keyboard list overlay: the filtered, ranked, windowed list every "choose one of these" surface renders through.
Package picker is beam's generic keyboard list overlay: the filtered, ranked, windowed list every "choose one of these" surface renders through.
surfaces/beam/comp/statusbar
Package statusbar renders beam's persistent one-line status bar: identity, session, activity, context budget, operator inbox, missions and connection health.
Package statusbar renders beam's persistent one-line status bar: identity, session, activity, context budget, operator inbox, missions and connection health.
surfaces/beam/comp/transcript
Package transcript renders one beam session's ordered record — user turns, streamed assistant prose, thought traces, tool-call cards, mission reports and lifecycle cards, shell output and turn notices — as frame data.
Package transcript renders one beam session's ordered record — user turns, streamed assistant prose, thought traces, tool-call cards, mission reports and lifecycle cards, shell output and turn notices — as frame data.
surfaces/beam/frame
Package frame is beam's rendering schema: the pure-data contract between components (pure functions of (state, width) -> []Line) and the terminal engine that draws it.
Package frame is beam's rendering schema: the pure-data contract between components (pure functions of (state, width) -> []Line) and the terminal engine that draws it.
surfaces/beam/input
Package input defines beam's decoded terminal input events and the pure parser that produces them from raw bytes.
Package input defines beam's decoded terminal input events and the pure parser that produces them from raw bytes.
surfaces/beam/keymap
Package keymap is beam's sole key arbiter.
Package keymap is beam's sole key arbiter.
surfaces/beam/sanitize
Package sanitize is beam's one gate between untrusted text and a [frame.Span], which draws its text as literal cells with no interpretation beyond the style table.
Package sanitize is beam's one gate between untrusted text and a [frame.Span], which draws its text as literal cells with no interpretation beyond the style table.
surfaces/beam/sessionvitals
Package sessionvitals holds the surface-neutral facts about one live agent session — what is happening right now (Tracker), how full the context window is (ContextUsage), what deserves the operator's attention (Alerter), and what a session is called (Label, Roster).
Package sessionvitals holds the surface-neutral facts about one live agent session — what is happening right now (Tracker), how full the context window is (ContextUsage), what deserves the operator's attention (Alerter), and what a session is called (Label, Roster).
surfaces/beam/style
Package style is beam's only StyleID→terminal-attributes table: the tier ladder (truecolor → 256 → 16 → mono), the capability snapshot that selects a tier, the brand ladder, and the glyph set that carries meaning when color is unavailable.
Package style is beam's only StyleID→terminal-attributes table: the tier ladder (truecolor → 256 → 16 → mono), the capability snapshot that selects a tier, the brand ladder, and the glyph set that carries meaning when color is unavailable.
surfaces/beam/term
Package term owns the terminal: the only beam package allowed to read terminal state or write to the tty.
Package term owns the terminal: the only beam package allowed to read terminal state or write to the tty.
surfaces/beam/testkit
Package testkit is beam's shared test infrastructure: the reference encoding that turns frame data into reviewable golden files, the golden compare/update helper, the fixture corpus, FakeEngineBridge, and the liveness frame-diff harness.
Package testkit is beam's shared test infrastructure: the reference encoding that turns frame data into reviewable golden files, the golden compare/update helper, the fixture corpus, FakeEngineBridge, and the liveness frame-diff harness.
surfaces/beam/textwidth
Package textwidth centralizes rune-safe terminal cell-width math for beam: every width measurement, truncation, pad, and wrap goes through here instead of ad hoc len() arithmetic.
Package textwidth centralizes rune-safe terminal cell-width math for beam: every width measurement, truncation, pad, and wrap goes through here instead of ad hoc len() arithmetic.
surfaces/beam/vfs
Package vfs is the single home for workspace-root containment: resolving a candidate path against a root and rejecting anything that escapes it, symlinks included.
Package vfs is the single home for workspace-root containment: resolving a candidate path against a root and rejecting anything that escapes it, symlinks included.
surfaces/contenoxcli/brand
Package brand renders contenox's identity device for plain-writer surfaces: the logo-mark as block art beside the wordmark.
Package brand renders contenox's identity device for plain-writer surfaces: the logo-mark as block art beside the wordmark.
surfaces/contenoxcli/sanitize
Package sanitize is beam's gate between untrusted text and a rendered span.
Package sanitize is beam's gate between untrusted text and a rendered span.
surfaces/contenoxcli/textwidth
Package textwidth centralizes rune-safe terminal cell-width math for beam.
Package textwidth centralizes rune-safe terminal cell-width math for beam.
surfaces/fleetboot
Package fleetboot builds the in-process mission fleet a surface embeds so /mission is dispatched as a subagent of the host process.
Package fleetboot builds the in-process mission fleet a surface embeds so /mission is dispatched as a subagent of the host process.
Package libacp implements the Agent Client Protocol (ACP) v1, the JSON-RPC-over-NDJSON protocol editors and agents use to talk to each other.
Package libacp implements the Agent Client Protocol (ACP) v1, the JSON-RPC-over-NDJSON protocol editors and agents use to talk to each other.
acpexec
Package acpexec spawns a subprocess and wires its stdin/stdout together as a single io.ReadWriteCloser, the transport shape libacp's connections expect.
Package acpexec spawns a subprocess and wires its stdin/stdout together as a single io.ReadWriteCloser, the transport shape libacp's connections expect.
cmd/acp-stub-agent command
Command acp-stub-agent is a hermetic ACP Agent used to validate libacp's agent-side wire dispatch against ACP conformance clients, without any LLM backend.
Command acp-stub-agent is a hermetic ACP Agent used to validate libacp's agent-side wire dispatch against ACP conformance clients, without any LLM backend.
Package libbus is a high-level publish-subscribe abstraction over a message broker, offering fire-and-forget publish, streaming subscriptions, and request-reply (Serve/Request) on top of pluggable backends (NATS, SQLite, in-memory).
Package libbus is a high-level publish-subscribe abstraction over a message broker, offering fire-and-forget publish, streaming subscriptions, and request-reply (Serve/Request) on top of pluggable backends (NATS, SQLite, in-memory).
Package libcipher provides cryptographic utilities for encryption, decryption, integrity verification, and key generation: AES-GCM, AES-CBC with HMAC, sealed HMAC hashes, and Ed25519 signing keys.
Package libcipher provides cryptographic utilities for encryption, decryption, integrity verification, and key generation: AES-GCM, AES-CBC with HMAC, sealed HMAC hashes, and Ed25519 signing keys.
Package libdbexec provides driver-agnostic interfaces (DBManager, Exec, QueryRower) for SQL access, implemented for PostgreSQL (lib/pq) and SQLite.
Package libdbexec provides driver-agnostic interfaces (DBManager, Exec, QueryRower) for SQL access, implemented for PostgreSQL (lib/pq) and SQLite.
Package libevents holds the consumer-side state of an event log: durable cursors, firing claims with recorded outcomes, listener subscriptions, and staged events held until a due time.
Package libevents holds the consumer-side state of an event log: durable cursors, firing claims with recorded outcomes, listener subscriptions, and staged events held until a due time.
Package liblease implements a cooperative, time-bounded file lease: a single-holder lock backed by an ordinary JSON file that records who holds the lease and until when.
Package liblease implements a cooperative, time-bounded file lease: a single-holder lock backed by an ordinary JSON file that records who holds the lease and until when.
Package liblog provides a date-organised, size-bounded log directory.
Package liblog provides a date-organised, size-bounded log directory.
Package librelay defines the wire contract between a contenox runtime and a relay: the Frame envelope, its NDJSON codec (Reader, Writer), and the relay-level control messages.
Package librelay defines the wire contract between a contenox runtime and a relay: the Frame envelope, its NDJSON codec (Reader, Writer), and the relay-level control messages.
Package libroutine runs recurring background tasks under circuit-breaker protection: Routine is the breaker, group manages one keyed loop per task, and Runner, Job and Schedule build condition-gated job chains on top of a Routine that can be fired directly, on a Schedule, or from a libbus subject.
Package libroutine runs recurring background tasks under circuit-breaker protection: Routine is the breaker, group manages one keyed loop per task, and Runner, Job and Schedule build condition-gated job chains on top of a Routine that can be fired directly, on a Schedule, or from a libbus subject.
libs
libauth module
libdb module
libollama module
tokenizer module
tools
schema-gen command
version command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL