2016judea/records-request

Obtenir un document spécifique auprès d'un bureau gouvernemental américain via une demande de documents publics — « demande le modèle de l'évaluateur », « déposer une demande de pratiques en matière de données », « FOIA ceci », « demande d'accès aux documents », « peut-on simplement demander au comté », « à qui écrire au <comté> », « relancer cette demande », « ont-ils déjà répondu ». Couvre la vérification préalable du site web, l'identification du bon bureau et du bon statut, le paragraphe de dérogation qui rend une demande recevable plutôt que refusée, les pièges des formulaires web (limites de caractères cachées, pare-feux WAF qui rejettent les apostrophes), la relance (généralement sans délai), la possibilité de republication des données reçues, et l'analyse de tableaux pluriannuels sans erreurs silencieuses.

Qu'est-ce que records-request ?

Cette compétence est conçue pour les agents IA (comme Claude Code, Cursor, Codex) qui doivent interagir avec des systèmes de demandes de documents publics aux États-Unis (FOIA, demandes d'accès aux documents publics, etc.). Elle fournit une méthodologie complète, étape par étape, pour qu'un agent puisse guider un utilisateur humain ou exécuter des parties automatisables du processus : de la recherche initiale sur le site web du bureau concerné, à la rédaction de la demande avec le paragraphe de dérogation crucial, en passant par la gestion des formulaires web hostiles (avec détection des limites de caractères et des pare-feux), la relance après l'envoi, la vérification des droits de republication, et enfin l'analyse robuste des documents reçus (en évitant les erreurs silencieuses de parsing). L'agent doit savoir identifier le bon bureau (car les noms varient selon les États), rédiger la demande en citant le bon statut de confidentialité, et gérer les pièges techniques comme les WAF qui rejettent les apostrophes. La compétence insiste sur la traçabilité (hachage des documents, journalisation des envois) et sur l'importance de ne pas reformuler un texte de demande déjà accepté.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/2016judea/brick-mortar-skills/tree/HEAD/skills/records-request

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

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

Documentation

Demandes de documents publics

Objectif : obtenir un document nommé en main, à moindre coût, sans irriter un bureau dont vous voudrez peut-être plus tard. Terminé = le fichier est sur disque, mis en cache, avec sa provenance et ses droits d'utilisation enregistrés — ou un « nous n'avons pas cela » écrit, ce qui clôt le dossier et constitue également une victoire.

Le goulot : un humain envoie. Rédigez-le, vérifiez le destinataire, mettez-le dans un fichier, dites que c'est un brouillon, arrêtez-vous. Un portail avec un CAPTCHA et une case à cocher de signature ne peut jamais être traité que par un humain.


Étape 0 — lisez d'abord le site web. La règle la moins coûteuse ici.

Avant de rédiger quoi que ce soit, cherchez le document sur le site du bureau lui-même.

Un barème de frais publié est une preuve que le bureau reçoit des demandes, pas que la réponse coûte de l'argent. Un comté a été signalé comme vendant son étude de taux de capitalisation pour 34,50 $ par an, et publiait quatre années de la même chose gratuitement sur sa page de statistiques. Une seule récupération de page a économisé l'argent et trois semaines d'attente.

Ensuite, vérifiez les voisins : une agence d'État peut publier un agrégat que le comté ne publie pas (mais lisez ce qu'il couvre réellement — une « étude du taux de capitalisation » de l'État peut ne couvrir que les biens d'utilité publique et ferroviaires évalués par l'État). Et confirmez correctement le résultat négatif : recherchez les rapports publiés du bureau avec vos termes. Ce résultat négatif est ce qui fait de la demande la seule voie d'accès.

Étape 1 — trouvez le bureau, et donnez-lui le bon nom

Le bureau ne s'appelle pas de la même manière dans deux États. Écrire au mauvais organisme ne donne rien en retour. Pour l'évaluation des biens commerciaux, par exemple :

Étatqui évalue les biens commerciaux
MN, IA, NEAssessor du comté
KSAppraiser du comté
NDDirector of Tax Equalization du comté
SDDirector of Equalization du comté
WIpas d'assessors de comté — l'évaluation est municipale, écrivez donc à la ville

Aussi : certains États intègrent la grande ville dans l'assessor du comté (Iowa : Polk couvre Des Moines) ; d'autres non (ND : Fargo et Cass sont séparés).

Priorité des canaux : email, portail, courrier postal.

  • Email partout où une adresse existe. Vérifiez-la sur la page du bureau lui-même.
  • Portail (GovQA, NextRequest) seulement lorsqu'aucune adresse n'est publiée. Les portails nécessitent un humain pour le compte, le CAPTCHA et la case à cocher de signature contraignante.
  • Courrier postal en dernier ; notez-le dans l'en-tête du brouillon comme solution de repli.

Certaines pages sont rendues par script et curl ne renvoie rien d'utile. Supprimez les balises en Python et recherchez @ ; s'il n'y a vraiment aucune adresse, dites-le plutôt que d'en deviner une.

Étape 2 — le paragraphe de dérogation est la demande entière

Nommez vous-même le statut de confidentialité et déclinez-le, dans la lettre. Sans ce paragraphe, la demande sera refusée en bloc, car la disposition de confidentialité est ce que le bureau saisit par réflexe. Avec lui, la question cesse d'être « pouvons-nous publier cela » et devient « à laquelle de nos propres tables faisiez-vous référence ».

Ne demandez que les propres tableaux et études dérivés, à l'échelle du comté du bureau, ne portant aucune donnée au niveau de la parcelle ou identifiable au propriétaire, et proposez de prendre un document mixte avec les parties soumises par le propriétaire expurgées.

Dispositions utilisées avec succès pour les demandes d'assessor (vérifiez par rapport au texte de loi en vigueur) :

Étatdemande en vertu dedéclinez
MNMinn. Stat. 13.03 subd. 313.51 subd. 2 — revenus/dépenses soumis par le propriétaire, facteurs de vacance, surfaces louables, baux
KSK.S.A. 45-215 et seq. (responsable : 45-218)45-221(b) — informations financières du contribuable fournies à l'appraiser
IAIowa Code ch. 22secret commercial 22.7 — et citez 441.21(3)(a), qui impose affirmativement la divulgation de la formule ou de la méthode, plus 441.19(1)(a)
NENeb. Rev. Stat. 84-71284-712.05(3) secret commercial / propriétaire
NDN.D.C.C. 44-04-1844-04-18.4 secret commercial / commercial
SDSDCL 1-27-1l'équivalent de la confidentialité de l'assessor de cet État

Lorsqu'un texte de loi impose la divulgation, citez-le (Iowa ci-dessus) : il préempte entièrement le réflexe de confidentialité.

Ne reformulez pas un corps de texte qui a été accepté. Une fois qu'un bureau a accepté votre formulation, réutilisez-la textuellement pour ses homologues, en ne changeant que le nom ; une version reformulée invite une deuxième série de questions de cadrage. Vérifiez que le paragraphe a survécu à toute modification en masse en le hachent par rapport à l'original accepté.

Étape 3 — trois choses à mettre dans la première lettre, toujours

  1. Demandez cinq ans, pas un. « Années d'évaluation 2022 à 2026 incluses. » Même recherche pour le bureau, cinq fois les données — et la série est souvent le produit (elle montre comment le bureau a fait évoluer ses propres taux). Ajoutez : « Envoyez les années que vous détenez ; une réponse partielle est une réponse utile », afin qu'une année manquante ne bloque pas la réponse.
  2. Donnez-leur une issue peu coûteuse. « Si le Bureau ne tient pas de tableaux de ce type, une réponse d'une ligne le disant clôt ceci et je ne ferai pas de suivi. » Un non écrit est un dossier clos, et leur coûte trente secondes au lieu d'une lettre de refus.
  3. Demandez d'abord l'estimation des frais. « Si répondre à cela entraîne des frais, dites-moi l'estimation d'abord et je réduirai la demande. » Certains bureaux facturent à l'heure pour localiser et à l'heure pour expurger — deux compteurs à la fois.

Étape 4 — avant un envoi groupé

  • Vérifiez les MX de chaque domaine destinataire : dig +short MX <domain>. Attrape une faute de frappe avant dix-neuf rebonds.
  • Lisez un corps complet d'un bout à l'autre. Pas le diff, la lettre.
  • Gardez l'identité du demandeur cohérente sur une campagne (même personne ou même société, même adresse) afin que les réponses s'enchaînent et que personne ne vous redemande qui vous êtes.
  • Envoyez en texte brut. Les lettres à lignes dures s'effondrent en HTML.

Étape 4b — un formulaire web est un canal hostile. Prévoyez deux pièges.

  1. Une limite de caractères dont vous n'êtes pas informé. Un champ de message peut tronquer silencieusement un corps de 2 000 caractères à 1 000. Pour tout formulaire, rédigez une version courte à l'avance : citation du texte de loi, la demande avec sa plage d'années, la clause de non-responsabilité de confidentialité, la ligne d'estimation des frais, le contact. La clause de non-responsabilité est la dernière chose à couper.

  2. Un pare-feu d'application web (WAF) qui rejette la charge utile carrément (Event Type: signature). La cause est la ponctuation, pas la longueur : une apostrophe nue est la signature standard d'injection SQL. Nettoyez le corps et l'objet de ' " ( ) & / ; = < > -- et des caractères non ASCII. Écrivez « et » pour « & », supprimez les sous-sections de texte de loi plutôt que de les mettre entre parenthèses, dites « votre Bureau a dérivé » au lieu de « les [données] du Bureau ». Auditez-le en code :

    python3 -c "s=open('body.txt').read(); print({c:s.count(c) for c in \"'\\\"()&/;=<>\" if c in s})"
    

Connaissez la solution de repli avant de commencer : les bureaux qui cachent un email publient toujours une adresse postale. Un formulaire qui vous combat pendant trois tours n'en vaut pas un quatrième ; postez-le.

Étape 5 — enregistrez l'envoi, ou il n'a jamais eu lieu

Conservez la ligne d'objet légale — un responsable des documents s'y réfère, et les réponses s'enchaînent sous elle. Faites passer l'en-tête de chaque brouillon de NOT SENT à SENT <date> from <address>, messageId <id>, conservez le corps textuellement en dessous comme enregistrement, et mettez à jour votre suivi. Relisez chaque ligne qu'une modification en masse a touchée : un rechercher-remplacer global sur une colonne d'état marquera volontiers des lignes de formulaire web non envoyées comme SENT.

Étape 5b — réponses qui nécessitent une pièce jointe

Certains MCP de messagerie (celui de Zoho, par exemple) n'ont pas de téléchargement de pièce jointe. Envoyez cette réponse via un fournisseur transactionnel (par exemple Mailgun) depuis la même adresse, en la rattachant au message du bureau avec h:In-Reply-To et h:References définis sur leur Message-ID, en conservant leur objet. Avec curl, utilisez --form-string pour chaque champ d'en-tête et de corps — -F traite une valeur commençant par < (chaque Message-ID) ou @ comme « lire ce fichier ». Confirmez la livraison via l'API d'événements du fournisseur.

Le formulaire d'un bureau est généralement sur son site web. S'il s'agit d'un PDF plat, superposez du texte avec reportlab, mettez les longues spécifications sur une page 2, et rendez la page en PNG et regardez-la avant d'envoyer (le texte atterrit sur les étiquettes plus souvent que vous ne le pensez).

Réduisez le périmètre lorsque vous renvoyez un formulaire. Un avertissement de frais est le moment pour dire ce que vous détenez déjà et ne demander que le reste, estimation d'abord.

Un non poli qui nomme les intrants n'est pas un non sur les tableaux dérivés. « Nous utilisons des données d'enquêtes locatives, qui sont confidentielles » répond à un élément en pointant vers des intrants confidentiels et ignore l'étude dérivée. Redemandez les éléments ignorés par oui/non, remerciez-les, et offrez à nouveau la sortie en une ligne. Restez courtois : vous voulez aussi la prochaine réponse de ce bureau.

Étape 6 — relancez, car il n'y a généralement pas de délai

Le délai court n'est souvent pas le vôtre. Les « 10 jours ouvrables » d'un portail peuvent ne s'appliquer qu'à une personne concernée qui demande des informations sur elle-même. Une demande générale de données gouvernementales se voit généralement attribuer « un délai raisonnable » (par exemple Minn. Stat. 13.03 subd. 3), ce qui ne fixe aucun délai. Le suivi est la seule pression. Planifiez une relance environ deux semaines après le jour de l'envoi (voir le hook pending-queue), avec le numéro de référence, le chemin du portail, le contact nommé et « ne pas reformuler la demande » dedans. Une relance est une vérification de statut ; ne recadrez jamais le périmètre dans un suivi.

Étape 7 — ce qui est revenu peut-il être republié ?

Répondez à cette question avant de construire quoi que ce soit dessus.

  • Minnesota : oui, y compris commercialement. Une agence doit permettre « l'utilisation sans restriction de ces données, même à des fins commerciales, en l'absence d'autorisation légale spécifique contraire » — avis du Procureur général du Minnesota 852 (1995).
  • Partout : les faits ne portent pas de droit d'auteur (Feist) — seule une sélection ou un arrangement particulier le peut. Republiez les chiffres, jamais leur mise en page documentaire. Ré-exprimez-les dans votre propre schéma.
  • Ailleurs, la partie utilisation n'est pas réglée. Lisez la clause d'utilisation commerciale de cet État avant de la revendiquer, et marquez vos propres fichiers honnêtement (« pas encore autorisé pour la republication » est votre marqueur, pas la restriction du bureau — ne citez pas cela comme tel).

Étape 8 — analyser ce qui arrive

Mettez en cache l'original à côté de la sortie analysée avec un sha256 et l'URL canonique, et ne récupérez jamais.

Les étiquettes dérivent entre les années. Les étiquettes de lignes d'un même comté sont passées de 22, 22, 18, 18 sur quatre feuilles annuelles, avec des types de propriété disparus. Écrivez à la main le tableau de correspondance et conservez l'étiquette brute textuellement sur chaque enregistrement. Ne faites jamais de correspondance floue — c'est ainsi qu'un mauvais nombre est livré en ayant l'air correct. Un type qui disparaît est absent, pas zéro.

Ne faites pas confiance à une expression régulière sur la sortie de pdftotext pour vous donner la structure. Une classe de caractères manquant de chiffres a tronqué Warehouse <25% Office / >20K au 2 et a fusionné silencieusement quatre lignes en deux. Vérifiez le nombre de lignes par rapport à la source avant de croire votre extraction.

Prouvez une jointure entre sources sur la source n°2 avant de vendre l'étendue. Deux comtés du même État, même type de document, peuvent partager zéro nom exact de type de propriété.

Individual skills in this repo

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

2016judea/ascii-charts

Build charts as plain Unicode-block text — bar, range, bullet, gap-bracket, star-histogram, heatmap, line, Venn, pie, donut and scatter — with a dependency-free Python script, for anywhere only monospace text survives (newsletter code blocks, Markdown, terminals, plain-text email, chat). Use when a chart has to embed as literal text instead of an image or a third-party chart service, or when you want a hand-made terminal look with no branding footer.

2016judea/buffett-checklist

Apply Warren Buffett's investment framework as a discipline lens when weighing a buy, hold, or sell decision — circle of competence, economic moat, owner earnings & intrinsic value, margin of safety, management/capital-allocation quality, and market psychology (Mr. Market, fear vs greed, temperament). Use when asked to "run this through Buffett", "what would Buffett say", "does this pass the moat test", "is this cheap enough", or for a second, more skeptical read on a name being evaluated or already held. This is a discipline overlay, not a replacement for a strategy — it applies the Buffett lens to how someone actually invests, rather than issuing generic advice.

2016judea/image-riff

Turn one or more reference images into original art in that reference's own visual language, then cut it to whatever surface it's for. Use when you paste or point at art and say "use this as the base image", "generate art from this", "riff on this", "some creative ideation with these images", "make me a channel banner / avatar / cover / plate", "wilder version of this", or want a spread of options off one piece of reference. This is the TASK skill; the engine is the `make-art` tool skill.

2016judea/leonardo

Draw the way Leonardo da Vinci drew — a study sheet, a notebook folio, a red-chalk or silverpoint study, a machine cutaway, a storm of vortices — in his real materials and page-logic, generated with the make-art engine and anchored on fifteen of his actual (public-domain) sheets. Use when you say "Leonardo", "da Vinci", "like his notebooks", "a codex page of X", "draw this as one of his study sheets", "sanguine", "silverpoint", or wants a design, diagram, or illustration in that hand. Also a reading guide to his notebooks (Richter's 1883 public-domain translation) for "what did Leonardo say about shadow / trees / water". This is a TASK skill; the engine is `make-art`.

2016judea/mcp-stack

Which free MCP server or framework to reach for, and its traps — finance/gov data (SEC EDGAR, Yahoo, SAM.gov, USAspending), web research (Exa, Firecrawl, Crawl4AI, Jina reader), design/art/brand (Canva, Inkscape, Penpot, Figma, Orshot, Hugging Face image gen, vectorizing, charts), data/spatial (DuckDB spatial, live ArcGIS layers, OpenStreetMap/Overpass, Census, MapLibre), and ops (PostHog, iMessage, context7 docs). Use when making a social post, OG card, poster, logo/vector, chart, map, or brand asset; when querying parquet/geojson/duckdb or a city's open-data layer; when an MCP "needs authentication" or fails; or when asked "what tools do we have", "is there an MCP for X", "should we add X".

2016judea/sms-native-product

Build a product whose interface is text messages rather than an app or a website — "no app, no website", "they just text a number", "chat with our agent natively in Text Messages", "can we do this over text", "an SMS bot", "a Telegram bot", "make it a group chat", "minimum viable friction". Fires equally when it has already gone wrong — "my campaign got rejected", "our number is blocked", "the texts aren't arriving", "why do I need to register". Covers the gate that decides whether such a product can send at all (US A2P 10DLC registration, SHAFT content rules, permanent rejection codes), group MMS from code, what each channel can't do, an architecture that survives losing the channel, and guarding model-rewritten user content.

2016judea/vertical-market-agent

Build a chat agent that knows one industry in one metro better than any general model because it carries a precomputed digest of real public records (or a mined review corpus) and can pull live records mid-conversation — finding the moat, building a byte-stable substrate, enumerating what the records can't, the data traps that produce plausible wrong numbers, deterministic math in tools, measured prompt cost and cache TTL, shipping as an ad destination, an off-sector ending, and a precomputed spatial "what is this next to" layer. Use when building a vertical AI agent grounded in records rather than general knowledge.

Skills associés