Skip to content

shield360 collector

shield360 collector reports AI tool usage, application time and, when your organization’s collection policy turns them on, browsing and network activity from this machine. It reads files and OS tables. It installs no certificate, changes no proxy setting and opens no listening socket.

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

Link this machine to your Shield360 organization.

Terminal window
shield360 collector enroll --url <shield360-url> [--install-key-file <path>]
FlagDescription
--urlYour Shield360 address, for example https://app.shield360.ai. Required.
--install-key-fileRead the install key from this file.

The install key is read from --install-key-file, then SHIELD360_INSTALL_KEY, then a prompt. It’s never accepted as an argument, which other users of the machine could see. The machine receives its own collector token and the install key isn’t stored. SHIELD360_URL, SHIELD360_COLLECTOR_ID and SHIELD360_COLLECTOR_TOKEN are written to the CLI config file with owner-only permissions. Enrolment ends by sending a heartbeat, so a machine that enrols successfully is known to be able to report.

Report automatically in the background.

Terminal window
shield360 collector install [--every-minutes 60]

Registers a LaunchAgent on macOS (running watch), a systemd --user timer or cron entry on Linux, or a Task Scheduler task on Windows (both running run). See What gets scheduled.

Stop reporting automatically. The machine stays enrolled.

Terminal window
shield360 collector uninstall

Report AI usage once.

Terminal window
shield360 collector run [--dry-run] [--verbose] [--since-hours 48] [--since 48h]
FlagDescription
--dry-runPrint a summary and send nothing.
--verboseList every project found.
--since-hoursHow far back a first run looks. Default 48.
--sinceIgnore the last-run watermark and read exactly this far back, for example 48h.

Each run continues from a per-person watermark, so nothing is sent twice.

Report continuously, including time by application and machine state.

Terminal window
shield360 collector watch [--sample 30s] [--report-every 1h] [--activity-every 5m] [--verbose]
FlagDescription
--sampleHow often to sample the foreground application. Default 30s.
--report-everyHow often to report AI usage. Default 1h.
--activity-everyHow often to send accumulated application time. Default 5m.
--verbosePrint each report.

watch also refreshes the collection policy and, when running as a user, installs coding-agent hooks for agents that appear after installation.

Show what this machine reports to.

Terminal window
shield360 collector status

Prints the server, collector ID, the policy in force, whether background reporting is scheduled, and the last report for each person. When running elevated, it also reports how many people it collects for. See Multi-user machines.

List the AI software the collector finds on this machine. Nothing is sent.

Terminal window
shield360 collector ai-software [--json] [--all]
FlagDescription
--jsonPrint the items as JSON instead of a table.
--allAlso list installed applications with no AI found inside them.

The table has one row per item, with the columns KIND, NAME, IDENTIFIER, VERSION, USER, CLIENT, TARGET, EVIDENCE, PATH and SANDBOXES:

  • USER is the person the item belongs to, or (everyone) for software installed for every account on the machine.
  • CLIENT and TARGET are filled in for MCP servers: the app that configures the server, and what it runs or connects to.
  • EVIDENCE lists the AI signatures found inside an application’s own files, such as npm:openai or model:onnx.
  • SANDBOXES is the number of running sandboxes, shown only for an NVIDIA OpenShell runtime.

Without --all, an installed application is listed only when AI was found inside it. The collector itself reports every installed application, so the platform can classify each one. This command runs the same full scan the collector runs in the background. See Installed AI software for what is scanned and how it is classified.

To stop scanning on a machine whatever the platform says, create the file disable-ai-software in the CLI’s configuration directory (~/.config/shield360/, or $XDG_CONFIG_HOME/shield360/ when that is set). The command then prints AI software scanning is off: and the reason.

Deliver your organization’s enforcement policy to NVIDIA OpenShell sandboxes on this machine, and read their policy decisions. See OpenShell for turning delivery on and what OpenShell enforces.

Fetch, verify and apply the OpenShell policy now.

Terminal window
shield360 collector openshell sync [--dry-run]
FlagDescription
--dry-runVerify the policy and print it. Apply nothing.

Shield360 translates the environment’s enforcement policy into an OpenShell sandbox policy and signs it for this machine. sync verifies the signature, then applies the policy the way the environment’s OpenShell settings say: to each running sandbox (sandboxes), as the gateway’s global policy (global), or only to the policy file for openshell sandbox create --policy (file). The OpenShell CLI on this machine does the applying. A policy that fails verification, or one issued earlier than the policy already applied, is refused.

It prints one line with the delivery mode, the gateway when one is named, the result and the start of the policy hash, then one line per sandbox:

OpenShell (sandboxes): applied, policy <hash>
<sandbox>: <result>

The result is applied, unchanged, partial, failed or refused. The command exits with an error on failed or refused; the last policy OpenShell accepted stays in the policy file, and OpenShell’s own active policy is left as it was. When delivery is off for the environment, it prints OpenShell delivery is off for this environment. and changes nothing. With --dry-run, it prints Verified OpenShell policy <hash> (translator <version>), delivery <mode>. Dry run: nothing applied. followed by the policy YAML.

The collector also delivers on each pass when the OpenShell CLI is on the machine. Set SHIELD360_OPENSHELL=0 to turn that off, or SHIELD360_OPENSHELL=1 to keep the policy file on a machine without the CLI.

Show what was last delivered to OpenShell from this machine.

Terminal window
shield360 collector openshell status

Prints the policy file’s path, the policy hash, the delivery mode (and gateway), the translator version, the organization and environment policy versions, when it was applied, and the hash applied to each sandbox. Before the first delivery it prints Nothing delivered to OpenShell from this machine yet.

The policy file is policy.yaml in the openshell folder of the CLI’s configuration directory, or of the system-wide Shield360 directory when the collector runs elevated.

Show the OpenShell sandboxes on this machine. Nothing is sent.

Terminal window
shield360 collector openshell sandboxes [--json]
FlagDescription
--jsonPrint JSON: installed, engines and sandboxes.

Prints whether OpenShell is installed, the container engines found (Docker or Podman sockets), and a table of running sandboxes with the columns SANDBOX, ID, WORKSPACE and VERSION.

While the organization’s network collection is on, the collector reads these sandboxes’ policy decisions every 15 seconds: allowed and denied connections, HTTP requests, process launches and policy loads. It sends the decisions only, never a query string, body, header, credential or command line, and a URL path only when content capture is full. OpenShell writes full OCSF JSON only after openshell settings set --global --key ocsf_json_enabled --value true; without it the collector reads the shorter log lines, which carry less.

To stop reading OpenShell’s logs on a machine whatever the platform says, create the file disable-openshell in the CLI’s configuration directory.

Read OpenShell’s sandbox logs and send the decisions, as the collector service does on a machine where OpenShell runs in Docker or Podman. Use it on a Kubernetes node, or to test.

Terminal window
shield360 collector openshell tail [--pods-glob <glob>] [--interval 15s] [--once] [--dry-run] [--paths]
FlagDescription
--pods-globRead Kubernetes container log files matching this glob instead of asking the container engines.
--intervalTime between reads. Default 15s.
--onceRead once and exit.
--dry-runPrint the OTLP spans and send nothing.
--pathsWith --dry-run, keep HTTP paths in the printed spans.

The machine must be enrolled (shield360 collector enroll). The command keeps running until stopped, and exits if the machine’s token is rejected. On Kubernetes, run it on each node as a DaemonSet with the node’s /var/log/pods mounted read-only:

Terminal window
shield360 collector openshell tail --pods-glob '/var/log/pods/*/supervisor/*.log'

OpenShell’s supervisor container is named supervisor.

VariableUsed byPurpose
SHIELD360_INSTALL_KEYenroll, install scriptsOrganization install key
SHIELD360_URLallShield360 server
SHIELD360_COLLECTOR_IDallWritten by enroll
SHIELD360_COLLECTOR_TOKENallWritten by enroll; this machine’s credential
SHIELD360_OPENSHELLrun, watch1 to deliver the OpenShell policy file without the OpenShell CLI, 0 to never deliver automatically