[skill] now integrated into openfox
For minimal context usage:
Use Project instructions instead of the skill for local LLMs below 70B.
Use the skill only with large models on high-spec hardware or cloud-based LLMs.
The skill can be activated or disabled.
RAG works without the skill outside OpenFox.
Prelaunch RAG manually with 'llmes' for CPU users or 'llmers' for GPU users.
Check status with 'rc' and vault indexation completion with 'rst'.
Use 'rag all "query" on CPU or 'ragr all "query" on GPU for your query.
The OpenFox agent can use RAG through Project instructions.
[Project Instructions] Right of new session, Edit Project settings, add
Before launching the first command and before answering ANY question about my environment, configuration, notes, docs, passwords, procedures or security policies, you MUST first run:
rag all "<query>"
Use the returned passages. Cite `source` and `path`. If rag returns an error or nothing, tell me and stop. Never debug, restart, or modify rag. Never ask permission to search.
If rag is unreachable, run `llme` to restart the embedding service, `rc` to check status, `rst` to check vault scan completion, then retry once.
for gpu owners only, add :
Use `rag all "<query>"` for quick lookups, `ragr all "<query>"` for thorough/precise searches.
Salut Conrad,
Je propose un skill RAG qui permet à l'agent OpenFox
avec un mini llm spécialisé en recherche documentaire de 0,6B
et un second mini llm de 0,6B spécialisé en classement de chercher efficacement
dans la documentation locale, coffres Obsidian, docs techniques, manuels, procédures...
et ainsi gagner en tokens, en vitesse, en écomomie d'énergie, en qualité et en précision.
Pas de MCP, pas de plugin, pas de process supplémentaire.
Un fichier .md dans le dossier de skills + le terminal intégré.
L'agent contrôle tout lui-même via 10 raccourcis shell.
Après une version en plugins puis en MCP j'ai finalement tout jeter pour la version skills.
Solution nettement supérieure étant donné qu'elle ne surcharge pas trop le contexte de l'agent au départ.
Pour les llm locaux inférieurs à 70B, il faut laisser la skill désactivée et ajouter les Project instructions ci-dessus.
L'installation est 100% assistée, rien à faire!
juste se laisser guider.
Repos :
Le problème
Quand l'agent travaille sur un projet, il n'a aucun moyen de consulter la
documentation locale de l'utilisateur. Il doit soit halluciner, soit demander
à l'utilisateur de coller la doc manuellement dans le contexte.
S'il a accès aux fichiers, il va surcharger son contexte inutilement.
Le rag permet une dissection chirurgicale prémâchée de la doc qui lui permettra d'extraire
uniquement les informations pertinentes en perdant le minimum de tokens
et donc en accélérant drastiquement les recherches.
Concrètement, si j'ai une procédure nftables dans mes notes Obsidian et que
je demande à l'agent de configurer un firewall, il ne peut pas la trouver.
Il va générer une config générique, probablement incorrecte pour mon setup.
etc...
La solution : un skill + le terminal intégré
Un fichier skill (.md) dans le dossier de skills d'OpenFox instruit l'agent
d'utiliser le terminal intégré pour contrôler la stack RAG :
rc # Les services sont-ils actifs ?
llmers # Démarre la stack complète
ragr void "nftables" # Recherche précise (avec reranker)
rag void "nftables" # Recherche rapide (RRF seul)
rst # Tail des logs
rsk # Arrête le serveur
Exactement comme l'agent utilise déjà le terminal pour git status,
npm install, ou n'importe quelle commande shell.
Le serveur RAG est un service indépendant (repo séparé).
L'agent n'a besoin que d'un fichier .md pour savoir comment l'appeler.
Pourquoi pas un plugin
J'ai lu la doc des plugins OpenFox. L'API ProviderPluginRegistry ne supporte
que les providers :
registry.registerAuth(auth)
registry.registerTransport(transport)
registry.registerPreset(preset)
Il n'y a pas de registry.registerTool(). Les tools sont dans le core
(src/server/tools/), pas dans les plugins. Un plugin ne peut pas ajouter
un tool rag_search.
Pourquoi pas un MCP
Un MCP serait fonctionnel (exactement le pattern de Brave Search), mais c'est
un process Node.js supplémentaire avec le protocole JSON-RPC over stdio,
des dépendances npm, et une configuration JSON dans Settings > Tools > MCP.
Pour ce que c'est — appeler un endpoint HTTP et lire du JSON — le terminal
intégré fait exactement la même chose avec zéro dépendance. L'agent sait
déjà utiliser curl. Un fichier .md lui dit quand et comment.
Les 10 raccourcis
| Commande |
Action |
llmers |
Démarrer la stack complète (embedding + reranker + RAG) |
llmes |
Démarrer embedding + RAG (sans reranker) |
llme |
Démarrer l'embedding seul (port 8181) |
llmr |
Démarrer le reranker seul (port 8184) |
rs |
Démarrer le serveur RAG seul (port 8182) |
rst |
Tail -f des logs RAG |
rag <vault> "<requête>" |
Recherche rapide (~20ms) |
ragr <vault> "<requête>" |
Recherche lente et précise avec reranker (~10-18s CPU, ~1s GPU) |
rc |
Health check des 3 services |
rsk |
Tuer le serveur RAG |
L'agent contrôle l'intégralité de la stack de manière autonome.
Il vérifie la santé, démarre, recherche, surveille et arrête — tout seul.
Le pipeline de recherche
Requête utilisateur
│
├──→ Embedding (Qwen3-0.6B ou 4B) → Cosine similarity → Ranking vectoriel
│ │
└──→ Tokenisation → BM25Okapi → Ranking BM25 │
│ │
└── RRF (k=60) ──────────────┘
│
Top 18 candidats
│
Reranker (Qwen3-0.6B ou 4B)
(cross-encoder, lit query+doc conjointement)
│
Résultats finaux
Le reranker est l'étape qui apporte le plus de gain qualitatif.
Dans le benchmark FinanceQA de Dave Ebbelaar ("Hybrid Retrieval from Scratch", 2026),
l'ajout d'un reranker améliore le NDCG@10 de +12 points.
Installation
Un seul script interactif :
mkdir -p ~/rag
git clone https://github.com/cried-nutty-won/openfox-rag.git ~/rag/openfox-rag
cd ~/rag/openfox-rag
bash install.sh
L'installateur :
- Détecte l'OS, la RAM, le GPU (NVIDIA, Apple Silicon, lspci)
- Détecte le shell (fish, bash, zsh, sh) et écrit les alias dans le bon fichier
- Propose les modèles 0.6B (défaut) ou 4B (GPU uniquement — masqués sur CPU)
- Télécharge les GGUF depuis Qwen officiel + Voodisss
- Clone et configure rag-system
- Scanne les vaults Obsidian et documentation (boucle interactive)
- Installe le skill OpenFox (~/.config/openfox/skills/rag-search.md)
- Affiche toutes les commandes et les chemins vers la doc à la fin
Mode dry-run pour tester sans rien modifier : bash install.sh --dry-run
Désinstaller
cd ~/rag/openfox-rag
bash uninstall.sh
Compatibilité backend
| Backend |
Embedding |
Reranking |
Mode RAG |
| llamacpp |
✅ POST /embedding |
✅ POST /v1/rerank |
Hybride + Reranker |
| vLLM |
✅ POST /v1/embeddings |
✅ POST /v1/rerank |
Hybride + Reranker |
| sglang |
✅ POST /v1/embeddings |
✅ POST /v1/rerank |
Hybride + Reranker |
| ollama |
✅ POST /api/embeddings |
❌ |
Hybride (RRF uniquement) |
Le serveur RAG s'adapte automatiquement : si le reranker est injoignable,
il bascule en RRF pur sans erreur.
Avec ton cluster DGX Spark (vLLM), le RAG bénéficie du batching natif
et des sessions concurrentes. Les modèles embedding et reranker peuvent
être servis par le même backend que le LLM de chat.
Intégration dans les workflows
Avec les workflows custom (système de blocs), on peut ajouter une étape
"research" avant "build" :
[Research (RAG)] → [Build] → [Verify] → [Code Review] → [Summary]
Et dans les General Instructions :
Avant de coder, consulte toujours la base de connaissances locale
via le terminal. Exécute : rc
Puis : ragr obsidian "ta requête"
Utilise les passages retournés comme contexte. Cite toujours le fichier source.
Points techniques critiques
GGUF reranker : Voodisss uniquement
Les GGUF communautaires de Qwen3-Reranker sont cassés (llama.cpp #16407).
Il leur manque le tenseur cls.output.weight (classifieur yes/no),
le metadata pooling_type=RANK et le chat template de reranking.
Résultat : scores poubelles (4.5e-23).
Seuls les GGUF de Voodisss (convertis avec le convert_hf_to_gguf.py officiel)
fonctionnent.
Pooling
- Embedding :
pooling = last (hidden state du token [EOS] final).
Le blog officiel Qwen3 dit explicitement last.
- Reranker :
pooling = rank (obligatoire, active le classifieur).
Host prompt cache
llama.cpp PR #16391 active par défaut un cache prompt de 8 GiB en RAM host.
Pour un serveur embedding/reranker où les prompts ne sont jamais réutilisés,
ajouter --cache-ram 0 pour éviter l'OOM.
Performance
| Métrique |
Recherche rapide |
Recherche précise (0.6B) |
Recherche précise (4B) |
| Latence (CPU) |
~20 ms |
~10-18 s |
~30-40 s (trop lent) |
| Latence (GPU) |
~3 ms |
~1 s |
~3 s |
| RAM / VRAM |
~1.7 Go |
~1.7 Go |
~6 Go |
| Précision (NDCG@10) |
baseline |
+12 pts |
+16 pts |
Ce que je propose de faire
- Le skill et l'installateur sont déjà prêts :
https://github.com/cried-nutty-won/openfox-rag
- Le serveur RAG est fonctionnel et documenté :
https://github.com/cried-nutty-won/rag-system
- Si tu veux, je peux ouvrir une PR pour ajouter le skill dans la doc
d'OpenFox ou dans les General Instructions par défaut
Références
Si ça t'intéresse, dis le moi, test de ton côté, les install et uninstall sont fonctionnels chez moi, à voir chez toi ou chez d'autres si c'est bien fonctionnel. Dites-moi si vous voyez des choses à améliorer. Et si ça te plaìt à toi de voir comment l'intégrer dans le détail.
En tous cas merci pour le merveilleux Openfox et pour tes videos.
Eric
[skill] now integrated into openfox
For minimal context usage:
Use Project instructions instead of the skill for local LLMs below 70B.
Use the skill only with large models on high-spec hardware or cloud-based LLMs.
The skill can be activated or disabled.
RAG works without the skill outside OpenFox.
Prelaunch RAG manually with 'llmes' for CPU users or 'llmers' for GPU users.
Check status with 'rc' and vault indexation completion with 'rst'.
Use 'rag all "query" on CPU or 'ragr all "query" on GPU for your query.
The OpenFox agent can use RAG through Project instructions.
[Project Instructions] Right of new session, Edit Project settings, add
for gpu owners only, add :
Salut Conrad,
Je propose un skill RAG qui permet à l'agent OpenFox
avec un mini llm spécialisé en recherche documentaire de 0,6B
et un second mini llm de 0,6B spécialisé en classement de chercher efficacement
dans la documentation locale, coffres Obsidian, docs techniques, manuels, procédures...
et ainsi gagner en tokens, en vitesse, en écomomie d'énergie, en qualité et en précision.
Pas de MCP, pas de plugin, pas de process supplémentaire.
Un fichier .md dans le dossier de skills + le terminal intégré.
L'agent contrôle tout lui-même via 10 raccourcis shell.
Après une version en plugins puis en MCP j'ai finalement tout jeter pour la version skills.
Solution nettement supérieure étant donné qu'elle ne surcharge pas trop le contexte de l'agent au départ.
Pour les llm locaux inférieurs à 70B, il faut laisser la skill désactivée et ajouter les Project instructions ci-dessus.
L'installation est 100% assistée, rien à faire!
juste se laisser guider.
Repos :
Le problème
Quand l'agent travaille sur un projet, il n'a aucun moyen de consulter la
documentation locale de l'utilisateur. Il doit soit halluciner, soit demander
à l'utilisateur de coller la doc manuellement dans le contexte.
S'il a accès aux fichiers, il va surcharger son contexte inutilement.
Le rag permet une dissection chirurgicale prémâchée de la doc qui lui permettra d'extraire
uniquement les informations pertinentes en perdant le minimum de tokens
et donc en accélérant drastiquement les recherches.
Concrètement, si j'ai une procédure nftables dans mes notes Obsidian et que
je demande à l'agent de configurer un firewall, il ne peut pas la trouver.
Il va générer une config générique, probablement incorrecte pour mon setup.
etc...
La solution : un skill + le terminal intégré
Un fichier skill (.md) dans le dossier de skills d'OpenFox instruit l'agent
d'utiliser le terminal intégré pour contrôler la stack RAG :
Exactement comme l'agent utilise déjà le terminal pour
git status,npm install, ou n'importe quelle commande shell.Le serveur RAG est un service indépendant (repo séparé).
L'agent n'a besoin que d'un fichier .md pour savoir comment l'appeler.
Pourquoi pas un plugin
J'ai lu la doc des plugins OpenFox. L'API
ProviderPluginRegistryne supporteque les providers :
Il n'y a pas de
registry.registerTool(). Les tools sont dans le core(
src/server/tools/), pas dans les plugins. Un plugin ne peut pas ajouterun tool
rag_search.Pourquoi pas un MCP
Un MCP serait fonctionnel (exactement le pattern de Brave Search), mais c'est
un process Node.js supplémentaire avec le protocole JSON-RPC over stdio,
des dépendances npm, et une configuration JSON dans Settings > Tools > MCP.
Pour ce que c'est — appeler un endpoint HTTP et lire du JSON — le terminal
intégré fait exactement la même chose avec zéro dépendance. L'agent sait
déjà utiliser curl. Un fichier .md lui dit quand et comment.
Les 10 raccourcis
llmersllmesllmellmrrsrstrag <vault> "<requête>"ragr <vault> "<requête>"rcrskL'agent contrôle l'intégralité de la stack de manière autonome.
Il vérifie la santé, démarre, recherche, surveille et arrête — tout seul.
Le pipeline de recherche
Le reranker est l'étape qui apporte le plus de gain qualitatif.
Dans le benchmark FinanceQA de Dave Ebbelaar ("Hybrid Retrieval from Scratch", 2026),
l'ajout d'un reranker améliore le NDCG@10 de +12 points.
Installation
Un seul script interactif :
L'installateur :
Mode dry-run pour tester sans rien modifier :
bash install.sh --dry-runDésinstaller
Compatibilité backend
POST /embeddingPOST /v1/rerankPOST /v1/embeddingsPOST /v1/rerankPOST /v1/embeddingsPOST /v1/rerankPOST /api/embeddingsLe serveur RAG s'adapte automatiquement : si le reranker est injoignable,
il bascule en RRF pur sans erreur.
Avec ton cluster DGX Spark (vLLM), le RAG bénéficie du batching natif
et des sessions concurrentes. Les modèles embedding et reranker peuvent
être servis par le même backend que le LLM de chat.
Intégration dans les workflows
Avec les workflows custom (système de blocs), on peut ajouter une étape
"research" avant "build" :
Et dans les General Instructions :
Points techniques critiques
GGUF reranker : Voodisss uniquement
Les GGUF communautaires de Qwen3-Reranker sont cassés (llama.cpp #16407).
Il leur manque le tenseur
cls.output.weight(classifieur yes/no),le metadata
pooling_type=RANKet le chat template de reranking.Résultat : scores poubelles (
4.5e-23).Seuls les GGUF de Voodisss (convertis avec le
convert_hf_to_gguf.pyofficiel)fonctionnent.
Pooling
pooling = last(hidden state du token [EOS] final).Le blog officiel Qwen3 dit explicitement
last.pooling = rank(obligatoire, active le classifieur).Host prompt cache
llama.cpp PR #16391 active par défaut un cache prompt de 8 GiB en RAM host.
Pour un serveur embedding/reranker où les prompts ne sont jamais réutilisés,
ajouter
--cache-ram 0pour éviter l'OOM.Performance
Ce que je propose de faire
https://github.com/cried-nutty-won/openfox-rag
https://github.com/cried-nutty-won/rag-system
d'OpenFox ou dans les General Instructions par défaut
Références
Si ça t'intéresse, dis le moi, test de ton côté, les install et uninstall sont fonctionnels chez moi, à voir chez toi ou chez d'autres si c'est bien fonctionnel. Dites-moi si vous voyez des choses à améliorer. Et si ça te plaìt à toi de voir comment l'intégrer dans le détail.
En tous cas merci pour le merveilleux Openfox et pour tes videos.
Eric