MDM Rollout
Every MDM rollout has the same three steps:
- Install the binary — Homebrew tap, signed
.pkg/.msi/.deb, or pre-built artifact. - Drop the enrollment manifest — at the system path so every user on the machine inherits the binding.
- Verify —
tokenshift doctorreports back.
Paths used below:
- macOS / Linux system manifest:
/etc/tokenshift/enrollment.json - Windows system manifest:
%PROGRAMDATA%\tokenshift\enrollment.json
See Enrollment for what’s in the manifest and why the per-user path takes precedence when both exist.
Two policies, scoped to the same smart group:
- Install — push the signed TokenShift
.pkgfrom the customer portal. Or push a wrapper script that runsbrew install pointfiveinc/tap/tokenshiftafter seedingHOMEBREW_GITHUB_API_TOKENfrom a Jamf secret payload. - Configure — push the enrollment manifest as a file to
/etc/tokenshift/enrollment.json(mode 0644, owned by root).
Run tokenshift doctor as a self-service “verify” policy so users (and
your support team) can confirm the binding without admin help.
JumpCloud
Section titled “JumpCloud”JumpCloud Commands work well for both steps:
- Push a shell command that installs the binary (Homebrew with a
pre-seeded token, or a
curl | tarstep downloading a signed release artifact). - Push the manifest contents via a second Command that writes
/etc/tokenshift/enrollment.jsonwithtee.
Verify with a third Command that runs tokenshift doctor and captures
output.
Intune
Section titled “Intune”Windows-side: package the .msi and assign it to a device group.
Manifest goes to %PROGRAMDATA%\tokenshift\enrollment.json — push it via
an Intune Win32 app that drops the file in a post-install script, or via
a separate configuration profile.
macOS-side: same as Jamf — .pkg install + manifest drop. Intune for Mac
runs scripts as root, so writing /etc/tokenshift/enrollment.json is
straightforward.
Ansible
Section titled “Ansible”- name: install tokenshift community.general.homebrew: name: pointfiveinc/tap/tokenshift state: present environment: HOMEBREW_GITHUB_API_TOKEN: "{{ vault_brew_token }}"
- name: drop enrollment manifest ansible.builtin.copy: content: "{{ tokenshift_enrollment | to_nice_json }}" dest: /etc/tokenshift/enrollment.json owner: root group: wheel mode: '0644'
- name: verify ansible.builtin.command: tokenshift doctor register: doctor_out changed_when: falseUpdating the manifest
Section titled “Updating the manifest”The manifest is read once at session start and cached for the lifetime of
the process. Pushing a new manifest takes effect on the next agent
session (or the next tokenshift invocation). No restart required for
already-running shells beyond the agent itself.
Removing
Section titled “Removing”# remove the binary via your package managerbrew uninstall tokenshift # macOS / Linux Homebrew# or msiexec, or `apt remove`, etc.
# remove the system manifestrm /etc/tokenshift/enrollment.json # macOS / Linuxdel %PROGRAMDATA%\tokenshift\enrollment.json # Windowstokenshift uninstall --purge removes hooks and per-user state but
never touches the system-deployed manifest — that stays your MDM’s
responsibility.
- Enrollment — manifest shape and field meaning.
- Installation & distribution — the full security model: pinning, transport, threat surface.