Automated Directory Setup Guide: A Month of Work to a Live Index in One Hour
This guide turns a month of prompts and chats into an online, interlinked directory. An LLM writes the summaries, templates, sample outputs and tests. A script builds the site, and Cloudflare Pages publishes it. A human touches it at two points: dropping in the exports and approving one review.
Table of Contents
- The Pipeline
- What You Need
- The 60-Minute Plan
- Step 1: Collect a Month of Work (10 min)
- Step 2: Run the Pipeline Locally (15 min)
- Step 3: Review Once (10 min)
- Step 4: Publish (15 min)
- Step 5: Switch On Full Automation (10 min)
- How the Interlinking Works
- Safety Rules
- Troubleshooting
The Pipeline
inbox/ (exports)
-> harvest.py extract your prompts, scrub personal data, deduplicate
-> enrich.py LLM clusters them into entries: summary, template, sample I/O, tests, links
-> check.py automatic gate: blocks secrets, PII and incomplete entries
-> build_site.py Markdown to linked HTML with search
-> git push Cloudflare Pages deploys to skillregistry.thedigitalfuturist.com
| File | Job |
|---|---|
automation/harvest.py |
Reads claude.ai exports, Claude Code logs and prompt files |
automation/enrich.py |
Calls Claude through the ant CLI and writes entries into 05-generated/<role>/ |
automation/check.py |
Quality and privacy gate; exits with an error on any issue |
automation/run_all.sh |
Runs the four steps with one command |
.github/workflows/registry.yml |
Runs the pipeline in GitHub Actions monthly or on new exports |
site/build_site.py |
Builds the website into public/ |
What You Need
- This registry repo on GitHub (see
DEPLOY-CLOUDFLARE-PAGES.md) - A Cloudflare account with the Pages project connected to the repo
- The
antCLI, installed and logged in withant auth login. Check withant --versionandant models list - Python 3.12 locally
The 60-Minute Plan
| Minutes | Step | Human effort |
|---|---|---|
| 0 to 10 | Collect exports into inbox/ |
Download and drag files |
| 10 to 25 | Run run_all.sh |
One command |
| 25 to 35 | Review the generated entries | Skim and delete anything off |
| 35 to 50 | Push and connect the domain | Click through Cloudflare once |
| 50 to 60 | Turn on the scheduled workflow | Add one secret |
Run time for enrich.py depends on how many prompts you have. It runs 4 ant calls at a time by default. Test with --limit 20 first.
Step 1: Collect a Month of Work (10 min)
Put everything in inbox/. The folder is git-ignored, so raw material never gets published.
- claude.ai chats: request the data export from claude.ai settings (privacy section), unzip it, and copy
conversations.jsonintoinbox/. - Claude Code sessions: copy the session logs for the month.
find ~/.claude/projects -name "*.jsonl" -mtime -31 -exec cp {} inbox/ \;
- Prompt files, notes, SKILL.md drafts: copy any
.mdor.txtfiles with one prompt or skill per file.
Step 2: Run the Pipeline Locally (15 min)
enrich.py pipes each request to ant messages create as a JSON body and reads back only the reply text (--transform content.0.text --raw-output). It uses your existing ant login, so no API key goes into the scripts, the repo or GitHub.
ant models list # confirms ant is logged in
bash automation/run_all.sh --dry-run # checks the plumbing, no API calls
bash automation/run_all.sh --limit 20 # small real run
bash automation/run_all.sh # full month
Optional settings:
| Variable | Default | Purpose |
|---|---|---|
REGISTRY_MODEL |
claude-sonnet-5-5 |
Model that writes entries |
REGISTRY_OWNER |
Thomas Cherickal | Owner on every generated entry |
REGISTRY_CURATOR |
Thomas Cherickal | Curator on every generated entry |
REGISTRY_WORKERS |
4 |
Parallel ant calls |
ANT_BIN |
ant |
Path to the ant binary if it is not on PATH |
Each generated entry contains:
- Summary and use case
- Reusable template with
{{placeholders}}, set as a prompt or a SKILL.md body - Sample input and sample output with fictional data
- 3 golden tests with checkable assertions
- Metadata: id, role, framework, owner, curator, version, status
draft, model and date - Links to its framework, its role's seed skills and related generated entries
Step 3: Review Once (10 min)
python -m http.server 8000 --directory public
Open http://localhost:8000/05-generated/ and skim. Delete any entry you don't want public, then run python automation/check.py again. Generated entries stay at draft until they pass the testing guide, and the site labels them that way.
Step 4: Publish (15 min)
git add 05-generated automation .github site
git commit -m "Generated registry entries from last month"
git push
Cloudflare Pages rebuilds on every push. If the domain is not connected yet, follow DEPLOY-CLOUDFLARE-PAGES.md Step 4.
Step 5: Switch On Full Automation (10 min)
The workflow runs on a self-hosted GitHub Actions runner on your own machine, because that is where ant is logged in. No API key is stored in GitHub.
- On GitHub, open the repo's Settings, then Actions, then Runners, and select New self-hosted runner. Choose Linux and run the commands it shows on your machine.
- Run the runner as the same user that ran
ant auth login, and checkant --versionworks in that shell. - The workflow in
.github/workflows/registry.ymlthen runs: - on the 1st of every month - whenever files are pushed intoinbox/(keep a private repo for this) - on demand from the Actions tab - Each run harvests, enriches, gates and commits. Cloudflare redeploys automatically.
The machine must be on and online when the schedule fires. If you would rather not run a runner, use a local cron job instead:
17 2 1 * * cd ~/skill-registry && bash automation/run_all.sh && git add 05-generated && git commit -m "Auto: regenerate" && git push
For a public repo, never push raw exports. Run Steps 1 to 3 locally and push only 05-generated/.
How the Interlinking Works
- Every entry links up to
05-generated/README.mdand across to its framework and role. - The model proposes up to 3 related entries from the same batch. The script keeps only links to entries that exist.
build_site.pyturns everywikilinkinto a working HTML link and adds every page to the site search.- The same folder opens as an Obsidian vault, so the links also show up in the graph view.
Safety Rules
harvest.pyreplaces emails, API keys, tokens, phone numbers and URLs with placeholders before anything reaches the model.- The model is told to strip client names and personal data and to use only fictional sample data.
check.pyblocks the build if any secret or email pattern survives.- Raw exports stay in the git-ignored
inbox/folder. - Automated scrubbing is not perfect. Keep the 10-minute review in Step 3 for anything you publish.
Troubleshooting
| Symptom | Fix |
|---|---|
Harvested 0 prompts |
Check that files are in inbox/ and that prompts are 80 to 8,000 characters long |
ant CLI not found |
Install ant, or set ANT_BIN to its full path |
skip: with an auth error |
Run ant auth login again as the same user |
skip: Expecting value |
The model returned text instead of JSON for one cluster; rerun, or lower the batch size in cluster() |
gate: FAIL |
Open the listed file, remove the flagged text, rerun check.py |
| Site missing new entries | Confirm the push reached main and check the Cloudflare Pages build log |
Sources
Links
- Up: Registry home
- Deploy: Deploy to Cloudflare Pages
- Tests: Testing guide
- Harvesting by hand: Harvest prompts
