Start
Installation
Release assets and their provenance, per-platform installation, the macOS and Windows installers, Docker, Helm, building from source and running as a service.
Secronyx is distributed as standalone binaries, a macOS package, a Windows MSI, a Dockerfile with a Compose file, and a Helm chart. The binaries and the two installers are produced from the same repository by the release workflow, so a release version means the same thing whichever of those you install; the Dockerfile, the Compose file and the Helm chart ship in the repository and are versioned separately (the chart is at 0.1.0). This page covers getting the software onto a host; Getting started covers the first run and Connect an AI client the client side.
Release assets
Release tags are vX.Y.Z and are created by semantic-release from conventional commits (see Releases and versioning). Every asset below is attached to the GitHub release; `https://github.com/levantar-ai/secronyx/releases/latest` mirrors only the five `secronyx` binaries, which the CI workflow syncs there on each push to main. <version> is the tag without its v prefix:
| Asset | Platform | How it is built |
|---|---|---|
secronyx-linux-amd64 |
Linux x86-64 | SLSA level 3 Go builder, CGO_ENABLED=0, -trimpath -tags=netgo |
secronyx-linux-arm64 |
Linux arm64 | SLSA level 3 Go builder, CGO_ENABLED=0, -trimpath -tags=netgo |
secronyx-darwin-amd64 |
macOS Intel | native macOS runner, CGO_ENABLED=1, -trimpath |
secronyx-darwin-arm64 |
macOS Apple silicon | native macOS runner, CGO_ENABLED=1, -trimpath |
secronyx-<version>-macos-universal.pkg |
macOS installer, universal binary | deploy/macos/build-pkg.sh |
secronyx-windows-amd64.exe |
Windows x86-64 | native Windows runner, CGO_ENABLED=1, -trimpath |
secronyx-<version>-windows-amd64.msi |
Windows installer | WiX v5 from deploy/windows/enterprise |
secronyx-token-server-linux-amd64 |
Linux x86-64 | SLSA level 3 Go builder |
secronyx-token-server-linux-arm64 |
Linux arm64 | SLSA level 3 Go builder |
secronyx-token-server-darwin-amd64 |
macOS Intel | native macOS runner |
secronyx-token-server-darwin-arm64 |
macOS Apple silicon | native macOS runner |
secronyx-token-server-windows-amd64.exe |
Windows x86-64 | native Windows runner |
secronyx-token-server is the optional OAuth token issuer used with --auth-server; most installations do not need it. See Authentication.
The Linux binaries are built by the slsa-framework/slsa-github-generator Go builder, which also uploads a provenance file next to each binary named <asset>.intoto.jsonl (for example secronyx-linux-amd64.intoto.jsonl). The macOS and Windows binaries are built natively because they need CGO, which the SLSA builder cannot cross-compile. The attestation job waits on three smoke tests, which run --version and one query per tool family against secronyx-linux-amd64, secronyx-darwin-arm64 and secronyx-windows-amd64.exe on their own platforms. It then attaches a GitHub build-provenance attestation to every asset in the table, including the .pkg and .msi.
Every binary the release workflow builds embeds its version, commit and build date via -ldflags "-X main.version=... -X main.commit=... -X main.date=...", so secronyx --version on a release asset tells you exactly which release you are running. Always take binaries from the GitHub release rather than from a CI artefact: artefacts are built without those flags, so --version reports nothing useful and they carry no provenance attestation.
Verifying a download
The workflow publishes no separate checksum file; the attestation binds the file digest to the workflow run that produced it. Verify with the GitHub CLI:
gh attestation verify secronyx-linux-amd64 --repo levantar-ai/secronyxFor the Linux binaries you can additionally verify the SLSA provenance against the source tag:
slsa-verifier verify-artifact secronyx-linux-amd64 \
--provenance-path secronyx-linux-amd64.intoto.jsonl \
--source-uri github.com/levantar-ai/secronyx \
--source-tag v<version>Both commands are the standard tools for the formats the workflow produces; neither is part of the repository.
Linux
curl -LO https://github.com/levantar-ai/secronyx/releases/latest/download/secronyx-linux-amd64
chmod +x secronyx-linux-amd64
sudo install -m 0755 secronyx-linux-amd64 /usr/local/bin/secronyx
secronyx --version
secronyx --query get_cpu_info --jsonUse secronyx-linux-arm64 on arm64. The binary is static and has no library or package dependencies. Some collectors call system tools when they exist (journalctl, ss, lsof, package managers and so on) and return empty results when they do not; nothing needs to be installed for the server to start.
Audit logging defaults to /var/log/secronyx/audit.jsonl. Create that directory for the account that will run the server, or pass --audit-output with a writable path; otherwise events go to stderr, which is deliberate but noisy. See Audit logging.
macOS
Two options: the bare binary, or the installer package.
Binary
curl -LO https://github.com/levantar-ai/secronyx/releases/latest/download/secronyx-darwin-arm64
chmod +x secronyx-darwin-arm64
sudo install -m 0755 secronyx-darwin-arm64 /usr/local/bin/secronyx
secronyx --versionUse secronyx-darwin-amd64 on Intel. This is the right choice for a local MCP client such as Claude Desktop or Claude Code.
Installer package
secronyx-<version>-macos-universal.pkg contains a universal binary and is intended for managed fleets running in hybrid mode against the Secronyx service, not for a local stdio client. It installs:
| Item | Location |
|---|---|
| Binary | /usr/local/bin/secronyx |
| LaunchDaemon | /Library/LaunchDaemons/com.secronyx.agent.plist |
| Configuration directory | /etc/secronyx/ |
| Log (stdout and stderr of the daemon) | /var/log/secronyx.log |
The post-install script creates /etc/secronyx, sets ownership on the plist and loads the daemon with launchctl load. The daemon is KeepAlive on unsuccessful exit, throttled to one restart per 10 seconds, and runs at nice level 10.
Interactive installation (open the package or double-click it) walks through welcome, licence, a login pane and a conclusion screen. For unattended installation supply an API key in one of two ways; the script reads and then deletes install.conf, and records the key in the daemon's environment and in /etc/secronyx/agent.env (mode 0600):
# Option 1: a configuration file the installer consumes
sudo mkdir -p /etc/secronyx
echo "API_KEY=sk_your_api_key_here" | sudo tee /etc/secronyx/install.conf
sudo installer -pkg secronyx-<version>-macos-universal.pkg -target /
# Option 2: an environment variable passed through sudo
export SECRONYX_API_KEY="sk_your_api_key_here"
sudo -E installer -pkg secronyx-<version>-macos-universal.pkg -target /The build script signs the package only when INSTALLER_SIGNING_IDENTITY is set, and the release workflow does not set it, so treat the published package as unsigned and install it from the command line or through your MDM rather than relying on Gatekeeper's double-click path.
To remove it:
sudo launchctl unload /Library/LaunchDaemons/com.secronyx.agent.plist
sudo rm -f /usr/local/bin/secronyx
sudo rm -f /Library/LaunchDaemons/com.secronyx.agent.plist
sudo rm -rf /etc/secronyx
sudo rm -f /var/log/secronyx.logFleet deployment covers MDM and Jamf rollout.
Windows
Binary
Download secronyx-windows-amd64.exe and run it from wherever you keep tools. It is a console application; for a local client such as Claude Code point the client at the .exe path.
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri "https://github.com/levantar-ai/secronyx/releases/latest/download/secronyx-windows-amd64.exe" -OutFile "secronyx.exe"
.\secronyx.exe --version
.\secronyx.exe --query get_event_log --jsonMSI installer
secronyx-<version>-windows-amd64.msi installs the agent as a Windows service for hybrid mode. Run it without arguments for the interactive wizard (welcome, licence, then an email and password login, then a confirmation page), or silently with an API key for unattended enterprise rollout:
msiexec /i secronyx-<version>-windows-amd64.msi /qn API_KEY=sk_your_api_key_here
msiexec /i secronyx-<version>-windows-amd64.msi /qn API_KEY=sk_xxx AGENT_NAME="Production-Server-01" /l*v install.logThe installer registers a service named Secronyx (display name "Secronyx Agent"), start type automatic, running as LocalSystem, with the binary at C:\Program Files\Secronyx\secronyx.exe. The MSI properties documented for deployment are API_KEY, SAAS_URL, WS_URL, WAKEUP_URL, AGENT_NAME, POLL_TIMEOUT, IDLE_TIMEOUT and INSTALLFOLDER; INSTANCE_ID, DEVICE_TOKEN and DEBUG are defined too. Uninstall with msiexec /x secronyx-<version>-windows-amd64.msi /qn. Windows service documents each property, the credential store and Group Policy deployment.
Docker and Compose
The repository ships a Dockerfile (multi-stage: golang:1.22-alpine builder, alpine:3.19 runtime with ca-certificates, procps, lsof, iproute2, util-linux and coreutils, non-root user mcp with uid 1000, entrypoint /usr/local/bin/secronyx) and a docker-compose.yml. No image is published by the release workflow; Compose builds secronyx:latest locally.
git clone https://github.com/levantar-ai/secronyx
cd secronyx
export SECRONYX_TOKEN="$(openssl rand -base64 32)"
docker compose up secronyx-httpCompose refuses to start without SECRONYX_TOKEN, publishes the port on 127.0.0.1:8080 only, mounts /proc and /sys read-only, and runs the container read-only with all capabilities dropped. The secronyx-stdio service is for stdio clients, the privileged profile adds pid: host and root for collectors that need them, and the auth profile adds the token server. See Docker and Compose.
Kubernetes
The Helm chart is at charts/secronyx (chart version 0.1.0). Its default image reference is ghcr.io/levantar-ai/secronyx; because the workflow does not publish an image you must build and push one and set image.repository and image.tag accordingly. The chart refuses to render without an authentication method, and refuses authentication without TLS unless mcp.allowInsecure=true, mirroring the binary's own start-up check:
kubectl create secret generic secronyx-token \
--from-literal=token="$(openssl rand -base64 32)"
kubectl create secret tls secronyx-tls --cert=cert.pem --key=key.pem
helm install secronyx ./charts/secronyx \
--set image.repository=registry.example.com/secronyx \
--set image.tag=<version> \
--set mcp.auth.token.secretRef.name=secronyx-token \
--set mcp.tls.enabled=true \
--set mcp.tls.secretName=secronyx-tlsSee Kubernetes and Helm for scope values, OIDC and the ServiceMonitor.
Building from source
go.mod declares go 1.23.0 with toolchain go1.24.4; the release and CI workflows run Go 1.22 and let that toolchain line pull go1.24.4 in. There are no C dependencies for the Linux target.
git clone https://github.com/levantar-ai/secronyx
cd secronyx
go build -o secronyx ./cmd/secronyx
go build -o secronyx-token-server ./cmd/secronyx-token-server # optional
./secronyx --versionTo reproduce the release layout, stamp the version and use the same flags as the workflow:
CGO_ENABLED=0 go build -trimpath -tags=netgo \
-ldflags="-s -w -X main.version=$(git describe --tags --always) -X main.commit=$(git rev-parse HEAD) -X main.date=$(date -u +%Y%m%dT%H%M%SZ)" \
-o secronyx ./cmd/secronyxCross-compile with GOOS and GOARCH; the Linux target cross-compiles from anywhere. The macOS and Windows release binaries are built with CGO_ENABLED=1 on their own platforms, so build those natively if you need parity with the release.
GOOS=linux GOARCH=arm64 go build -o secronyx-linux-arm64 ./cmd/secronyx
GOOS=darwin GOARCH=arm64 go build -o secronyx-darwin-arm64 ./cmd/secronyx
GOOS=windows GOARCH=amd64 go build -o secronyx-windows-amd64.exe ./cmd/secronyxRun the unit tests with go test -race ./...; Contributing covers lint, gosec and the integration suite.
Running as a service
Which service mechanism fits depends on the mode you run.
Hybrid mode: the service subcommand
secronyx service install registers the binary with the platform's service manager and is designed for hybrid mode. Everything after -- is passed to the service at start:
sudo secronyx service install -- --mode hybrid --api-key sk_xxx
sudo secronyx service start
sudo secronyx service status- Linux writes
/etc/systemd/system/<name>.service(default namesecronyx) withExecStart=<binary> service run <args>,Restart=on-failure, journal logging and hardening (NoNewPrivileges,ProtectSystem=strict,ProtectHome=read-only,PrivateTmp,ProtectKernelTunables,ProtectKernelModules,ProtectControlGroups), then runssystemctl daemon-reloadandsystemctl enable. Root is required. - macOS writes
/Library/LaunchDaemons/com.levantar.<name>.plist. Root is required. - Windows creates a service through the Service Control Manager with automatic start and restart-on-failure recovery at 5, 30 and 60 seconds. Administrator is required.
The service runner accepts only the hybrid-mode flags (--mode, --api-key, --saas-url, --config-dir, --ws-url, --wakeup-url, --instance-id, --device-token, --poll-timeout, --idle-timeout, --token, and --transport). Passing --transport http to service install does not start an HTTP listener: the runner logs HTTP transport mode not yet implemented for Linux service (or ... Windows service) and idles until stopped. --name chooses a different unit or service name; names must match ^[a-zA-Z][a-zA-Z0-9_-]{0,62}$. service uninstall removes the registration.
HTTP mode: a unit you write
For a long-running HTTP listener invoke the binary directly from your own unit. A systemd example that serves loopback behind a TLS-terminating reverse proxy:
# /etc/systemd/system/secronyx.service
[Unit]
Description=Secronyx HTTP transport
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=secronyx
Group=secronyx
EnvironmentFile=/etc/secronyx/token.env
ExecStart=/usr/local/bin/secronyx --transport http --listen 127.0.0.1:8080 --audit-output /var/log/secronyx/audit.jsonl
Restart=always
RestartSec=5
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/log/secronyx
[Install]
WantedBy=multi-user.target/etc/secronyx/token.env holds SECRONYX_TOKEN=<at least 32 random characters>, which the binary reads when --token is absent. ReadWritePaths matters: under ProtectSystem=strict the default audit directory is read-only and audit events would fall back to the journal. Create the directory and user, then:
sudo useradd --system --no-create-home --shell /usr/sbin/nologin secronyx
sudo install -d -o secronyx -g secronyx -m 0750 /var/log/secronyx
sudo systemctl daemon-reload
sudo systemctl enable --now secronyxServing TLS directly (--tls-cert, --tls-key) and binding a routable address, OIDC, API keys and mutual TLS are covered in Remote access over HTTP.
Upgrading
Replace the binary and restart whatever supervises it; there is no on-disk state to migrate for stdio or HTTP mode. Hybrid-mode agents keep certificates and credentials in the config directory (~/.secronyx by default, or the directory given by --config-dir), which survives an upgrade. Check secronyx --version afterwards and read Releases and versioning for anything marked as a breaking change.
Built 2026-09-19. Source: levantar-ai/secronyx. Found a mistake? Tell us.