Installer internals
Two installer scripts live in the repository under scripts/ and are served unchanged from the
docs host:
https://kurahi.com/install.shfor Linux and macOS (bash)https://kurahi.com/install.ps1for Windows (PowerShell 7 or Windows PowerShell 5.1)
curl -fsSL https://kurahi.com/install.sh | bash -s -- --help& ([scriptblock]::Create((iwr -useb https://kurahi.com/install.ps1))) -?What the scripts do
Section titled “What the scripts do”- Resolve the release.
--versionpins one; otherwise the latest release tag is read from the GitHub Releases API. The asset iskolo-<version>-<os>-<arch>.tar.gz(.zipon Windows). - Verify before unpacking.
SHA256SUMS.txtis downloaded first; the archive is hashed while it downloads and a mismatch deletes it. A release withoutSHA256SUMS.txt, or without an entry for the asset, is refused. - Unpack and verify again. The bundle must contain
bundle-manifest.jsonand pass its ownSHA256SUMS; the manifest’s OS, architecture and version must match what was requested. - Install. The bundle goes under the install prefix in its own version directory and the
kololauncher is linked into the bin directory. Previous versions stay for rollback. - First run.
kurahi init --non-interactive --name <id> --bind loopbackcreates the state directory, config and gateway token and runs doctor.kurahi service install --id <id>registers the gateway with the OS service manager.kurahi pair invite --scope attachprints a one-use invitation. Each step has a flag to skip it.
Bundle layout
Section titled “Bundle layout”bin/kolo POSIX launcher (shell builtins only; works with an empty PATH)bin/kolo.cmd Windows launcher (applies a staged update first)node/bin/node pinned Node.js runtime, checksum-verified against the upstream SHASUMSnode/node.exe (Windows)lib/package.json the version truth for `kurahi --version`lib/kolo.mjs entry; lib/dist/ is the built productlib/node_modules/ production dependencies, flat, prunedlib/extensions/ bundled extensionslib/skills/ lib/assets/ lib/docs/bundle-manifest.json os, arch, version, Node.js version, pruned listSHA256SUMS one line per file; `kurahi update` refuses a bundle that fails itThe launcher exports KOLO_BUNDLE_ROOT and runs node/bin/node lib/kolo.mjs. Nothing in the
bundle reads the machine’s PATH, Node.js or npm.
install.sh:
| Flag | Meaning |
|---|---|
--version <v> |
install this release instead of the latest |
--prefix <dir> |
install directory (default ~/.local/share/kolo; KOLO_INSTALL_DIR) |
--bin-dir <dir> |
where kolo is linked (default ~/.local/bin; KOLO_BIN_DIR) |
--bundle <file> |
install from a local bundle instead of downloading |
--sums <file> |
checksum file for a local bundle (default: SHA256SUMS.txt or the .sha256 sibling next to it) |
--name <id> |
identity for the first run (default default; KOLO_IDENTITY) |
--no-init, --no-service, --no-invite |
skip that first-run step |
--dry-run |
resolve the asset and print what would happen; download nothing |
install.ps1 takes the same options as parameters: -Version, -Prefix (default
%LOCALAPPDATA%\KoLo\app), -BinDir (default %LOCALAPPDATA%\KoLo\bin), -Bundle, -Sums,
-Name, -NoInit, -NoService, -NoInvite, -DryRun.
KOLO_HOME sets the state directory for the first run.
Automation
Section titled “Automation”Headless install with no first-run steps, then your own configuration:
curl -fsSL https://kurahi.com/install.sh | bash -s -- --no-init --no-service --no-inviteKOLO_HOME=/srv/kolo/ops-bot kurahi init --non-interactive --name ops-bot --bind loopback --provider openai-compatible --provider-base-url https://llm.example.com/v1 --provider-model my-modelKOLO_HOME=/srv/kolo/ops-bot kurahi service install --id ops-botAir-gapped: download the archive and SHA256SUMS.txt on a connected machine, copy both, and run
the installer with --bundle and --sums. The scripts never contact anything but the release
host, and nothing at all with --bundle.
Verifying a download by hand
Section titled “Verifying a download by hand”sha256sum -c SHA256SUMS.txt --ignore-missingtar -xzf kolo-<version>-linux-x64.tar.gz && kolo-<version>-linux-x64/bin/kolo --versionRelease provenance is attested on the GitHub Release; see Packaging.