feat: rôle hermes_user + ask-agent + skills délégation

- Nouveau rôle hermes_user : création user/group UID 1002 sur storage-01
  et gpu-01, sudoers limités par host, clé SSH ed25519 générée sur
  storage-01 et distribuée vers gpu-01, ssh_config + known_hosts
- Kubeconfig copié depuis ansible vers hermes sur storage-01
- ask-agent : script bash LiteLLM pour déléguer aux agents
  system/monitor/brain/funk-ai
- hermes-skills/funk/agent-delegation : skill Hermes pour les
  inter-profile calls avec pattern Terminal: ask-agent
- Playbooks storage-01 et gpu-01 : ajout du rôle hermes_user

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
alkatrazz 2026-05-13 16:03:43 +02:00
parent 0c89d262d1
commit 6be2a89480
7 changed files with 325 additions and 0 deletions

View file

@ -0,0 +1,73 @@
#!/usr/bin/env bash
# ask-agent — Délègue une question à un agent Funk via LiteLLM.
#
# Usage:
# ask-agent <agent> "<question>"
# ask-agent <agent> "<question>" [--max-tokens N] [--system "<prompt>"]
#
# Agents: system | monitor | brain | funk-ai
set -euo pipefail
LITELLM_URL="http://127.0.0.1:4000/v1/chat/completions"
API_KEY="lm-studio"
MAX_TOKENS=1000
SYSTEM_PROMPT=""
declare -A MODELS=(
[system]="qwen3-1.7b-system"
[monitor]="qwen3-1.7b-monitor"
[brain]="claude-sonnet-4-6"
[funk-ai]="qwen3-8b"
)
usage() {
echo "Usage: ask-agent <agent> \"<question>\" [--max-tokens N] [--system \"<prompt>\"]"
echo "Agents: system | monitor | brain | funk-ai"
exit 1
}
[ $# -lt 2 ] && usage
AGENT="$1"
QUESTION="$2"
shift 2
while [ $# -gt 0 ]; do
case "$1" in
--max-tokens) MAX_TOKENS="$2"; shift 2 ;;
--system) SYSTEM_PROMPT="$2"; shift 2 ;;
*) echo "Option inconnue : $1" >&2; exit 1 ;;
esac
done
MODEL="${MODELS[$AGENT]:-}"
if [ -z "$MODEL" ]; then
echo "Agent inconnu : $AGENT. Agents valides : ${!MODELS[*]}" >&2
exit 1
fi
# Construire le tableau messages JSON
if [ -n "$SYSTEM_PROMPT" ]; then
MESSAGES=$(jq -n \
--arg sp "$SYSTEM_PROMPT" \
--arg q "$QUESTION" \
'[{"role":"system","content":$sp},{"role":"user","content":$q}]')
else
MESSAGES=$(jq -n \
--arg q "$QUESTION" \
'[{"role":"user","content":$q}]')
fi
PAYLOAD=$(jq -n \
--arg model "$MODEL" \
--argjson messages "$MESSAGES" \
--argjson max_tokens "$MAX_TOKENS" \
'{model:$model, messages:$messages, max_tokens:$max_tokens, stream:false}')
curl -s -f \
-X POST "$LITELLM_URL" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d "$PAYLOAD" \
| jq -r '.choices[0].message.content'