From academic-hotspot
Generate or display this week's academic hotspot report. Use when the user asks for hotspots, trends, or the weekly report.
How this skill is triggered — by the user, by Claude, or both
Slash command
/academic-hotspot:hotspot-weeklyThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run: `hotspot weekly --json`
Run: hotspot weekly --json
Parse the JSON output. Check phases_run:
phases_run contains "render", the report for this week already exists — display the contents of file_path and stop.phases_run contains "narrate-prepare" but NOT "narrate-finalize":
snapshot_id = value from JSONreport_id = value from JSONDo NOT rely on file_path being non-null to detect completion — file_path is null until the render phase runs.
Run: hotspot narrate-prepare --snapshot {snapshot_id} --report-id {report_id} --json
Both --snapshot and --report-id are required (no defaults exist).
Parse the JSON output:
request_path = the path to narration_request.jsonresponse_path = {parent directory of request_path}/narration_response.jsonRead the file at request_path.
It contains:
{
"snapshot_id": N,
"hotspots": [
{
"cluster_id": C,
"domain": "ai",
"allowed_paper_ids": [1, 2, 3, ...],
"context_block": {
"top_papers": [...]
}
}
]
}
For each hotspot in the list, write a HotspotNarrative JSON object with these exact fields:
summary: 2-3 sentence overview of what this research cluster is about and why it matterswhy_hot: list of {"text": "...[paper_id=N]...", "paper_ids": [N]} objects — each claim grounded in specific papers using [paper_id=N] syntaxrepresentative_papers: list of paper_ids that best represent the hotspotpotential_disagreements: null, or a list of {"text": "...[paper_id=N]...", "paper_ids": [N]} objects showing competing viewpointsCRITICAL: cite ONLY paper_ids from that hotspot's allowed_paper_ids list. Use [paper_id=N] syntax for every claim. Do not invent or hallucinate paper_ids.
Write the complete response as JSON to response_path:
{
"snapshot_id": N,
"narratives": [
{
"cluster_id": C,
"narrative": {
"summary": "...",
"why_hot": [{"text": "...[paper_id=1]...", "paper_ids": [1]}],
"representative_papers": [1, 2],
"potential_disagreements": null
}
}
]
}
Round 1:
Run: hotspot narrate-finalize --request {request_path} --response {response_path} --snapshot {snapshot_id} --report-id {report_id} --json
Parse the JSON output:
needs_correction: false → proceed to Step 5.needs_correction: true:
correction_path (present in the JSON when needs_correction is true).allowed_paper_ids from the original request.response_path with the corrected narratives for the flagged clusters (preserve passing narratives unchanged).Note: needs_correction: true exits with code 0 — this is an expected state, not a crash.
Round 2 (MUST use --is-retry):
Run: hotspot narrate-finalize --request {request_path} --response {response_path} --snapshot {snapshot_id} --report-id {report_id} --json --is-retry
needs_correction: false → proceed to Step 5.needs_correction: true after round 2 → state plainly to the user that a placeholder narrative was used for the affected hotspot(s) due to persistent grounding failures, then proceed to Step 5.Hard cap: N=2 rounds maximum. Never loop further. Never hang. Never silently trust a bad narrative.
Run: hotspot weekly --resume --snapshot-existing {snapshot_id} --json
Parse the JSON output and display the full report from file_path. The report is also saved to reports/YYYY-WW.md.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.
npx claudepluginhub yss-off/academic-hotspot --plugin academic-hotspot