Claude Code

Barre de contexte segmentée pour Claude Code

Remplace le pourcentage brut de la statusline par une barre visuelle segmentée en couleurs. Tu vois en un coup d’œil ce qui consomme ton contexte : conversation, cache MCP, contexte chargé, ou tokens de sortie. Le pourcentage global passe du vert au jaune à 50 %, puis au rouge à 80 %.

Langage : Bash Prérequis : jq, bc Testé sur : macOS / Linux
statusline-command.sh
#!/bin/bash
# Claude Code status line — barre de contexte segmentée
# Par David Perrot — legeek.tech
input=$(cat)

used_pct=$(echo "$input" | jq -r '.context_window.used_percentage // empty')
ctx_size=$(echo "$input" | jq -r '.context_window.context_window_size // empty')
input_tokens=$(echo "$input" | jq -r '.context_window.current_usage.input_tokens // empty')
cache_read=$(echo "$input" | jq -r '.context_window.current_usage.cache_read_input_tokens // empty')
cache_write=$(echo "$input" | jq -r '.context_window.current_usage.cache_creation_input_tokens // empty')
output_tokens=$(echo "$input" | jq -r '.context_window.current_usage.output_tokens // empty')
model=$(echo "$input" | jq -r '.model.display_name // empty')
cwd=$(echo "$input" | jq -r '.workspace.current_dir // empty')

RST="\033[0m"; BLD="\033[1m"; DIM="\033[2m"
FG_GRN="\033[32m"; FG_YEL="\033[33m"; FG_RED="\033[31m"; FG_CYN="\033[36m"
BG_CYN="\033[46m"; BG_MAG="\033[45m"; BG_GRN="\033[42m"; BG_YEL="\033[43m"
BG_DIM="\033[100m"; DARK="\033[30m"; WHT="\033[97m"

pct_of() {
  local val="$1"
  [ -z "$val" ] || [ "$val" = "null" ] || [ "$val" = "0" ] && echo "0" && return
  [ -z "$ctx_size" ] || [ "$ctx_size" = "0" ] && echo "0" && return
  echo "scale=0; $val * 100 / $ctx_size" | bc
}

# Render segment: n chars wide, bg color, short label, full label
bar_seg() {
  local n="$1" bg="$2" short="$3" full="$4"
  [ "$n" -le 0 ] && return

  # Choose label that fits
  local lbl=""
  if   [ "$n" -ge "${#full}"  ]; then lbl="$full"
  elif [ "$n" -ge "${#short}" ]; then lbl="$short"
  elif [ "$n" -ge 2 ]          ; then lbl="${short:0:$n}"
  fi

  local ll=${#lbl}
  local pad=$(( n - ll ))
  local pl=$(( pad / 2 ))
  local pr=$(( pad - pl ))

  printf "${bg}${DARK}"
  [ "$pl" -gt 0 ] && printf '%*s' "$pl" ''
  printf '%s' "$lbl"
  [ "$pr" -gt 0 ] && printf '%*s' "$pr" ''
  printf "${RST}"
}

if [ -z "$used_pct" ]; then
  printf "${FG_CYN}%s${RST}  %s" "$model" "$(basename "$cwd")"
else
  used_int=$(printf "%.0f" "$used_pct")

  pct_conv=$(pct_of "$input_tokens")
  pct_mcp=$(pct_of "$cache_write")
  pct_ctxt=$(pct_of "$cache_read")
  pct_out=$(pct_of "$output_tokens")

  # Global color
  if   [ "$used_int" -ge 80 ] 2>/dev/null; then gc="$FG_RED"
  elif [ "$used_int" -ge 50 ] 2>/dev/null; then gc="$FG_YEL"
  else gc="$FG_GRN"; fi

  printf "${BLD}${gc}%3d%%${RST} " "$used_int"

  BAR_W=48

  # Used portion in chars
  used_w=$(( used_int * BAR_W / 100 ))
  [ "$used_w" -lt 1 ] && used_w=0

  # Raw segment widths proportional within the used portion
  if [ "$used_int" -gt 0 ]; then
    w_conv=$(( pct_conv * used_w / used_int ))
    w_mcp=$(( pct_mcp  * used_w / used_int ))
    w_ctxt=$(( pct_ctxt * used_w / used_int ))
    w_out=$(( pct_out  * used_w / used_int ))
  else
    w_conv=0; w_mcp=0; w_ctxt=0; w_out=0
  fi

  # Enforce minimum 2 chars for any non-zero segment
  MIN=2
  bump=0
  for v in pct_conv pct_mcp pct_ctxt pct_out; do
    eval "pv=\$$v"
    eval "wv=w_$(echo $v | sed 's/pct_//')"
    eval "wval=\$$wv"
    if [ "$pv" -gt 0 ] && [ "$wval" -lt "$MIN" ]; then
      eval "$wv=$MIN"
      bump=$(( bump + MIN - wval ))
    fi
  done

  # Steal bump from the largest segment
  largest="w_conv"
  lval=$w_conv
  for ww in w_mcp w_ctxt w_out; do
    eval "tv=\$$ww"
    if [ "$tv" -gt "$lval" ]; then lval=$tv; largest=$ww; fi
  done
  eval "$largest=$(( $lval - bump ))"
  eval "[ \$$largest -lt 0 ] && $largest=0"

  # Recompute totals
  filled=$(( w_conv + w_mcp + w_ctxt + w_out ))
  diff=$(( used_w - filled ))
  w_conv=$(( w_conv + diff ))
  [ "$w_conv" -lt 0 ] && w_conv=0

  unused_w=$(( BAR_W - used_w ))
  [ "$unused_w" -lt 0 ] && unused_w=0

  # Render: CONV | MCP | CTXT | OUT | unused
  bar_seg "$w_conv"  "$BG_CYN" "CONV"  "CONV ${pct_conv}%"
  bar_seg "$w_mcp"   "$BG_MAG" "MCP"   "MCP ${pct_mcp}%"
  bar_seg "$w_ctxt"  "$BG_GRN" "CTXT"  "CTXT ${pct_ctxt}%"
  bar_seg "$w_out"   "$BG_YEL" "OUT"   "OUT ${pct_out}%"

  if [ "$unused_w" -gt 0 ]; then
    printf "${BG_DIM}${DARK}%*s${RST}" "$unused_w" ''
  fi
fi

Installation

  1. Ouvre ton terminal. Le dossier de config de Claude Code est caché dans ton home : ~/.claude/. Si tu ne le vois pas dans ton explorateur de fichiers, c’est normal — les dossiers qui commencent par un point sont masqués par défaut.
  2. Crée le fichier du script :
    nano ~/.claude/statusline-command.sh
    Colle le script complet copié ci-dessus, puis sauvegarde avec Ctrl+O, Enter, Ctrl+X.
  3. Rends le fichier exécutable — sans ça, Claude Code ne pourra pas le lancer :
    chmod +x ~/.claude/statusline-command.sh
  4. Ouvre (ou crée) le fichier de settings de Claude Code :
    nano ~/.claude/settings.json
    Ajoute cette ligne dans le JSON :
    "statusline": { "command": "bash ~/.claude/statusline-command.sh" }
    Si le fichier existe déjà avec d’autres réglages, ajoute cette clé à côté des autres (sans oublier la virgule de séparation).
  5. Ferme et relance Claude Code. La barre segmentée apparaît en bas de ton terminal.
Prérequis : jq doit être installé (traitement JSON en ligne de commande).
Sur Mac : brew install jq · Sur Ubuntu/Debian : sudo apt install jq
Terminal / macOS

Fastfetch — Infos système et logo Apple au lancement du terminal

Affiche les infos système (OS, CPU, RAM, GPU, batterie, uptime) avec le logo Apple en ASCII à chaque ouverture de terminal. Remplace Neofetch (archivé, plus maintenu). Écrit en C, quasi instantané — là où Neofetch pouvait mettre 2 secondes.

Outil : fastfetch (Homebrew) Config : JSONC Testé sur : macOS / Linux
config.jsonc — ~/.config/fastfetch/
{
  "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
  "logo": {
    "type": "small"
  },
  "display": {
    "separator": " → "
  },
  "modules": [
    "title",
    "separator",
    "os",
    "kernel",
    "shell",
    "terminal",
    "cpu",
    "gpu",
    "memory",
    "disk",
    "battery",
    "uptime",
    "break",
    "colors"
  ]
}

Installation

  1. Ouvre le fichier de config :
    nano ~/.config/fastfetch/config.jsonc
    Remplace le contenu par la config ci-dessus, ou ajuste les modules selon tes préférences. Les modules disponibles : os, kernel, shell, terminal, cpu, gpu, memory, disk, battery, uptime, colors, locale, wifi, packages
  2. Active le lancement automatique à chaque ouverture de terminal :
    echo '[[ $- == *i* ]] && fastfetch' >> ~/.zshrc
    La condition [[ $- == *i* ]] empêche le lancement dans les scripts non-interactifs (cron, CI, etc.).
  3. Ouvre un nouveau terminal. Fastfetch s’affiche automatiquement avec tes infos système.
Options utiles :
Logo petit : "type": "small" · Logo personnalisé : "source": "/chemin/vers/ascii.txt"
Séparateur custom : "separator": " → " ou " : " ou " ── "
Désactiver un module : supprime-le simplement de la liste "modules".
OpenClaw / Docker

Remplacer Brave Search par SearXNG dans OpenClaw — zéro frais

Brave Search API coûte 4 dollars par mois. SearXNG auto-hébergé fait la même chose gratuitement. On remplace le fournisseur de recherche web d’OpenClaw en 10 minutes : un fichier de config SearXNG, un service Docker Compose, et trois lignes dans openclaw.json.

Outils : Docker, SearXNG Prérequis : VPS avec OpenClaw Temps : 10 min
~/searxng/settings.yml
use_default_settings: true

general:
  instance_name: "OpenClaw SearXNG"
  enable_metrics: false

search:
  safe_search: 0
  default_lang: "fr"
  formats:
    - html
    - json

server:
  secret_key: "changez-moi-par-une-vraie-cle"
  bind_address: "0.0.0.0"
  port: 8080
  limiter: false
  public_instance: false

engines:
  - name: google
    engine: google
    shortcut: g
    disabled: false
  - name: duckduckgo
    engine: duckduckgo
    shortcut: ddg
    disabled: false
  - name: bing
    engine: bing
    shortcut: b
    disabled: false
  - name: wikipedia
    engine: wikipedia
    shortcut: wp
    disabled: false
docker-compose.yml — service à ajouter
  searxng:
    image: searxng/searxng:latest
    volumes:
      - ~/searxng/settings.yml:/etc/searxng/settings.yml:ro
      - ~/searxng/limiter.toml:/etc/searxng/limiter.toml:ro
    restart: unless-stopped
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
~/.openclaw/openclaw.json — section tools
{
  "tools": {
    "web": {
      "search": {
        "enabled": true,
        "provider": "searxng",
        "searxng": {
          "baseUrl": "http://searxng:8080"
        }
      }
    }
  }
}

Installation

  1. Crée le dossier de config SearXNG :
    mkdir -p ~/searxng
  2. Crée le fichier ~/searxng/settings.yml avec la config ci-dessus. Le format JSON (formats: [html, json]) est indispensable pour qu’OpenClaw puisse parser les résultats.
  3. Crée un fichier vide requis par SearXNG :
    touch ~/searxng/limiter.toml
  4. Ajoute le service searxng dans ton docker-compose.yml OpenClaw. Pas besoin d’exposer de port — les deux services communiquent via le réseau Docker interne.
  5. Ouvre ~/.openclaw/openclaw.json et remplace (ou ajoute) la section tools avec la config ci-dessus. Les trois lignes clés : "provider": "searxng", "baseUrl": "http://searxng:8080", "enabled": true.
  6. Redémarre les services :
    docker compose up -d
  7. Vérifie que SearXNG tourne :
    docker ps | grep searxng
    Puis pose une question web à OpenClaw pour tester.
Le calcul : Brave Search API = 48 CHF/an. Tavily = 60 CHF/an. SearXNG = 0 CHF (~50 Mo de RAM).
Source : docs.searxng.org
Sécurité
🏷️ Langage : Bash / CLI 📦 Prérequis : npm, pip, git, gpg ✓ Testé sur : macOS / Linux
Étape 1 — Audit des dépendances
#!/bin/bash
# Audit rapide de tous tes projets Node.js et Python
# Usage: chmod +x audit-deps.sh && ./audit-deps.sh

echo "=== Audit des dependances ==="
echo ""

# Node.js
if command -v npm &>/dev/null; then
  echo "[npm] Scan en cours..."
  npm audit 2>/dev/null || echo "[npm] Aucun projet Node.js ici"
  echo ""
fi

# Python
if command -v pip &>/dev/null; then
  if ! command -v pip-audit &>/dev/null; then
    echo "[pip] Installation de pip-audit..."
    pip install pip-audit -q
  fi
  echo "[pip] Scan en cours..."
  pip-audit 2>/dev/null || echo "[pip] Aucun environnement Python actif"
  echo ""
fi

echo "=== Audit termine ==="
Étape 2 — Vérifier les commits suspects
#!/bin/bash
# Verifie les commits suspects depuis le 8 mars 2026

echo "=== Commits depuis le 8 mars ==="
git log --since="2026-03-08" --stat --oneline

echo ""
echo "=== Diff avec le remote ==="
git diff origin/main..HEAD --stat

echo ""
echo "=== Reflog (detecte les force-push) ==="
git reflog --since="2026-03-08" | head -20
Étape 3 — Activer la signature GPG
#!/bin/bash
# Active la signature GPG sur tous tes commits

# Genere une cle GPG (RSA 4096, pas d'expiration)
gpg --full-generate-key

# Recupere l'ID de ta cle
KEY_ID=$(gpg --list-secret-keys --keyid-format=long \
  | grep sec | awk '{print $2}' | cut -d"/" -f2)
echo "Cle GPG: $KEY_ID"

# Configure Git globalement
git config --global user.signingkey $KEY_ID
git config --global commit.gpgsign true


        

Protection complète en 5 étapes

  1. Audite tes dépendances :
    npm audit et pip audit sur chaque projet actif
  2. Vérifie les commits depuis le 8 mars :
    git log --since="2026-03-08" --stat
  3. Pin tes versions dans package.json — remplace ^4.17.0 par 4.17.21 puis npm ci
  4. Installe un scanner continu :
    npx socket report create ou aikido.dev (gratuit ≤ 10 repos)
  5. Active la signature GPG :
    git config --global commit.gpgsign true
NemoClaw / NVIDIA — NOUVEAU

NemoClaw (NVIDIA) : installation pas à pas sur VPS sans GPU

Testé le 18 mars 2026. 4 heures d’installation, 10 problèmes rencontrés et résolus. Du faux paquet npm au sandbox fonctionnel avec Nemotron 3 Super 120B. Chaque commande ci-dessous a été exécutée sur un VPS Hostinger (Ubuntu 24.04, 4 vCPU, 16 GB RAM, Docker 29.3, Node 22, zéro GPU).

Outils : OpenShell, NemoClaw, Docker Prérequis : VPS Ubuntu 22.04+, Docker, Node 20+ Temps : ~4h (avec les pièges documentés, comptez 1h)

Étape 1 — Vérifier les prérequis

  1. Vérifiez que tout est en place avant de commencer. NemoClaw ne donne aucun message d’erreur clair si un prérequis manque.
Vérification des prérequis
uname -a            # Ubuntu 22.04 ou supérieur
docker --version    # Docker 20+ installé et running
node --version      # Node.js 20+
free -h             # 16 GB recommandé (8 GB minimum + swap)
df -h /             # 40 GB libres (image sandbox = 2 GB)

Étape 2 — Installer OpenShell

  1. OpenShell est le runtime de sécurité de NVIDIA (binaire Rust statique, 13 MB). C’est lui qui crée le sandbox. Sans lui, NemoClaw refuse de démarrer.
Installation OpenShell
ARCH=$(uname -m)
curl -sL -o /tmp/openshell.tar.gz \
  "https://github.com/NVIDIA/OpenShell/releases/latest/download/openshell-${ARCH}-unknown-linux-musl.tar.gz"

cd /tmp && tar xzf openshell.tar.gz

# Vérifier que c'est un vrai binaire
file openshell
# ELF 64-bit LSB pie executable, x86-64, static-pie linked

install -m 755 openshell /usr/local/bin/openshell
openshell --version
# openshell 0.0.10

rm /tmp/openshell /tmp/openshell.tar.gz

Étape 3 — Installer NemoClaw

cd /opt
git clone https://github.com/NVIDIA/NemoClaw.git
cd NemoClaw

# Vérifier que c'est le bon repo
head -6 package.json
# "description": "NemoClaw — run OpenClaw inside OpenShell with NVIDIA inference"
# "license": "Apache-2.0"
# "bin": { "nemoclaw": "./bin/nemoclaw.js" }

npm install -g .
nemoclaw --help   # Doit afficher le menu CLI

Étape 4 — Clé API NVIDIA (gratuit)

  1. Aller sur build.nvidia.com
  2. Créer un compte (pas de carte bancaire)
  3. Profil → API Keys → Generate API Key
  4. Copier la clé (format nvapi-...)
Sauvegarder la clé (permissions 600)
mkdir -p ~/.nemoclaw && chmod 700 ~/.nemoclaw
echo '{"nvidia_api_key":"nvapi-VOTRE_CLE"}' > ~/.nemoclaw/credentials.json
chmod 600 ~/.nemoclaw/credentials.json

Étape 5 — Patcher le port 8080 AVANT le onboard

ERREUR RENCONTRÉE : failed to bind host port 0.0.0.0:8080/tcp: address already in use. Le gateway utilise le port 8080 par défaut. Si un autre service l’occupe, le onboard plante sans alternative. Il faut patcher le code source.
Patch du port 8080 → 8180
# Vérifier si le port 8080 est occupé
lsof -i :8080

# Si oui, patcher le onboard
sed -i 's/const gwArgs = \["--name", "nemoclaw"\];/const gwArgs = ["--name", "nemoclaw", "--port", "8180"];/' \
  /opt/NemoClaw/bin/lib/onboard.js

# Vérifier le patch
grep 'gwArgs' /opt/NemoClaw/bin/lib/onboard.js
# const gwArgs = ["--name", "nemoclaw", "--port", "8180"];

Étape 6 — Libérer le port 18789

ERREUR RENCONTRÉE : Port 18789 is already in use. Si OpenClaw tourne déjà sur ce port, il faut le stopper temporairement.
Libérer le port 18789
lsof -i :18789

# Si occupé par OpenClaw
docker stop openclaw-openclaw-gateway-1 openclaw-searxng-1

# Pour rollback plus tard :
# docker start openclaw-openclaw-gateway-1 openclaw-searxng-1

Étape 7 — Lancer le wizard onboard

  1. Le wizard est interactif. Il demande : un nom de sandbox, le choix du provider (prendre NVIDIA Cloud API), et les policies à appliquer (accepter les suggestions).
  2. L’image Docker fait ~2 GB. Comptez 5-10 minutes de téléchargement.
  3. Si erreur tar entry path too long : vous avez un dossier openclaw local. Supprimez le sandbox échoué (openshell sandbox delete NOM) et relancez.
Lancement du onboard
export NVIDIA_API_KEY='nvapi-VOTRE_CLE'
nemoclaw onboard

# Le wizard déroule 7 étapes :
# [1/7] Preflight   — Docker OK, OpenShell OK, No GPU → cloud
# [2/7] Gateway     — démarre sur port 8180 (patché)
# [3/7] Sandbox     — télécharge ~2 GB, crée le sandbox
# [4/7] Inference   — Nemotron 3 Super 120B via NVIDIA Cloud
# [5/7] Provider    — nvidia-nim créé
# [6/7] OpenClaw    — lancé dans le sandbox
# [7/7] Policies    — pypi, npm appliquées

Étape 8 — Vérifier l’installation

Vérification complète
nemoclaw status                    # Liste le sandbox
nemoclaw nemoclaw-test status      # Phase: Ready
openshell status                   # Status: Connected
openshell sandbox list             # nemoclaw-test Ready

# Test de connexion au sandbox
printf 'whoami && openclaw --version\nexit\n' | \
  timeout 15 openshell sandbox connect nemoclaw-test
# sandbox           ← PAS root (isolation OK)
# OpenClaw 2026.3.11

Étape 9 — Résoudre le problème d’authentification

ERREUR RENCONTRÉE : No API key found for provider "anthropic". L’agent vérifie la présence d’une clé Anthropic AVANT d’envoyer la requête, même si OpenShell reroute vers Nemotron. Solution : fausse clé Anthropic + vraies credentials NVIDIA.
Premier test avec l’agent (env vars obligatoires)
printf 'export ANTHROPIC_API_KEY=dummy-rerouted-by-nemoclaw
export OPENAI_API_KEY=nvapi-VOTRE_CLE
export OPENAI_BASE_URL=https://integrate.api.nvidia.com/v1
openclaw agent --session-id test -m "Bonjour, qui es-tu ?" --json 2>&1
exit
' | timeout 90 nemoclaw nemoclaw-test connect

# Résultat attendu :
# "status": "ok"
# "provider": "nvidia"
# "model": "nemotron-3-super-120b-a12b"
# Temps de réponse : ~9 secondes

Étape 10 — Recherche web avec Gemini (gratuit)

  1. OpenClaw 2026.3.11 n’accepte que : brave, perplexity, grok, gemini. Brave a retiré son tier gratuit (4$/mois). Gemini est gratuit.
  2. Obtenir une clé sur aistudio.google.com/apikey
  3. BUG CONNU : openshell sandbox upload crée un dossier au lieu d’un fichier. Utiliser le heredoc ci-dessous.
Injecter la config Gemini dans le sandbox
# Supprimer l'ancienne config
printf 'rm -f /sandbox/.openclaw/openclaw.json\nexit\n' | \
  timeout 10 openshell sandbox connect nemoclaw-test

# Écrire la config avec Gemini (ADAPTER votre clé)
printf 'cat > /sandbox/.openclaw/openclaw.json << "ENDCFG"
{
  "tools": {
    "web": {
      "search": {
        "enabled": true,
        "provider": "gemini",
        "gemini": {
          "apiKey": "AIzaSy-VOTRE-CLE-GEMINI"
        }
      }
    }
  }
}
ENDCFG
echo DONE
exit
' | timeout 15 openshell sandbox connect nemoclaw-test
Créer et appliquer la policy réseau Gemini
cat > /opt/NemoClaw/nemoclaw-blueprint/policies/presets/gemini-search.yaml << 'YAML'
preset:
  name: gemini-search
  description: "Google Gemini API access for web search"

network_policies:
  gemini_api:
    name: gemini_api
    endpoints:
      - host: generativelanguage.googleapis.com
        port: 443
        protocol: rest
        enforcement: enforce
        rules:
          - allow: { method: GET, path: "/**" }
          - allow: { method: POST, path: "/**" }
      - host: www.googleapis.com
        port: 443
        protocol: rest
        enforcement: enforce
        rules:
          - allow: { method: GET, path: "/**" }
          - allow: { method: POST, path: "/**" }
    binaries:
      - path: /usr/local/bin/openclaw
      - path: /usr/bin/node
YAML

cd /opt/NemoClaw
node -e 'require("./bin/lib/policies").applyPreset("nemoclaw-test", "gemini-search")'
# Applied preset: gemini-search

Étape 11 — Bridge Telegram

  1. Problème 1 : le bridge cherche un sandbox nommé nemoclaw par défaut. Passer SANDBOX_NAME au lancement.
  2. Problème 2 : le bridge ne passe pas les env vars d’auth à l’agent. L’agent reçoit les messages mais ne répond jamais. Il faut patcher la ligne 95.
Patch du bridge Telegram (ligne 95)
# Dans /opt/NemoClaw/scripts/telegram-bridge.js
# Ligne 95, REMPLACER :
#   export NVIDIA_API_KEY='${API_KEY}' && nemoclaw-start...
# PAR :
#   export NVIDIA_API_KEY='${API_KEY}' ANTHROPIC_API_KEY=dummy OPENAI_API_KEY='${API_KEY}' OPENAI_BASE_URL=https://integrate.api.nvidia.com/v1 && nemoclaw-start...

# En une commande sed :
sed -i "s|export NVIDIA_API_KEY='\${API_KEY}' \&\& nemoclaw-start|export NVIDIA_API_KEY='\${API_KEY}' ANTHROPIC_API_KEY=dummy OPENAI_API_KEY='\${API_KEY}' OPENAI_BASE_URL=https://integrate.api.nvidia.com/v1 \&\& nemoclaw-start|" \
  /opt/NemoClaw/scripts/telegram-bridge.js
Script de démarrage du bridge
cat > /opt/NemoClaw/start-bridge.sh << 'SH'
#!/bin/bash
export NVIDIA_API_KEY='nvapi-VOTRE_CLE'
export TELEGRAM_BOT_TOKEN='VOTRE_TOKEN_BOTFATHER'
export SANDBOX_NAME='nemoclaw-test'
export ALLOWED_CHAT_IDS='VOTRE_CHAT_ID_TELEGRAM'
pkill -f telegram-bridge 2>/dev/null
sleep 1
nohup node /opt/NemoClaw/scripts/telegram-bridge.js > /tmp/nemoclaw-telegram.log 2>&1 &
echo "Bridge demarre PID=$!"
sleep 3
tail -15 /tmp/nemoclaw-telegram.log
SH
chmod +x /opt/NemoClaw/start-bridge.sh

# Lancer le bridge
bash /opt/NemoClaw/start-bridge.sh

# Surveiller les logs
tail -f /tmp/nemoclaw-telegram.log

Récap des 10 pièges

  1. Dockerfile local → relancer onboard (image ghcr.io)
  2. Credentials masquées → normal (masquage sécurité)
  3. Auth Anthropic → ANTHROPIC_API_KEY=dummy
  4. Nom sandbox bridge → SANDBOX_NAME=votre-nom
  5. Bridge muet → patch ligne 95
  6. SearxNG retiré → Gemini (gratuit) + policy
  7. Upload buggé → heredoc via sandbox connect
Commandes de rollback :
nemoclaw nemoclaw-test destroy — supprime le sandbox
openshell gateway destroy -g nemoclaw — supprime le gateway
docker start openclaw-openclaw-gateway-1 — restaure OpenClaw

Testé et validé le 18 mars 2026 sur VPS Hostinger
4 vCPU AMD EPYC · 16 GB RAM · Ubuntu 24.04 · Docker 29.3 · Node.js 22
David Perrot — legeek.tech

Lire l’analyse complète sous le capot →