Aller au contenu
Hermès Skills
← Retour au catalogue

log-multi

Log 3 canaux simultanés : fichier .md local + Google Sheets webhook + Vikunja API. Graceful degradation si canal down.

Quand l'utiliser (Trigger)

Déclenchement standard selon le contexte de l'écosystème Hermès.

Mode d'emploi (Usage)

Mode d'emploi standard via l'agent Hermès.

Log Multi-Canal

Log vers 3 canaux avec dégradation gracieuse : un canal down ne bloque pas les autres.

Usage

Invoquer avec message + contexte :

/skill log-multi message="Deploy nginx:1.25 réussi" level=INFO tags="deploy,nginx"

Ou via script direct :

bash ~/.hermes/skills/log-multi/log.sh "Deploy nginx:1.25 réussi" "INFO" "deploy,nginx"

Script principal

#!/usr/bin/env bash
# ~/.hermes/skills/log-multi/log.sh
# Usage: log.sh "MESSAGE" "LEVEL" "TAGS"

MESSAGE="${1:-No message}"
LEVEL="${2:-INFO}"
TAGS="${3:-hermes}"
TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
DATE=$(date +%Y-%m-%d)
STATUS=""

# ── Canal 1 : Fichier .md local ───────────────────────────────────────
LOG_FILE="$HOME/second-brain/05-Log/$DATE.md"
{
  echo ""
  echo "### [$TIMESTAMP] $LEVEL"
  echo "**Tags :** $TAGS"
  echo "$MESSAGE"
  echo ""
} >> "$LOG_FILE" && STATUS+="✅ .md " || STATUS+="❌ .md "

# ── Canal 2 : Google Sheets (webhook n8n ou Apps Script) ──────────────
SHEETS_WEBHOOK="${HERMES_SHEETS_WEBHOOK:-}"
if [ -n "$SHEETS_WEBHOOK" ]; then
  HTTP=$(curl -s -o /dev/null -w "%{http_code}" \
    -X POST "$SHEETS_WEBHOOK" \
    -H "Content-Type: application/json" \
    --max-time 8 \
    -d "{\"timestamp\":\"$TIMESTAMP\",\"level\":\"$LEVEL\",\"message\":\"$MESSAGE\",\"tags\":\"$TAGS\"}")
  [ "$HTTP" = "200" ] && STATUS+="✅ Sheets " || STATUS+="⚠️ Sheets(HTTP:$HTTP) "
else
  STATUS+="⏭️ Sheets(no webhook) "
fi

# ── Canal 3 : Vikunja (task API) ──────────────────────────────────────
VIKUNJA_URL="${VIKUNJA_API_URL:-}"
VIKUNJA_TOKEN="${VIKUNJA_API_TOKEN:-}"
VIKUNJA_LIST="${VIKUNJA_LOG_LIST_ID:-1}"

if [ -n "$VIKUNJA_URL" ] && [ -n "$VIKUNJA_TOKEN" ]; then
  HTTP=$(curl -s -o /dev/null -w "%{http_code}" \
    -X POST "$VIKUNJA_URL/api/v1/lists/$VIKUNJA_LIST/tasks" \
    -H "Authorization: Bearer $VIKUNJA_TOKEN" \
    -H "Content-Type: application/json" \
    --max-time 8 \
    -d "{\"title\":\"[$LEVEL] $MESSAGE\",\"description\":\"Tags: $TAGS\\nTimestamp: $TIMESTAMP\"}")
  [ "$HTTP" = "201" ] && STATUS+="✅ Vikunja " || STATUS+="⚠️ Vikunja(HTTP:$HTTP) "
else
  STATUS+="⏭️ Vikunja(no token) "
fi

echo "[LOG-MULTI] $TIMESTAMP | $STATUS"

Configuration

Variables d’environnement (ajouter dans ~/.bashrc ou via Hermes secrets) :

# Canal 2 — Google Sheets via n8n webhook
export HERMES_SHEETS_WEBHOOK="https://n8n.ton-domaine.com/webhook/hermes-log"

# Canal 3 — Vikunja
export VIKUNJA_API_URL="https://vikunja.ton-domaine.com"
export VIKUNJA_API_TOKEN="ton_token_vikunja"
export VIKUNJA_LOG_LIST_ID="5"  # ID de la liste "Hermes Logs"

Comportement par canal

CanalDisponibleAbsentErreur HTTP
.md local✅ écrit❌ (rare, FS error)N/A
Sheets webhook✅ POST⏭️ skip silencieux⚠️ log status
Vikunja API✅ POST⏭️ skip silencieux⚠️ log status

Sortie toujours produite sur stdout même si 2/3 canaux down.

Triggers automatiques

  • Après chaque /skill deploy-check (résultat)
  • Après actions importantes (MCP ajouté/retiré)
  • Sur reset de session (/skill session-reset)