Documentation Index
Fetch the complete documentation index at: https://docs.crewship.ai/llms.txt
Use this file to discover all available pages before exploring further.
Install Crewship
Crewship ships as a single, statically-linked Go binary with the Next.js frontend embedded viago:embed. There is no Node runtime at
production deploy time, and the only hard dependency is a container
runtime if you intend to run agents (Docker, Podman, Colima, OrbStack,
Apple Containers, or Rancher Desktop).
Pick the install path that matches how you run software locally — the
three below are first-class and tested on every release.
Homebrew
macOS and Linuxbrew — one command, auto-upgrades.
curl | bash
OS-agnostic install script with SHA-256 + cosign verification.
Docker Compose
Containerised, host doesn’t need Go or Node.
Homebrew
The release pipeline publishes two Homebrew formulae on every tag tocrewship-ai/homebrew-tap (PR #444): a full binary that runs the daemon + embedded Next.js UI + CLI, and a CLI-only binary that’s about half the size and only talks to a remote crewshipd.
crewship (full) | crewship-cli | |
|---|---|---|
| Binary size (darwin/arm64, stripped) | 55 MB | 27 MB |
crewship ask / crew / agent / credential / mission (HTTP-only) | ✅ | ✅ |
crewship start (run the daemon) | ✅ | ❌ |
crewship doctor (local Docker / Apple Container detection) | ✅ | ❌ |
crewship admin (direct SQLite recovery) | ✅ | ❌ |
crewship telemetry | ✅ | ❌ |
crewship memory log/show/restore (local audit chain) | ✅ | ❌ |
conflicts: against each other, so Homebrew refuses to install both on one host. Both archives ship the binary under the same name (crewship), so existing scripts keep working when you switch formulae.
Running a daemon-only subcommand from the CLI-only binary produces cobra’s
unknown command "start" error. If you need to bring up a daemon, install the full formula instead.brew tap step. Upgrades follow the normal flow:
curl | bash
The one-liner installer detects your OS and architecture, downloads the matching release archive from GitHub, verifies the SHA-256 against the signedchecksums.txt, and — when cosign is on your PATH — also
verifies the keyless Sigstore signature against the expected GitHub
Actions OIDC identity.
cosign produces a soft warning rather than a hard failure so
the one-liner keeps working for first-time users — install it from
sigstore.dev/cosign
for full supply-chain verification.
Pinning a version
Custom install directory
By default the script picks the first writable directory on yourPATH (/usr/local/bin, ~/.local/bin, ~/bin, …). Override with:
What the script does
uname -sm→ resolvesOS-arch→ picks the matching release archive.- Downloads the archive and
checksums.txtover TLS. - Computes SHA-256 of the archive, matches against the line in
checksums.txt. - If
cosignis present, verifies the archive’s signature againstEXPECTED_CERT_IDENTITY_RE = https://github.com/crewship-ai/crewship/.github/workflows/release.yml@.*andEXPECTED_OIDC_ISSUER = https://token.actions.githubusercontent.com. - Extracts and moves the
crewshipbinary into the install directory.
scripts/install.sh.
Docker Compose
The repo ships a production-grade compose file atdocker/docker-compose.prod.yml. It builds an image from the
checked-out source, runs the binary as the crewship user, mounts the
Docker socket read-only so agents can be launched, and exposes the
single port (8080 by default) on the host.
Quickstart
ENCRYPTION_KEY and NEXTAUTH_SECRET are generated and persisted on
the data volume the first time the container starts — no .env is
required for the happy path. To bring your own secrets (external
vault, Docker secrets, Kubernetes secret mount, …), set them via the
compose environment: block and the auto-generation step is skipped
for any value that’s already non-empty.
The server is reachable on http://localhost:8080 once the
healthcheck (/healthz) reports healthy — typically within 10 seconds.
Defaults
| Setting | Default | Override |
|---|---|---|
| Host port | 8080 | CREWSHIP_PORT in .env |
| Database | SQLite at /data/crewship.db (named volume crewship-db) | DATABASE_URL |
| Storage | local FS at /var/lib/crewship (named volume crewship-data) | CREWSHIP_STORAGE_BASE_PATH |
| Logs | /var/log/crewship (named volume crewship-logs) | CREWSHIP_LOG_PATH |
| Container provider | Docker | CREWSHIP_CONTAINER_PROVIDER |
| State backend | bbolt | CREWSHIP_STATE_PROVIDER |
ENCRYPTION_KEY and NEXTAUTH_SECRET are auto-generated by the
binary on first boot and persisted to the data volume at
/data/secrets.env (mode 0600); they are not required in the
compose environment: block. The values survive container restarts
because they live on the named volume, not in the container layer.
PostgreSQL mode
For multi-user deployments where SQLite contention becomes a concern, the compose file ships with a commented-out PostgreSQL service. To enable:- Uncomment the
postgres:service block and thecrewship-pgdata:named volume. - Set
DATABASE_URL=postgres://crewship:${POSTGRES_PASSWORD}@postgres:5432/crewshipandPOSTGRES_PASSWORDin.env. - Restart the stack.
postgres:// scheme on
DATABASE_URL; the rest of the configuration is identical.
Docker socket: socket proxy strongly recommended
The default compose mount is/var/run/docker.sock:/var/run/docker.sock:ro.
Read-only on the host, but the container still has Docker API
access, which is functionally root on the host. For production,
swap it for a Tecnativa docker-socket-proxy
with a minimal allow-list (CONTAINERS=1, EXEC=1, IMAGES=1,
POST=1). The compose file calls this out in a comment.
The full container threat model is documented in the
Security threat model.
Verifying the install
After any of the three paths:crewship doctor runs the following checks (each PASS / WARN /
FAIL with a one-line detail):
- Container runtime detected and socket responds
- Data directory present (with
--fixit gets created) - Data directory writable
- Database migration version current
- Sidecar binary present
NEXTAUTH_SECRETis set- Server reachable on its configured port
--fix enables safe auto-repairs (currently: create the data
directory if missing). To check whether crash-reporting telemetry is
opted in, use crewship telemetry status instead — that’s a separate
command.
Next stop: quickstart for the first run and admin user
bootstrap. For development work (running the Go server + Next.js dev
server side-by-side), see Developer installation.
Air-gapped / offline installs
Download the release tarball +checksums.txt + (optionally) the
cosign bundle from GitHub Releases on a network-connected machine,
verify it manually with sha256sum -c and cosign verify-blob, and
copy the binary to your target host. The binary has no runtime fetch
behavior — no embedded analytics, no auto-update — so once it’s on
disk you’re done.
For air-gapped Docker hosts, docker save crewship-ai/crewship:v0.1.0-beta.1
into a tarball on a connected machine, transfer, then docker load
on the target.
Related
- Quickstart — first run, admin bootstrap, seeding demo data.
- Developer installation — building from source,
dev.sh, multi-instance layout. - Environment variables — full reference of
CREWSHIP_*knobs. - Telemetry — opt-out before the first start if you prefer.