Curate the web-capture index. Use when the capture backlog grows, captures sit unprocessed at seedling/pending, or to surface stored research during work.
npx skills add https://github.com/athola/claude-night-market --skill palace-index-curator
The web-research hooks auto-capture every WebFetch and WebSearch into
hooks/memory-palace-index.yaml, storing each as a markdown file and an
index entry. Captures land at the defaults routing_type: pending,
maturity: seedling, importance_score: 50, and nothing advances them.
Left alone, the index becomes a write-only graveyard: the majority of
entries are never incorporated, analyzed, or surfaced.
This skill drains that backlog and keeps it drained. It wires the
capture index to the corpus tooling the plugin already ships
(decay_model, keyword_index, marginal_value) through three
commands: a read-only report, a dry-run-first promotion engine, and a
SessionStart surfacing hook.
pendingentries the drain held back.
pending.knowledge-intake.knowledge-locator.digital-garden-cultivator.uv run python scripts/memory_palace_cli.py index report
Reports total entries, the inert ratio, orphaned captures (entries whose
backing file is gone), the largest topic clusters by domain, and the
top promotion candidates. Writes nothing.
# Dry run: prints promote/archive proposals, writes nothing.
uv run python scripts/memory_palace_cli.py index promote
# Apply: backs up the index under data/backups/, then persists.
uv run python scripts/memory_palace_cli.py index promote --apply
Each pending entry is classified into one action:
importance score, a routing type, and maturity seedling -> growing.
revisited. Marked archived rather than promoted, following the
principle that unused captures should drain, not accumulate.
pending with no change.Applying is idempotent: promoted and archived entries are no longer
pending, so a second run proposes nothing new. The dry-run diff is
always shown before --apply writes.
Running these by hand is the exception. --apply runs on every commit
from scripts/precommit_palace_maintenance.sh, so the backlog drains
continuously rather than in occasional sweeps. Reach for the commands
above when a commit is blocked, or when you want the dry-run diff before
the hook decides for you.
The commit that carries the index must carry it with zero pending
entries. scripts/check_capture_index_drained.py runs at the end of the
maintenance hook and fails the commit otherwise, and
tests/test_capture_index_artifact.py re-checks the same invariant in
CI so a bypassed hook does not land a backlog.
Two things make that gate reachable rather than a standing block:
(hooks/shared/deduplication._stage_index). Without it, pre-commit
reverts the unstaged write before any hook runs, so the drain reads a
tree the fresh capture is missing from and converges on a fixed point
that excludes exactly the entries it exists to process. That is how 47
captures accumulated behind a drain that reported nothing to do.
hold survivesit, so a blocked commit means a specific capture needs a person to
score or archive it. The gate names the keys.
A SessionStart hook (hooks/index_surfacer.py) names the highest-value
promoted captures at the start of a session. It is disabled by default.
Enable it in memory-palace-config.yaml:
feature_flags:
context_injection: true
The hook only speaks when promoted entries clear the importance floor,
and it exits silently on any error so it can never block a session.
The three steps above all operate on the capture index at
hooks/memory-palace-index.yaml. Retrieval reads a different file:
data/indexes/keyword-index.yaml, built from the staging captures and
consumed by cache_lookup. Curating one does nothing to the other.
That keyword index is derived data and is not tracked in git, so a
fresh checkout has none at all. Rebuild it with:
# Report what would be indexed, writing nothing.
uv run python scripts/build_indexes.py --dry-run
# Write data/indexes/keyword-index.yaml.
uv run python scripts/build_indexes.py
The builder refuses to write an empty index over a populated one. An
empty corpus is reported with "wrote": false and any existing index
is left untouched. Writing entries: {} over real data is how the
corpus went dark in 1.5.0, and it stayed dark because the regeneration
script named in that stub file had never been written.
cluster size). The decision logic is deterministic. No model call
gates a transition.
constants. Wixted & Ebbesen (1997) and Murre & Dros (2015) show
forgetting follows a power law. FSRS (Ye, Su & Cao, 2022) validates
exponential decay only with a learned per-item half-life. Calibrate
against reopen logs if usage data accrues.
cache_lookup / keyword_index), andembeddings are not required at the current corpus scale. BM25 is the
workhorse up to ~5000 documents. Embeddings add value only for
vocabulary-mismatch discovery.
content_hash) then MinHash with k-shingling for near-duplicates
(Broder, 1997). SimHash is preferable only at tens of thousands of
documents.
w3 * usage. The plugin ships all three terms (graph_analyzer`
PageRank, decay_model, usage_tracker).
build_indexes.py --dry-run reports a non-zero entry count andleaves data/indexes/keyword-index.yaml byte-identical.
build_indexes.py against an empty corpus reports `"wrote":false` and leaves an existing populated index untouched.
index report runs and prints the inert ratio and orphan countfor the live index.
index promote (no flag) prints proposals and writes nothing(the index file is byte-identical afterward).
index promote --apply creates a timestamped backup underdata/backups/ before persisting, and a re-run proposes nothing.
context_injection: true, a SessionStart event surfaces thetop promoted captures, and with the flag off it stays silent.
are handled without raising: report degrades, promote holds, hook
exits silently.
check_capture_index_drained.py exits 0 against the committedindex and exits 1 naming the keys when one is left pending.
update_index appears in git diff --cachedwithout anyone staging it by hand.
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.
Efficient database search tool for bioRxiv preprint server. Use this skill when searching for life sciences preprints by keywords, authors, date ranges, or categories, retrieving paper metadata, downloading PDFs, or conducting literature reviews.
Query and analyze scholarly literature using the OpenAlex database. This skill should be used when searching for academic papers, analyzing research trends, finding works by authors or institutions, tracking citations, discovering open access publications, or conducting bibliometric analysis across 240M+ scholarly works. Use for literature searches, research output analysis, citation analysis, and academic database queries.
Access USPTO APIs for patent/trademark searches, examination history (PEDS), assignments, citations, office actions, TSDR, for IP analysis and prior art searches.
Multiagent AI system for scientific research assistance that automates research workflows from data analysis to publication. This skill should be used when generating research ideas from datasets, developing research methodologies, executing computational experiments, performing literature searches, or generating publication-ready papers in LaTeX format. Supports end-to-end research pipelines with customizable agent orchestration.
Automated LLM-driven hypothesis generation and testing on tabular datasets. Use when you want to systematically explore hypotheses about patterns in empirical data (e.g., deception detection, content analysis). Combines literature insights with data-driven hypothesis testing. For manual hypothesis formulation use hypothesis-generation; for creative ideation use scientific-brainstorming.
Take athola/palace-index-curator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.