From ideas-funnel
Processes unprocessed items in Raw/ and Raw/Inbox/<domain>/ — breaks each into Source, Concept, and Entity pages; updates index.md, log.md, and .manifest.json; emits wiki/concept-density-threshold signal when a concept crosses the ≥3-unrelated-sources bar. Extends the existing vault ingest skill with multi-domain dispatch and the v2 frontmatter schema (timeline, confidence, decay_class, state, provenance). Trigger phrases: "ingest", "process raw items", "process inbox", "/ideas-funnel:ingest".
How this skill is triggered — by the user, by Claude, or both
Slash command
/ideas-funnel:ingestThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Used by:** `ideas-funnel:ingest` agent (spawned by orchestrator on `batch_complete` or `manual-ingest` signals) + human for manual runs.
Used by: ideas-funnel:ingest agent (spawned by orchestrator on batch_complete or manual-ingest signals) + human for manual runs.
Process unprocessed items in Raw/ and Raw/Inbox/<domain>/ into the wiki.
Read these before starting:
~/Vaults/Neurons/wiki-schema.md — page types, frontmatter conventions, cross-reference rules, v2 extension.~/Vaults/Neurons/CRITICAL_FACTS.md — operator identity.~/Vaults/Neurons/index.md — what Concepts and Entities already exist. Always prefer updating existing pages over creating new ones.~/Vaults/Neurons/_meta/taxonomy.md — controlled tag vocabulary.If invoked via the orchestrator, a specific --domain <slug> is passed. Work only in that domain's inbox.
If invoked manually with no domain, scan all domains plus root Raw/ daily notes.
VAULT=~/Vaults/Neurons
CONFIG=~/.config/ideas-funnel/domains
# Active domains (YAML files with active: true — or active field missing, default true)
ACTIVE_DOMAINS=$(for f in "$CONFIG"/*.yaml; do
grep -q '^active: false' "$f" 2>/dev/null || basename "$f" .yaml
done)
For each domain in scope, list Raw/Inbox/<domain>/*.md. Also list Raw/*.md (daily notes, domain-less).
An item is unprocessed if:
Raw/.manifest.json as an ingested entry, ORstatus: ingested.Skip empty files. Skip README.md placeholders.
Daily notes (named YYYY-MM-DD.md at the root of Raw/) may contain multiple items — process each separately. Raw/Inbox/<domain>/*.md items are single-source per file.
For each distinct article, link, or idea:
For items that are primarily a URL with little commentary:
obsidian:defuddle for articles).Parallelism: when an item contains multiple URLs, fetch them in parallel in one message.
Unreachable URL → note [unreachable] in the Source page and continue.
Path: Sources/<date>-<slug>.md
---
type: source
title: "Title"
summary: "2-sentence what-and-why"
date: YYYY-MM-DD
origin: {URL or "daily-note" or "ideas-funnel"}
domain: [<slug>] # domain this source belongs to; inferred from Raw/Inbox/<domain>/
tags: [from _meta/taxonomy.md]
status: ingested # legacy field, preserved for compatibility
provenance:
origin: extracted
source_ids: [<raw-file-path>]
created_at: YYYY-MM-DD
created_by: ingest@<domain>
timeline:
- event_at: YYYY-MM-DD
learned_at: YYYY-MM-DD
claim: "original capture"
agent: ingest@<domain>
timeline_truncated: false
confidence: 1.0
confirmation_count: 0
decay_class: <from domain config>
last_confirmed: YYYY-MM-DD
last_touched: YYYY-MM-DD
state: fresh
hardened: false
backlink_density: 0
---
# Title
2–5 sentence summary of what this source says and why it matters.
## Key Points
- Bullet points of the essential information.
## Connections
- [[Concepts/ConceptName]] — one line on how this source relates.
- [[Entities/EntityName]] — one line on relevance.
## Original Source
{URL or "Clipped from daily note {date}"}
Domains/<Label>/ (NOT shared Concepts/)v2 rule: the ingest agent NEVER writes to vault-shared Concepts/ or Entities/. If a concept is domain-specific, write to Domains/<Label>/<Name>.md. The Refinery promotes it to Concepts/ when it crosses the ≥3-unrelated-sources threshold.
For each concept identified:
Concepts/<Name>.md — if it exists (from the pre-v2 corpus or Refinery-promoted), link to it from the Source page; do not modify it.Domains/<Label>/<Name>.md — if it exists, update it.Domains/<Label>/<Name>.md.Frontmatter: use the full v2 schema. Set type: concept, domain: [<slug>], provenance.origin: extracted (if lifted directly) or ai-generated (if synthesized across sources).
Write to Domains/<Label>/Entities/<Name>.md for domain-specific entities. Vault-shared Entities/ is Refinery-write-only.
If the item describes something Chris could test, create Next-Experiments/<date>-<slug>.md following the existing format. This file type exists in the vault already.
After writing all pages for the batch, count for each concept:
If ≥3 unrelated sources reference a concept, emit the signal (to the orchestrator) via a single stdout line:
wiki/concept-density-threshold <concept-name> <sources_count>
The orchestrator will spawn the Refinery. Do not write to Concepts/ yourself.
Append entries for every new page:
## Sources- [[Path/Page|Display]] — one-line summaryAppend one line per batch:
## [YYYY-MM-DD] ingest | domain: <slug> | sources: N | concepts: X new, Y updated | entities: Z new, W updated
For each processed file, add an entry:
{
"entries": {
"Raw/Inbox/ai-workflows/2026-04-14-article.md": {
"hash": "sha256:...",
"ingested_at": "2026-04-14T17:00:00Z",
"wiki_pages": ["Sources/2026-04-14-slug.md", "Domains/AI-Workflows/Concept-Name.md"],
"domain": "ai-workflows"
}
}
}
Use shasum -a 256 <file> for the hash. Atomic update: write to a .manifest.json.tmp, then mv.
mkdir -p "$VAULT/Archive/Raw/<domain>"
mv -f "$RAW_FILE" "$VAULT/Archive/Raw/<domain>/"
For daily notes with multiple items, archive only after ALL items are processed.
ingest: domain=<slug> processed N items
Created: X sources, Y concepts (domain-scoped), Z entities (domain-scoped)
Updated: A concepts, B entities
Signals emitted: K concept-density-threshold
Domains/AI-Workflows/MCP.md (concept), Domains/AI-Workflows/Entities/Anthropic.md (entity), and creates ONE Source page — not one monolith._meta/taxonomy.md before inventing new ones.Concepts/ or Entities/ or Bridges/ or Conflicts/. Those are Refinery-only.npx claudepluginhub cosmicdreams/claude-plugins --plugin ideas-funnelFetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.