Communitygithub.com

JSONL Store

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 you want 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.

Qu'est-ce que JSONL Store ?

La compétence **JSONL Store** offre une solution légère pour persister des enregistrements entre des exécutions planifiées, en utilisant le format JSON Lines (un objet JSON par ligne). Elle est idéale pour les scripts cron ou automatisés qui ont besoin de mémoire durable sans la complexité d'une base de données. La compétence supporte les appends atomiques, les lectures en flux (streaming) qui tolèrent les lignes corrompues, et une fonction de déduplication `append_unique(record, key)` pour garantir qu'un même identifiant ne soit jamais écrit deux fois. Elle fonctionne avec n'importe quel environnement Python utilisant uniquement la bibliothèque standard. L'utilisateur interagit généralement en demandant de "journaliser des résultats dans un fichier JSONL" ou de "dédupliquer par identifiant entre les exécutions". La compétence est conçue pour être simple, performante (lecture ligne par ligne) et résistante aux pannes, en ignorant les lignes finales partiellement écrites.

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

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 JSONL Store ?

Utilisez cette compétence lorsqu'une tâche planifiée a besoin de se souvenir de ce qu'elle a déjà fait - alertes émises, identifiants traités, événements capturés - mais qu'une base de données est excessive. Le format JSON Lines (un objet JSON par ligne) est adapté aux appends, lisible par un humain, facilement explorable avec grep, et se lit en flux sans charger tout le fichier en mémoire. Cet assistant ajoute des appends atomiques, des lectures en flux qui survivent à une ligne corrompue, et append_unique(record, key) pour qu'un même identifiant ne soit jamais écrit deux fois entre les exécutions.

Quand l'invoquer

  • L'utilisateur dit : "journaliser les résultats dans un fichier JSONL", "ajouter des événements sur le disque", "dédupliquer par identifiant entre les exécutions", "garder un historique simple sans base de données".
  • Un script cron ou planifié a besoin d'un état persistant entre les exécutions dans un fichier plat.

Quand NE PAS l'invoquer

  • Vous avez besoin de requêtes, d'index ou d'écritures concurrentes - utilisez SQLite (sqlite-state) ou une vraie base de données.
  • Les enregistrements sont volumineux ou binaires - JSONL est conçu pour de petites lignes structurées.

Exemple concret

Entrée utilisateur :

Après chaque exécution, ajoute les nouvelles alertes à alerts.jsonl mais jamais le même identifiant d'alerte deux fois.

Sortie :

# Copiez assets/store.py dans votre projet, puis :
from store import JsonlStore

store = JsonlStore("data/alerts.jsonl")
for alert in new_alerts:
    if store.append_unique(alert, key="id"):
        send(alert)        # ne se déclenche que pour les identifiants non vus dans les exécutions précédentes

print("taille de l'historique :", store.count())

La lecture se fait ligne par ligne, donc une année d'historique ne se charge jamais complètement en mémoire, et une dernière ligne partiellement écrite à cause d'un crash est ignorée sans casser l'exécution suivante.

Patron à appliquer

  1. Un objet JSON par ligne ; faire l'append avec ensure_ascii=False pour que le texte reste lisible.
  2. Lecture en flux avec un générateur ; ignorer les lignes vides/corrompues plutôt que de lever une exception.
  3. Déduplication avec seen_keys(key) / append_unique(record, key) pour rendre les exécutions idempotentes.
  4. Associer à un planificateur pour que le fichier soit la mémoire durable entre les invocations.

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

Source

Tiré de la gestion d'état de bots planifiés de l'auteur. v1.0.0. Voir aussi : [[sqlite-state]], [[cron-dispatch]], [[pipeline-orchestrator]].

→ Construisez le bot complet 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

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.

baronguyen001/ai-automation-skills

Give scheduled scripts memory between runs with one SQLite file - a seen-set for dedup, a key/value cursor to resume where you left off, and order-preserving new-item filtering. Use for dedup across runs, don't re-alert the same item, remember the last id, resume a scraper, or persist state between cron runs.

Skills associés