* feat(desktop): support macOS cross-platform packaging * fix(desktop): use releaseType instead of publishingType in electron-builder publish config publishingType is not a valid electron-builder key; the correct GitHub provider option is releaseType. The previous value was silently ignored, causing uploads to be skipped and breaking auto-update. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(release): standardize artifact naming across desktop and CLI Unified scheme: `multica-<kind>-<version>-<platform>-<arch>.<ext>` so a filename alone reveals kind, version, platform, and CPU arch. Desktop (apps/desktop/electron-builder.yml): mac → multica-desktop-<v>-mac-<arch>.{dmg,zip} linux → multica-desktop-<v>-linux-<arch>.{deb,AppImage} (fixes `\${name}` expanding the scoped `@multica/desktop` into a broken `@multica/desktop-*` filename path) windows → multica-desktop-<v>-windows-<arch>.exe CLI (.goreleaser.yml): multica_<os>_<arch>.tar.gz → multica-cli-<v>-<os>-<arch>.tar.gz (adds `-cli` marker + version; switches `_` to `-` for consistency) Matrix update in apps/desktop/scripts/package.mjs `--all-platforms`: - drop mac x64 (Intel not a target yet) - add linux arm64 Final: mac arm64, win x64/arm64, linux x64/arm64. Downstream updates so install paths match the new CLI names: - scripts/install.sh - scripts/install.ps1 (URL + checksum regex) - CLI_INSTALL.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(release): use multica_{os}_{arch} CLI archive naming Standardize on the GoReleaser default 'multica_{os}_{arch}.{tar.gz|zip}' asset names. Install scripts and the desktop CLI bootstrap now resolve assets via checksums.txt so they work without hardcoding versions. The Go self-update path queries the GitHub release API and accepts either the new or legacy 'multica-cli-<version>-...' names so existing releases keep updating cleanly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(release): ship both legacy and versioned CLI archive names GoReleaser now produces both 'multica_{os}_{arch}.{ext}' (legacy) and 'multica-cli-{version}-{os}-{arch}.{ext}' (versioned) archives in every release. The legacy name keeps already-released CLIs self-updating; the versioned name is what new clients should use going forward. Self-update / install paths flipped to prefer the versioned name and fall back to legacy: - server/internal/cli/update.go (multica update) - apps/desktop/src/main/cli-release-asset.ts (desktop CLI bootstrap) - scripts/install.sh, scripts/install.ps1 (fresh install) Homebrew formula is pinned to the versioned archive via 'ids: [versioned]'. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(desktop): also build Linux .rpm packages Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(release): build Linux/Windows Desktop installers in CI; detect Windows ARM64 in install.ps1 Address review feedback on PR #1262: - .github/workflows/release.yml: add a 'desktop' job that runs after the CLI 'release' job and packages the Desktop installers for Linux (AppImage/deb/rpm) and Windows (NSIS) on x64 and arm64, then publishes them to the same GitHub Release via electron-builder. macOS Desktop continues to ship through the manual release-desktop skill so it can be signed and notarized with Apple Developer credentials. - scripts/install.ps1: detect Windows ARM64 hosts via RuntimeInformation::OSArchitecture so the new windows-arm64 CLI archive is downloaded on ARM64 machines instead of always falling back to amd64. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix(release): split Windows arm64 auto-update channel to avoid latest.yml collision electron-builder's update metadata file is hardcoded to `latest.yml` for Windows regardless of arch (only Linux gets an arch-suffixed name; see app-builder-lib's getArchPrefixForUpdateFile). With two separate electron-builder invocations for Windows x64 and arm64, both publish `latest.yml` to the same GitHub Release and the second upload silently overwrites the first — leaving one of the two architectures with auto- update metadata pointing at the other arch's installer. Route Windows arm64 to its own `latest-arm64` channel: * scripts/package.mjs appends `-c.publish.channel=latest-arm64` only for the Windows arm64 invocation, so x64 keeps producing `latest.yml` and arm64 produces `latest-arm64.yml` alongside it. * updater.ts pins `autoUpdater.channel = 'latest-arm64'` on Windows arm64 clients so they fetch the matching metadata file. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Devv <devv@Devvs-Mac-mini.local> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
5.6 KiB
Multica CLI — Installation Guide for AI Agents
Audience: This document is designed for AI agents (Claude Code, Codex, etc.) to read and execute step-by-step. Each step includes the exact shell commands to run, expected outcomes, and error handling.
One-Line Instruction for Users
Give this instruction to your AI agent:
Fetch https://github.com/multica-ai/multica/blob/main/CLI_INSTALL.md and follow the instructions to install Multica CLI, log in, and start the daemon on this machine.
Step 1: Check if Multica CLI is already installed
Run:
multica version
- If it prints a version string (e.g.
multica v0.x.x): skip to Step 3. - If command not found: continue to Step 2.
Step 2: Install the Multica CLI
Windows users: Skip to Option C: Windows (PowerShell) below.
Option A: Homebrew (preferred — macOS/Linux)
Check if Homebrew is available:
which brew
If brew is found, install via Homebrew:
brew install multica-ai/tap/multica
Then verify:
multica version
If the version prints successfully, skip to Step 3.
To upgrade later, run:
brew upgrade multica-ai/tap/multica
Option B: Download from GitHub Releases (macOS/Linux, no Homebrew)
If Homebrew is not available, download the binary directly.
Detect OS and architecture, then download the correct archive:
OS=$(uname -s | tr '[:upper:]' '[:lower:]') # "darwin" or "linux"
ARCH=$(uname -m) # "x86_64" or "arm64"
# Normalize architecture name
if [ "$ARCH" = "x86_64" ]; then
ARCH="amd64"
fi
# Get the latest release tag from GitHub
LATEST=$(curl -sI https://github.com/multica-ai/multica/releases/latest | grep -i '^location:' | sed 's/.*tag\///' | tr -d '\r\n')
# Download and extract
VERSION="${LATEST#v}"
curl -sL "https://github.com/multica-ai/multica/releases/download/${LATEST}/multica-cli-${VERSION}-${OS}-${ARCH}.tar.gz" -o /tmp/multica.tar.gz
tar -xzf /tmp/multica.tar.gz -C /tmp multica
sudo mv /tmp/multica /usr/local/bin/multica
rm /tmp/multica.tar.gz
Verify:
multica version
If this fails:
- Check that
/usr/local/binis in$PATH. - On Linux, you may need
chmod +x /usr/local/bin/multica. - If
sudois not available, install to a user-writable directory:mv /tmp/multica ~/.local/bin/multicaand ensure~/.local/binis in$PATH.
Option C: Windows (PowerShell)
Run in PowerShell (no admin required):
irm https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.ps1 | iex
This downloads the latest Windows binary from GitHub Releases, installs it to %USERPROFILE%\.multica\bin\, and adds it to your user PATH.
Verify:
multica version
If this fails:
- Restart your terminal so the updated PATH takes effect.
- If you use Scoop, the installer will use it automatically:
scoop bucket add multica https://github.com/multica-ai/scoop-bucket.git && scoop install multica - If your execution policy blocks the script:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedthen re-run.
Step 3: Log in
Run:
multica login
Important: This command opens a browser window for OAuth authentication. Tell the user:
"A browser window will open for Multica login. Please complete the authentication in your browser, then come back here."
Wait for the command to complete. It will automatically discover and watch all workspaces the user belongs to.
Verify:
multica auth status
Expected output should show the authenticated user and server URL.
If login fails:
- If no browser is available (headless environment), the user can generate a Personal Access Token at
https://app.multica.ai/settingsand run:multica login --token - If the server URL needs to be customized:
multica config set server_url <url>before logging in.
Step 4: Start the daemon
First, check if the daemon is already running:
multica daemon status
- If status is "running": skip to Step 5.
- If status is "stopped": start it:
multica daemon start
Wait 3 seconds, then verify:
multica daemon status
Expected output should show running status with detected agents (e.g. claude, codex, opencode, openclaw, hermes, gemini, pi, cursor-agent).
If daemon fails to start:
- Check logs:
multica daemon logs - If a port conflict occurs, the daemon may already be running under a different profile.
- If no agents are detected, ensure at least one AI CLI (
claude,codex,opencode,openclaw,hermes,gemini,pi, orcursor-agent) is installed and on the$PATH.
Step 5: Verify everything is working
Run:
multica daemon status
Confirm:
- Status is
running - At least one agent is listed (e.g.
claude,codex,opencode,openclaw,hermes,gemini,pi, orcursor-agent) - At least one workspace is being watched
If the agents list is empty, tell the user:
"The Multica daemon is running but no AI agent CLIs were detected. Please install at least one supported CLI (
claude,codex,opencode,openclaw,hermes,gemini,pi, orcursor-agent), then restart the daemon withmultica daemon stop && multica daemon start."
Summary
When all steps are complete, inform the user:
"Multica CLI is installed and the daemon is running. Agents in your workspaces can now execute tasks on this machine. You can manage workspaces with
multica workspace listand view daemon logs withmultica daemon logs -f."