Distribution¶
Every channel below installs the same cortex binary built from this repository. Release artifacts, source builds, and make build all enable the cortex_vectors build tag (functional zero-CGO SQLite BLOB vector path); see Build From Source for what happens without it. For current version numbers and artifacts, always consult the Releases page.
Channels at a Glance¶
| Channel | Command | Managed by |
|---|---|---|
| Homebrew (macOS / Linux) | brew tap + brew install cortex |
GoReleaser → lleontor705/homebrew-tap |
| Go toolchain | go install .../cmd/cortex@latest |
You |
| Release binary | Download + checksum verify | GoReleaser (GitHub Releases) |
| Source build | make build |
You |
| Container image | docker pull ghcr.io/lleontor705/cortex |
Release workflow (multi-arch) |
Homebrew (macOS / Linux)¶
Release automation publishes the formula to the lleontor705/homebrew-tap repository (GoReleaser brews: in .goreleaser.yaml, written to Formula/cortex.rb). The in-repo review copy lives at packaging/homebrew/cortex.rb.
brew tap lleontor705/homebrew-tap
brew install cortex
The tap-qualified one-liner works too:
brew install lleontor705/tap/cortex
Upgrade later with brew update && brew upgrade cortex. The formula downloads the prebuilt release archive for your OS/architecture and verifies its sha256; brew install --HEAD cortex builds the latest main commit from source instead (requires Go).
Go Install¶
The module path comes from go.mod (github.com/lleontor705/cortex/v2):
go install github.com/lleontor705/cortex/v2/cmd/cortex@latest
go install compiles without build tags, so this variant ships the degraded sqlite_blob vector stub (lexical FTS5 retrieval only). cortex doctor reports the degraded state. Enable the functional vector path with:
go install -tags cortex_vectors github.com/lleontor705/cortex/v2/cmd/cortex@latest
Release Binary¶
Each release contains cortex_<version>_<os>_<arch>.tar.gz archives (zip for Windows) for macOS, Linux, and Windows on amd64/arm64, plus a checksums.txt manifest.
curl -LO https://github.com/lleontor705/cortex/releases/download/<tag>/checksums.txt
curl -LO https://github.com/lleontor705/cortex/releases/download/<tag>/<archive>
# Linux (GNU coreutils)
sha256sum --ignore-missing -c checksums.txt
# macOS
grep '<archive>' checksums.txt | shasum -a 256 -c -
Then extract the archive and place cortex on your PATH.
Verify Signatures¶
Each release also carries a Sigstore bundle for every archive and for checksums.txt (<asset>.sigstore). The bundles are produced keylessly: the release workflow authenticates through GitHub's OIDC token, Fulcio issues a short-lived certificate, and the entry lands in the Rekor transparency log — this repository stores no signing key or signing secret.
Install cosign, then verify the checksum manifest:
curl -LO https://github.com/lleontor705/cortex/releases/download/<tag>/checksums.txt
curl -LO https://github.com/lleontor705/cortex/releases/download/<tag>/checksums.txt.sigstore
cosign verify-blob \
--bundle checksums.txt.sigstore \
--certificate-identity "https://github.com/lleontor705/cortex/.github/workflows/release.yml@refs/tags/<tag>" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
checksums.txt
Once checksums.txt verifies, sha256sum --ignore-missing -c checksums.txt (see Release Binary) authenticates every archive it lists. An individual archive can also be verified directly by swapping in <archive> and its <archive>.sigstore bundle.
Notes:
- The bundle is self-contained (certificate, signature, and Rekor entry in one file), so no
COSIGN_REPOSITORYsetting is needed: signatures ship as release assets rather than in an OCI registry. - A release cut by
workflow_dispatchsigns from the dispatch branch, so its identity ends with@refs/heads/<branch>. To accept either form, replace--certificate-identitywith--certificate-identity-regexp 'https://github\.com/lleontor705/cortex/\.github/workflows/release\.yml@'. - SPDX SBOMs (
<archive>.sbom.json, generated by syft through GoReleaser) are attached to the same release page.
Build From Source¶
Requirements: Go (the go.mod toolchain directive pins the exact version CI enforces) and Make.
git clone https://github.com/lleontor705/cortex.git
cd cortex
make build # outputs bin/cortex with -tags cortex_vectors (default)
make install # optional: go install ./cmd/cortex into GOPATH/bin
make build passes -tags cortex_vectors unconditionally, so a plain make build already includes the functional zero-CGO vector adapter. A bare go build ./cmd/cortex without the tag still compiles but wires the degraded vector stub; cortex doctor explains the difference. CI, the GoReleaser archives, and the Homebrew head build all use the same tagged configuration.
Docker (GHCR, Multi-Arch)¶
The release workflow publishes the server image (HTTP API + embedded web UI) to GitHub Container Registry for linux/amd64 and linux/arm64:
docker pull ghcr.io/lleontor705/cortex:latest
Tags mirror the release metadata: latest, the git tag, the branch, and sha-<commit>. The image is built from docker/Dockerfile. docker compose up -d uses the same image; see INSTALLATION.md for environment variables, ports, and the web access key flow.
Plugin Packages¶
Two editor/agent plugin packages ship in this repository and are verified by their own harnesses:
# OpenCode plugin (TypeScript, Vitest; Node >= 24, own lockfile)
cd plugin/opencode && npm ci && npm test
# Claude Code plugin (hooks contract harness; needs bash, jq, python3, timeout)
bash plugin/claude-code/scripts/hooks_test.sh
See PLUGINS.md for plugin structure and lifecycle hooks. Neither package is published to npm; they are distributed from this repository.
Contribution & Release Conventions¶
- Pre-push hook: Husky runs
golangci-lint run ./...followed bygo test -v ./...; a push fails fast if either gate fails. - Pull requests: PRs validate against the
developandmastertargets. The body must containCloses #N,Fixes #N, orResolves #Nfor an issue labeledstatus:approved, and the PR needs exactly onetype:*label. - Releases: tag pushes run
.github/workflows/release.yml— GoReleaser builds the archives,checksums.txt, and the Homebrew tap commit; the same workflow publishes the GHCR image.