idea-generation
Skill20 starsChanged 22 days agoMITView on GitHub
Generate derived (non-seed) idea nodes for an idea campaign from research-progress evidence deltas — enabled operators: LiteratureMining over a deep literature survey's tensions and re-anchored gaps, FailureRouting when a failed-approach ledger exists, and Mutation for parent-bearing follow-on ideas (one parent, trigger-artifact anchor, inference-typed delta) — and import them through the engine's node.import_generated RPC as an auditable generation pack. Retrieval-first by construction (no retrieval receipt, no evidence URI), one candidate per structurally distinct anchor, mechanical dedup against every campaign node, novelty stated as a falsifiable closest-prior delta claim (never an LLM novelty score), zero generator-side scoring: nodes are born with posterior null and face the same idea-posterior admission gate as seeds. Use when a new or updated literature survey lands, when failed-approach entries accumulate, or when the operator deliberately runs a manual generation burst on a campaign.
10 other projects use a version of this.
Adopted by
Most recently taken up by
- openai/pluginstheir own version, first seen Oct 13, 2026
- willlee1995/skillstheir own version, first seen Oct 13, 2026
- edu6565/claude-skillstheir own version, first seen Oct 11, 2026
- tsingyuai/scientifytheir own version, first seen Oct 8, 2026
- anthropics/financial-services-pluginstheir own version, first seen Oct 8, 2026
- crfldrxyz/AuthorOps-Skillstheir own version, first seen Sep 1, 2026
Used with
Projects with it also use atomic-decomposition, cim-builder and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
lingzhi227Skillatomic-decomposition
Decompose research ideas into atomic, self-contained concepts with bidirectional math-code mapping. For each concept, extract the math formula from papers and find code implementations. Use for complex system papers requiring formal grounding.
Also in 3 projects that use this
AnthropicSkillcim-builder
Structure and draft a Confidential Information Memorandum for sell-side M&A processes. Organizes company information into a professional, investor-ready document with consistent formatting and narrative flow. Use when preparing sell-side materials, drafting a CIM, or organizing company data for a sale process. Triggers on "CIM", "confidential information memorandum", "offering memorandum", "info memo", "draft CIM", or "sell-side materials".
Also in 3 projects that use this
lingzhi227Skillmath-reasoning
Formal mathematical reasoning for research papers — derive equations, write proofs, formalize problem settings, select statistical tests, and generate LaTeX math notation. Use when the user needs mathematical derivations, theorem proofs, notation tables, or statistical analysis formalization.
Also in 3 projects that use this
AnthropicSkillmorning-note
Draft concise morning meeting notes summarizing overnight developments, trade ideas, and key events for coverage stocks. Designed for the 7am morning meeting format — tight, opinionated, actionable. Triggers on "morning note", "morning meeting", "what happened overnight", "trade idea", "morning call prep", or "daily note".
Also in 3 projects that use this
- +4 more from anthropics
- +4 more from lingzhi227
Other versions10 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 10
- anthropics/financial-services★ 41ksame name
- anthropics/financial-services-plugins★ 41ksame name
- openai/plugins★ 7.8ksame name
- tsingyuai/scientify★ 2.2ksame name
- lingzhi227/agent-research-skills★ 350same name
- voidful/academic-skills★ 126same name
- dongzhigang13305312738-art/paper-skills★ 1same name
- willlee1995/skills★ 1same name
- crfldrxyz/AuthorOps-Skills★ 0same name
- edu6565/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository34 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- citation-triangulationSkill
- claim-groundingSkill
- claude-cli-runnerSkill
- codex-cli-runnerSkill
- deep-literature-reviewSkill
- derivation-verifySkill
- dsh-cli-runnerSkill
- figure-hygieneSkill
- gemini-cli-runnerSkill
- hep-calcSkill
- hep-mcp-usageSkill
- idea-allocationSkill
- idea-pairwise-matchSkill
- idea-posteriorSkill
- julia-packageSkill
- julia-perfSkill
- kimi-cli-runnerSkill
- literature-graph-builderSkill
- literature-to-packageSkill
- markdown-hygieneSkill
- numerical-reliability-gateSkill
- opencode-cli-runnerSkill
- paper-reviserSkill
- pdg-lookupSkill
- physics-diagramsSkill
- referee-reviewSkill
- research-harnessSkill
- research-integritySkill
- research-teamSkill
- research-writerSkill
- review-swarmSkill
- zotero-importSkill
The file
We split this skill into the rules it gives an agent
2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 45
Every pack names the evidence delta that justified it (trigger.kind + artifact_ref).
- Very specific: line 183
Every candidate carries novelty_delta: the closest prior work found BY RETRIEVAL (closest_prior — URI or survey ref_key), an …
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Idea Generation (evidence-born, pack-imported)
Generate candidate idea nodes FROM recorded evidence and import them into a
campaign as one auditable burst. This skill owns the Explain stage only: it
authors rationale drafts, card fields, anchors, receipts, dedup records, and
novelty-delta claims, assembles them into a generation_pack_v1, and submits
the pack to the engine. The engine owns the Formalize stage (deterministic
idea-card assembly + the formalization trace) and every store write.
Scope and boundaries
- No scoring, ever. Scoring authority is the belief layer (
idea-posterioradmission gate → argument graph →node.set_posterior). Generated nodes are born withposterior: nullandgrounding_audit: null; this skill never writes either, never ranks its own output, and never emits an LLM novelty score anywhere (LLM judgments of idea novelty run at or below chance and are non-diagnostic; novelty is handled as an auditable claim instead, below). A generated idea is not allocation-ready, no matter how promising the rationale looks. It cannot enter portfolio scoring untilidea-posteriorhas consumed a close-priorliterature_survey_v1(or equivalent artifact), a close-prior matrix, and claim-grounded proposition-level anchors. - Retrieval-first grounding. An evidence URI may enter a candidate ONLY
from a retrieval the generator actually performed or an artifact it actually
read, recorded as a receipt (
trace_inputs.retrieval_receipts:{uri, source}). No receipt, no URI — the engine refuses. Model memory is never a source; the seed placeholder URI is banned outright. - Opt-in, event-driven, no daemon. A burst runs when the operating agent or the maintainer invokes it on a named trigger (below) — never on a timer, never auto-invoked, no MCP surface.
- Domain-agnostic. Anchors, prompts, and examples carry no field-specific nouns; domain content arrives only through the evidence artifacts of the external research project.
- The engine RPC (
node.import_generated, contractgeneration_pack_v1.schema.jsonin the idea-engine contracts directory) is the sole import path and the enforcement authority; this skill's client-side checks only fail fast.
Triggers — when a burst is justified
Every pack names the evidence delta that justified it (trigger.kind +
artifact_ref). One burst per delta; no new delta, no new burst. More
sampling on unchanged inputs yields duplicates, not ideas (duplicate-collapse
evidence is unambiguous), so a burst is bounded (default ≤ 8 candidates,
≤ 2 candidates per anchor) and runs at most one revision round on its
evidence snapshot.
| kind | delta | V0 status |
survey_updated | a new or updated literature_survey_v1 (new tensions/gaps) | enabled |
failure_recorded | new failed_approach_v1 ledger entries | enabled |
manual | maintainer-initiated burst (state the reason in the pack) | enabled |
computation_gated | a gate-passed trial/reconnaissance computation | reserved |
match_concluded | a pairwise tournament outcome | reserved (until the tournament seam is exercised on a real campaign) |
activation_satisfied | a waiting idea's condition became true | reserved |
milestone_reached | a research-team milestone artifact | reserved |
posterior_moved | a significant posterior change on an existing node | reserved |
Reserved kinds are schema-legal vocabulary the engine rejects at import
(trigger_not_enabled) — recorded now so enabling one later is a policy
change, not a redesign.
The V0 operator family: LiteratureMining
One candidate per structurally distinct anchor in the survey — this is where diversity comes from (input-side construction), not from sampling temperature and not from model ensembles.
Tension anchors (preferred). Each entry of the survey's
synthesis.tensions[] carries a statement plus integrity-checked ref_keys.
A tension-born candidate records trace_inputs.anchor = {kind: "tension",
statement, ref_keys} and cites the tension's underlying sources (via the
survey's papers and notes) with receipts. Such a candidate arrives at the
admission gate pre-anchored for its strongest route (resolving an anchored
open tension).
Gap anchors (re-anchoring required). synthesis.gaps[] entries are bare
strings with no references. A gap-born candidate must first RESOLVE the gap
to at least one real reference (a retrieval that establishes the gap's
subject matter and its openness), recorded as anchor = {kind: "gap",
statement, resolved_refs} with a receipt per ref. No resolved references, no
gap idea — the engine refuses (gap_unanchored).
Prompt contract (what a LiteratureMining candidate MUST contain; the import validator enforces the checkable parts):
- Required outputs: a faithful
rationale_draft— title, the idea stated plainly (no pre-narrowing; admission and decomposition belong to the evaluation skills), realrisks[], realkill_criteria[],mechanismwhere the idea proposes one (anyreferences[]you list are evidence URIs and need receipts like everything else);card_fieldswhose FIRSTminimal_compute_planstep is a bounded, decisive check; claims typed under the card evidence discipline (evidence-typed claims carry receipted URIs; the idea's NEW part — the resolution mechanism, the delta — is exactly its unanchored part and must be typedllm_inferenceorassumptionWITH averification_plan); and honestprovenance:originrecords the REAL generator model id, the real sampling temperature, a sha256 over the real rendered prompt (prompt_hash), the generation timestamp, and roleGenerator— never backend labels or invented values. Save the full rendered prompt to a file and pass it as--prompt-snapshotat pack build time — this is MANDATORY: the engine refuses candidates without a snapshot-backedprompt_snapshot_hash, andorigin.prompt_hashmust equal it (both hash the same rendered prompt). The snapshot is archived inside the pack, which is what makes "a third party can reconstruct exactly what the generator saw" checkable. The engine restates yournovelty_delta.falsifiable_delta_statementas anllm_inferenceclaim on the card automatically (deterministic Formalize), and copiesnovelty_delta, the dedup record, andtarget_admission_routeonto the node's trace — do not put them intrace_inputsyourself (those keys are engine-owned). - Card enum vocabularies (use these EXACT words the first time — the engine
rejects anything else, and guessing enum spellings across submit rounds is
pure waste; mirrored in
build_pack.py, drift-locked against the engine schema at test time):minimal_compute_plan[].estimated_difficulty∈ straightforward | moderate | challenging | research_frontier;minimal_compute_plan[].estimate_confidence∈ high | medium | low;minimal_compute_plan[].required_infrastructure∈ laptop | workstation | cluster | not_yet_feasible;claims[].support_type∈ literature | data | calculation | llm_inference | assumption | expert_consensus;claims[].verification_status∈ verified | unverified | falsified. - Mandatory validations (before the pack is built): every URI has a receipt;
the anchor is real (read the survey entry, do not paraphrase one into
existence); a freshness retrieval checked whether literature AFTER the
survey snapshot already resolved the tension/gap (a hit demotes the
candidate to
rejected_candidateswith reason). - Common misjudgments (reject your own candidate when you see them): wording
disagreements dressed as tensions (a tension is an evidence-level
contradiction); "gap" claims that are actually just unread literature;
proposals whose only delta is a parameter tweak or rewording (declared
non-novel by construction —
delta_typevaluesparameter_tweakandrewordingare import-rejected); plans whose first step is unbounded.
FailureRouting (enabled when ledger data exists). Mines
failed_approach_v1 entries (prefer reuse_potential: high) or an archived
node's kill criteria, and proposes a route AROUND the recorded failure with a
positive thesis of its own. A parentless candidate records
trace_inputs.failed_approach_refs, each of which must ALSO be pinned in the
pack's evidence_snapshot.failed_approach_refs (the burst's declared ledger
reading — an invented free string is not a failure anchor; use
build_pack.py --failed-approach-refs). A candidate rerouting an existing
node records that node as its single parent, and the engine requires that
parent to be ARCHIVED — rerouting only makes sense around a node that died.
"Not the failed thing" is not a thesis — the candidate must state the new
mechanism/method and the first check that would falsify the workaround.
Mutation (enabled — the parent-bearing follow-on family). A follow-on
idea derived from ONE existing node records that node as its single parent
(parent_node_ids = [parent], with the parent's read-time revision in
evidence_snapshot.parent_revisions) — lineage lives in the trace, never
in prose. Use it for the follow-on burst that previously had to be forced
through a parentless LiteratureMining candidate: a review verdict, a
computation result, or an updated survey suggests refining, restricting,
inverting, or repairing an existing idea. The engine enforces: exactly one
parent; trace_inputs.trigger_artifact_ref, non-blank after trimming,
naming the artifact that motivated the mutation (with a retrieval receipt
when URI-shaped); trace_inputs.parent_delta_statement — at least 20
characters after trimming, stating WHAT changed relative to the parent, so
admission review audits the delta's content rather than just its
existence; and a card claim typed llm_inference or assumption whose
claim_text contains that statement (whitespace-collapsed) — the delta
IS the typed claim; an unrelated inference claim elsewhere on the card
does not satisfy the discipline, and a mutation born fully
literature-supported is either not a mutation or mislabeling its inference.
novelty_delta.closest_prior keeps its literature/artifact meaning: the
parent is named by parent_node_ids, never by closest_prior.
Still later-phase (Recombination, AnalogyTransfer): contract-ready
(arity table in the engine) but deliberately gated — and the ENGINE enforces
that, exactly as it does for reserved trigger kinds: importing them today is
refused with operator_family_not_enabled until each family's evidence
discipline (bridge claims; per-edge source verification) lands in the import
validator. Prose is not a gate. LiteratureMining packs must also pin the
mined survey in evidence_snapshot (survey_artifact_ref +
survey_content_hash; build_pack.py --survey-artifact-ref/--survey-file
does this).
Novelty as an auditable claim (never a score)
Every candidate carries novelty_delta: the closest prior work found BY
RETRIEVAL (closest_prior — URI or survey ref_key), an overlap_summary, a
delta_type, and a falsifiable_delta_statement (what is different and what
observation would kill that difference). Parametric-memory novelty checks and
LLM novelty scores are forbidden — mechanical retrieval + the admission
reviewers audit novelty the way they audit any other claim. Restate the delta
inside the card as an llm_inference claim so claim-grounding and the gate
see it.
Procedure
- Name the trigger. Identify the evidence delta and its artifact. No delta, no burst.
- Enumerate anchors. From the survey: unresolved tensions first, then gaps you can re-anchor. From the ledger: high-reuse failures. Respect the per-anchor quota (≤ 2) and the burst bound (≤ 8).
- Author candidates per the prompt contract, collecting a receipt for every retrieval as you go. Run the freshness check per candidate.
Dedup mechanically against the campaign store:
python3 skills/idea-generation/scripts/dedup_check.py \ --nodes <store_root>/campaigns/<campaign_id>/nodes_latest.json \ --candidates candidates.json --out dedup_report.jsonHashed character-3-gram cosine (with an exact normalized-text short-circuit) against every node (every lifecycle state, archived included) AND against the burst's own earlier candidates — same-anchor twins are the most likely duplicates and a store-only comparison cannot see them: ≥ 0.95 auto-drop, ≥ 0.80 flagged. Flagged candidates import only with an explicit human
--override INDEX=REASON; the mechanical record (method, nearest neighbor — a store node id or an intra-burst candidate index — similarity) travels in the pack either way. The engine additionally refuses exact intra-pack twins and self-contradictory records (decision=unique at ≥ 0.95). This is a near-duplicate filter, not a novelty proof.Build the pack (folds dedup in, moves drops/unoverridden flags to
rejected_candidateswith reasons, validates fail-fast):python3 skills/idea-generation/scripts/build_pack.py \ --campaign-id <campaign_id> --candidates candidates.json \ --dedup-report dedup_report.json \ --trigger-kind survey_updated --trigger-artifact-ref <survey_ref> \ --survey-artifact-ref <survey_ref> --survey-file <survey_file> \ --prompt-snapshot rendered_prompt.txt \ --out pack.jsonThe pack records what was dropped and why — a burst cannot silently discard work.
Submit through the engine bridge (idempotent; safe to retry):
python3 skills/idea-generation/scripts/submit_pack.py \ --pack pack.json --campaign-id <campaign_id> \ --store-root <store_root> --project-root <project_root> \ --idea-rpc <repo>/packages/idea-engine/bin/idea-rpc.mjsThe engine validates everything again (it is the authority), mints ids, assembles cards, archives the pack as a campaign artifact, records the generation provenance as a single
project://...#sha256:<pack_hash>pack reference, and enforces the campaign'smax_nodesbudget batch-atomically. The--project-rootflag is optional when the store root is the project'sidea-store/, but pass it explicitly in standalone test projects. Retrying an older import through this script also refreshes legacyfile://pack refs after validating the archived pack and its recorded hash.- Hand off to evaluation. Imported nodes enter
idea-posterior's admission gate like any seed (theirtarget_admission_routeis a triage hint, not authority). Before posterior construction, the evaluator must have a close-prior literature artifact with snowball discovery, source-first core-paper reading, citation-identity triangulation, source-fidelity audit of deep-read summaries, and claim-grounded proposition anchors. Nodes that fail admission are archived with their gate record — and become FailureRouting inputs later. Allocation's reconnaissance slots are where an admitted node's bounded first check gets scheduled.
Interfaces to the sibling machinery
deep-literature-reviewproduces theliterature_survey_v1this skill mines; run it first when the survey is thin.claim-groundingverifies the candidate claims downstream — generation receipts make its job checkable, not redundant.idea-posterior/idea-pairwise-match/idea-allocationare unchanged consumers: belief, relative merit, and investment stay theirs.- The engine contract documents every import-rejection reason
(
node.import_generatedin the OpenRPC file); this skill'sbuild_pack.pymirrors those checks only to fail fast locally.
Tests
python3 -m pytest skills/idea-generation/tests/Covers dedup determinism and thresholds, pack assembly (drops, flags, overrides, rejected-candidate folding), each fail-fast validation rule, the pinned submit request shape against a mock engine bridge, and anti-drift locks that read the ENGINE contract at test time (trigger vocabulary, delta types, admission routes, the id pattern, the placeholder URI) so a contract change cannot silently diverge from this skill's mirrors.
Honest limits
- The dedup vector is a mechanical character-n-gram filter: strong on
near-verbatim and light paraphrase, weak on deep semantic duplicates —
recorded as
methodin every record so a better embedding backend can supersede it visibly. It is a filter, never evidence of novelty. - The freshness check and anchor reading are agent judgment guided by this discipline; the engine can verify receipts exist, not that the reading was careful. Admission review audits the anchors themselves.
- A burst on a fixed snapshot saturates fast; the bound (≤ 8, ≤ 2 per anchor, one revision round) is deliberately small. Generation earns more rounds by the research producing new evidence, not by re-sampling.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

