halos

module
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Oct 29, 2026 License: Apache-2.0

README

Ship AI coding tools like software.
Versioned · signed · ring-deployed · proven by evals

CI Latest release Go Reference Apache-2.0 Docs

Open in GitHub Codespaces

Start here · Quickstart · Architecture · CLI · Threat model


Halos is the open-source control plane for AI coding CLIs: Claude Code, Codex, Gemini CLI, Copilot CLI, Cursor CLI and OpenCode.

  • One signed release per ring. A policy repo becomes versioned, content-addressed releases that halod and the gateway enforce on every machine.
  • Every change is staged and measured. Dark launch, canary, A/B and shadow behind evals and live telemetry; promotion is a PR a human merges.
  • Rollback is a pointer, not a Slack message. A regression measured at the gateway trips a signed kill list that gateways pick up in about 10 s (when halo-server serves it); any other regression opens a rollback PR.

Quickstart

brew install dshakes/tap/halo      # other installs below
halo quickstart                    # the whole stack in Docker, about a minute
halo doctor && halo onboard local  # or pin and manage the CLIs on this machine
halo onboard company               # or: policy repo, gateway, IdP, fleet, first PR

Each path can also be driven by the AI CLI you already use: Start here.

How it works

Your platform team keeps a policy repo: a Git repo that halo init creates. It starts as one file, and developers never touch it.

# halos.yaml: the whole policy, in simple mode
org: acme
tools: {claude-code: 2.1.280, codex: {version: 0.99.0, model: codex}}
provider: anthropic                    # bedrock | vertex | openai | gemini | multi
models: {default: claude-sonnet-5-5, strong: claude-opus-5-5, codex: openai/gpt-5-codex}
gateway: https://ai.acme.example
identity: {issuer: https://login.acme.example, audience: halos, adminGroups: [ai-platform]}
safety: standard                       # strict | standard | relaxed: never bypasses permissions
rollout: standard                      # fast | standard | careful: rings, canary steps, bake times, gates

Presets expand into profiles, rings and gateway routes. Intent commands write the rest for you. The ones that write policy (upgrade start, model switch, enable, eject) support --dry-run, validate their output and list the files they change; halo kill writes to halo-server at once (no release) and takes effect at the next poll, by default 10 s at gateways and 60 s on devices:

# A/B + gated rollout for a CLI upgrade. Builds and signs a candidate release, so it needs a registry
# and key (HALO_REGISTRY / HALO_KEY) and the GA ring's published pointer, or --baseline <digest>.
# --dry-run still reads that pointer.
halo upgrade start claude-code 2.1.300 --registry ghcr.io/acme/halos --key halo.key
halo model switch strong claude-opus-5 --canary
halo enable mcp github --url https://… --for 10%
halo kill <experiment|toggle|rollout> --reason "…"
halo status                                   # rings, rollouts, experiments, toggles
halo explain | halo eject                     # see, or take over, the full policy

A change is a pull request:

  1. CI runs halo validate, halo plan and evals.
  2. On merge, halo release publish builds and signs a release for each ring.
  3. Every environment picks it up: halod on laptops and CI runners, the Dev Container Feature in workspaces, and halo-proxy or Kong for model traffic.

examples/simple is the one-file version and examples/acme-corp the full one; make demo runs it locally; halo quickstart is the same stack (55 s warm, 86 s with a cold build cache, on an arm64 laptop with Docker Desktop 28). Codespaces is UNVERIFIED: CI builds the dev container, but the demo has not been run in a real Codespace. More: how Halos works.

Every rollout technique, as code

Progressive rings, canary ramp, blue-green, dark launch, holdout

A Rollout is an ordered list of steps. Each step sets:

  • a strategy and an exposure
  • a bake time and a minimum sample size
  • gates: metric guardrails, an eval scorecard, a human approval
apiVersion: halos.dev/v1
kind: Rollout
name: opus-5-5-upgrade
axis: traffic                    # client: a CLI/config release · traffic: a model route
experiment: opus-5-5-canary
change: {alias: opus}
steps:
  - name: dark-launch            # mirrored to the candidate, nothing served
    strategy: dark-launch
    percent: 10
    bake: 2d
    gates:
      scorecard: {file: evals/opus-5-5.scorecard.json, variant: opus-5-5, minPass1: 0.75}
  - name: canary-5
    strategy: canary
    percent: 5
    bake: 12h
    minSamples: 500
    gates:
      guardrails: [{metric: halo.api.error_rate, direction: decrease, maxRegression: 0.05}]
  - name: holdout                # 5% stay on the old model for 14 days
    strategy: holdout
    percent: 5
    bake: 14d
    gates: {approval: true}

The controller evaluates every active step on each tick (default every 5 minutes):

  • A guardrail breach measured at the gateway trips the signed kill switch on its own (traffic axis, when halo-server serves a kill list). Any other breach opens a rollback PR and notifies.
  • Progress always opens a PR that a human merges. Nothing auto-promotes.

Commands: halo rollout plan | status | simulate | advance | rollback (docs).

Experiments and feature toggles

A/B on the client axis, canary on the traffic axis, shadow mirrored to a judge, all assigned by one deterministic hash
  • A/B a CLI version or settings change. Each arm is its own signed release channel, and halod picks the arm with the same hash the gateway uses.
  • Canary a model at the gateway, sticky per user and session, so agents never switch model mid-task.
  • Shadow real agent sessions to a candidate model, every step or just the first, and compare its next action with the control and with what production actually did (tool agreement, fidelity vs a measured noise floor, invalid calls, premature stops), plus an LLM judge. Nothing from the candidate is served or executed.
  • Toggles turn one capability (an MCP server, a hook, a model route) on for a ring, an IdP group or a percentage of users. The payload ships inside the signed release. A kill needs no new release and takes effect at the next poll: about 10 s at gateways, 60 s on devices.

Measure, don't guess

Change, offline evals, ring exposure, telemetry, mSPRT verdict, promote PR or auto-rollback
Offline evals Replay real tasks in containers, N trials each. Reports pass@1, pass@k and pass^k, with paired bootstrap CIs on pass rate, cost, tokens and time. Flaky tasks are detected and excluded. Verdict: ship, hold or block.
Matrix Runs one suite across harness × model × provider (Claude Code vs Codex vs Gemini, Anthropic vs Bedrock) and produces a PR-ready report.
Online Shadow pairs are graded against a pinned LLM-judge rubric and land in the same evidence plane as cost, latency and errors.
Sequential stats mSPRT guardrails stop an experiment as soon as a regression is real, not at an arbitrary horizon.
Upgrade watch halo upgrade watch spots a new CLI or model release, pins it on a branch, runs the suite and opens a PR with the scorecard.

Six CLIs, any provider

Claude Code Codex Gemini CLI Copilot CLI Cursor CLI OpenCode
Version pin CLI-enforced halod halod halod not installable by halod halod
Model lock ✓ ✓ ✓ default only - ✓
MCP allowlist ✓ ✓ ✓ ✓ - -
Permissions ✓ ✓ partial partial (UNVERIFIED) - ✓
Gateway ✓ ✓ ✓ - - ✓
Telemetry ✓ ✓ ✓ ✓ - -

A setting a CLI can't enforce produces a warning in the release manifest; it is never silently dropped. halo harnesses prints the capability matrix; the harness reference has every cell and its source.

Traffic goes through halo-proxy to Anthropic, Bedrock (SigV4), Vertex, OpenAI, Azure OpenAI or the Gemini API:

  • Model aliases map to weighted splits and priority failover, with a circuit breaker per target.
  • Moving a model to another provider is a one-line policy change.
  • If you already run Kong, the halo-kong plugin applies the same identity, cohort and experiment decisions. It routes each alias to its first target, with no translation or failover.

Enterprise controls

Control What it does Docs
RBAC IdP groups map to viewer, operator, approver, auditor, admin; every route is deny-by-default and denials are audited security model
SCIM 2.0 Okta and Entra provisioning; deprovisioning revokes sessions and device tokens at once SCIM
Org units Delegated owners and overlays that can tighten, never loosen, enforced fields org hierarchy
Cost budgets Per user, group, ring or org caps in USD or tokens, warn or enforce, answered as 429 at the gateway budgets
Audit to SIEM Hash-chained audit forwarded to Splunk HEC, signed webhook or syslog TLS, native or OCSF SIEM export
CI and workload identity RFC 8693 exchange of a GitHub, GitLab, Buildkite, CircleCI or cloud OIDC token for a credential of at most 1 h CI and cloud agents
Agent identity Delegated agent credentials with an act chain, down-only model scope and an A2A allowlist agent identity
Extension governance Marketplace, plugin, skill and subagent policy, rendered where the vendor documents a key and warned elsewhere harness reference
OTel GenAI gen_ai.* semantic-convention metrics and opt-in content-free spans from the gateway evidence plane
HA on Postgres Several halo-server replicas behind one load balancer with a fenced controller lease production deployment
Vendor admin sync One policy drives the vendors' cloud admin consoles; halo admin plan fails CI on drift, apply writes what has a public API and never loosens vendor admin sync
Change governance Freeze windows and an incident freeze hold advances and promotions, never rollbacks; N-of-M approvals with separation of duties and tickets; halo plan --diff previews who a change reaches change governance

Runs everywhere

macOS, Linux, Windows, Dev Containers, Codespaces and Coder workspaces, CI runners, Kubernetes via Helm

The current release is v0.3.0 (CHANGELOG). Or build from source: git clone https://github.com/dshakes/halos && cd halos && make build (builds halo, halod, halo-shadow, halo-server, halo-proxy and halo-kong into bin/).

brew install dshakes/tap/halo                                                            # macOS / Linux
scoop bucket add dshakes https://github.com/dshakes/scoop-bucket && scoop install halo   # Windows

# The script works everywhere; halod runs as root from a root-owned prefix
curl -fsSLO https://raw.githubusercontent.com/dshakes/halos/v0.3.0/install/install.sh
sh install.sh --version v0.3.0                                        # halo into ~/.local/bin
sudo sh install.sh --version v0.3.0 --prefix /usr/local --with-agent  # plus halod

Also available:

Archives are checksummed and carry SBOMs; checksums.txt is cosign-signed and every archive has a GitHub build-provenance attestation. install.sh verifies the checksums, and the cosign signature when cosign is installed (otherwise it warns). The release workflow re-verifies all of it from the published artifacts before a release counts as done (RELEASING.md, install guide).

Agent-native

halo mcp serve exposes these to any MCP client: validate, plan, rollout status, experiment analysis, toggle evaluation and eval scorecards.

The write tools (propose a rollout step, a rollback or a toggle change, kill a change, run an eval) are opt-in and dry-run by default. Proposals commit to a new local branch; propose_promotion and, on request, the rollout proposals push a review branch and open a PR. None pushes to the base branch, merges or publishes a release. The Claude Code plugin, the Codex config, the Gemini CLI extension and the Copilot CLI config drive the same flows: onboarding (doctor → dry run → approve → write → verify) and rollout (edit → validate → eval → experiment → propose).

Architecture

Client plane, traffic plane and evidence plane with their components

Deep dive, traced to the code: tech stack, components and low-level design.

Security by construction

  • Signed everything. Releases, ring pointers and the kill list are ed25519-signed; releases and pointers can also be co-signed with cosign. Ring pointers carry sequence numbers and an expiry, so a registry can't replay an old one.
  • Identity, never headers. The gateway verifies OIDC JWTs (or, in trusted_header mode, accepts identity only from pinned proxy CIDRs), strips client x-halo-* headers and fails closed on unknown models.
  • Guardrails twice. bypassPermissions and danger-full-access are rejected at validate time and again on the rendered output.
  • Humans own the irreversible step. There is no auto-merge, no auto-promote and no agent (MCP) tool that publishes. Privileged actions land in a hash-chained audit log.

Threat model · SECURITY.md

Status

Every component is implemented and covered by unit, race, e2e (make e2e) and evidence-plane (make obs-e2e) tests. Every pull request also runs three acceptance suites against real software:

Suite Runs against Report
make uat-clis the real Claude Code, Codex, Gemini CLI and Copilot CLI (Cursor CLI and OpenCode are not in this run yet), including the eval runner CLI-REPORT.md
make uat-k8s a kind cluster with the Helm chart installed REPORT.md
make uat-kong open-source Kong 3.9.3 with the halo-kong plugin KONG-REPORT.md

Unit tests also run on Windows and macOS in CI. A nightly provider smoke sends real requests through halo-proxy to Anthropic and OpenAI (streaming and non-streaming) and checks the gateway metrics.

Not yet exercised against the real systems:

  • AWS Bedrock, Vertex, Azure OpenAI and Gemini API accounts (fixture-tested only; the nightly smoke covers them once their secrets are set)
  • Kong Enterprise
  • Windows beyond a CI runner: Intune, Authenticode, an interactive logged-in user (CI runs install.ps1, enroll.ps1 and halod as a SYSTEM scheduled task on a hosted Windows runner)
  • MDM-managed devices (Jamf, Kandji, Intune)
  • Codespaces and Coder workspaces (CI builds the dev container and the Feature with the devcontainer CLI)
  • the GitLab CI template on a real GitLab runner (CI runs its script in a container with gitlab-ci-local, an emulation)
  • the Helm chart on a managed cloud cluster

Contributing

CONTRIBUTING.md · AGENTS.md for coding agents · ADRs · Apache-2.0

Directories

Path Synopsis
cmd
halo command
Command halo is the Halos CLI: validate, render, release, publish and experiment tooling for a policy repo.
Command halo is the Halos CLI: validate, render, release, publish and experiment tooling for a policy repo.
halo-kong command
Command halo-kong is a Kong Go-PDK plugin (Access phase).
Command halo-kong is a Kong Go-PDK plugin (Access phase).
halo-proxy command
Command halo-proxy is Halos's stack-agnostic traffic plane: a reverse proxy that verifies the caller (OIDC JWT or trusted-proxy headers), assigns the rollout ring / experiment variant, rewrites the model, mirrors eligible first-turn requests to halo-shadow, and forwards to the decided upstream or a single --next-hop.
Command halo-proxy is Halos's stack-agnostic traffic plane: a reverse proxy that verifies the caller (OIDC JWT or trusted-proxy headers), assigns the rollout ring / experiment variant, rewrites the model, mirrors eligible first-turn requests to halo-shadow, and forwards to the decided upstream or a single --next-hop.
halo-server command
Command halo-server serves the Halos API and console.
Command halo-server serves the Halos API and console.
halo-shadow command
Command halo-shadow receives mirrored first-turn requests from halo-kong / halo-proxy, replays them against control and candidate, and stores the pairs as JSONL.
Command halo-shadow receives mirrored first-turn requests from halo-kong / halo-proxy, replays them against control and candidate, and stores the pairs as JSONL.
halo/scaffold
Package scaffold generates a minimal, valid Halos policy repo.
Package scaffold generates a minimal, valid Halos policy repo.
halod command
Command halod is the Halos fleet agent: pull the ring's signed release, verify it, apply it atomically, report status.
Command halod is the Halos fleet agent: pull the ring's signed release, verify it, apply it atomically, report status.
deploy
compose/gen command
Command gen renders kong.yml from policy.json: go run ./deploy/compose/gen
Command gen renders kong.yml from policy.json: go run ./deploy/compose/gen
compose/mockidp command
Command mockidp is a demo OIDC issuer standing in for Okta/Entra/Keycloak: it serves discovery + JWKS and mints signed JWTs at GET /token.
Command mockidp is a demo OIDC issuer standing in for Okta/Entra/Keycloak: it serves discovery + JWKS and mints signed JWTs at GET /token.
compose/mockllm command
Command mockllm is a tiny fake model upstream for the compose demo.
Command mockllm is a tiny fake model upstream for the compose demo.
Package features embeds the checked-in Dev Container Feature and Coder module so internal/delivery exporters and the repo share one source of truth.
Package features embeds the checked-in Dev Container Feature and Coder module so internal/delivery exporters and the repo share one source of truth.
internal
a2a
Package a2a fetches and verifies Agent2Agent (A2A) AgentCards for the remote-agent allowlist (ADR-0024): bounded, SSRF-safe https fetches, the card digest Halos pins into policy and releases, and the card's JWS signatures (A2A specification v1.0, section 8.4: RFC 7515 JWS over the RFC 8785 canonical card without its signatures field).
Package a2a fetches and verifies Agent2Agent (A2A) AgentCards for the remote-agent allowlist (ADR-0024): bounded, SSRF-safe https fetches, the card digest Halos pins into policy and releases, and the card's JWS signatures (A2A specification v1.0, section 8.4: RFC 7515 JWS over the RFC 8785 canonical card without its signatures field).
assign
Package assign is the single source of cohort assignment.
Package assign is the single source of cohort assignment.
budget
Package budget meters model spend against the policy's gateway budgets (ADR-0017).
Package budget meters model spend against the policy's gateway budgets (ADR-0017).
bundle
Package bundle publishes and pulls signed release bundles as OCI artifacts.
Package bundle publishes and pulls signed release bundles as OCI artifacts.
cloudagents
Package cloudagents governs background coding agents that run on vendor or CI infrastructure rather than a developer machine (ADR-0034): it normalizes tasks from vendor APIs and GitHub webhooks into one inventory mapped to Halos identities, plans and executes kill fan-out (cancel) and over-limit pauses, and turns finished tasks into session ledger records.
Package cloudagents governs background coding agents that run on vendor or CI infrastructure rather than a developer machine (ADR-0034): it normalizes tasks from vendor APIs and GitHub webhooks into one inventory mapped to Halos identities, plans and executes kill fan-out (cancel) and over-limit pauses, and turns finished tasks into session ledger records.
cloudagents/workflow
Package workflow renders the repository files of the workflow-configured cloud agents (ADR-0034): the Claude Code and Gemini CLI GitHub Actions and Copilot's copilot-setup-steps.yml, SHA-pinned and least-privilege, and checks every rendered file against the security invariants.
Package workflow renders the repository files of the workflow-configured cloud agents (ADR-0034): the Claude Code and Gemini CLI GitHub Actions and Copilot's copilot-setup-steps.yml, SHA-pinned and least-privilege, and checks every rendered file against the security invariants.
controller
Package controller is the automated experiment loop: every tick it evaluates each running experiment (promote.Evaluate), persists the verdict for halo-server, and acts on it.
Package controller is the automated experiment loop: every tick it evaluates each running experiment (promote.Evaluate), persists the verdict for halo-server, and acts on it.
copilot
Package copilot is Halos Copilot (ADR-0035): a language model drafts policy changes, experiment designs and explanations; Halos' deterministic checks (validation, plan, impact preview, the invariant-1 bypass-token scan and internal/stats) verify them; a human approves every write.
Package copilot is Halos Copilot (ADR-0035): a language model drafts policy changes, experiment designs and explanations; Halos' deterministic checks (validation, plan, impact preview, the invariant-1 bypass-token scan and internal/stats) verify them; a human approves every write.
delivery/devcontainer
Package devcontainer exports the Halos Dev Container Feature source (features/halos) with option defaults baked in for one org/ring.
Package devcontainer exports the Halos Dev Container Feature source (features/halos) with option defaults baked in for one org/ring.
delivery/mdm
Package mdm exports a release for MDM delivery: a .mobileconfig (Jamf, Kandji) carrying Claude Code managed settings under com.anthropic.claudecode, an Intune PowerShell script writing HKLM\SOFTWARE\Policies\ClaudeCode, and halod bootstrap scripts.
Package mdm exports a release for MDM delivery: a .mobileconfig (Jamf, Kandji) carrying Claude Code managed settings under com.anthropic.claudecode, an Intune PowerShell script writing HKLM\SOFTWARE\Policies\ClaudeCode, and halod bootstrap scripts.
docgen
Package docgen renders the CLI (cobra tree) and policy (JSON Schema) reference pages for the docs site.
Package docgen renders the CLI (cobra tree) and policy (JSON Schema) reference pages for the docs site.
eval
Package eval is Halos's offline replay harness: it runs a suite of coding tasks against harness variants (CLI version x model x settings) in isolated environments, scores each run with the task's own success check, and renders a scorecard with bootstrap CIs and a paired comparison.
Package eval is Halos's offline replay harness: it runs a suite of coding tasks against harness variants (CLI version x model x settings) in isolated environments, scores each run with the task's own success check, and renders a scorecard with bootstrap CIs and a paired comparison.
fsutil
Package fsutil holds small filesystem helpers shared across commands.
Package fsutil holds small filesystem helpers shared across commands.
gateway
Package gateway holds the traffic-plane logic shared by the halo-kong plugin and halo-shadow: request inspection, cohort decision and model rewrite.
Package gateway holds the traffic-plane logic shared by the halo-kong plugin and halo-shadow: request inspection, cohort decision and model rewrite.
gateway/adapters
Package adapters renders the "put halo-proxy in front of / behind stack X" config snippets shipped under deploy/integrations.
Package adapters renders the "put halo-proxy in front of / behind stack X" config snippets shipped under deploy/integrations.
gateway/kong
Package kong generates the decK declarative config for Kong OSS (db-less) that fronts an org's model traffic and attaches the halo-kong plugin.
Package kong generates the decK declarative config for Kong OSS (db-less) that fronts an org's model traffic and attaches the halo-kong plugin.
gateway/upstreamauth
Package upstreamauth signs requests to provider upstreams that need a gateway-held credential instead of the caller's, so halo-proxy can talk to Amazon Bedrock directly (no orchestrator, no SigV4 sidecar).
Package upstreamauth signs requests to provider upstreams that need a gateway-held credential instead of the caller's, so halo-proxy can talk to Amazon Bedrock directly (no orchestrator, no SigV4 sidecar).
harness
Package harness defines the adapter contract every AI coding CLI implements.
Package harness defines the adapter contract every AI coding CLI implements.
harness/all
Package all registers every built-in harness adapter via blank imports.
Package all registers every built-in harness adapter via blank imports.
harness/claudecode
Package claudecode renders Claude Code's managed settings.
Package claudecode renders Claude Code's managed settings.
harness/codex
Package codex renders OpenAI Codex CLI admin configuration.
Package codex renders OpenAI Codex CLI admin configuration.
harness/copilot
Package copilot renders GitHub Copilot CLI file-based enterprise managed settings (managed-settings.json).
Package copilot renders GitHub Copilot CLI file-based enterprise managed settings (managed-settings.json).
harness/cursor
Package cursor renders Cursor CLI (cursor-agent) enterprise hooks: the system-wide hooks.json is the one root-owned, admin-controlled file the CLI reads.
Package cursor renders Cursor CLI (cursor-agent) enterprise hooks: the system-wide hooks.json is the one root-owned, admin-controlled file the CLI reads.
harness/gemini
Package gemini renders Gemini CLI system settings.
Package gemini renders Gemini CLI system settings.
harness/hutil
Package hutil holds helpers shared by harness adapters.
Package hutil holds helpers shared by harness adapters.
harness/hutil/hutiltest
Package hutiltest provides a shared rich fixture and golden-file helper for adapter tests.
Package hutiltest provides a shared rich fixture and golden-file helper for adapter tests.
harness/opencode
Package opencode renders OpenCode (sst/opencode, npm "opencode-ai") managed configuration: an opencode.json in the system managed-config directory, which OpenCode loads at the highest precedence.
Package opencode renders OpenCode (sst/opencode, npm "opencode-ai") managed configuration: an opencode.json in the system managed-config directory, which OpenCode loads at the highest precedence.
identity
Package identity verifies who a gateway request is from.
Package identity verifies who a gateway request is from.
identity/identitytest
Package identitytest is a tiny OIDC issuer (discovery + JWKS + token minting + an auto-approving authorization-code/PKCE flow) for tests and the compose demo.
Package identitytest is a tiny OIDC issuer (discovery + JWKS + token minting + an auto-approving authorization-code/PKCE flow) for tests and the compose demo.
impact
Package impact answers "who is affected" by a policy change (ADR-0030): for every member of a population (the enrolled fleet, or a policy-only estimate), it resolves ring, experiment variants and effective settings under the base policy and under the new one, and counts who changes, per member kind and per org unit.
Package impact answers "who is affected" by a policy change (ADR-0030): for every member of a population (the enrolled fleet, or a policy-only estimate), it resolves ring, experiment variants and effective settings under the base policy and under the new one, and counts who changes, per member kind and per org unit.
intent
Package intent turns intent-level requests ("upgrade claude-code to X", "canary this model", "enable this MCP server for 10%") into the low-level policy documents that express them, as file changes in the policy repo.
Package intent turns intent-level requests ("upgrade claude-code to X", "canary this model", "enable this MCP server for 10%") into the low-level policy documents that express them, as file changes in the policy repo.
ledger
Package ledger is the agent session ledger (ADR-0031): one normalized, identity-linked record per agent session, built from several evidence sources (halo-proxy spans, Claude Code OTel events, the Anthropic Compliance API, the GitHub enterprise audit log, a JSONL import).
Package ledger is the agent session ledger (ADR-0031): one normalized, identity-linked record per agent session, built from several evidence sources (halo-proxy spans, Claude Code OTel events, the Anthropic Compliance API, the GitHub enterprise audit log, a JSONL import).
mcpserver
Package mcpserver exposes a Halos policy repo to agents over MCP.
Package mcpserver exposes a Halos policy repo to agents over MCP.
onboard
Package onboard is the deterministic core of `halo doctor` and `halo onboard`: detect the AI CLIs on this machine, check the environment and print exact fixes, plan and apply a local install of a ring's managed config, generate a local halo-proxy config, run a headless round trip, and generate a company rollout bundle.
Package onboard is the deterministic core of `halo doctor` and `halo onboard`: detect the AI CLIs on this machine, check the environment and print exact fixes, plan and apply a local install of a ring's managed config, generate a local halo-proxy config, run a headless round trip, and generate a company rollout bundle.
pgstore
Package pgstore is the Postgres backend for running several halo-server and halo-shadow replicas (ADR-0021): versioned forward-only migrations, the shared record logs and KV behind internal/storage, the hash-chained audit table, fleet reports, rollout documents, leader leases with fencing tokens, and halo-shadow's pair table and global budget.
Package pgstore is the Postgres backend for running several halo-server and halo-shadow replicas (ADR-0021): versioned forward-only migrations, the shared record logs and KV behind internal/storage, the hash-chained audit table, fleet reports, rollout documents, leader leases with fencing tokens, and halo-shadow's pair table and global budget.
pgstore/pgtest
Package pgtest opens throwaway Postgres schemas for integration tests.
Package pgtest opens throwaway Postgres schemas for integration tests.
policy
Package policy defines Halos's harness-neutral policy model: the YAML documents an org keeps in its policy repo, and the in-memory form every other package (compiler, gateway, delivery, eval) consumes.
Package policy defines Halos's harness-neutral policy model: the YAML documents an org keeps in its policy repo, and the in-memory form every other package (compiler, gateway, delivery, eval) consumes.
promote
Package promote turns experiment evidence into a rollout decision.
Package promote turns experiment evidence into a rollout decision.
release
Package release builds immutable, content-addressed release bundles: a deterministic tar holding manifest.json plus every rendered file (as blobs/<sha256>).
Package release builds immutable, content-addressed release bundles: a deterministic tar holding manifest.json plus every rendered file (as blobs/<sha256>).
roi
Package roi measures the delivery impact of a policy change (ADR-0027).
Package roi measures the delivery impact of a policy change (ADR-0027).
rollout
Package rollout drives a policy.Rollout through its steps.
Package rollout drives a policy.Rollout through its steps.
server
Package server is the Halos console backend: fleet ingest, policy and experiment read APIs, and the embedded web console.
Package server is the Halos console backend: fleet ingest, policy and experiment read APIs, and the embedded web console.
shadow
Package shadow implements the mirror pipeline: halo-kong posts a Job for sampled first-turn requests, halo-shadow replays it against control and candidate (non-streaming) and stores the pair for later LLM-judge grading.
Package shadow implements the mirror pipeline: halo-kong posts a Job for sampled first-turn requests, halo-shadow replays it against control and candidate (non-streaming) and stores the pair for later LLM-judge grading.
stats
Package stats holds the statistics Halos uses to gate rollouts: always-valid sequential tests (mSPRT), fixed-horizon Welch tests, CUPED variance reduction, paired bootstrap for eval scorecards, and guardrail evaluation.
Package stats holds the statistics Halos uses to gate rollouts: always-valid sequential tests (mSPRT), fixed-horizon Welch tests, CUPED variance reduction, paired bootstrap for eval scorecards, and guardrail evaluation.
storage
Package storage is the persistence seam under halo-server's stores: an append-only record log each store replays into memory, and a small expiring key-value space for short-lived single-use state.
Package storage is the persistence seam under halo-server's stores: an append-only record log each store replays into memory, and a small expiring key-value space for short-lived single-use state.
supplychain
Package supplychain handles agent extension artifacts (skills, plugins, hooks, slash commands, agent definitions) as content-addressed trees (ADR-0028): reading them from the policy repo, fetching pinned remote sources (git commit, OCI digest), computing their digest, and the static scan run by `halo validate` and `halo release build`.
Package supplychain handles agent extension artifacts (skills, plugins, hooks, slash commands, agent definitions) as content-addressed trees (ADR-0028): reading them from the policy repo, fetching pinned remote sources (git commit, OCI digest), computing their digest, and the static scan run by `halo validate` and `halo release build`.
telemetry
Package telemetry generates the OpenTelemetry Collector configuration that receives OTLP from Claude Code, Codex, Gemini CLI and Copilot CLI, normalises their harness-specific metrics into the halo.* schema, and exports to ClickHouse and Prometheus.
Package telemetry generates the OpenTelemetry Collector configuration that receives OTLP from Claude Code, Codex, Gemini CLI and Copilot CLI, normalises their harness-specific metrics into the halo.* schema, and exports to ClickHouse and Prometheus.
telemetry/gwmetrics
Package gwmetrics is halo-proxy's per-request OTLP metrics emitter: the gateway assigns ring/variant itself, so these are the best-attributed online samples for halo.api.error_rate and halo.latency.* (and the only ones for traffic-axis experiments).
Package gwmetrics is halo-proxy's per-request OTLP metrics emitter: the gateway assigns ring/variant itself, so these are the best-attributed online samples for halo.api.error_rate and halo.latency.* (and the only ones for traffic-axis experiments).
telemetry/synth
Package synth emits synthetic OTLP/HTTP (JSON) telemetry shaped like the real harnesses, for control vs treatment cohorts with a known injected effect.
Package synth emits synthetic OTLP/HTTP (JSON) telemetry shaped like the real harnesses, for control vs treatment cohorts with a known injected effect.
toggle
Package toggle evaluates feature-toggle targeting rules and composes the per-harness settings fragments a release carries for client-axis toggles.
Package toggle evaluates feature-toggle targeting rules and composes the per-harness settings fragments a release carries for client-axis toggles.
tools/gendocs command
Command gendocs regenerates the CLI and policy reference pages:
Command gendocs regenerates the CLI and policy reference pages:
upgrade
Package upgrade watches upstream for new versions of the pinned coding CLIs and for new models in configured provider model lists, and turns each new candidate into an eval-gated pull request: it verifies the candidate's install artifacts (sha256 / npm integrity, via release.ArtifactResolver), writes the candidate pin on a branch, runs the eval suite, and opens a PR carrying the scorecard.
Package upgrade watches upstream for new versions of the pinned coding CLIs and for new models in configured provider model lists, and turns each new candidate into an eval-gated pull request: it verifies the candidate's install artifacts (sha256 / npm integrity, via release.ArtifactResolver), writes the candidate pin on a branch, runs the eval suite, and opens a PR carrying the scorecard.
vendoradmin
Package vendoradmin renders one Halos policy into the settings of the vendors' cloud admin consoles (Claude for Teams/Enterprise, ChatGPT workspaces, Gemini for Google Cloud, GitHub Copilot, Cursor), reads the live settings where a vendor publishes a read API, diffs them, and applies the diff where it publishes a write API (ADR-0025).
Package vendoradmin renders one Halos policy into the settings of the vendors' cloud admin consoles (Claude for Teams/Enterprise, ChatGPT workspaces, Gemini for Google Cloud, GitHub Copilot, Cursor), reads the live settings where a vendor publishes a read API, diffs them, and applies the diff where it publishes a write API (ADR-0025).
yamledit
Package yamledit finds a kind/name YAML document in a policy repo (any document of a multi-document file) and edits it by byte splice, leaving comments, formatting and every other document intact.
Package yamledit finds a kind/name YAML document in a policy repo (any document of a multi-document file) and edits it by byte splice, leaving comments, formatting and every other document intact.
test
load command
Command load drives a real halo-proxy binary against mock upstreams and reports added latency, throughput, errors, memory/goroutine growth over a soak, failover + circuit-breaker behaviour, and long-lived SSE integrity.
Command load drives a real halo-proxy binary against mock upstreams and reports added latency, throughput, errors, memory/goroutine growth over a soak, failover + circuit-breaker behaviour, and long-lived SSE integrity.
uat/k8s/uatidp command
Command uatidp is the mock OIDC issuer for `make uat-k8s`: discovery, JWKS, auth-code+PKCE (/authorize auto-approves the identity set by PUT /_uat/login) and GET /mint, which hands out a gateway JWT for any user.
Command uatidp is the mock OIDC issuer for `make uat-k8s`: discovery, JWKS, auth-code+PKCE (/authorize auto-approves the identity set by PUT /_uat/login) and GET /mint, which hands out a gateway JWT for any user.
Package web exposes the built console.
Package web exposes the built console.

Jump to

Keyboard shortcuts

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