Skip to content

Deploy the collector

Every machine needs the shield360 CLI, enrolled once with your organisation’s install key. The install scripts are served by your own Shield360 platform, so machines download the CLI from the same server they report to. No public release channel is involved.

In Shield360, open Visibility → Setup and create an install key. An organisation can hold several keys, for example one per rollout wave. Revoking a key stops new enrolments and leaves machines that are already enrolled untouched.

Replace https://app.shield360.ai with your Shield360 address if you self-host.

Terminal window
curl -fsSL https://app.shield360.ai/api/cli/install.sh | SHIELD360_INSTALL_KEY=<key> sh
Terminal window
$env:SHIELD360_INSTALL_KEY = "<key>"
iwr -useb https://app.shield360.ai/api/cli/install.ps1 | iex

The script:

  1. Downloads the CLI for this OS and architecture from /api/cli/download/<target> and installs it to ~/.shield360/bin (%USERPROFILE%\.shield360\bin on Windows). It needs no administrator rights.
  2. Runs shield360 collector enroll, which exchanges the install key for this machine’s token and sends a first heartbeat to prove the machine can report.
  3. Runs shield360 collector install to report automatically in the background.
  4. Runs shield360 coding install to add hooks for whichever coding agents are on the machine. Where the collector runs as watch (the macOS default), it re-checks hourly and adds hooks for agents installed later.

The install key is passed in the environment, never as an argument, so it stays out of the process table and shell history.

Download a binary from Visibility → Setup, or from https://<your-shield360>/api/cli/download/<target>:

TargetPlatform
shield360-darwin-arm64macOS, Apple silicon
shield360-darwin-amd64macOS, Intel
shield360-macos.pkgmacOS signed installer (when your deployment’s release pipeline built it)
shield360-linux-amd64Linux, x86-64
shield360-linux-arm64Linux, arm64
shield360-windows-amd64.exeWindows, x86-64
shield360-windows-arm64.exeWindows, arm64

Then enrol and install:

Terminal window
SHIELD360_INSTALL_KEY=<key> shield360 collector enroll --url https://app.shield360.ai
shield360 collector install
shield360 coding install

enroll reads the key from --install-key-file, from SHIELD360_INSTALL_KEY, or from a prompt. It never takes the key as an argument. The machine’s URL, collector ID and token are written to the CLI config file with owner-only permissions.

Jamf, Intune, Kandji, Workspace ONE, Ansible and similar tools all run a script as part of a policy. Pass the key through the environment:

Terminal window
export SHIELD360_INSTALL_KEY="<key>"
export SHIELD360_URL="https://app.shield360.ai"
curl -fsSL "$SHIELD360_URL/api/cli/install.sh" | sh
VariablePurposeDefault
SHIELD360_INSTALL_KEYOrganisation install key (required)none
SHIELD360_URLShield360 server the script downloads from and enrols withThe server that served the script
SHIELD360_INSTALL_DIRWhere the binary goes~/.shield360/bin

A script run by an MDM usually runs as root or SYSTEM. See Multi-user machines for how the collector behaves when it runs elevated.

shield360 collector install registers a background job for the current user:

OSMechanismRuns
macOSLaunchAgent ai.thinkfleet.shield360-collector, kept aliveshield360 collector watch: AI usage every --every-minutes, plus continuous application time and machine state
Linuxsystemd --user timer shield360-collector.timer, falling back to cron where systemd isn’t availableshield360 collector run every --every-minutes
WindowsTask Scheduler task registered with schtasksshield360 collector run every --every-minutes

The default interval is 60 minutes. Logs go to collector.log and collector.err.log in the CLI’s log directory.

Terminal window
shield360 collector status
Server https://app.shield360.ai
Collector col_8f2c...
Policy browsing=domains netobserve=false fingerprint-keys=false
Scheduled yes (/Users/alex/Library/LaunchAgents/ai.thinkfleet.shield360-collector.plist)
Last report Thu, 17 Sep 2026 14:02:11 EDT — alex

The machine appears under Visibility → Fleet after its first heartbeat.

To see what would be sent without sending anything:

Terminal window
shield360 collector run --dry-run --verbose
Terminal window
shield360 collector uninstall # stop background reporting; enrolment is kept
shield360 coding uninstall # remove coding-agent hooks
rm ~/.shield360/bin/shield360 # remove the binary

To cut a machine off from the server side, revoke it under Visibility → Fleet. Its token stops being accepted immediately.