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
| Canal | Disponible | Absent | Erreur 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)