Gnista through MDM,
one profile.
With a team plan, your IT team can deliver Gnista’s key and lock its settings with a configuration profile, from any MDM that installs custom profiles. Everything here is optional: a team without MDM simply shares the key.
Updated
How it works
Gnista reads managed preferences in its own domain, sh.gnista.Gnista, delivered by a configuration profile with a com.apple.ManagedClient.preferences payload (in some MDMs called custom settings or a preference file). Settings the profile manages show “Managed by your organisation” in Gnista and can’t be changed there.
Managed settings apply only with a team key. LicenceKey works with any key; with a personal key, Gnista ignores the rest and its Settings say “Central configuration requires a team plan”. When a profile carries both the key and settings, Gnista activates the key first, then applies the settings.
Every key except LicenceKey and DisplayMode counts only when the profile enforces it, under Forced, as in the template. Every key is optional, and keys Gnista doesn’t know are ignored.
The keys
| Key | Type | What it does |
|---|---|---|
LicenceKey | String | Activates Gnista without anyone typing the key: tried at each launch while the Mac has no licence. Works with any key. |
EnabledAgents | Array of strings | Only these agents can be connected to Gnista, and only their sessions show. Names below. |
ApprovalsAllowed | Boolean | false turns off answering prompts in Gnista altogether: every agent asks in its own prompt. |
ApprovalAgents | Array of strings | The agents whose prompts may be answered in Gnista. |
CrashReportsMode | String | How Gnista handles crash reports: ask (it asks after a crash), always or never. |
AutomaticUpdates | Boolean | true turns automatic updates on and locks the switch; false stops Gnista checking for updates itself, so you can roll them out yourself. |
RemoteMachinesAllowed | Boolean | false turns off remote machines: Gnista closes its SSH tunnels, and no one can connect a server in Settings. |
RemoteConnection | String | How remote machines connect: automatic (Gnista’s own ssh, forwarding), relay (Gnista’s own ssh, never forwarding: an ordinary command) or manual (no ssh of Gnista’s own: people’s own sessions carry it, by a line in their ssh config). |
ListSummaryAllowed | Boolean | false turns off Describe what agents do: Apple Intelligence never writes a row’s words on these Macs. |
DisplayMode | String | Where Gnista shows: notch, menuBar or both. Forced, it’s locked; set once, as in the template, it’s a default people can change. |
Agent names
EnabledAgents and ApprovalAgents name agents the way Gnista’s helper does:
| Name | Agent |
|---|---|
claude | Claude Code |
cowork | Claude Cowork |
codex | Codex |
gemini | Gemini CLI |
copilot | GitHub Copilot |
opencode | OpenCode |
devin | Devin |
qwen | Qwen Code |
qwenwork | QwenWork |
qoder | Qoder CLI |
qoder-cn | Qoder CN |
qoderwork | QoderWork |
droid | Factory Droid |
cursor | Cursor |
antigravity | Antigravity |
vibe | Mistral Vibe |
codebuddy | CodeBuddy |
workbuddy | WorkBuddy |
kimi | Kimi Code |
kilo | Kilo Code |
mimocode | MiMoCode |
zcode | ZCode |
amp | Amp |
auggie | Auggie |
goose | Goose |
pi | Pi |
omp | Oh My Pi |
openhands | OpenHands |
grok | Grok Build |
trae | Trae |
trae-cn | Trae CN |
codewhale | Codewhale |
aider | Aider |
dsh | DeepSeek Harness |
Copilot in VS Code counts as copilot. Custom agents go by their file’s name. Answering in Gnista works with claude, codex, devin, opencode, qwen, qoder, qoder-cn, codebuddy, workbuddy, droid, kilo, mimocode, zcode, kimi and omp; other names in ApprovalAgents change nothing.
The profile
A complete profile with every key. The template is the same, with a comment on each key. Keep the keys you want to manage, put in your key, and give both PayloadUUID values your own (run uuidgen in Terminal).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PayloadDisplayName</key>
<string>Gnista</string>
<key>PayloadDescription</key>
<string>Gnista's licence key and settings for your team.</string>
<key>PayloadIdentifier</key>
<string>sh.gnista.Gnista.profile</string>
<key>PayloadOrganization</key>
<string>Your organisation</string>
<key>PayloadScope</key>
<string>System</string>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>00000000-0000-4000-8000-000000000001</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadDisplayName</key>
<string>Gnista settings</string>
<key>PayloadIdentifier</key>
<string>sh.gnista.Gnista.profile.preferences</string>
<key>PayloadType</key>
<string>com.apple.ManagedClient.preferences</string>
<key>PayloadUUID</key>
<string>00000000-0000-4000-8000-000000000002</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadContent</key>
<dict>
<key>sh.gnista.Gnista</key>
<dict>
<key>Forced</key>
<array>
<dict>
<key>mcx_preference_settings</key>
<dict>
<key>LicenceKey</key>
<string>GNISTA-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
<key>EnabledAgents</key>
<array>
<string>claude</string>
<string>codex</string>
</array>
<key>ApprovalsAllowed</key>
<true/>
<key>ApprovalAgents</key>
<array>
<string>claude</string>
</array>
<key>CrashReportsMode</key>
<string>never</string>
<key>AutomaticUpdates</key>
<false/>
<key>RemoteMachinesAllowed</key>
<true/>
<key>RemoteConnection</key>
<string>relay</string>
</dict>
</dict>
</array>
<key>Set-Once</key>
<array>
<dict>
<key>mcx_data_timestamp</key>
<date>2026-10-15T00:00:00Z</date>
<key>mcx_preference_settings</key>
<dict>
<key>DisplayMode</key>
<string>notch</string>
</dict>
</dict>
</array>
</dict>
</dict>
</dict>
</array>
</dict>
</plist>Scope it to the Macs (device level, as in the template), not to users.
Jamf Pro
- In Jamf Pro, go to Computers, then Configuration Profiles, and choose Upload. Pick your edited
gnista.mobileconfig. - Check the General payload: level Computer, distribution method Install Automatically.
- Scope it to the computers or smart groups that run Gnista, and save.
Rather build it in Jamf? Create a new profile, add Application & Custom Settings, upload a property list of just the keys, and give sh.gnista.Gnista as the preference domain.
Kandji
- In Kandji, open the Library and add a Custom Profile.
- Upload your edited
gnista.mobileconfigand make sure it installs on Mac. - Assign it to the Blueprints with the Macs that run Gnista, and save.
Microsoft Intune
- In the Intune admin center, go to Devices, then macOS, then Configuration, and create a new policy.
- Choose Templates as the profile type, then Custom.
- Name it, choose the device channel, and upload your edited
gnista.mobileconfig. - Assign it to the device groups with the Macs that run Gnista, and create it.
Intune’s Preference file template works too: give sh.gnista.Gnista as the preference domain and upload a property list of just the keys.
Mosyle
- In Mosyle, go to Management, then Custom Profiles, and add a new profile.
- Upload your edited
gnista.mobileconfig. - Assign it to the devices or device groups that run Gnista, and save.
Check it on a Mac
The profile shows in System Settings, General, Device Management. Its settings land in the Mac’s managed preferences:
defaults read "/Library/Managed Preferences/sh.gnista.Gnista"In Gnista, Settings shows the managed settings as “Managed by your organisation”, and Settings ▸ About ▸ Licence shows the team licence. To try a profile before rolling it out, double-click it on a test Mac and install it in System Settings.