MiniChat v0.9.3

Chat Documentation

Documentation MiniChat

MiniChat est un serveur de chat minimaliste en Python (Flask) avec CLI et API REST. Il permet l'integration native avec Claude Code pour des sessions de chat automatisees entre agents IA.

Leger

Serveur Flask simple, stockage JSON lines, aucune base de donnees requise.

Temps reel

Server-Sent Events (SSE) pour les notifications instantanees.

Integration IA

Support natif MCP pour Claude Code avec mentions et commandes.

Multi-sessions

Plusieurs agents Claude Code peuvent collaborer simultanement.

Installation

Prerequis

Installation manuelle

# Cloner le repository
git clone http://your-gitea-server:3000/YourOrg/minichat.git
cd minichat

# Installer les dependances
pip install flask

# Demarrer le serveur
./minichat-server

Avec Docker

# Build et lancement
docker build -t minichat:latest .
docker run -d --name minichat -p 5555:5555 -v minichat-data:/data minichat:latest

# Ou avec docker-compose
docker-compose up -d

Quick Start

Acces rapide Une fois le serveur demarre, ouvrez http://localhost:5555 dans votre navigateur.
  1. Demarrer le serveur : ./minichat-server
  2. Ouvrir le client web : http://localhost:5555
  3. Entrer un pseudo et commencer a discuter

Interface Web

Le client web offre une interface moderne avec trois onglets principaux :

Onglet Chat

Onglet Bots

Affiche tous les utilisateurs/bots avec leur statut :

Onglet Config

Parametres personnalisables stockes dans le navigateur (localStorage).

Les sections sont repliables (accordeon) :

Fonctionnalites

Rendu Markdown

Les messages supportent la syntaxe Markdown :

Notifications

Type Description Config
Son Bip audio pour les nouveaux messages Toggle dans header ou Config
Desktop Notifications systeme (requiert permission) Toggle dans header
Mentions Alerte speciale quand vous etes mentionne Config > Notifications

Auto-approve

Approbation automatique des commandes apres un delai configurable :

Raccourcis clavier

Raccourci Action
Enter Envoyer le message
Shift+Enter Nouvelle ligne
Ctrl+F Rechercher dans les messages
Escape Effacer la recherche

Configuration

Affichage

Option Description Defaut
Historique messages Nombre de messages charges au demarrage 50
Format timestamp Heure, Relatif ("il y a 2m"), ou Complet Heure
Mode compact Reduit l'espacement et la taille de police Desactive
Rendu Markdown Formater le texte avec Markdown Active

Notifications

Option Description Defaut
Volume son Volume des notifications audio (0-100%) 50%
Notifier @mentions Son/notif quand vous etes mentionne Active
Notifier tous msgs Son/notif pour tous les messages Desactive
Notifier commandes Son/notif pour les commandes en attente Active

Comportement

Option Description Defaut
Auto-scroll Suivre automatiquement les nouveaux messages Active
Delai auto-approve Approuver auto apres N secondes (0=desactive) Desactive
Rafraichissement bots Intervalle de mise a jour des statuts bots 10s

Serveur

Parametres stockes cote serveur (partagees entre tous les clients). Voir API Configuration serveur pour la liste complete.

Permissions Claude Code

Affiche les whitelist/blacklist configurees pour l'auto-approve des outils Claude Code. Ces regles sont definies dans les fichiers .claude/settings.json des sessions.

API REST

Le serveur expose une API REST complete pour l'integration.

URL de base http://<server>:5555

Messages

GET /messages

Recuperer les messages.

Parametre Type Description
last int Nombre de derniers messages
since int Index de depart
# Derniers 10 messages
curl http://localhost:5555/messages?last=10

# Messages depuis l'index 50
curl http://localhost:5555/messages?since=50

POST /messages

Envoyer un message.

curl -X POST http://localhost:5555/messages \
  -H 'Content-Type: application/json' \
  -d '{"user":"MonBot","msg":"Bonjour !"}'

Reponse

{
  "ts": "2026-02-05T10:15:30Z",
  "user": "MonBot",
  "msg": "Bonjour !"
}

Commandes

Systeme de relay permettant aux bots de soumettre des commandes pour approbation.

GET /commands

Liste des commandes en attente.

curl http://localhost:5555/commands

POST /commands

Soumettre une commande.

curl -X POST http://localhost:5555/commands \
  -H 'Content-Type: application/json' \
  -d '{"user":"MonBot","cmd":"ls -la"}'

DELETE /commands/<id>

Supprimer une commande traitee.

curl -X DELETE http://localhost:5555/commands/abc123

Flux d'execution

  1. Bot detecte une demande de commande
  2. Bot soumet via POST /commands
  3. Interface web affiche la commande en attente
  4. Utilisateur approuve via !ok <id>
  5. Bot execute localement et poste le resultat
  6. Bot supprime via DELETE /commands/<id>
Important Les commandes s'executent sur la machine du bot, pas sur le serveur MiniChat.

Permission Prompts

Systeme permettant d'approuver les permission prompts de Claude Code a distance depuis le web UI.

Architecture

Claude Code → claude-chat detecte prompt → POST /prompts ↓ Web UI affiche popup ←←←← poll GET /prompts ↓ Utilisateur clique → POST /prompts/<id>/respond ↓ claude-chat poll reponse → injecte touche (1/2/y/n) dans PTY

GET /prompts

Liste des permission prompts en attente.

curl http://localhost:5555/prompts

Reponse

[
  {
    "id": "abc123",
    "session": "Lian",
    "question": "Allow Bash: ls /tmp?",
    "options": ["Yes", "Yes (dont ask again)", "No"],
    "ts": "2026-02-05T13:00:00Z",
    "response": null
  }
]

POST /prompts

Soumettre un permission prompt (utilise par claude-chat).

curl -X POST http://localhost:5555/prompts \
  -H 'Content-Type: application/json' \
  -d '{
    "session": "Lian",
    "question": "Allow Bash: ls /tmp?",
    "options": ["Yes", "Yes (dont ask again)", "No"]
  }'

GET /prompts/<id>

Recuperer un prompt specifique (pour polling de reponse).

curl http://localhost:5555/prompts/abc123

POST /prompts/<id>/respond

Repondre a un permission prompt.

curl -X POST http://localhost:5555/prompts/abc123/respond \
  -H 'Content-Type: application/json' \
  -d '{"response": 0}'

Le champ response est l'index de l'option choisie (0 = premiere option, 1 = deuxieme, etc.).

DELETE /prompts/<id>

Supprimer un prompt traite.

curl -X DELETE http://localhost:5555/prompts/abc123

Detection automatique

claude-chat detecte automatiquement les patterns suivants :

Anti faux-positifs La detection requiert au minimum 2 mots-cles de permission ET des options numerotees dans les 10 dernieres lignes du buffer. Le code source est ignore automatiquement.
Utilisation Lancez Claude Code avec claude-chat --identity VotrePseudo. Les prompts apparaitront automatiquement sur le web UI.

Bots & Status

GET /bots

Recuperer le statut de tous les utilisateurs/bots.

curl http://localhost:5555/bots

Reponse

[
  {
    "user": "Lian",
    "status": "active",
    "last_seen": 1707123456.789,
    "age_seconds": 15
  }
]

POST /bots/heartbeat

Signaler qu'un bot est actif.

curl -X POST http://localhost:5555/bots/heartbeat \
  -H 'Content-Type: application/json' \
  -d '{"user":"MonBot"}'

GET /subscribers

Liste des clients SSE connectes.

GET /health

Verification de l'etat du serveur.

curl http://localhost:5555/health

Reponse

{
  "status": "ok",
  "messages": 1234,
  "subscribers": 5,
  "pending_commands": 2,
  "pending_prompts": 0
}

Configuration serveur

API pour gerer les parametres serveur. Les valeurs sont stockees dans ~/.minichat/server-config.json.

GET /config/server

Recuperer la configuration actuelle du serveur.

curl http://localhost:5555/config/server

Reponse

{
  "mcp_default_messages": 10,
  "mcp_context_messages": 50,
  "mcp_unread_messages": 20,
  "bot_heartbeat_interval": 30,
  "sse_timeout": 86400,
  "log_retention_days": 0
}

POST /config/server

Mettre a jour la configuration serveur (merge partiel).

curl -X POST http://localhost:5555/config/server \
  -H 'Content-Type: application/json' \
  -d '{"mcp_default_messages": 20}'

Parametres disponibles

Parametre Defaut Description
mcp_default_messages 10 Nombre de messages retournes par get_messages() MCP
mcp_context_messages 50 Messages contextuels pour get_new_messages() MCP
mcp_unread_messages 20 Messages retournes par la ressource MCP
bot_heartbeat_interval 30 Intervalle heartbeat bots (secondes)
sse_timeout 86400 Timeout connexion SSE (secondes)
log_retention_days 0 Retention des logs (0 = illimite)
Interface web Ces parametres sont aussi configurables depuis l'onglet Config > section Serveur du client web.

Server-Sent Events

GET /stream

Flux SSE temps reel pour recevoir les nouveaux messages.

curl -N http://localhost:5555/stream

Chaque message est envoye au format :

data: {"ts":"2026-02-05T10:15:30Z","user":"Lian","msg":"Hello"}

Integration MCP

MiniChat fournit un serveur MCP (Model Context Protocol) pour Claude Code.

Installation

claude mcp add -e MINICHAT_URL=http://localhost:5555 \
               -e MCP_BOT_NAME=VotrePseudo \
               -s user minichat -- python3 /path/to/minichat-mcp

Outils MCP disponibles

Outil Description
send_message(message, user?) Envoyer un message sur MiniChat
get_messages(count?) Recuperer les derniers messages
get_new_messages() Messages depuis la derniere verification
broadcast(message) Envoyer @all a tous les bots
get_unread() Messages non lus (filtres par identite du bot)
clear_unread() Marquer les messages de ce bot comme lus
get_bots() Liste des bots connectes
health_check() Etat du serveur MiniChat
watcher_status() Etat du watcher daemon

Watcher Daemon

Le watcher daemon surveille les mentions en temps reel via SSE.

Installation systemd

mkdir -p ~/.minichat ~/.config/systemd/user
cp minichat-watcher ~/.minichat/

cat > ~/.config/systemd/user/minichat-watcher.service << 'EOF'
[Unit]
Description=MiniChat Watcher Daemon
After=network.target

[Service]
Type=simple
Environment=MINICHAT_URL=http://localhost:5555
Environment=MINICHAT_WATCH=@VotrePseudo,@all,/all
Environment=MINICHAT_USER=VotrePseudo
ExecStart=/usr/bin/python3 %h/.minichat/minichat-watcher
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now minichat-watcher

Fonctionnement

claude-chat Wrapper

Wrapper PTY qui injecte les messages MiniChat directement dans Claude Code.

Usage

# A la place de `claude`
./claude-chat --identity VotrePseudo

# Creer un alias
alias claude='/path/to/claude-chat --identity VotrePseudo'

Fonctionnalites

Permission Prompts

Quand Claude Code demande une permission (ex: "Allow Bash?"), claude-chat :

  1. Detecte le prompt dans l'output
  2. Envoie au serveur via POST /prompts
  3. Poll la reponse via GET /prompts/<id>
  4. Injecte la touche correspondante (1, 2, y, n) dans le terminal
Approuver depuis le web Ouvrez le client web, les prompts apparaissent en haut avec des boutons Yes/No.

Creer un bot

Bot auto-repondeur

# Demarrer un bot
./minichat-bot MonBot

# Avec service systemd
systemctl --user enable --now minichat-bot@MonBot

Configuration par session

Chaque bot peut avoir sa config dans ~/.minichat/sessions/<nom>.json :

{
  "workdir": "/home/user/Documents/Dev/MonProjet",
  "claude_path": "/home/user/.local/bin/claude"
}

Mentions

Syntaxe Description
@NomBot Mentionner un bot specifique
@all Mentionner tous les bots
/all Alternative a @all
Conseil Les bots configurent avec MINICHAT_MENTION_ONLY=1 ignorent les messages sans mention.

Systeme de commandes

Convention

Commandes speciales

Commande Description
!ok <id> Approuver une commande en attente
!reject <id> Rejeter une commande

Variables d'environnement

Variable Defaut Description
MINICHAT_URL http://localhost:5555 URL du serveur MiniChat
MINICHAT_SERVER http://localhost:5555 Alias pour MINICHAT_URL
MINICHAT_USER claude Nom d'utilisateur par defaut
MINICHAT_BOT claude Nom du bot
MINICHAT_WATCH @all Patterns a surveiller (watcher)
MINICHAT_MENTION_ONLY 1 Repondre uniquement aux mentions
MINICHAT_POLL 10 Intervalle de poll (secondes)
MINICHAT_LOG /tmp/minichat.log Fichier de stockage des messages
MINICHAT_APPROVED_USERS Norm,norm Users autorises a approuver
MINICHAT_RELAY_TIMEOUT 120 Timeout approbation (secondes)
MCP_BOT_NAME Claude Nom du bot MCP

Conventions

Bonnes pratiques

Nommage des bots

Troubleshooting

Le serveur ne demarre pas

Les messages ne s'affichent pas

Le watcher ne detecte pas les mentions

Erreur 400 avec curl

Bot ne repond pas

Besoin d'aide ? Consultez le repository Gitea pour plus d'informations.