17 Commits

Author SHA1 Message Date
85f8819b49 Merge feat/web-research: /research skill + web.py fan-out
Claude-driven web research over local SearXNG + Firecrawl. web.py mechanical
fetch layer (stdlib-only, 19 tests), /research skill drives expand→search→
rank→scrape→manifest→synthesize into md/<topic>/web/.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 21:15:45 -05:00
0113797879 fix: fail-fast on non-JSON responses, harden scrape, cover CLI branches
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7rEog2rS7uKNMb1CvpVjr
2026-06-28 21:10:49 -05:00
48bfe4492d feat: /research skill driving web.py fan-out + synthesis
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7rEog2rS7uKNMb1CvpVjr
2026-06-28 21:04:36 -05:00
5ab3eb2e97 docs: web.py live smoke-test procedure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C7rEog2rS7uKNMb1CvpVjr
2026-06-28 21:01:02 -05:00
8ef9e17904 feat: web.py CLI (search/scrape) with nonzero exit on failure 2026-06-28 20:57:44 -05:00
fb68c34cb6 feat: web.py scrape() via Firecrawl 2026-06-28 20:54:57 -05:00
52707d4703 feat: web.py search() over SearXNG json API 2026-06-28 20:52:36 -05:00
5d7881c4ca feat: web.py endpoint config + retrying HTTP helper 2026-06-28 20:49:48 -05:00
5a6ac5f8e4 fix: anchor .claude skill un-ignore to repo root
Previous rules un-ignored nested .claude/ dirs (e.g. md/<topic>/.claude/
harness state). Leading-slash anchoring scopes the exception to the repo
root skill only.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 20:42:46 -05:00
bd43d45884 Add web research skill implementation plan + un-ignore committed skills
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 20:39:22 -05:00
dcb6b0ae99 Add web research skill design spec
Claude-driven web fan-out over local SearXNG + Firecrawl, saving cited
sources and a synthesis into md/<topic>/. Skill is the brain, web.py is
the mechanical fetch layer. Uses Claude Code subscription, no LLM API.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 20:32:12 -05:00
2ea33cff61 Add per-topic structured fact-cache pattern, validator, and docs
Introduce a machine-readable layer on top of the markdown corpus so AI/scripts
can query a topic's facts without re-reading whole sources (anti-RAG stays for
synthesis/quotes).

- md/demonology/demons.json: fact-cache, 33 entities attested in 2+ sources,
  each with rank/domain/signs/origins + provenance (sources, citations).
- md/demonology/demons.schema.json: JSON Schema for the dataset.
- md/demonology/INDEX.md: topic front-door (query JSON -> synthesis -> source).
- validate.py: generic schema + house-rule validator (source_count, cross_refs,
  unique ids); discovers <name>.schema.json/<name>.json pairs across all topics.
- docs/data-convention.md: the reusable, topic-agnostic pattern + how to add it
  to a new topic.
- CLAUDE.md: pointer so the convention is picked up every session.
- requirements.txt: add jsonschema (used by validate.py).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 19:56:54 -05:00
8120079d99 hierarchy first version created 2026-06-28 14:50:23 -05:00
5f0a542ab2 Add CLAUDE.md with operating conventions for Claude Code
Session guide: venv usage, convert.py workflow, whole-file synthesis
convention (read all md/<topic>/, save syntheses back in-folder), git
habits, and the pymupdf4llm pin + plain-text fallback gotchas.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 15:36:26 -05:00
04010d5ee2 Reframe README as the AI-assisted research center
Document the project as a git-backed research workspace: collect sources by
topic, convert to markdown, synthesize with Claude over whole files, commit
everything. Topics open-ended; demonology is the primary one today.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 15:35:22 -05:00
6fa51d0d44 Group library into topic folders (pdfs/demonology, md/demonology)
Topic-per-subfolder layout so the same workflow scales to other subjects.
Converter already mirrors structure; rerun is a no-op (idempotent).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 15:33:11 -05:00
057c96e10b Add PDF→markdown batch converter and research-library workflow
convert.py walks pdfs/ (recursing topic subfolders), mirrors a .md tree
into md/ via pymupdf4llm, idempotent on mtime. Detects no-text-layer PDFs
(needs-ocr.txt) and falls back to plain per-page text when pymupdf4llm's
layout pass returns near-empty despite a real text layer.

Pin pymupdf4llm==0.3.4 (lightweight line; 1.27.x bundles an ML/OCR
pipeline that fails on plain text PDFs). PDFs gitignored (copyrighted,
large) — only generated markdown is committed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-26 15:24:22 -05:00