Community연구 & 데이터 분석github.com

2016judea/records-request

미국 정부 기관에서 공개 기록 요청을 통해 특정 문서를 확보합니다. — "감정원 모델을 요청", "데이터 관행 요청 제출", "FOIA 신청", "카운티에 그냥 물어봐도 될까", "카운티 담당자 누구에게 써야 하지", "요청 진행 상황 확인", "그들이 답변했나?" 등의 작업을 포함합니다. 웹사이트 사전 확인, 적절한 기관과 법령 찾기, 요청을 거절이 아닌 답변 가능하게 만드는 예외 조항, 웹 폼 함정(숨겨진 글자 수 제한, 아포스트로피를 차단하는 WAF), 진행 상황 확인(보통 시한이 없음), 회신된 내용의 재배포 가능 여부, 다년도 표에서 오류 없는 데이터 추출 등을 다룹니다.

records-request란 무엇인가요?

이 스킬은 개발자와 AI 에이전트가 미국 정부 기관(특히 카운티 감정/평가 기관)에 공개 기록 요청을 체계적으로 제출하고 관리하는 방법을 제공합니다. 사용자는 자연어 명령(예: "감정원 모델 요청", "데이터 관행 요청 제출", "진행 상황 확인")으로 에이전트를 트리거할 수 있습니다. 이 스킬은 요청 전 웹사이트 사전 조사, 정확한 기관명 식별(주마다 'Assessor', 'Appraiser', 'Director of Equalization' 등 다름), 기밀이 아닌 파생 데이터를 요청하는 법적 예외 조항 활용, 웹 폼의 문자 수 제한 및 WAF 차단 회피 전략, 시한이 없는 환경에서의 정기적인 진행 상황 확인, 회신된 데이터의 저작권 및 재배포 권리 분석, 다년도 PDF/표에서 라벨 변화를 감지하고 오류 없이 데이터를 추출하는 방법을 포함합니다. Claude Code, Cursor, Codex 등 주요 플랫폼에서 사용 가능하며, 요청 템플릿 생성, 이메일 발송(MCP/Mailgun), 진행 추적, 파싱 및 캐싱 전 과정을 자동화하여 법적・행정적 장벽을 낮춥니다.

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

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

공개 기록 요청

목표: 비용을 적게 들이고, 앞으로 더 많은 정보를 얻고 싶은 기관의 불편을 초래하지 않으면서, 명명된 문서를 손에 넣는 것. 완료 = 파일이 디스크에 저장되고, 원본 출처와 권리 상태가 기록되어 캐싱됨 — 또는 "해당 문서를 보유하고 있지 않음"이라는 서면 회신을 받은 경우, 이는 해당 파일을 종결하며 역시 성공입니다.

관문: 사람이 보내야 합니다. 초안을 작성하고, 수신자를 확인하고, 파일에 넣고, 초안임을 명시한 후 멈추세요. CAPTCHA와 서명 체크박스가 있는 포털은 반드시 사람이 처리해야 합니다.


단계 0 — 먼저 웹사이트를 읽으십시오. 여기서 가장 저렴한 규칙입니다.

초안을 작성하기 전에, 기관 자체 사이트에서 문서를 찾으십시오.

게시된 수수료 일정은 그 기관이 요청을 자주 받는다는 증거일 뿐, 답변에 비용이 든다는 증거는 아닙니다. 한 카운티는 자본화율 연구(capitalization-rate study)를 연간 34.50달러에 판매하는 것으로 알려졌지만, 통계 페이지에 동일한 내용을 4년치 무료로 게시하고 있었습니다. 한 번의 페이지 페치로 비용과 3주 대기 시간을 절약했습니다.

그런 다음 인접 기관을 확인하십시오: 주(state) 기관은 카운티가 제공하지 않는 집계 데이터를 게시할 수 있습니다(단, 실제로 포함하는 내용을 읽으십시오 — 주 차원의 "자본화율 연구"는 주가 평가한 유틸리티 및 철도 자산만 포함할 수 있습니다). 그리고 부재를 적절히 확인하십시오: 기관이 게시한 보고서에서 검색어를 검색하십시오. 그 부재가 바로 요청을 유일한 경로로 만드는 것입니다.

단계 1 — 기관을 찾고, 그 이름을 정확히 알아내십시오

두 주(state)에서 동일한 기관 이름을 사용하지 않습니다. 잘못된 기관에 편지를 보내면 아무 응답도 받지 못합니다. 예를 들어, 상업용 부동산 평가의 경우:

주상업용 부동산 평가 담당 기관
MN, IA, NE카운티 Assessor (감정원)
KS카운티 Appraiser (감정사)
ND카운티 Director of Tax Equalization (조세 균등화 국장)
SD카운티 Director of Equalization (균등화 국장)
WI카운티 감정원 없음 — 평가는 시(municipal) 단위이므로 시(city) 에 편지 작성

또한: 일부 주는 대도시를 카운티 감정원에 통합합니다(아이오와: Polk 카운티가 Des Moines 커버); 다른 주는 그렇지 않습니다(노스다코타: Fargo와 Cass는 별도).

경로 우선순위: 이메일, 포털, 우편.

  • 이메일 주소가 있는 곳이면 어디든. 기관 자체 페이지에서 확인하십시오.
  • 포털 (GovQA, NextRequest)은 이메일 주소가 게시되지 않은 경우에만 사용. 포털은 계정, CAPTCHA 및 구속력 있는 서명 체크박스를 위해 사람이 필요합니다.
  • 우편은 마지막 수단; 초안 헤더에 대체 수단으로 표시하십시오.

일부 페이지는 스크립트로 렌더링되어 curl이 유용한 결과를 반환하지 않습니다. Python으로 태그를 제거하고 @를 검색하십시오. 주소가 정말로 없다면, 추측하지 말고 그렇게 명시하십시오.

단계 2 — 예외 조항( carve-out paragraph)이 요청의 핵심입니다

편지에서 기밀 유지 법령(confidentiality statute)을 직접 명시하고 면책하십시오. 이 단락이 없으면 요청이 일괄 거절됩니다. 기관이 무의식적으로 기밀 유지 조항을 적용하기 때문입니다. 이 단락이 있으면 질문은 "이것을 공개할 수 있는가?"에서 "귀 기관의 어떤 테이블을 원하는가?"로 바뀝니다.

기관의 자체적으로 도출된(countywide) 일정 및 연구만 요청하고, 필지 수준 또는 소유자 식별 데이터를 포함하지 않으며, 소유자가 제출한 부분이 수정된 혼합 문서도 수용하겠다고 제안하십시오.

감정원 요청에 성공적으로 사용된 조항(현행 법률에 대해 확인 필요):

주요청 근거 법률면책 조항
MNMinn. Stat. 13.03 subd. 313.51 subd. 2 — 소유자 제출 손익, 공실률, 임대 가능 면적, 임대차
KSK.S.A. 45-215 et seq. (관리자: 45-218)45-221(b) — 감정사에게 제출된 납세자 재정 정보
IAIowa Code ch. 2222.7 영업 비밀 — 그리고 441.21(3)(a) 인용, 이는 공식 또는 방법의 공개를 적극적으로 요구하며, 441.19(1)(a) 추가
NENeb. Rev. Stat. 84-71284-712.05(3) 영업 비밀 / 소유권
NDN.D.C.C. 44-04-1844-04-18.4 영업 비밀 / 상업
SDSDCL 1-27-1해당 주의 감정사 기밀 유지 등가 조항

법률이 공개를 강제하는 경우 인용하십시오 (위 아이오와 예): 기밀 유지 반사를 완전히 무효화합니다.

한 번 수락된 문구는 변경하지 마십시오. 한 기관이 귀하의 문구를 수락하면, 다른 유사 기관에도 이름만 바꾸어 그대로 재사용하십시오. 변경된 문구는 두 번째 범위 질문을 유발합니다. 문단이 대량 편집에서 살아남았는지 원래 수락된 버전과 해시를 비교하여 확인하십시오.

단계 3 — 첫 번째 편지에 항상 포함할 세 가지

  1. 1년이 아닌 5년을 요청하십시오. "2022~2026 평가 연도 포함." 기관 입장에서는 동일한 검색이며, 데이터는 5배입니다. 그리고 시계열이 종종 원하는 결과물입니다(기관이 자체 비율을 어떻게 변경했는지 보여줍니다). 추가: "귀 기관이 보유한 연도를 보내주십시오. 부분 답변도 유용합니다." 그래야 누락된 연도가 답변을 지연시키지 않습니다.
  2. 저렴한 퇴로를 제공하십시오. "기관이 이러한 종류의 일정을 유지하지 않는 경우, '해당 없음'이라는 한 줄 답변으로 이 요청을 종결하며 추가로 연락하지 않겠습니다." 서면 거절은 파일 종결이며, 기관에겐 거절 편지 대신 30초면 됩니다.
  3. 먼저 수수료 견적을 요청하십시오. "이 요청 처리에 수수료가 발생한다면 먼저 견적을 알려주시면 요청 범위를 좁히겠습니다." 일부 기관은 문서 위치 파악에 시간당, 그리고 수정(redact)에도 시간당 청구합니다 — 두 개의 계량기가 동시에 돌아갑니다.

단계 4 — 일괄 발송 전에

  • 모든 수신자 도메인의 MX 레코드를 확인하십시오: dig +short MX <domain>. 19번 바운스되기 전에 오타를 잡습니다.
  • 하나의 전문을 끝까지 읽으십시오. 차이(diff)가 아니라, 편지 자체를.
  • 요청자 신원을 캠페인 전체에서 일관되게 유지하십시오 (동일인 또는 동일 회사, 동일 주소). 답변이 스레드로 연결되고 누가 귀하인지 재차 묻지 않도록 합니다.
  • 평문(plain text)으로 보내십시오. 하드 래핑된 편지는 HTML에서 무너집니다.

단계 4b — 웹 폼은 적대적인 채널입니다. 두 가지 함정에 대비하십시오.

  1. 알려주지 않는 문자 수 제한. 메시지 필드가 2,000자 본문을 1,000자에서 조용히 잘라낼 수 있습니다. 모든 폼에 대해 짧은 버전을 미리 작성하십시오: 법령 인용, 연도 범위가 포함된 요청, 기밀 면책 조항, 수수료 견적 요청 줄, 연락처. 면책 조항이 마지막으로 삭제할 항목입니다.

  2. 페이로드를 완전히 거부하는 웹 애플리케이션 방화벽(WAF) (이벤트 유형: 서명). 원인은 길이가 아니라 구두점입니다: 베어 아포스트로피는 표준 SQL 주입 시그니처입니다. 본문 및 제목에서 ' " ( ) & / ; = < > -- 및 비ASCII 문자를 제거하십시오. "&" 대신 "and"를 쓰고, 법률 조항을 괄호로 묶지 말고 부문 번호를 생략하며, "the Office's" 대신 "your Office derived"라고 쓰십시오. 코드로 감사하십시오:

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

시작하기 전에 대체 수단을 알아두십시오: 이메일을 숨기는 기관도 거리 주소는 게시합니다. 세 번 싸우는 폼은 네 번째 싸움 가치가 없습니다. 우편으로 보내십시오.

단계 5 — 발송 기록을 남기지 않으면, 일어나지 않은 것입니다

법정 제목 줄(statutory subject line)을 유지하십시오 — 기록 담당자가 이를 기준으로 라우팅하고, 답변이 그 아래 스레드로 연결됩니다. 각 초안의 헤더를 NOT SENT에서 SENT <날짜> from <주소>, messageId <ID>로 바꾸고, 본문을 그대로 기록으로 유지하며, 트래커를 업데이트하십시오. 대량 편집으로 영향받은 모든 행을 다시 읽으십시오: 상태 열에 대한 전역 찾기 및 바꾸기는 발송되지 않은 웹 폼 행을 SENT로 표시할 수 있습니다.

단계 5b — 첨부 파일이 필요한 답변

일부 메일 MCP(Zoho 등)에는 첨부 파일 업로드 기능이 없습니다. 해당 답변은 트랜잭션 제공업체(예: Mailgun)를 통해 동일한 주소에서 보내고, 기관 메시지에 h:In-Reply-To 및 h:References를 해당 Message-ID로 설정하여 스레드에 연결하고, 제목을 유지하십시오. curl을 사용하는 경우 모든 헤더 및 본문 필드에 --form-string을 사용하십시오 — -F는 <(모든 Message-ID) 또는 @로 시작하는 값을 "파일 읽기"로 처리합니다. 제공업체의 이벤트 API에서 배송을 확인하십시오.

기관 자체 폼은 일반적으로 웹사이트에 있습니다. 플랫 PDF인 경우, reportlab으로 텍스트를 오버레이하고, 긴 사양은 2페이지에 넣은 후 페이지를 PNG로 렌더링하여 보내기 전에 확인하십시오(텍스트가 라벨 위에 놓이는 경우가 생각보다 많습니다).

폼을 반환할 때는 범위를 좁히십시오. 수수료 경고는 이미 보유한 데이터를 명시하고 나머지만 요청하며, 견적을 먼저 요청할 시점입니다.

입력 데이터를 지목하는 소프트 거절은 파생 테이블에 대한 거절이 아닙니다. "저희는 임대 조사 데이터를 사용하며, 이는 기밀입니다"라는 답변은 기밀 입력을 지목하여 한 항목에 답하고 파생 연구는 건너뜁니다. 건너뛴 항목을 예/아니오로 다시 질문하고, 감사를 표시하며, 한 줄 퇴로를 다시 제공하십시오. 예의를 지키십시오: 이 기관의 다음 답변도 필요합니다.

단계 6 — 진행 상황을 확인하십시오. 일반적으로 시한이 없기 때문입니다.

짧은 시한은 종종 귀하의 것이 아닙니다. 포털의 "10영업일"은 데이터 주체가 자신에 대해 문의하는 경우에만 적용될 수 있습니다. 정부 데이터에 대한 일반 요청은 일반적으로 "합리적인 시간"을 받습니다(예: Minn. Stat. 13.03 subd. 3). 이는 전혀 시한을 설정하지 않습니다. 후속 조치가 유일한 압력입니다. 발송 당일 약 2주 후에 후속 조치를 예약하고( pending-queue 훅 참조), 참조 번호, 포털 경로, 지명 연락처 및 "요청 내용을 변경하지 마십시오"를 포함하십시오. 후속 조치는 상태 확인입니다. 후속 조치에서 요청 범위를 절대 변경하지 마십시오.

단계 7 — 회신된 내용을 재배포할 수 있습니까?

이에 대한 답변은 무엇이든 구축하기 전에 결정하십시오.

  • 미네소타: 예, 상업적 용도를 포함합니다. 기관은 "반대되는 특정 법적 권한이 없는 한, 상업적 목적을 포함하여 해당 데이터의 무제한 사용"을 허용해야 합니다 — MN 법무장관 의견 852(1995).
  • 모든 곳: 사실(facts)에는 저작권이 없습니다 (Feist) — 특정 선택 또는 배열에만 저작권이 있을 수 있습니다. 숫자는 재게시하되, 문서 레이아웃은 절대 재게시하지 마십시오. 자체 스키마로 다시 표현하십시오.
  • 그 외 지역: 사용 측면은 불확실합니다. 해당 주의 상업적 사용 조항을 주장하기 전에 읽고, 자체 파일을 정직하게 표시하십시오("아직 재게시가 승인되지 않음"은 귀하의 표시이며, 기관의 제한이 아닙니다 — 이를 제한으로 인용하지 마십시오).

단계 8 — 도착한 데이터 파싱

원본을 sha256 및 표준 URL과 함께 파싱된 출력 옆에 캐싱하고, 다시 가져오지 마십시오.

연도 간 라벨이 표류합니다. 한 카운티의 자체 행 라벨이 네 개의 연간 시트에서 22, 22, 18, 18로 변경되었으며, 자산 유형이 사라졌습니다. 크로스워크를 직접 작성하고 모든 레코드에 원시 라벨을 그대로 보관하십시오. 퍼지 매칭(fuzzy-match)을 절대 사용하지 마십시오 — 잘못된 숫자가 정확해 보이게 배송되는 방식입니다. 사라진 유형은 0이 아니라 부재입니다.

pdftotext 출력에 대한 정규식이 구조를 알려줄 것이라고 신뢰하지 마십시오. 숫자가 누락된 문자 클래스가 Warehouse <25% Office / >20K를 2에서 자르고 네 개의 행을 조용히 두 개로 병합했습니다. 추출을 믿기 전에 소스에 대해 행 수를 확인하십시오.

범위(breadth)를 판매하기 전에 두 번째 소스에 대한 교차 소스 조인을 증명하십시오. 동일한 주의 두 카운티, 동일한 문서 유형이 정확히 일치하는 자산 유형 이름을 공유할 수 있습니다.

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.

관련 스킬