interseed
What it does: A Python/SQLite “idea garden” with a CLI (interseed.main: plant/enrich/refine/list/delete/annotate/graduate/status) and a minimal 3-tool FastMCP server (interseed_status, interseed_list_ideas, interseed_plant). Lifecycle: plant captures raw text instantly with no LLM (source cli|auraken|manual); enrich shells out to the claude CLI (stdin, no shell) to extract thesis/keywords/open_questions; refine gathers context (bd search on keywords + substring-match over docs/brainstorms/*.md + refinement history + human annotations), calls Claude, updates a 0-1 confidence that maps to maturity (seed<0.3<sprouting<0.5<growing<0.7<mature), idempotent via a SHA256 context-hash; graduate gates on confidence>=0.7 plus a graduation_approval annotation, runs bd create, and writes a stage:discover brainstorm md. Solid hygiene: WAL+EXCLUSIVE init, advisory locking via locked_at, PENDING sentinel for crash-safe graduation, create_subprocess_exec everywhere.
Rationale: The engineering is clean and the role is genuinely unique in the roster (the only capture->mature->graduate idea-incubation pipeline), but the plugin is pre-frontier alpha (v0.1.0, marked Alpha) and lags the ecosystem’s own capabilities. (1) All matching is keyword substring / bd-search text — no embeddings or semantic retrieval — even though intersearch ships shared embedding infra and interknow/qmd exist; the SOTA RAG-MCP / agentic-RAG and embedding-gating findings make semantic recall table stakes for relevance, and the config advertises signals.interject_db_path that NO code reads (dead config; the AGENTS.md “interject integration” claim is aspirational). (2) Confidence/maturity is driven entirely by free-form LLM self-judgment with no grounded verifier — exactly the unstructured-NL-critique pattern the From-Code-to-Courtroom / ReVeal findings show is weak and prone to self-preference bias. (3) enrich and refine hand-roll markdown-fence stripping + json.loads with silent failure, where the grammar-constrained/structured-generation frontier (Pre3, draft-conditioned decoding) and Claude’s native structured output give guaranteed-parseable results. (4) Documented “scheduled re-examination” has no scheduler (no cron/hook/timer) — async memory consolidation is the documented write/select/compress discipline. (5) doc/code drift: AGENTS.md claims refine/graduate are MCP tools and an interject integration exists; neither is true (CLAUDE.md correctly says 3 MCP tools). Worth fixing because the architecture is sound and the gap is mostly wiring to infra the ecosystem already has.
SOTA gap: Agentic/embedding-based semantic retrieval for matching ideas to project context (RAG-MCP / agentic-RAG, embedding-gating) plus grounded, tool-anchored confidence scoring instead of free-form LLM self-judgment (ReVeal / “From Code to Courtroom”: structured tool-grounded feedback beats NL critique). Secondary: structured/grammar-constrained generation for the enrich/refine JSON instead of fence-stripping, and async background consolidation (write/select/compress) for the “scheduled” refinement that currently has no scheduler.
Redundancy: No true duplication — interseed is the only idea-incubation/maturation pipeline. Light, complementary overlap: interject (ambient arXiv/HN discovery) is a natural upstream seed source and is even configured but unwired; interknow/intermem/qmd are durable-knowledge recall stores, not refinement loops; intersearch is the embedding infra interseed should consume rather than reimplement keyword matching. Graduation already correctly delegates to bd (beads) rather than reinventing tracking.
Actions:
- Replace keyword substring matching in context.py with semantic retrieval via intersearch embedding_query (and/or qmd vec) over brainstorms + bd, with BM25 keyword as fallback; either wire the advertised interject signal source or delete the dead signals.interject_db_path config.
- Ground confidence: have refine.py request structured output (Claude native JSON/schema or grammar-constrained decoding) and derive confidence from explicit evidence-count/source-quality signals plus a distinct judge prompt, instead of trusting a single self-graded float — removes the brittle fence-stripping json.loads path.
- Add a real scheduler for the documented background refinement (cron/loop or a SessionStart hook calling refine_all) and source the refinement model from interrank routing instead of the hardcoded claude-sonnet-4-6 in default.yaml.
- Fix doc/code drift: correct AGENTS.md (refine/graduate are CLI-only, not MCP tools; interject integration is not implemented) and consider exposing refine/graduate/annotate as MCP tools so the lifecycle is usable in-session, not just via CLI.