wiki-query
PApaperclipai/paperclip101k近 7 天新增 2,948 个 star
Turn a raw research idea into a compelling, well-grounded research STORY (an 8-field structured proposal) ready to feed the ts-paper pipeline. Claude does almost everything natively — idea packaging, recall reasoning over a knowledge graph, agentic external literature search (WebSearch/WebFetch), story generation, and a critique→refine→fusion loop; tiny scripts do only embeddings/recall math and the schema gate. Emits story.json + story_proposal.md + retrieved_papers.json (a citation seed the cite stage reuses, so paper-writing searches less). Use when the user has an idea (not yet a full proposal) and wants a paper-ready story.
Distilled from the product's idea→story link. The idea is the PROTAGONIST; a recalled/searched
pattern is the TOOL it wields. Claude is the packager, the recaller, the searcher, the storyteller,
and the critic — all in one context (so coherence and anti-stacking come for free). Two scripts are
irreducible: kg_recall.py (vector/graph retrieval) and story_lint.py (the gate); embeddings
(optional) reuse ../ts-kg-build/scripts/embed.py's TS_EMBED_* config.
In: a raw idea (text); optional kg/ dir (from ts-kg-build, or the bundled kg_ts); optional
TS_EMBED_* endpoint; a retrieval_focus dial in {trust_kg, balanced, go_search_web}.
Out (in the workdir):
story.json — the 8 fields: title, abstract, problem_framing, gap_pattern, solution, method_skeleton, innovation_claims[], experiments_plan.story_proposal.md — the Markdown projection of the 8 fields (this is what ts-paper-plan reads —
a story IS a structured proposal; story2paper == proposal2paper).retrieved_papers.json — the real papers found, the citation seed for ts-paper-cite (§ Reuse).logs/*.io.md, optional novelty_report.json.Write idea_brief.json: motivation, problem, assumptions_explicit[], assumptions_inferred[], constraints, retrieval_query. Faithfulness guard: keep assumptions you inferred separate from
what the user stated — never fabricate user intent. The retrieval_query is an English,
search-friendly reformulation. Never raise on a thin idea; normalize and proceed.
If a kg/ exists: python3 scripts/kg_recall.py --idea "<retrieval_query>" --kg <kg_dir> --out recall.json --topk 8.
It returns Top-K candidate patterns (semantic+graph if embeddings configured, else lexical-only,
labeled — treat lexical hits as weaker). Then YOU reason over them comparatively in one pass,
scoring each on three independent axes (no per-pattern round-trips needed):
Plan intent-tagged query packs (with forced minimums) and run them via native search:
core_method, task_setting, contrast (what you depart from — don't skip this), evaluation
(datasets/metrics/baselines). Force-keep the literal user idea as one query. For each kept paper,
read the abstract and extract a story-first pattern (as in ts-kg-build). Record every real paper
into retrieved_papers.json (schema in § Reuse) — this is the citation seed. Never fabricate a
paper or an abstract.
Pick the pattern that best fits the idea as a stable skeleton (prefer a near-domain, coherent KG pattern for the first draft); hold novelty/far-domain patterns in reserve for the refine loop.
Idea = protagonist, pattern = tool. Produce the 8 fields. The non-negotiable craft:
gap_pattern/solution must say "reframe X from Y to Z" —
recast the problem, don't staple two methods together. Banned verbs: combine, integrate, merge,
stack, plug in. Required verbs: reframe, recast, transform, unify, exploit. Include a one-line
rationale why_not_straightforward_combination inside solution.solution is the narrative (what changes and why it works);
method_skeleton is the concrete step list (≥ a few real steps). Keep them distinct.experiments_plan and innovation_claims are forward-looking ("we evaluate… we
expect…") — no fabricated numbers / "beats SOTA by X%".When TS_EMBED_* is configured, run python3 scripts/novelty_check.py <workdir>: it embeds the story
text (reusing the embed_one() pattern), cosine-compares it against an available reference set (the
retrieved_papers.json abstracts embedded on the fly, else the pattern index kg/pattern_emb.npy),
and writes novelty_report.json {max_similarity, risk_level, threshold_high, threshold_medium, top_similar, verdict, basis}. Act on the bands: ≥0.88 high → pivot to a more differentiating
reserved pattern and re-tell; ≥0.82 medium → warn; cap pivots at 2.
Graceful degrade: with no embedding endpoint the script exits 0 with a "lexical/judgement only —
not a semantic guarantee" note; in that case do the lexical/judgement check against the recalled
exemplars + retrieved_papers.json yourself. Either way novelty_report.json must exist (top similar
works + verdict + basis) so the check is never silently skipped.
Write story.json, render story_proposal.md (the 8 fields as a proposal: Problem / Gap / Proposed
method / Evaluation plan / Contributions), and finalize retrieved_papers.json. Then:
python3 scripts/story_lint.py <workdir> — must be ok:true (8 fields non-empty, no schema-echo
noise, method_skeleton concrete, no fabricated numbers). Soft requirement: confirm
novelty_report.json exists (from step 7, semantic or degraded) so the novelty check was not silently
skipped. Hand story_proposal.md to ts-paper-plan.
retrieved_papers.json (cuts the cite stage's search)Write the real papers found in steps 2–3 here; ts-paper-cite ingests it as a verified seed.
{"source":"ts-idea2story", "papers":[
{"paper_id":"openalex:W..","title":"..","authors":[".."],"year":2024,"venue":"..",
"volume":"","issue":"","pages":"","doi":"10..","url":"https://..","abstract":"(real)",
"abstract_source":"openalex|arxiv|openreview|missing",
"relevance":"core|context|baseline|dataset_metric|contrast",
"supports_claim":"the exact story claim this paper backs"}]}
Rules: dedup by paper_id / normalized title; on merge keep the longest non-empty abstract/title;
never fabricate an abstract (abstract_source:"missing"); pool = the exemplar/agentic papers the
story was derived from + the novelty candidates. The cite stage still verifies each via doi2bib,
places it by abstract, gap-fills missing angles, and enforces its coverage floor — the seed just
removes the cold-start sweep.
This is a proposal — no real results anywhere. Keep explicit-vs-inferred assumptions honest. Write
logs/idea2story.io.md — INPUT (idea, retrieval_focus, kg on/off, embeddings on/off), DECISIONS
(packaged brief, recalled patterns + 3-axis scores, search packs + kept/rejected, seed pattern, each
critique round: weakest axis → pattern pulled → fuse result, novelty verdict), OUTPUT (story.json
summary, story_lint result, retrieved_papers count).
PApaperclipai/paperclip101k近 7 天新增 2,948 个 star
NEnexu-io/open-design101k近 7 天新增 1,126 个 star
BYbytedance/deer-flow84k近 7 天新增 368 个 star
BYbytedance/deer-flow84k近 7 天新增 368 个 star
COcoreyhaines31/marketingskills54k近 7 天新增 958 个 star
IMImbad0202/academic-research-skills52k近 7 天新增 972 个 star