2016judea/records-request

Obtén un registro específico de una oficina del gobierno de EE. UU. mediante una solicitud de registros públicos. Cubre la verificación del sitio web, la búsqueda de la oficina y el estatuto correctos, el párrafo de exención que hace posible la respuesta, las trampas de formularios web, el seguimiento (generalmente sin fecha límite) y el análisis de tablas multianuales sin errores silenciosos.

¿Qué es records-request?

Esta habilidad para agentes de IA guía al usuario a través del proceso completo de solicitud de registros públicos bajo la Ley de Libertad de Información (FOIA) o leyes equivalentes a nivel estatal y local en EE. UU. Está diseñada para que un agente de IA (como Claude Code) pueda ejecutar los pasos necesarios para obtener un documento específico de una oficina gubernamental, minimizando el tiempo y la fricción. El flujo de trabajo comienza con la verificación previa en el sitio web de la oficina para evitar solicitudes innecesarias, seguido de la identificación precisa de la oficina y el estatuto de confidencialidad aplicable. El componente central de la habilidad es la redacción de un "párrafo de exención" (carve-out paragraph) que nombra y descarta el estatuto de confidencialidad, evitando así una negativa automática. La habilidad también maneja canales hostiles (formularios web) que pueden truncar el texto o ser bloqueados por firewalls, y proporciona estrategias de seguimiento efectivas. Finalmente, aborda la republicación de los datos obtenidos (derechos de uso) y su análisis, incluyendo técnicas para detectar cambios en etiquetas y estructuras de datos que podrían introducir errores silenciosos.

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

Installed? Explore more Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Solicitudes de registros públicos

Objetivo: tener un documento nombrado en mano, de forma económica, sin molestar a una oficina de la que quieras obtener más información después. Hecho = el archivo está en el disco, en caché, con su procedencia y su posición de derechos registrada — o un "no tenemos eso" por escrito, que cierra el archivo y también es una victoria.

El cuello de botella: un humano lo envía. Rédactalo, verifica el destinatario, ponlo en un archivo, di que es un borrador, y para. Un portal con un CAPTCHA y una casilla de firma solo puede ser manejado por un humano.


Paso 0 — lee el sitio web primero. La regla más barata aquí.

Antes de redactar cualquier cosa, busca el documento en el sitio web de la oficina.

Una tarifa publicada es evidencia de que la oficina recibe solicitudes, no evidencia de que la respuesta cueste dinero. Se informó que un condado vendía su estudio de tasa de capitalización por $34.50 al año, y publicaba cuatro años de lo mismo de forma gratuita en su página de estadísticas. Una sola descarga de página ahorró el dinero y tres semanas de espera.

Luego revisa a los vecinos: una agencia estatal puede publicar un agregado que el condado no publicará (pero lee lo que realmente cubre — un "estudio de tasa de capitalización" estatal puede cubrir solo propiedades de servicios públicos y ferrocarriles evaluadas por el estado). Y confirma correctamente la ausencia: busca en los informes publicados de la oficina tus términos. Esa ausencia es lo que hace que la solicitud sea la única vía de entrada.

Paso 1 — encuentra la oficina, y escribe su nombre correctamente

La oficina no se llama igual en dos estados. Escribir al organismo equivocado no obtiene respuesta. Para la valoración de propiedades comerciales, por ejemplo:

estadoquién valora la propiedad comercial
MN, IA, NEAssessor del condado
KSAppraiser del condado
NDDirector of Tax Equalization del condado
SDDirector of Equalization del condado
WIno hay assessors del condado — la tasación es municipal, así que escribe a la ciudad

También: algunos estados fusionan la ciudad grande con el assessor del condado (Iowa: Polk cubre Des Moines); otros no (ND: Fargo y Cass están separados).

Prioridad de canal: correo electrónico, portal, correo postal.

  • Correo electrónico siempre que exista una dirección. Verifícala en la página de la oficina.
  • Portal (GovQA, NextRequest) solo cuando no se publique una dirección. Los portales necesitan un humano para la cuenta, el CAPTCHA y la casilla de firma vinculante.
  • Correo postal como último recurso; anótalo en el encabezado del borrador como plan de respaldo.

Algunas páginas se renderizan mediante script y curl no devuelve nada útil. Elimina etiquetas en Python y busca @; si realmente no hay dirección, dilo en lugar de adivinar una.

Paso 2 — el párrafo de exención es toda la solicitud

Nombra tú mismo el estatuto de confidencialidad y descártalo, en la carta. Sin ese párrafo, la solicitud es rechazada en bloque, porque la disposición de confidencialidad es lo primero a lo que recurre la oficina por reflejo. Con él, la pregunta deja de ser "¿podemos divulgar esto?" y se convierte en "¿a cuál de nuestras propias tablas te refieres?".

Pide solo los cronogramas y estudios derivados propios de la oficina, a nivel de condado, que no contengan datos a nivel de parcela o que identifiquen al propietario, y ofrece aceptar un documento mixto con las partes enviadas por el propietario redactadas.

Disposiciones utilizadas con éxito para solicitudes de assessor (verificar contra el estatuto vigente):

estadosolicitar bajodescartar
MNMinn. Stat. 13.03 subd. 313.51 subd. 2 — ingresos/gastos enviados por el propietario, factores de vacancia, áreas alquilables, arrendamientos
KSK.S.A. 45-215 et seq. (custodio: 45-218)45-221(b) — información financiera del contribuyente proporcionada al appraiser
IAIowa Code ch. 2222.7 secreto comercial — y citar 441.21(3)(a), que exige afirmativamente la divulgación de la fórmula o método, más 441.19(1)(a)
NENeb. Rev. Stat. 84-71284-712.05(3) secreto comercial / propietario
NDN.D.C.C. 44-04-1844-04-18.4 secreto comercial / comercial
SDSDCL 1-27-1el equivalente de confidencialidad del assessor de ese estado

Cuando un estatuto exige la divulgación, cítalo (Iowa arriba): anula por completo el reflejo de confidencialidad.

No reformules un texto que ya ha sido aceptado. Una vez que una oficina acepta tu redacción, reutilízala textualmente para sus pares, intercambiando solo el nombre; una versión reformulada invita a una segunda ronda de preguntas de alcance. Verifica que el párrafo haya sobrevivido a cualquier edición masiva calculando su hash contra el original aceptado.

Paso 3 — tres cosas que poner siempre en la primera carta

  1. Pide cinco años, no uno. "Años de tasación 2022 a 2026 inclusive." La misma búsqueda para la oficina, cinco veces los datos — y la serie suele ser el producto (muestra cómo la oficina movió sus propias tasas). Añade: "Envíe los años que tenga; una respuesta parcial es una respuesta útil", para que un año faltante no detenga la respuesta.
  2. Dales una salida barata. "Si la Oficina no mantiene cronogramas de este tipo, una respuesta de una línea que lo indique cierra esto y no haré seguimiento." Un no por escrito es un archivo cerrado, y les cuesta treinta segundos en lugar de una carta de rechazo.
  3. Pide primero la estimación de la tarifa. "Si cumplir con esto conlleva una tarifa, dígame primero la estimación y reduciré la solicitud." Algunas oficinas facturan por hora para localizar y por hora para redactar — dos medidores a la vez.

Paso 4 — antes de un envío por lotes

  • Verifica MX de cada dominio de destinatario: dig +short MX <dominio>. Detecta un error tipográfico antes de diecinueve rebotes.
  • Lee un cuerpo completo de principio a fin. No el diff, la carta.
  • Mantén la identidad del solicitante consistente en una campaña (misma persona o misma empresa, misma dirección) para que las respuestas se encadenen y nadie vuelva a preguntar quién eres.
  • Envía como texto plano. Las cartas con saltos de línea fijos colapsan en HTML.

Paso 4b — un formulario web es un canal hostil. Prevé dos trampas.

  1. Un límite de caracteres que no te indican. Un campo de mensaje puede truncar silenciosamente un cuerpo de 2.000 caracteres a 1.000. Para cualquier formulario, escribe una versión corta de antemano: cita del estatuto, la solicitud con su rango de años, la exención de confidencialidad, la línea de estimación de tarifas, contacto. La exención es lo último que se recorta.

  2. Un Firewall de Aplicaciones Web que rechaza el payload por completo (Event Type: signature). La causa es la puntuación, no la longitud: un apóstrofo simple es la firma estándar de inyección SQL. Limpia el cuerpo y el asunto de ' " ( ) & / ; = < > -- y caracteres no ASCII. Escribe "y" en lugar de "&", omite las subsecciones de los estatutos en lugar de ponerlas entre paréntesis, di "su Oficina derivó" en lugar de "de la Oficina". Audítalo en código:

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

Conoce el plan de respaldo antes de empezar: las oficinas que ocultan un correo electrónico aún publican una dirección postal. Un formulario que te lucha durante tres rondas no merece una cuarta; envíalo por correo postal.

Paso 5 — registra el envío, o nunca sucedió

Mantén la línea de asunto estatutaria — un oficial de registros la usa para enrutar, y las respuestas se encadenan bajo ella. Cambia el encabezado de cada borrador de NO ENVIADO a ENVIADO <fecha> desde <dirección>, messageId <id>, mantén el cuerpo textual debajo como registro y actualiza tu rastreador. Vuelve a leer cada fila que haya sido tocada por una edición masiva: una búsqueda y reemplazo global en una columna de estado marcará felizmente filas de formularios web no enviadas como ENVIADO.

Paso 5b — respuestas que necesitan un archivo adjunto

Algunos MCP de correo (el de Zoho, por ejemplo) no tienen carga de archivos adjuntos. Envía esa respuesta a través de un proveedor transaccional (por ejemplo, Mailgun) desde la misma dirección, enhebrada en el mensaje de la oficina con h:In-Reply-To y h:References configurados con su Message-ID, manteniendo su asunto. Con curl, usa --form-string para cada encabezado y campo del cuerpo — -F trata un valor que comienza con < (cada Message-ID) o @ como "lee este archivo". Confirma la entrega desde la API de eventos del proveedor.

El formulario de una oficina suele estar en su sitio web. Si es un PDF plano, superpón texto con reportlab, coloca las especificaciones largas en una página 2, y renderiza la página a PNG y mírala antes de enviar (el texto cae encima de las etiquetas más a menudo de lo que piensas).

Reduce cuando devuelves un formulario. Una advertencia de tarifa es el momento para decir lo que ya tienes y pedir solo el resto, estimación primero.

Un no suave que nombra los insumos no es un no a las tablas derivadas. "Usamos datos de encuestas de alquiler, que son confidenciales" responde a un elemento señalando insumos confidenciales y omite el estudio derivado. Vuelve a preguntar por los elementos omitidos como sí/no, agradéceles y ofrece la salida de una línea nuevamente. Mantente cortés: también quieres la próxima respuesta de esta oficina.

Paso 6 — haz seguimiento, porque generalmente no hay fecha límite

El plazo corto a menudo no es tuyo. El "10 días hábiles" de un portal puede aplicarse solo a un interesado que pregunta sobre sí mismo. Una solicitud general de datos gubernamentales comúnmente recibe "un tiempo razonable" (por ejemplo, Minn. Stat. 13.03 subd. 3), que no establece ningún plazo. El seguimiento es la única presión. Programa un seguimiento aproximadamente dos semanas después del día en que se envía (consulta el hook pending-queue), con el número de referencia, la ruta del portal, el contacto nombrado y "no reformular la solicitud". Un seguimiento es una verificación de estado; nunca redefinir el alcance en un seguimiento.

Paso 7 — ¿se puede republicar lo que llegó?

Responde esto antes de construir cualquier cosa sobre ello.

  • Minnesota: sí, incluso con fines comerciales. Una agencia debe permitir "el uso irrestricto de esos datos, incluso con fines comerciales, en ausencia de autorización estatutaria específica en contrario" — Opinión del Procurador General de MN 852 (1995).
  • En todas partes: los hechos no tienen derechos de autor (Feist) — solo una selección o disposición particular puede tenerlos. Republica los números, nunca su disposición documental. Vuelve a expresarlos en tu propio esquema.
  • En otros lugares, la parte de uso no está resuelta. Lee la cláusula de uso comercial de ese estado antes de reclamarla, y marca tus propios archivos con honestidad ("aún no autorizado para republicación" es tu marcador, no la restricción de la oficina — no lo cites como tal).

Paso 8 — analizar lo que llega

Almacena en caché el original junto a la salida analizada con un sha256 y la URL canónica, y nunca vuelvas a obtenerlo.

Las etiquetas varían entre años. Las etiquetas de fila de un mismo condado fueron 22, 22, 18, 18 en cuatro hojas anuales, con tipos de propiedad desapareciendo. Escribe manualmente la tabla de correspondencia y mantén la etiqueta original textual en cada registro. Nunca hagas coincidencia difusa — así es como un número incorrecto se envía pareciendo correcto. Un tipo que desaparece está ausente, no es cero.

No confíes en una expresión regular sobre la salida de pdftotext para decirte la estructura. Una clase de carácter que omitía dígitos truncó Warehouse <25% Office / >20K en el 2 y fusionó silenciosamente cuatro filas en dos. Verifica el recuento de filas contra la fuente antes de creer en tu extracción.

Prueba una unión entre fuentes en la fuente #2 antes de vender amplitud. Dos condados en el mismo estado, mismo tipo de documento, pueden compartir cero nombres de tipos de propiedad exactos.

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 relacionados