Endpoints
Check every dev machine for compliance.
Every deployment runs its own endpoint-control service beside the gateway. There is no Anyray-run fleet: hosts enroll with your service, and the evidence stays in your Postgres.
Choose how checks run
| Mode | Runs checks | Evidence shown in Anyray | Remediation |
|---|---|---|---|
| Built-in agent | The signed fleetd package enrolled with your deployment | Source anyray, with direct agent freshness | Reviewed Anyray scripts can run through the agent |
| Customer-managed | Jamf, Intune, Kandji, Fleet, CrowdStrike, SentinelOne, or a custom control plane | The platform name and the last report receipt | Monitor-only in Anyray; your platform owns configuration writes |
Both feed the same service, a host can be covered by either, and customer-managed evidence is labelled with its source. A host that stops reporting drops out of compliance scoring after seven days.
Where evidence is stored
Your endpoint-control service stores all evidence in its own Postgres. Anyray receives only a fleet rollup on the metering lane: reachability, host and compliance counts, failing-policy counts, and the policy-pack version. The retained fields:
| Record | Retained fields |
|---|---|
| Organization | Internal organization ID, organization name, gateway URL and hostname, optional Billing tenant ID, and creation time. |
| Credentials | SHA-256 hashes of enrollment secrets, osquery/orbit node keys, and customer-managed connector tokens; their organization or host association; node-key kind or connector source; and creation time. Raw credentials are returned once and are not retained. |
| Host | Internal host and organization IDs; SHA-256 hashes of the hardware and osquery UUIDs; hostname; platform; evidence source; last evidence receipt time; and creation time. |
| Policy configuration | Internal policy and organization IDs; name; reviewed osquery query; critical flag; platform; description; resolution; optional remediation script name; and per-organization disabled policy names. |
| Policy result | Internal host and policy IDs; pass, fail, or a null value for unknown; last update time. No evidence text. |
| Remediation audit (built-in agent) | Execution ID and stable sequence; host, organization, and optional policy IDs; reviewed script name; operator or policy trigger; status; exit code; attempt count; lease, expiry, creation, and completion times. The legacy output field is kept empty; reviewed script contents live in code, not the database. |
Raw device IDs are hashed at the store boundary; serial numbers, users, inventory, command output,
and evidence text are never retained. Rows persist until an operator with provisioning:manage
deletes the host (host id from Machines → End-point fleet or
GET /admin/endpoint/hosts):
curl -fsS -X DELETE "https://<your-gateway>/admin/endpoint/hosts/<host-id>" \
-H "Authorization: Bearer $ANYRAY_ADMIN_TOKEN"
Deleting the organization (delete /admin/orgs/:orgId on the service's own
admin API, gated by ANYRAY_ENDPOINT_CONTROL_ADMIN_TOKEN) cascades to every row. User-scoped GDPR
export and erasure skip these rows: the evidence schema has no user-to-host mapping.
Connect an existing platform
Your endpoint control plane must run equivalent checks and reach your deployment's endpoint host over HTTPS. osquery-based systems (Fleet) use the catalog's queries directly; other platforms map native checks to the catalog's stable policy names.
In the console, open Machines → End-point fleet. A security_admin (or the
owner) connects the reporting platform, which returns one aer_… token, shown exactly once;
the same pop-up rotates and revokes it. Never deploy it to endpoints: devices report to your
control plane, which reports to Anyray.
curl -fsS https://<your-endpoint-host>/api/v1/evidence/policies \
-H 'Authorization: Bearer aer_synthetic-connector-token'
The credential selects the organization and evidence source; the request cannot override either. Each enabled policy includes its stable name, platform, criticality, description, resolution, and templated osquery SQL.
Run each applicable osquery query, or map an equivalent native check. A policy reports pass,
fail, or unknown. Keep inspected configuration values inside your environment.
curl -fsS https://<your-endpoint-host>/api/v1/evidence/report \
-H 'Authorization: Bearer aer_synthetic-connector-token' \
-H 'Content-Type: application/json' \
--data '{
"device": {
"id": "device-synthetic-001",
"hostname": "workstation-synthetic-001",
"platform": "darwin"
},
"results": [
{
"policyName": "Anyray - Codex routes through the org gateway",
"response": "pass"
}
]
}'
A successful report returns HTTP 202 with the accepted result count, source, and receipt
time. An unknown, disabled, or repeated policy name rejects the whole report. The report
replaces that device's previous snapshot: any enabled policy you omit becomes unknown.
Under Machines → End-point fleet, confirm the host shows the expected evidence source and a recent Last evidence value. Customer-managed hosts do not show the Run remediation action.
One valid connector token can report evidence for devices in its organization. Keep it in the endpoint platform's server-side secret store, rotate it after a suspected leak, and revoke it when the integration is retired.
Report contract
The report body accepts only these fields:
| Field | Required | Contract |
|---|---|---|
device.id | yes | Stable device identifier, 1 to 128 characters using letters, digits, _, ., :, or -. Anyray stores only a source-qualified sha256. |
device.hostname | no | Validated metadata, up to 64 characters. |
device.platform | no | darwin, linux, windows, or unknown. |
results | yes | 1 to 128 unique policy results forming the device's current snapshot; omitted enabled policies become unknown. The complete JSON body is capped at 64 KiB. |
results[].policyName | yes | Exact name from the authenticated catalog. |
results[].response | yes | pass, fail, or unknown. |
The API does not accept inventory, configuration values, environment values, users, command output, arbitrary evidence text, or scripts. Prompt and response content never enters this path. The built-in agent's remediation path is separate and can retain a script's output when you turn that on: Remediation output.
Remediation output
When a remediation script fails, an operator otherwise sees only its exit code. Anyray can retain the script's output so the failure is diagnosable: off unless you enable it, and the only device-derived free text the end-point service stores.
Enable it by setting ANYRAY_CONTENT_KEY (32-byte hex) on the end-point service; with no key set,
output is discarded on arrival, and ANYRAY_CONTENT_MODE=off disables it outright. Know what it
captures first: the shipped scripts print per-user diagnostics, so retained output contains OS
usernames and home-directory paths, and the credential filter strips secret-shaped substrings
only.
When on, output is truncated to 8 KiB (beginning and end kept), encrypted at rest with AES-256-GCM
under your key, unreadable after 30 days and then deleted (the run's audit record stays), and
readable only with the content-read capability: a viewer or operator sees the exit code only.
The setting is read from the end-point service's environment, so changing the content mode in the
console does not turn capture off here.
Review what runs on a machine
Every check and every remediation script is readable in your console before it runs anywhere. Select a policy under Machines → End-point fleet to see the literal osquery SQL the agent executes, the platforms it targets, the operator guidance and resolution steps, the remediation script's full contents inline when one exists (so what runs as root is on screen beside the check that triggers it), and whether Anyray authored the check (Anyray-authored checks).
The Remediation scripts panel lists every script the service can run, with full contents. Scripts are compiled into the service's image, so nobody (Anyray included) can add one without deploying a new image; a separate Fleet server's script library is not shown here. Each policy maps to exactly one script name, and dispatch does not branch on OS. The pack's one PowerShell remediation has no dispatching policy, so Windows hosts are monitor-only in practice.
Anyray-authored checks
A deployment runs the checks in its own image. Anyray can also deliver checks to a running deployment without an upgrade: a new check for a tool that bypasses gateways, or a corrected query for one already in your image. The lane is on by default and you can switch it off. Its limits:
- Every delivered check is signed with the key pinned in your gateway image and verified offline, so a compromised control plane cannot forge one.
- A delivered check is read-only: an osquery
SELECTwhose only effect is a pass/fail in your own database. It can never carry or name a script, and nothing on this lane can add to the compiled-in script list. - It is always monitor-only and never
critical, so it cannot auto-remediate or move your failing-critical count. - While an Anyray query stands in for an image check, that check's own remediation is suspended (labelled monitor-only while overridden); self-healing resumes when the fix lands in an image you upgrade to.
- Every check is listed in your console with its full logic (a replacement also shows the query it
replaced), and every delivery lands in your audit log as
apply_policy_bundleby actoranyray-policy-push, naming the revision and what it added, replaced, or withdrew. The first delivery ever shows a one-time console notice.
Delivered checks reach the built-in agent and any connected evidence connector, the same two paths your image's checks already take.
To turn the lane off, open Machines → End-point fleet and expand Anyray-authored checks. Turning it off (needs the provisioning capability) withdraws every Anyray-authored check immediately and refuses future ones. You can also disable an individual Anyray-authored check like any other, without switching off the lane.
Remediation boundary
Anyray records customer-managed failures but does not issue commands through the customer's MDM or EDR; run remediation through that platform with its own approval and audit controls. The direct remediation loop is available only to hosts enrolled with the built-in agent.