Fleet overview
Supply-chain inventory and exposure rolled up across every reporting endpoint.
Light up your fleet
Nothing has reported yet. Get your first machine sending supply-chain data in under two minutes — then this dashboard fills with live inventory, CVEs, leaked secrets, and exposure ranked by host.
Installs the agent, registers it with this fleet, and reports on a schedule. Best for real machines and servers.
curl -fsSL /install.sh | sudo APIARY_ENROLL_TOKEN=<enroll-token> shScan the box you’re on right now and ingest it exactly like a remote agent report. Fastest way to see Apiary work.
Trends tenant-wide history
No history yet
Trend data appears once scans have been recorded over time. Snapshots are captured hourly and after each scan — check back as your fleet reports.
Exposure by severity over time
Total components
Fleet health
Findings: new vs resolved
Components by ecosystem latest snapshot
Components by ecosystem fleet-wide
Exposure by severity
Fleet health
Detections by type click to filter findings
Manifest-vs-reality drift installed but undeclared · click a class to filter
Recent runs
| Endpoint | Profile | Status | Components | Findings | When |
|---|
Ask AI
Ask about your fleet in plain language. The assistant plans a query over current inventory, findings, hosts, and host state, runs it, and answers with concrete numbers — it never invents data.
Talk to your fleet
The assistant maps a question to a structured query over current fleet state, executes it deterministically, and summarizes the result. Point the console at a model to light up this section. Works with Anthropic, OpenAI, or any OpenAI-compatible local model.
Set the provider and model (plus an API key for a cloud model) on the console and restart, then refresh this page.
APIARY_AI_PROVIDER=anthropic APIARY_AI_MODEL=claude-haiku-4-5 APIARY_AI_API_KEY=sk-… ./apiary-serverPoint at an OpenAI-compatible local server (llama.cpp, LM Studio, Ollama).
APIARY_AI_PROVIDER=local APIARY_AI_MODEL=llama APIARY_AI_BASE_URL=http://127.0.0.1:8080/v1/chat/completions ./apiary-serverAsk about your fleet
Plain-language questions become a structured query over current inventory, findings, hosts, and host state — executed deterministically, answered with real numbers. Follow-up questions keep context.
Security operations
A triage-first view for the security team — critical exposure, runtime threats, and the hosts that need attention first, rolled up across the fleet.
No security signal yet
Once endpoints report, this board fills with prioritized findings, leaked secrets, manifest drift, and runtime threats (hidden artifacts & file-integrity changes). Deploy an agent or run a scan from to begin.
Exposure by severity all findings
Detections by type click to open findings
Runtime threat signals hidden artifacts & file integrity
Manifest-vs-reality drift installed but undeclared · click a class to filter
Top exposed hosts severity-weighted · click to open
Priority triage queue
| Severity | Type | Subject | Where | Detail | Hosts |
|---|
Endpoints
Every machine reporting to this fleet. Click a row for components, findings, and run history.
Fleet inventory
Distinct components installed across the fleet, with how many endpoints carry each.
Host & OS state
Read-only osquery / Velociraptor-style facts collected from the fleet — local users, listening ports, startup (persistence) items, and running processes.
No host state collected
No endpoint has reported host facts yet. Run apiary host on an endpoint (or deploy the agent with host collection enabled) to populate users, ports, startup items, and processes.
Security findings
Every detection across the fleet — supply-chain exposure, OSV vulnerabilities, leaked secrets, and structural matches.
Agent health
Reporting freshness, last-run outcome, scan latency, and delivery reliability for every agent in the fleet.
No agents reporting
No endpoint has reported a run yet. Run a local scan or deploy the apiary-agent to your fleet to populate health telemetry.
Health status latest run per agent
Reporting freshness
Last-run outcome all recorded runs
Scan reliability
Per-agent health
| Agent | Health | Last run | Profile | Scan time | Findings | Diagnostics | Delivery | Last seen |
|---|
Fleet agents
Enrolled machines holding a per-agent API key. Keys are stored hashed; revoke one without touching the rest of the fleet.
Access tokens stored locally in this browser
Enroll an agent
Threat-intel catalogs
Exposure catalogs available to the engine. Agents fetch a merged bundle to match at the edge.
Download the agent
Deploy the apiary collection agent to your fleet. Pick a build for each platform, or use the one-line installer for macOS and Linux.
Loading builds…
Settings
Manage access to this fleet console — members, roles, scopes, credentials, and single sign-on.
Runtime monitor
Live agent behavior scored against an intended remit — every tool call, MCP call, and reasoning trace, with a verdict per step and block-mode enforcement.
Watch your agents think and act — live
The runtime monitor ingests an AI agent’s tool calls, MCP calls, and reasoning traces, scores each step against a remit, and can block a step before it runs. It runs as a separate apiary monitor process; point this console at it to light up this section.
Run the ingestion + control-plane server with a remit and a classifier.
apiary monitor --listen 127.0.0.1:8787 --mode block --remit apiary-remit.yamlSet APIARY_MONITOR_URL on the console and restart, then refresh this page.
APIARY_MONITOR_URL=http://127.0.0.1:8787 ./apiary-serversdk/.Live events newest first · grouped by session · click a step for the verdict
Waiting for events
No agent steps yet. Run an instrumented agent and its tool calls and reasoning traces stream in here, each scored in real time.
Sessions
No sessions yet
Sessions appear once an agent starts reporting steps.
| Session | Agent | Steps | Worst | Last seen |
|---|
Timeline
Select a session
Pick a session to replay its ordered steps — action, reasoning trace, and the verdict for each.
Active remit
No remit configured
Every event is allowed until a remit is supplied via --remit. The rules below drive each verdict.
Remit editor validate & export — apply by restarting the monitor with --remit
Alert routing verdict fan-out — per-severity & per-decision
No alert sinks configured
Alert-or-worse verdicts are recorded but not dispatched. Add Slack, Discord, or webhook sinks via --alerts with per-severity routing.
Package evaluation
Scored, gate-able supply-chain risk verdicts. Each package gets two independent scores — a security verdict and an operational-maturity grade — never collapsed into one number.
Turn inventory into trust verdicts
Evaluation is an enrichment pass that runs after a scan, following the standard npm-evaluation checklist — provenance, attestation, known vulnerabilities, version age, maintenance, install scripts, lockfile integrity, and a slopsquat / hallucinated-package check. It needs the network, so it stays behind --evaluate (default off).
Run a scan with the evaluation pass enabled; verdicts are ingested here automatically.
apiary scan --evaluate --evaluate-policy apiary-evaluate-policy.yamlCheck one name before install — catches typosquats and hallucinated dependencies.
apiary evaluate --mode preinstall --package npm:[email protected]docs/package-evaluation.mdSecurity verdicts worst-first
Gate decisions policy outcomes
Operational maturity A–F grade
| Package | Version | Project | Security | Maturity | Gate | Blast radius |
|---|
No policy decisions
No evaluation carried a gate decision. Run with --policy apiary-evaluate-policy.yaml to attach allow / warn / block actions.
| Action | Package | Version | Rule | Reason | Blast radius |
|---|
Policy editor apiary-evaluate-policy.yaml
Attach a gate decision — allow / warn / block — to each verdict. Edit below; lint runs client-side. Save the file on the host running apiary evaluate --policy.
Schema reference
File integrity
Baseline a watched set of sensitive files on each host, then report exactly what changed — content, permissions, owner, size, mtime, or symlink target — old value versus new.
Catch tampering on the files that matter
FIM is a pure file-read pass — no exec — that fingerprints persistence paths the agent knows (launchd / systemd units, cron, shell rc, authorized_keys) plus /etc/passwd, sudoers, sshd_config, and hosts. The first run writes a baseline; later runs emit one change record per file whose state moved.
Run the host collector with FIM enabled; the baseline is stored per host identity and diffed on every later run.
apiary host --fimAdd files or globs beyond the default set, or rebuild the baseline after an approved change.
apiary host --fim --fim-paths "/opt/app/*.conf" --fim-resetdocs/file-integrity.mdChanges by severity worst-first
Changes by status
Baseline watched set
No changes since baseline
Every watched file matches its stored baseline. Records appear here when content, permissions, owner, size, mtime, or symlink target moves.
| Path | Host | Class | Status | Severity | What changed (old → new) |
|---|
Hidden artifacts
Rootkit and cloaking tells surfaced from procfs as cross-source disagreements — two read-only views of the kernel that should agree but don't. Linux only; pure /proc reads, no exec.
Find what a rootkit hides
Each check compares two procfs surfaces: a listening socket whose inode maps to no process (cloaked listener), a pid that stats but isn't listed (hidden process), a process whose parent doesn't exist (orphan parent), an exe symlink resolving to a deleted target (deleted binary), and a comm that disagrees with its exe basename. Every finding carries a one-way fingerprint for cross-run dedup.
Enable the anomaly collector on the host run; findings ingest here automatically.
apiary host --anomalyDisable any individual check while keeping the rest active.
apiary host --anomaly --anomaly-comm-exe-mismatch=falsedocs/anomaly.mdFindings by severity worst-first
By check type toggle to filter
| Severity | Check | Host | Disagreement | Evidence |
|---|