Communitygithub.com

État SQLite

Donnez une mémoire aux scripts planifiés entre les exécutions grâce à un fichier SQLite unique : un ensemble de vus pour la déduplication, un curseur clé/valeur pour reprendre là où vous vous êtes arrêté et un filtrage des nouveaux éléments qui préserve l'ordre.

Qu'est-ce que État SQLite ?

Cette compétence permet à un job récurrent (script cron, scraper, alerte) de conserver un état persistant entre ses exécutions en utilisant un simple fichier SQLite. Elle fournit trois mécanismes clés : un ensemble de vus (`seen-set`) pour la déduplication (éviter de notifier ou traiter un même élément deux fois), un curseur clé/valeur pour reprendre le traitement là où il s'est arrêté, et un filtrage préservant l'ordre des nouveaux éléments. L'objectif est de remplacer une logique ad-hoc fragile par une mémoire fichier robuste, portable et sans dépendance externe. La compétence s'applique à tout environnement supportant Python et SQLite (scripts shell, fonctions serverless, pipelines CI/CD, bots). Son fonctionnement s'appuie sur une bibliothèque légère (`state.py`) qui expose des fonctions comme `filter_new`, `mark_seen`, `set_cursor` et `get_cursor`. Le fichier `.db` unique est verrouillé par fichier, ce qui garantit une cohérence même en cas d'accès concurrent modéré. Pour une utilisation durable, il est recommandé d'activer le mode WAL, de n'écrire qu'avec un seul processus, et de sauvegarder régulièrement le fichier. Cette approche est idéale pour les bots de monitoring, les scrapers incrémentaux, les courriels périodiques ou toute tâche qui doit « se souvenir de ce qu'elle a déjà fait » sans infrastructure lourde.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/baronguyen001/ai-automation-skills/tree/HEAD/skills/sqlite-state

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait État SQLite ?

Utilisez cette compétence lorsqu'un job récurrent doit se souvenir de ce qu'il a déjà fait – les éléments sur lesquels il a déjà alerté, le dernier curseur qu'il a traité – afin de ne pas re-notifier ou re-scraper au prochain tick. Un fichier SQLite standard offre un état persistant, verrouillé au niveau fichier, sans serveur et sans dépendance supplémentaire.

Quand invoquer

  • L'utilisateur dit : « n'alerte pas deux fois la même chose », « déduplique entre les exécutions », « souviens-toi du dernier ID », « reprends là où tu t'es arrêté ».
  • Le code dans la conversation est un script cron/planifié qui retraite actuellement tout à chaque exécution.

Quand NE PAS invoquer

  • L'état est minuscule et éphémère au sein d'une seule exécution – un simple ensemble/dictionnaire suffit.
  • Plusieurs machines doivent partager l'état en concurrence ; préférez une vraie base de données serveur plutôt qu'un seul fichier.

Exemple concret

Entrée utilisateur :

Mon scraper d'actualités renvoie les mêmes titres chaque heure. Fais en sorte qu'il n'envoie que les nouveaux.

Sortie :

from state import filter_new, mark_seen

db = "news.db"
fresh = filter_new(db, [a["url"] for a in articles])   # uniquement les URLs non vues
for url in fresh:
    send_alert(url)
mark_seen(db, *fresh)                                   # les mémoriser pour la prochaine exécution

Patron à appliquer

  1. Clé chaque élément par quelque chose de stable et unique (URL, ID, empreinte du contenu), pas par position dans un tableau.
  2. Utilise filter_new pour décider sur quoi agir, puis mark_seen seulement après que l'action a réussi.
  3. Stocke la progression sous forme de curseur nommé (set_cursor/get_cursor) pour qu'un scraper reprenable redémarre en cours de route.
  4. Active le mode WAL pour des écritures durables avec des lecteurs concurrents ; garde un seul script écrivain.
  5. Sauvegarde ou versionne le seul fichier .db – c'est toute la mémoire du job.

Référence : assets/state.py.

Source

Distillé à partir d'une utilisation en production dans les projets d'automatisation de l'auteur. v1.0.0. Voir aussi : [[pipeline-orchestrator]], [[cron-dispatch]], [[webhook-receiver]].

→ Construisez le bot complet et exécutable avec Trawlkit.

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

baronguyen001/ai-automation-skills

Schedule any script to run on a recurring schedule on Windows (Task Scheduler) or Linux (cron) - register, list, and remove jobs from one command, with logging to a file and a guard against overlapping runs. Use for schedule a script, run nightly, set up a cron job, windows task scheduler, or run on a timer.

baronguyen001/ai-automation-skills

Turn a run's list of result dicts into a schema'd CSV and a Markdown table from one column spec - declare columns once, emit both, with stable ordering and safe escaping, stdlib only, no pandas. Use when the user asks to write results to CSV, export a report, make a markdown summary table, or save a run's output as a spreadsheet.

baronguyen001/ai-automation-skills

Strip HTML to clean plain text with the standard library only (no BeautifulSoup/lxml): drops script/style, turns block tags into line breaks, and collapses whitespace. Use when the user wants readable text from an HTML page/email, to clean scraped HTML before sending it to an LLM, or to build a text index from web content.

baronguyen001/ai-automation-skills

Persist records between scheduled runs as append-only JSON Lines (one object per line) with streaming reads and optional key-based dedup, stdlib only. Use when the user wants to log run results to JSONL, append events to a file, dedup records by id across runs, or keep a simple durable history without a database.

baronguyen001/ai-automation-skills

Extract text and simple table-like rows from a PDF for downstream AI without OCR binaries. Use when the user asks to read a PDF, turn a PDF into text, pull simple tables from statements/reports, or feed PDF content into an LLM pipeline.

baronguyen001/ai-automation-skills

Rotate a pool of HTTP/SOCKS proxies with round-robin selection, failure tracking, and a cooldown that benches dead proxies before retrying. BYO proxy list via env - none are shipped. Use for rotate proxies, spread requests across proxies, avoid IP bans, retry through a different proxy, or proxy health check.

baronguyen001/ai-automation-skills

Parse an RSS 2.0 or Atom feed into normalized item dicts (title, link, id, published, summary) with the standard library only - no feedparser. Use when the user asks to read an RSS/Atom feed, poll a blog/news feed, extract feed entries, or watch a site that publishes a feed.

baronguyen001/ai-automation-skills

Upload and download run artifacts from S3-compatible storage with BYO bucket and credentials from env. Use when the user asks to store scraper output, archive reports, publish artifacts to object storage, fetch a prior run file, or use MinIO/R2/Spaces/S3 without hardcoding credentials.

baronguyen001/ai-automation-skills

Draft a short-form TikTok/Reels/Shorts or long-form video script from a topic and creator persona file - hook variants, beat-structured body, CTA, b-roll cues, caption overlays, and [STORY]/[NUMBER] slots so the model never fabricates personal facts. Use for write a video script, tiktok script, youtube script, or /shortform-script.

Skills associés