Cache KV pour lectures répétées

VérifiéSûr

Utilise slm_cache_get avant une opération coûteuse, puis slm_cache_set pour stocker le résultat avec TTL. Réduit les tokens en réutilisant fichiers, requêtes et sorties d’outils déjà lus.

Spar Skills Guide Bot
ProductiviteDébutant
22/10/2026
Claude Code
#caching#kv-cache#token-efficiency#mcp#session-cache

Recommandé pour

Synthèse automatique

Fournit un cache clé-valeur limité par TTL et propre à chaque agent via slm_cache_get et slm_cache_set, afin de réutiliser des lectures de fichiers, résultats de recherche ou sorties d’outils répétés au cours d’une session.

Points forts

  • Comportement fail-open : toute erreur ou absence renvoie un résultat assimilable à un miss, ce qui permet toujours de revenir à l’opération réelle.
  • Espace de noms propre à l’agent avec clés hachées, évitant les collisions entre agents tout en gardant une clé lisible pour l’appelant.
  • Flux cache-aside explicite avec TTL configurable et préfixes de clés recommandés pour fichiers, recherches, sorties d’outils et URL.
  • Limites de taille explicites (valeurs de 1 Mo, clés de 512 caractères) qui rendent les contraintes de stockage prévisibles.

Limites

  • Ne met en cache que les valeurs que l’agent route explicitement via SLM ; il ne peut pas cacher les tours de conversation Claude ni le contexte non routé.
  • L’extrait de SKILL.md s’arrête au milieu de la section « Cache when: », donc les conseils sur les cas où le cache est rentable sont incomplets.
  • Nécessite la disponibilité des outils/MCP SLM ; sans eux, chaque lecture se comporte comme un miss.
Quand l'utiliser

À utiliser lorsqu’un même fichier, résultat de requête ou sortie d’outil coûteuse sera lu plusieurs fois pendant une session d’agent et que l’économie de tokens ou de temps compte.

Quand l'éviter

À éviter pour des données qui changent fréquemment, des lectures uniques ou du contexte conversationnel qui ne peut pas être associé à une clé stable.

Analyse de sécurité

Sûr
Score qualité89/100

The skill only documents two KV cache MCP tools plus a narrowly scoped `slm: *` CLI fallback; there is no exfiltration, network callout, obfuscated payload, or safety-disabling behavior, and it explicitly tells the agent not to cache secrets or block on cache failures. The only mild concern is the tenant-wide `slm cache clear` fallback command, which is destructive to cache state but not to user data and is not presented as an automatic action.

Points d'attention
  • •The documented CLI fallback includes `slm cache clear`, which deletes every cache entry for the tenant; the skill presents it as a manual administrative command rather than an automatic step, but an agent could run it casually and drop all cached state. Low severity since only cache data is lost.
  • •The skill encourages persisting file contents and tool output via `slm_cache_set`; it explicitly warns against caching secrets/credentials/tokens, which mitigates the main data-retention concern, but cache entries are still a second copy of whatever is cached for up to the TTL.
Comment cette analyse est faite

Exemples

Cache a repeated file read
Read /repo/src/config.py, store it in the cache with key file:/repo/src/config.py for one hour, and whenever I ask about that config for the rest of the session, check the cache first instead of re-reading the file.
Reuse a tool output
Run the build_code_graph tool for /repo once, cache the result under tool:build_code_graph:/repo for the session, and reuse the cached value on later questions rather than regenerating the graph.
Avoid repeating a search
Before searching the repo again for session_init_context, call slm_cache_get with key search:recall:session_init_context; if it is a miss, run the search and store the result with slm_cache_set.

name: slm-cache description: KV cache for repeated reads — call slm_cache_get(key) first; on a miss do the expensive operation then slm_cache_set(key, value, ttl_seconds) to store it; on a hit use the returned value directly; always fail-open (hit:false on any error, never raises); saves tokens when the same file, query result, or tool output is read more than once in a session. when_to_use: "cache file, avoid re-reading, repeated read, cache result, cache tool output, save re-read, reuse across session, cache check, cache hit, cache miss" allowed-tools: slm_cache_set, slm_cache_get, Bash(slm:*)

slm-cache — KV Cache for Repeated Reads (Surface B)

Purpose

When the same file, query result, or expensive tool output is needed more than once in a session, fetching it again wastes tokens and time. slm_cache_set stores a result under a stable key; slm_cache_get retrieves it on subsequent calls. The cache is agent-scoped (automatically namespaced by tenant/agent ID), TTL-bounded, and fail-open.

This is an agent-routed cache — it caches results the agent explicitly routes through SLM. It cannot cache Claude conversation turns.

Tool: slm_cache_set

slm_cache_set(
    key:          str,          # required — cache key (max 512 chars)
    value:        str,          # required — value to store (max 1 MB)
    ttl_seconds:  int = 86400,  # time-to-live in seconds (default 24 h)
) -> dict

Return dict

| Key | Type | Meaning | |-----|------|---------| | ok | bool | True on success; False on validation error or internal error | | stored | bool | True when the value was written to the cache | | note | str | None | Error detail or None on success |

Keys are SHA-256-hashed internally per agent so they do not collide across agents. The raw key string you supply is the only handle you need. The namespace is the calling agent (SLM_AGENT_ID, or the /mcp/<agent> path), not the memory profile, so switching profiles does not give you a fresh cache. A caller on another computer gets its own namespace, keyed by its access key, and can never see a local agent's entries.

Tool: slm_cache_get

slm_cache_get(
    key: str,   # required — same key used in slm_cache_set
) -> dict

Return dict

| Key | Type | Meaning | |-----|------|---------| | ok | bool | True on clean execution (including miss); False on internal error | | hit | bool | True when the key exists and has not expired | | value | str | None | The stored value on a hit; None on miss | | note | str | None | Error detail or None |

value is the string you stored. A miss returns {"ok": true, "hit": false, "value": null, "note": null}. ok: false means something went wrong internally but the miss behaviour is the same — treat both as a cache miss and proceed with the real fetch.

Standard Pattern: Cache-Aside

Always check the cache first, then fill on miss:

# 1. Check cache
cached = await slm_cache_get(key="file:/absolute/path/to/config.json")

if cached["hit"]:
    content = cached["value"]
else:
    # 2. Expensive operation (file read, search, API call)
    content = read_file("/absolute/path/to/config.json")

    # 3. Store for the rest of the session
    await slm_cache_set(
        key="file:/absolute/path/to/config.json",
        value=content,
        ttl_seconds=3600,   # 1 h — adjust to data volatility
    )

# 4. Use content

Key Naming Convention

Use a stable, human-readable prefix so keys are recognisable in stats and won't collide accidentally:

| Content type | Suggested prefix | Example | |---|---|---| | File read | file: | file:/repo/src/config.py | | Search result | search: | search:recall:session_init_context | | Tool output | tool: | tool:build_code_graph:/repo | | External fetch | url: | url:https://api.example.com/v1/data |

Key length cap: 512 characters. Keys longer than that are rejected (ok: false).

When Caching Pays Off

Cache when:

  • You will read the same file more than once in a session.
  • A search or recall result is reused across multiple reasoning steps.
  • An expensive MCP tool call (graph build, semantic search) produces output that is stable for the session duration.

Do NOT cache:

  • Volatile data (live API responses that change minute-to-minute, current timestamps, streaming output).
  • Secrets, credentials, tokens, or ccr_id values (CCR already handles its own storage).
  • Data that must be fresh for correctness — a stale cache is worse than a cache miss.
  • Intermediate scratchpad text you will discard.

Fail-Open Guarantee

Neither tool raises an exception. On any internal error:

  • slm_cache_get returns {"ok": false, "hit": false, "value": null, ...} — treat as a miss and proceed with the real fetch.
  • slm_cache_set returns {"ok": false, "stored": false, ...} — log the note if useful, but continue; the value is still available in memory this step.

Never block a task on a cache failure.

TTL Guidance

| Data type | Suggested TTL | |---|---| | Static config / generated file | 86400 s (24 h — the default) | | Session-specific tool output | 3600 s (1 h) | | Rapidly changing API data | Do not cache, or 60–300 s |

Set ttl_seconds to match how long the data remains valid. After expiry slm_cache_get returns a miss automatically.

Secondary CLI (fallback when MCP is unavailable)

Prefer the MCP tools above. If you must use the command line:

slm cache status [--json] [--tenant default]
slm cache clear [--json] [--tenant default]
slm cache invalidate --tag <tag> [--json] [--tenant default]
slm cache ttl --set <seconds> [--semantic <seconds>] [--json] [--tenant default]
slm cache semantic on|off [--json] [--tenant default]

These subcommands control daemon-level cache settings and bulk removal. They do not read or write individual entries — use the MCP tools for that. Entries written by slm_cache_set carry the tag mcp-kv, so slm cache invalidate --tag mcp-kv removes them, and slm cache clear deletes every entry for the tenant.


Related skills

  • slm-compress — for large content reduction; cache and compress work together
  • slm-status — view cache_kv_hits/cache_kv_misses counters (daemon-persisted totals) from slm_optimize_stats

SuperLocalMemory v4.2.10 · Qualixar · AGPL-3.0-or-later

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/kv-cache-for-repeated-reads-mvda87mc/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/kv-cache-for-repeated-reads-mvda87mc' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/kv-cache-for-repeated-reads-mvda87mc/download' --output '.skill-downloads/kv-cache-for-repeated-reads-mvda87mc/SKILL.md.part' && mv '.skill-downloads/kv-cache-for-repeated-reads-mvda87mc/SKILL.md.part' '.skill-downloads/kv-cache-for-repeated-reads-mvda87mc/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : slm_cache_set, slm_cache_get, Bash(slm:*)

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/kv-cache-for-repeated-reads-mvda87mc/SKILL.md' && test -s '.skill-downloads/kv-cache-for-repeated-reads-mvda87mc/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/slm-cache' && cp -R '.skill-downloads/kv-cache-for-repeated-reads-mvda87mc' '.claude/skills/slm-cache'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/kv-cache-for-repeated-reads-mvda87mc'

openskills read 'kv-cache-for-repeated-reads-mvda87mc'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/kv-cache-for-repeated-reads-mvda87mc/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires