Three doors, one destination#
Provisioning offers three ways onto the control plane. All three end in the same place: an endpoint bound to a deployment profile, holding a credential of its own.
| Door | For | What it is |
|---|---|---|
| Email invitation | One person | A single-use link. They install, sign in, and the endpoint arrives, awaiting your approval if the profile is user-assisted. |
| Fleet credential | Many machines | One token with a quota, for an MDM or a golden image. Every machine that claims it inherits the profile's autonomy ceiling and managed sources. |
| Install directly | A machine in front of you | The download and the enrolment step run by hand, with the data boundary stated on the page. |
Read the resolved plan before you send anything
Choose the deployment profile at the top of Provisioning and the page resolves, before it sends a thing, exactly what a device on that profile will be told: which control plane it talks to, whether it relays through a fog gateway, and which locations, if any, will be enabled on it without the person being asked.
Door one: invite a person by email#
Pick the deployment profile
At the top of Provisioning. The panel beneath it names the control plane in plain text (for a self-hosted estate that is your own address, not ours) and whether any relay sits between the device and it.
Enter the email addresses
Separate them with commas, spaces or new lines. Each person gets their own single-use link; nobody shares a grant.
Read the boundary statement, then send
The block titled WHAT IS ENABLED ON AN INVITED PERSON’S DEVICE is generated from the profile you selected, not written by marketing. If it says no location is pre-enabled, the person approves every source themselves. If it names locations, those are indexed without asking. Press Send invites.
Track the grant
The invitation appears under All enrolment credentials with its prefix, its use count (0/1 uses), its expiry and its status. Status moves to EXHAUSTED once redeemed. You can Revoke an unused one at any time.
The link the person receives points at /install?token=…&installation=…&url=…. All three parameters matter: token is the one-time grant, installation identifies the workspace, and url is the control plane the agent must talk to. Tell people to open the whole link, not to copy the token out of it.
Door two: a fleet credential for MDM or an image#
Mint a fleet token
From Provisioning, or from a profile’s own invite screen. Set the quota, meaning the number of machines it may admit, and the expiry.
Stage it with your device management tool
The token reaches each machine as an environment variable the installer consumes. Stage the control-plane address alongside it; the installer writes both to the agent’s enrolment file so the service can redeem the grant on first start.
On macOS, deploy the privacy profile too
macOS gates access to Documents, Desktop and Downloads behind a consent prompt no unattended installer can answer. Deploy the PPPC configuration profile shipped in the agent packaging via MDM so those folders are readable without a person clicking Allow. Until that is answered, by profile or by the person, those folders are simply not indexed.
A fleet token is the credential to be careful with
One token can admit its whole quota, and it outlives the person who minted it. Minting one needs fleet.enroll, which is deliberately separate from fleet.manage. Set the smallest quota and the shortest expiry that will do the job, and revoke it when the rollout is finished. Revoking a token never touches the machines that already enrolled with it.
Door three: install directly#
The installer is a bootstrap shell script. There is no desktop app, no .dmg, no .msi and no .AppImage, and the two scripts are not interchangeable.
macOS, Apple Silicon or Intel
Installs a LaunchAgent in your own login domain. It refuses to run as root, so do not use sudo.
curl -fsSL https://downloads.evodira.com/local-agent/install-macos.sh -o install-macos.sh
EVODIRA_ENROLLMENT_TOKEN='evo_enroll_…' \
EVODIRA_CONTROL_PLANE='https://app.evodira.com' \
sh install-macos.shLinux, amd64 or arm64, systemd required
Without root it installs a systemd user service that runs as you and needs no password.
curl -fsSL https://downloads.evodira.com/local-agent/install.sh -o install.sh
EVODIRA_ENROLLMENT_TOKEN='evo_enroll_…' \
EVODIRA_CONTROL_PLANE='https://app.evodira.com' \
sh install.shFor a server or an appliance with nobody logged in, a user unit does not exist at boot. Ask for a machine-wide unit explicitly:
EVODIRA_SCOPE=system sudo -E sh install.shsudo -E and not bare sudo: plain sudo drops the two environment variables the command just set.
Windows
There is no Windows build. The install page detects the platform and says so rather than handing you a command that cannot work.
If you would rather not pipe a script into a shell
The commands above download the script to a file first, so you can read it before you run it. The script’s own first job is to verify a SHA-256 digest over the archive it downloads next. That check is not optional and is not skipped by reading the script first.
The install page, and what it tells you#
The page at /install reads the token from the link and asks the control plane, read-only, what redeeming that grant would meet. It consumes nothing. If the grant is dead it says so there, instead of handing out a command that fails on the machine ten minutes later.
- Already used
- The grant is exchanged exactly once and a device has already enrolled with it. Ask for a new invite.
- Revoked
- An administrator withdrew the grant before it was used.
- Expired
- Enrolment grants are time-boxed, so a link forgotten in an inbox cannot enrol a machine months later.
- Not recognised
- The control plane has no record of it. Usually the link was cut short when it was copied, so check it arrived whole, or it belongs to a different control plane.
A page that cannot reach the plane shows the instructions anyway. Unverifiable is not invalid, and the enrol step gives the definitive answer.
What the installer leaves on the machine#
| macOS | Linux (user scope) | |
|---|---|---|
| Service | LaunchAgent ai.evodira.local.agent under ~/Library/LaunchAgents | systemd user unit ai.evodira.local.agent.service |
| Config | ~/Library/Application Support/Evodira | ~/.config/evodira |
| Logs | ~/Library/Logs/Evodira | journalctl --user -u ai.evodira.local.agent |
| Status | launchctl print gui/$(id -u)/ai.evodira.local.agent | systemctl --user status ai.evodira.local.agent |
The command-line tool is evodira-local. Hardware detection, policy retrieval and model selection all happen inside the agent from here. There is nothing else to configure to get it running.
First run, on the person's machine#
macOS asks before it reads anything personal
The system prompts before the agent may read Documents, Desktop or Downloads. Until that is answered, those folders are not indexed, not partially and not silently. If the prompt was dismissed, grant it in System Settings → Privacy & Security → Files and Folders.
Check the agent enrolled
The status command reports lifecycle state, policy revision and age, device identity and service scope.
evodira-local statusIf the profile is user-assisted, admit the endpoint
The device arrives PENDING. An administrator opens Review, switches to the Enrolments lane and presses Admit endpoint. Admitting mints the device’s credential and shows it exactly once. This is the one lane that never defers a decision, because a token shown twelve seconds later has nowhere to go.
Confirm it appears in the fleet
Fleet lists it with its connectivity, lifecycle state and profile convergence. The person can see their own machine at Your device without any administrator permission at all.
Removing an agent#
- Uninstall the service on the machine with evodira-local service uninstall. Config and state are left in place by design, so a reinstall does not lose the device identity.
- Revoke the endpoint from Fleet. This needs fleet.revoke and is terminal. A revoked credential is not reinstated. The device stops syncing, and its record is kept so its owner can still see what it reported.
- Request a wipe to destroy local agent state on the machine. Also fleet.revoke, also terminal, and it stops the device indexing, syncing or re-enrolling.
You are done when
evodira-local status on the machine reports it enrolled against the profile you intended, the endpoint is listed ACTIVE in Fleet, and on macOS the folder-access prompt has been answered. Nothing has been captured yet. That is chapter 6.
Something here wrong, missing, or no longer true of the product? Write to hello@evodira.com. Documentation that has drifted from the console is a bug and we treat it as one.