ai-startup-skills
AI 제품을 만드는 스타트업을 위한 7단계 에이전트 스킬: 검증 → 비즈플랜 → 정책 → 로드쇼 → 고객 확보 → 가격 책정 → 등록
클로드가 제4수정조항과 감시에 관한 32건의 대법원 판례를 인용하고, 의견을 검색해 이유가 담긴 구절을 보관하며 인용을 포함해 답변합니다
Claude’s Citations on 32 Supreme Court cases about the Fourth Amendment and surveillance. Claude searches the opinions, keeps passages with a reason for each, and answers with citations that carry the
기타Python · JavaScriptGitHub @NguyenTran2002온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Claude’s Citations on 32 Supreme Court cases about the Fourth Amendment and surveillance. Claude searches the opinions, keeps passages with a reason for each, and answers with citations that carry the cited sentences word for word. Built with Claude Code; every prompt published.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Independent project. Not affiliated with Anthropic.
Claude's Citations, on Supreme Court opinions about the Fourth Amendment and surveillance. Ask a question; Claude searches 32 cases, keeps the passages that bear on it with a reason for each, and writes an answer whose citations carry the cited sentences, copied from the opinions by the Claude API, not retyped by the model.
Live at nguyennhattran.com/probable-clause. Four recorded runs play on the page without calling anything; live research runs a real, paid run.
Research, not legal advice: it shows what the Court said and never applies it to your situation. It does not tell you whether a case is still good law, and it can miss relevant passages.
Here for the process? Built part time with Claude Code: 35.1 hours over four sittings and 304 prompts, every one published. See How this was built with Claude Code.
It does the research a paralegal does on a narrow body of law. Claude runs an agentic loop over a fixed corpus of Supreme Court opinions: it searches, reads around what it finds, and keeps or passes over each passage, giving a one-sentence reason for each one it keeps. A second call then writes the answer from the kept passages only, with the Claude API's Citations feature. A third step may search the web for anything newer than the opinions, shown apart from the evidence.
The research is visible: each search and its results, each passage kept and why, every Messages API exchange that touched a passage (the "View API calls" button), and the run's tokens and cost.
It is designed for legal researchers (paralegals, law students, attorneys). Members of the public will arrive too: a question about a person's own situation is researched and answered with what the Court held and the factors it weighed, stopping short of applying them.
The page states one guarantee, on each cited passage:
This passage appears word for word in this opinion, as normalised from the official text.
That is all it promises. The quoted words come back from the Citations feature as the exact sentences of a passage Claude kept, so they are the corpus's words, not the model's. It does not promise that:
Two checks by this site's code run on each answer as an add-on, not as part of the guarantee (decision P4.34). They only flag:
A broader check that every case name resolves to the corpus was planned and dropped (T1.12): a case name cannot be found reliably in free text, and a check that claimed to would give false confidence.
Research (Claude Sonnet 5.5, high effort). Claude has five tools:
search_meaning: meaning search, embedded with Voyage AI's voyage-law-2 and reranked with rerank-3;search_exact: keyword search on exact words, phrases, citations and names, with optional filters (case, opinion type, author, dates);read_passages: read around a passage or a page of an opinion;keep_passages: keep passages, each with a one-sentence reason (a re-keep replaces the reason);submit_answer: end the research.Claude can make several searches and reads in one turn. After each turn our code appends a status line ("Round 5 of 12 · 9 kept"). To find later cases citing a case, Claude searches the citation string ("389 U. S. 347") with a date filter; there is no separate citing-cases lookup.
The rejection paths. submit_answer is refused, with the refusal shown in the step log, when:
A keep is refused in the same way for a passage not shown to Claude before that turn, an empty reason or one over 300 characters, or a keep past 40 passages. A question outside the corpus (or a greeting) gets a short reply written to the visitor, labelled as having no sources, instead of an answer.
The answer (Claude Sonnet 5.5, high effort). The kept passages, in order of decision date, go to one call as custom content documents. Each is split into sentences by this project's own conservative splitter, with the passage's citation, lineup and keep reason in the document's context. Claude cites any run of whole sentences, from one sentence to the whole paragraph. The answer streams to the page as Markdown, each cited sentence underlined; hovering or tapping one shows the exact sentences it cites, lit inside their paragraph.
Why our own sentences: in a paid check, Anthropic's automatic plain-text chunking broke legal citations ("205 F. Supp. 692", "Code Crim. Proc.") in 133 of 200 pieces on the ten hardest passages; the conservative splitter broke none of 54 (scripts/probe_chunking.py, T1.9).
Later developments runs beside the answer, continuing the research conversation (below).
Each question is researched from scratch; Claude does not see the visitor's earlier questions.
The prompts are in api/prompts/: the research and update system prompt, the answer's system prompt, the tool descriptions and every refusal's text.
32 Supreme Court cases, 102 opinions (majority, plurality, concurrences and dissents), decided from 1878 to June 29, 2026, 2,462 passages (1,964 paragraphs and 498 footnotes) and 11,005 sentences, 599,096 tokens by Claude's token counter. Pulled Oct 23, 2026, then frozen.
Inclusion rule (P1.9): Supreme Court opinions deciding (a) whether the government's acquisition of information through a surveillance or sensing technology, or from records held by a third party, is a Fourth Amendment search; (b) whether the Fourth Amendment requires a warrant before the government searches the data on a digital device; or (c) whether a physical intrusion to gather information is a search under the property-based test. Borderline cases lean toward inclusion, and one foundational case outside the rule's text, Boyd v. United States, was added in the filter check. A wider corpus of every Fourth Amendment case was considered and set aside: the project shows Claude's Citations, which does not need a huge corpus.
Sources (the text is in the public domain):
Cleaning: HTML, page numbers, running heads and footnote markers removed (positions recorded), words broken across lines rejoined, letters a PDF font dropped restored, quotation marks made straight, whitespace normalised. The syllabus, counsel listings and the Reporter's lineup are left out, since they are not the Court's words. Beyond that, the only changes to the source words are corrections confirmed against the page image (each by a verification agent, except one missing heading checked by the main conversation), all listed in scripts/corrections.json. Every opinion was verified by scripts and by independent subagents. The text is unofficial; only the U.S. Reports are authoritative.
Details: data/corpus/README.md. Licences and terms of every source: docs/research/licensing.md.
Coverage dates shown on the page: latest decision in everything pulled and in the corpus, June 29, 2026; pulled Oct 23, 2026.
The corpus stops at its pull date, so a separate step lets Claude search the web for anything newer, through Exa's hosted MCP server. It continues the research conversation (for its cache), decides whether to search at all (up to 5 searches), and writes short findings, each naming the pages it draws on. It does not run when research ended without submitting (at a limit or after an error), when the question was out of scope, or when research never searched the corpus; it shows as unavailable when Exa is.
The box sits under the answer, apart from the evidence, and carries its own honesty label:
Claude searched the web for anything newer than these opinions. Kept apart from the evidence above. If it finds nothing, that doesn't mean nothing has changed: web searches miss pages.
Each point is Claude's summary of the pages it links. This site checks only that the pages came from this search, not what they say. Open them to check.
Only Claude's summary is shown, with links; no page text from Exa is shown or stored. A copy guard refuses a finding that repeats ten or more words of a page in a row. Every page the search returned is listed, including those Claude did not mention. When Claude decides not to search, the box says so and gives its reason.
Each limit is a backstop meant almost never to fire.
| Limit | Value | When it is hit |
|---|---|---|
| Research rounds | 12 | The answer is written from what was kept so far, labelled "Stopped at step limit." |
| Research tokens | 2,000,000 input, 16,000 output | The same, labelled with the token limit |
| A run's time | 10 minutes | No research or web-search call starts after it; the answer is still written, labelled with the time limit |
| Kept passages | 40 at a time | A further keep is refused, with a message to Claude |
| Answer length | 16,000 output tokens | The answer is shown, labelled "Cut off at the answer's length limit." |
| Web searches | 5 a run; 8 rounds, 2,000,000 input and 6,000 output tokens | A sixth search is refused, with a message to Claude. At the round, token or time limit, the box says the search stopped, or lists the pages it could not summarise |
| Runs at once | 5 | A new question is refused: "Please try again in a minute." |
| Spend | $15 a day, $60 a month, at list prices | Live research pauses until midnight Chicago time, or the 1st; recorded runs still play |
| Question | 2,000 characters | The question box stops there, and the API refuses a longer one |
If research stops with nothing kept, no answer is written and the page says so. Anthropic and Voyage calls that fail on a transient error are retried up to twice, each retry shown as a step; Exa searches are never retried by this site. A transient error that persists after the retries ends research, and the answer is written from what was kept, labelled as stopped by an error.
Cold starts. The API scales to zero when idle, so the first question after a quiet spell waits for it to start; the landing page starts health checks on load, one at a time, until the API answers, so it is often awake by the time a question is asked; the page shows "Starting the research server" with a counter while it waits. Starts measured on Oct 26, 2026, from Cloud Run's logs ("Starting new instance" to the startup probe succeeding): 15.3 s at the first deploy and 44.4 s at the redeploy; 30.7 s for a visitor after about 48 minutes idle; and 31.5 s after 7 h 24 min idle, which a request through the domain saw as 32.5 s. In that last sample about 4.5 s was the container starting and 27 s the app loading its corpus, index and clients. A long idle gave no longer start than a short one in these two samples, which is too few to call a trend. Google does not guarantee these times.
The page shows each run's cost, computed from each response's token counts and the providers' list prices, plus this site's estimate for any failed attempt that reported no usage; it is not an invoice. A recorded run shows the prices of its recording date.
| Run | Rounds | Claude and Exa |
|---|---|---|
| Recorded: searching a phone after an arrest | 5 | $0.20 |
| Recorded: tracking a car with GPS | 4 | $0.21 |
| Recorded: Google location history without a warrant | 5 | $0.21 |
| Recorded: watching a backyard from the air | 6 | $0.24 |
| The first live run (Oct 26, 2026): "What does the police need to enter a house?" | 5 | $0.20 |
Voyage AI's meaning search adds under a cent a run and is not in the page's total. The first live run used no Exa search (Claude decided the question needed none). Spend is recorded per call in MongoDB Atlas and checked against the caps before a run starts.
A question goes to Anthropic (the research and the answer), and Claude's searches go to Voyage AI and, for the web search, to Exa; Claude is told to leave personal details out of search queries. The site keeps each run's steps, question and answer for 24 hours so a dropped connection can resume, then deletes them, and keeps a record of each run without the question or answer (times, steps, tokens, cost) to track spending. No accounts, no cookies, no analytics, and the site does not use or store IP addresses; the gateway in front of it and Google Cloud keep standard request logs, which include them, for 30 days. The page's privacy note links each provider's retention terms; the research behind it is in docs/research/retention.md.
This is not a new idea, and it isn't pitched as one. Free Law Project's CourtListener offers a Citation Lookup and Verification API (April 2024), framed as a guardrail against hallucinated case citations and built on their database of nearly ten million citations, and an MCP connector that brings CourtListener into Claude (May 2026), with citation verification among its features (both checked Oct 26, 2026).
What this project shows is how a customer would build grounded research on Claude: an agentic loop over their own documents, answers cited with the Citations feature, the research made visible, and a narrow guarantee stated as narrowly as it is.
data/vectors/) ship inside the container; the keyword index is built at start, and vectors are searched in memory.replays/, played by the page's own code./probable-clause/ to the page and its API.Running it locally:
uv sync
.venv/bin/pytest -q
2,967 tests pass and 54 are skipped (45 need the live test database, 2 an nginx binary, and 7 don't apply to the reconnect fixtures); the page's 86 Node tests run with node --test webdev/test/. To see the page without any keys, build its data files and start the mock server, which plays recorded event streams from tests/fixtures/:
uv run python scripts/build_web_data.py --out web/_generated
.venv/bin/python webdev/serve.py
Then open http://localhost:8765. A real run needs the keys named in .env.example; deploy/local.sh builds and runs both containers against them, and deploy/setup.sh and deploy/deploy.sh set up and deploy the cloud services.
Layout: api/ the backend; web/ the page; webdev/ the mock server and Node tests; scripts/ the corpus pipeline and the tools behind the paid tests, replays and this README's figures; data/corpus/ the frozen corpus; contracts/ the event schema; deploy/ images, nginx configs and scripts; docs/ the design record.
One person and Claude Code (Claude Opus 5.5), from the first prompt to this README. The author planned, decided and approved; Claude researched, wrote the code, ran the paid tests and deployed only on an explicit green light. Two Claude Code conversations worked in the same folder: the main one ran every phase, and a frontend one built the art-direction look tests on Oct 23, 2026.
| Time | built part time over about two and a half days (Oct 23 to 26, 2026): four sittings, 35.1 hours in all from each sitting's first prompt to its last activity, up to the first push to GitHub. A prompt more than two hours after the one before starts a new sitting; shorter breaks are counted, so this is not time at the desk. Work after the push, such as the cold-start measurement below, is not counted. |
| Prompts typed | 304 in the build (289 main, 15 frontend), 12,062 words, median 22 words a prompt. Prompts after the build are listed in docs/PROMPTS.md and not counted here |
| Commits | 358 up to the first push, never squashed or rewritten |
| Decisions | 134 entries in docs/design/locked-decisions.md, superseded ones kept and marked; 198 entries in BUILD_LOG.md |
| Subagents | 75, on Opus 5.5 and Sonnet 5.5 (the split by model and effort is at the top of docs/PROMPTS.md) |
| Context compactions | 32 in the build |
| Code | about 9,300 lines of Python in api/, 5,500 in scripts/, 21,100 in tests/; about 4,200 lines of JavaScript, CSS and HTML in web/ (the look tests aside) |
| Tests | 2,967 Python tests passing (54 skipped), 86 Node tests |
Every figure comes from a script: the prompts, hours and subagents from the transcripts by scripts/extract_prompts.py (its full figures are at the top of docs/PROMPTS.md), the rest from git, the log and the test runs.
Each phase ends with a git tag. Times are Chicago time (CDT).
| Phase | Ended | Commits | What happened |
|---|---|---|---|
| 0. Bootstrap | Oct 23, 16:23 | 3 | The brief committed unchanged as the first commit; the build log, CLAUDE.md and the rules |
| 1. Corpus | Oct 23, 21:17 | 48 | The inclusion rule, the pull, cleaning, verification by scripts and subagents, frozen; look tests in the frontend conversation |
| 2. Research | Oct 24, 13:59 | 11 | Current documentation and small paid checks: models, prices, Citations, Exa, limits |
| 3. Architecture | Oct 24, 20:03 | 121 | Five areas discussed topic by topic, each topic locked in the author's words; the design note |
| 4. Build | Oct 26, 02:52 | 168 | The interfaces contract, subagent waves against it, an overnight patch round, paid build tests, the page built and reviewed in 29 rounds, the four replays |
| Deploy | Oct 26, 03:06 | Live on Cloud Run behind the author's gateway; the first live run at 03:25 | |
| After the build: a cold start | Oct 26, 11:42 | One cold start measured after 7 h 24 min idle: 32.5 s as the caller saw it, 31.5 s on Cloud Run's side. The app was not modified, and this is not counted as build time | |
| After the build: this README reworked | Oct 26, 12:10 | The opening now points to this section, which gained the commit, decision and subagent counts and the points on discussion, the two conversations and the overnight run. Prompts re-exported; not counted as build time | |
| After the build: a step log patch | Oct 27, 11:58 | Found by the author on a live cold start: "Starting the research server" was numbered 1, and so was research's first step. It is now unnumbered and gives way to research's first step. Checked on the mock, redeployed, prompts re-exported; not counted as build time |
The author's way of working, in one early prompt: "Zoom out and discuss this holistically with me first before we proceed."
.env, keys reach programs only as environment variables, and a script reports only whether each key is set.Each is recorded in the build log.
submit_answer twice in one turn in two of three answered runs; the later one won, losing a finding and a scope note. Fixed by refusing a submit that is not alone in its turn (P4.16).date was run (17:59 for 17:57, 18:08 for 18:09). Both were corrected, and from then on date ran in its own step.Code under the Apache License 2.0. The opinion text in data/corpus/ is public domain and not covered by that licence.
Opinion text from CourtListener (Free Law Project), the official U.S. Reports on GovInfo (U.S. Government Publishing Office), and the Court's slip opinion (supremecourt.gov). Free Law Project did not produce, review or endorse this analysis. Built with the Claude API (research and answers on Claude Sonnet 5.5), Voyage AI for meaning search (voyage-law-2, rerank-3), and Exa's MCP server for the web search.
Streaming and disconnects. A run streams its events over one connection and survives drops: the page reconnects and resumes from the last event it holds. While its stream is open, the page sends a heartbeat every 10 s, checked before every paid call. A run whose page has been away pauses before its next paid call, resumes when the page returns, and is abandoned after 60 s with no answer written and nothing more spent. A run's events are kept 24 hours.
date, run just before it is written; every count in this README comes from a script.