Déployer des agents de codage avec la gestion des appareils mobiles (MDM)
Bêta
Cette fonctionnalité est en version bêta. Pour l'utiliser, un administrateur de workspace doit activer la configuration managée de Unity Gateway à partir de la page Aperçus . Consultez Gérer les aperçus Databricks.
Utilisez la gestion des appareils mobiles (MDM) et la CLI Unity Gateway pour distribuer la configuration de l'agent de codage de votre équipe. Les administrateurs publient la configuration dans le workspace, et les développeurs utilisent leurs agents familiers avec les modèles, les serveurs MCP et les compétences configurés.
Votre outil/solution/technologie/plateforme MDM exécute un script de provisionnement avec des privilèges d'administrateur sur chaque appareil. Le script installe ug, le Databricks CLI, et les agents de codage à l'échelle de la machine, puis exécute ug configure, qui installe la configuration de l'agent de codage du workspace pour l'ensemble de l'appareil. Les développeurs lancent ensuite leur agent sans privilèges d'administrateur et se connectent avec leur propre compte Databricks.
Le provisionnement MDM configure Claude Code et Codex, qui ont des paramètres à l'échelle de la machine. Il ne configure pas GitHub Copilot CLI ou GitHub Copilot dans Visual Studio Code. Les développeurs configurent eux-mêmes GitHub Copilot avec ug configure --agents copilot.
Déployer avec MDM
Configurer des agents de codage
Activez les agents utilisés par votre équipe et publiez la configuration dans votre workspace. Voir Configurer des agents de codage.
Chaque agent activé a besoin d'au moins un modèle dans la configuration que le service principal de l'étape suivante peut utiliser. Par exemple, Claude Code a besoin de modèles Claude. ug configure ignore tout agent sans modèles.
Créer un service principal de provisionnement
La stratégie MDM utilise un Service Principal uniquement pour lire la configuration publiée pendant son exécution. Les développeurs s'authentifient en leur nom propre.
-
Ajoutez un service principal à votre workspace, par exemple
ug-mdm-provisioning. -
Ne laissez activé que le droit d'accès Workspace access . Le Service Principal n'a pas besoin d'autres droits. Voir Gérer les droits.
-
Accordez au Service Principal l'accès aux modèles, aux serveurs MCP et aux compétences dans la configuration publiée, y compris les privilèges Unity Catalog requis. Consultez Accorder l'accès aux modèles, aux serveurs MCP et aux compétences.
-
Sous le Secrets tab du Service Principal, cliquez sur Générer le secret . Choisissez une durée de vie qui correspond à votre politique de rotation. Sous Étendue , cliquez sur Autres APIs , ajoutez les étendues
ai-gatewayetunity-catalog, et définissez chacune sur Lecture . Consultez Étape 1 : Créer un secret OAuth.
-
Copiez l’ID client et la clé secrète. Vous ne pourrez plus voir la clé secrète après avoir fermé la boîte de dialogue.
Déployer avec votre outil/solution/technologie/plateforme MDM
Install ug in a shared location that every user on the device can run, not in the root user's home directory. ug configure records the path to ug in the machine-wide agent settings, and each developer's agent runs ug from that path to authenticate.
- Jamf Pro (macOS)
Ces étapes déploient Claude Code et Codex sur les appareils macOS avec Jamf Pro. Chaque appareil nécessite :
- Accès réseau à l'URL de votre workspace, PyPI (
pypi.orgetfiles.pythonhosted.org), GitHub (github.cometraw.githubusercontent.com),astral.shetdownloads.claude.ai. - Outils de ligne de commande pour Xcode, ou l’autorisation pour le script de les installer avec
softwareupdate.ugest installé depuis GitHub, ce qui nécessitegit.
Ajouter le script
-
Dans Jamf Pro, accédez à Settings > Gestion informatique > Scripts > New et nommez le script
Unity Gateway provision. -
Sous le Script tab, collez le script suivant :
Afficher le script de provisionnement
#!/bin/bash
#
# macOS MDM provisioning script, written for Jamf Pro policies: install
# ug, the Databricks CLI, Claude Code and Codex machine-wide and run
# `ug configure` as root, which installs the workspace policy at
# /etc/unitygateway/managed-settings.json.
# Users then launch with no sudo:
#
# UG_SKIP_OS_SETTINGS=1 ug claude (or: ug codex)
#
# Jamf parameters ($1-$3 are reserved by Jamf):
# $4 Databricks workspace URL, starting with https://
# $5 Service principal OAuth client id
# $6 Service principal OAuth client secret
#
# The token is used for this run only; developers sign in with their own
# OAuth. Needs access to PyPI, GitHub, astral.sh and downloads.claude.ai.
set -euo pipefail
umask 022
export HOME=/var/root
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
WORKSPACE="${4%/}"
PREFIX=/usr/local/unity-gateway
CLAUDE_RELEASES=https://downloads.claude.ai/claude-code-releases
CODEX_RELEASES=https://github.com/openai/codex/releases/latest/download
UG_REPO=https://github.com/databricks/unity-gateway
UV_URL=https://astral.sh/uv/install.sh
CLI_URL=https://raw.githubusercontent.com
CLI_URL="$CLI_URL/databricks/setup-cli/main/install.sh"
CLT_MARKER=/tmp/.com.apple.dt.CommandLineTools
CLT_MARKER="$CLT_MARKER.installondemand.in-progress"
# ug must be in a shared path: the machine-wide agent settings
# run it by absolute path for every user.
export UV_TOOL_DIR="$PREFIX/tools"
export UV_TOOL_BIN_DIR=/usr/local/bin
export UV_PYTHON_INSTALL_DIR="$PREFIX/python"
export UV_PYTHON_PREFERENCE=only-managed
mkdir -p /usr/local/bin
# Get ug from git
if ! xcode-select -p >/dev/null 2>&1; then
touch "$CLT_MARKER"
clt="$(softwareupdate -l 2>/dev/null \
| sed -n 's/^\* Label: \(Command Line Tools.*\)$/\1/p' \
| tail -n1)"
softwareupdate -i "$clt"
rm -f "$CLT_MARKER"
fi
if ! command -v uv >/dev/null; then
curl -LsSf "$UV_URL" \
| env UV_INSTALL_DIR=/usr/local/bin UV_NO_MODIFY_PATH=1 sh
fi
uv tool install --force "git+$UG_REPO"
if [ ! -x /usr/local/bin/databricks ]; then
curl -fsSL "$CLI_URL" | sh
fi
# Download into a private temporary directory, not fixed /tmp paths
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
# Install Claude Code
if [ ! -x /usr/local/bin/claude ]; then
case "$(uname -m)" in
arm64) platform=darwin-arm64 ;;
*) platform=darwin-x64 ;;
esac
version="$(curl -fsSL "$CLAUDE_RELEASES/latest")"
base="$CLAUDE_RELEASES/$version"
checksum="$(curl -fsSL "$base/manifest.json" \
| plutil -extract "platforms.$platform.checksum" raw -o - -)"
curl -fsSL -o "$tmp/claude" "$base/$platform/claude"
echo "$checksum $tmp/claude" | shasum -a 256 -c -
install -m 755 "$tmp/claude" /usr/local/bin/claude
fi
# Install Codex
if [ ! -x /usr/local/bin/codex ]; then
case "$(uname -m)" in
arm64) target=aarch64-apple-darwin ;;
*) target=x86_64-apple-darwin ;;
esac
curl -fsSL "$CODEX_RELEASES/codex-$target.tar.gz" \
| tar -xzf - -C "$tmp" "codex-$target"
install -m 755 "$tmp/codex-$target" /usr/local/bin/codex
fi
# Get short lived credential; curl reads the client id and secret from
# stdin (-K -) so they don't appear in its arguments.
resp="$(printf 'user = "%s:%s"\n' "$5" "$6" \
| curl -sS -K - \
-d grant_type=client_credentials \
--data-urlencode 'scope=ai-gateway:read unity-catalog:read' \
"$WORKSPACE/oidc/v1/token")"
if ! DATABRICKS_BEARER="$(printf '%s' "$resp" \
| plutil -extract access_token raw -o - -)"; then
echo "Token request to $WORKSPACE failed: $resp" >&2
exit 1
fi
export DATABRICKS_BEARER
ug configure --global --workspace "$WORKSPACE" \
--agents claude,codex </dev/null
-
Sous l’ Options tab, libellez Parameter 4
Workspace URL, Parameter 5Client IDet Parameter 6Client secret. -
Cliquez sur Enregistrer .
Le script installe Claude Code, Codex et Databricks CLI uniquement s’ils sont manquants, et réinstalle ug à chaque exécution. Il ne met pas à jour les agents ni la CLI après la première installation. Pour les tenir à jour, modifiez le script pour qu'il corresponde à la manière dont vous mettez à jour le logiciel sur vos appareils.
Créer la politique
-
Accédez à Informatique > Politiques > Nouveau .
-
Dans Général , définissez Trigger sur Check-in récurrent et Fréquence d'exécution sur Une fois par jour . Chaque appareil exécute
ug configurequotidiennement, ce qui applique les mises à jour de configuration que vous publiez dans le workspace. -
Dans Scripts , ajoutez
Unity Gateway provisionavec Priorité réglée sur Après . Saisissez les paramètres :
parameter | Valeur |
|---|---|
4 (URL de workspace) | L'URL de votre workspace, commençant par |
5 (Identifiant client) | L'ID client du Service Principal. |
6 (Secret du client) | Secret du Service Principal. |
-
Dans Portée , sélectionnez les appareils à cibler. start avec un petit groupe d’appareils pilotes.
-
Cliquez sur Enregistrer . Jamf Pro exécute la politique sur chaque appareil ciblé lors de son prochain check-in.
Jamf Pro passes policy parameters to the script as command-line arguments. Any local user can read the client ID and secret, for example with ps, while the script runs, and Jamf Pro admins who can view the policy can read them too. The script doesn't write the credentials or the token to disk. To limit the impact of a leak, grant the service principal only the Workspace access entitlement, use a short secret lifetime, and rotate the secret regularly.
Lancer des agents sur les machines des développeurs
Une fois la stratégie exécutée sur un appareil, les développeurs lancent leur agent depuis un terminal sans privilèges d’administrateur :
UG_SKIP_OS_SETTINGS=1 ug claude
UG_SKIP_OS_SETTINGS=1 ug codex
UG_SKIP_OS_SETTINGS=1 indique à ug d'utiliser les paramètres installés par la politique MDM. Les développeurs peuvent définir UG_SKIP_OS_SETTINGS=1 dans leur profil shell pour l’utiliser pour chaque session. Le premier lancement ouvre un navigateur où le développeur se connecte à Databricks. L'activité de l'agent de codage est alors attribuée au développeur individuel, et non au service principal.
Pour raccourcir la commande de lancement, donnez aux développeurs des alias qui définissent la variable et lancent l'agent, par exemple dans un profil shell déployé avec MDM :
alias claude='UG_SKIP_OS_SETTINGS=1 ug claude'
alias codex='UG_SKIP_OS_SETTINGS=1 ug codex'
Déployer l’application de bureau Claude
La même exécution de ug configure configure également l'application de bureau Claude pour chaque utilisateur sur l'appareil. Pour prendre en charge Claude Desktop, installez-le dans votre script de provisionnement avant que le script ne s’exécute ug configure. Le script Jamf Pro ci-dessus n'installe pas Claude Desktop.
Lorsqu’un utilisateur ouvre Claude desktop pour la première fois, il se connecte avec son propre compte Databricks. Les utilisateurs peuvent également importer leurs projets et chats claude.ai.
Vérifier le déploiement
Sur un appareil pilote, connectez-vous avec le compte du système d'exploitation du développeur et vérifiez que :
- L'agent s'ouvre et répond à l'aide d'un modèle configuré.
- Les serveurs et compétences MCP configurés sont disponibles, et le développeur peut les utiliser.
- Les requêtes apparaissent dans le suivi de l'utilisation de Unity Gateway, et les traces apparaissent si le traçage est activé. Consultez Surveiller l'activité des agents de codage.
Répétez ces vérifications après avoir modifié le script de provisionnement ou la configuration publiée.
Maintenir les identifiants et la configuration
Pour faire pivoter le secret du Service Principal :
- Générez un nouveau secret pour le service principal.
- Mettez à jour le secret dans votre politique MDM.
- Une fois la politique exécutée sur vos appareils, supprimez l'ancien secret.
Si le secret est compromis, faites-le pivoter immédiatement et supprimez l'ancien secret. Le jeton demandé par le script a une durée de vie courte et le script ne l’écrit pas sur l’appareil ; il n’y a donc pas d’identifiant par appareil à révoquer.
Pour mettre à jour la configuration, publiez les modifications dans le workspace. Les appareils les appliquent la prochaine fois que la politique s'exécute. Voir Synchroniser les mises à jour de configuration.
Dépannage
Erreur | Cause |
|---|---|
| L’ID client ou le secret dans la stratégie MDM est incorrect, ou le secret a expiré. |
| Le secret n'a pas les portées |
| Aucun agent activé ne dispose de modèles que le Service Principal peut utiliser, par exemple Claude Code configuré sans modèles Claude. |