From thinking-frameworks-skills
Ingests inbox files into corpus/seeds/ as normalized markdown seeds with full frontmatter. Handles normalization, topic tagging, scoring, deduplication, changelog, and ledger updates.
How this skill is triggered — by the user, by Claude, or both
Slash command
/thinking-frameworks-skills:ingest-inbox-itemThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- [Workflow](#workflow)
Related skills: Uses normalize-format, tag-by-topic, score-intuition-density, dedupe-against-corpus, update-topic-ledger. Called by the Librarian agent for each file in inbox/.
Copy this checklist and track progress per file:
Ingest one inbox file:
- [ ] Step 0: Compute sha256 of file body; check .librarian-state.json for duplicate fingerprint
- [ ] Step 1: Invoke normalize-format → body + partial frontmatter
- [ ] Step 2: Invoke tag-by-topic → topics + pending_tags
- [ ] Step 3: Invoke score-intuition-density → score + signals
- [ ] Step 4: Invoke dedupe-against-corpus → CREATE | LINK | SKIPPED
- [ ] Step 5: If LINK, backlink matched seeds' related_seeds field
- [ ] Step 6: Write seed file with full frontmatter; status=seed; manual_edits=false
- [ ] Step 7: Append one line to corpus/seeds/.changelog.md
- [ ] Step 8: Invoke update-topic-ledger for each topic tag
- [ ] Step 9: mv inbox file → inbox/.processed/
- [ ] Step 10: Update .librarian-state.json with the fingerprint
Step 0: Hash the body (not frontmatter). If the fingerprint is in .librarian-state.json, exit with SKIPPED (already ingested: <seed-id>). Idempotency is a feature.
Step 1: normalize-format handles all supported formats (plain markdown, .jsonl Claude Code sessions, .json Claude.ai exports, Readwise exports, transcripts with speaker labels, link captures). Returns one or more {body, partial_frontmatter} pairs — multi-chunk outputs possible for long transcripts.
Step 2: tag-by-topic proposes 1–4 tags from the controlled vocabulary. If none match, it logs to topic-ledger.md#pending-tags and still assigns the closest existing tag.
Step 3: score-intuition-density computes 0–10 from 8 explicit signals. Auditable.
Step 4: dedupe-against-corpus returns one of SKIPPED (exact fingerprint match — exit), LINK (near-match — proceed but write related_seeds), or CREATE (no match).
Step 6: Write the seed file. Location: corpus/seeds/{id}.md where id = YYYY-MM-DD-slugified-title. If a seed with that id already exists, append -v2 rather than overwrite.
Step 7: Changelog format: YYYY-MM-DDThh:mm | ADDED | {seed-id} | from {original_path} | density={N} | topics={comma-list}
---
id: 2026-04-23-dropout-as-ensemble-thinned-networks
title: "Dropout as ensemble over thinned networks"
created: 2026-04-21T09:14:00-07:00
source:
type: inbox-note
original_path: inbox/2026-04-21-dropout-as-ensemble.md
ingested_at: 2026-04-23T14:32:01-07:00
fingerprint: sha256:7c1d...
topics: [regularization, ensembling, dropout]
intuition_density:
score: 8
signals: [analogy_present, concrete_worked_example, counterfactual_offered, reframe_against_default, biology_to_ai]
status: seed
provenance:
author: kushal
confidence: owned
links:
related_seeds: [2026-03-11-l2-as-gaussian-prior]
parent_source: null
section_affinity: [agent-workshop]
word_count: 87
manual_edits: false
---
[body: preserved verbatim from normalize-format output]
Input: inbox/2026-04-21-dropout-as-ensemble.md (87 words, plain markdown, user's own note).
Run:
[regularization, ensembling, dropout]; dropout new → logged to pending-tags.2026-03-11-l2-as-gaussian-prior at Jaccard 0.32 (below 0.5 threshold) → CREATE (not LINK).corpus/seeds/2026-04-21-dropout-as-ensemble-thinned-networks.md with full frontmatter.2026-04-23T14:32 | ADDED | 2026-04-21-dropout-as-ensemble-thinned-networks | from inbox/2026-04-21-dropout-as-ensemble.md | density=8 | topics=regularization,ensembling,dropoutregularization seeds 3→4, temperature→hot; ensembling 1→2; dropout new row added.mv inbox/2026-04-21-dropout-as-ensemble.md inbox/.processed/Output: one seed file, one changelog line, three ledger updates, one moved file.
normalize-format fails, the inbox file stays put (not moved) and the changelog records ERROR | <file> | <reason>. No partial ingests.id exists, append -v2; never overwrite.inbox/.processed/ or inbox/.trash/.dedupe-against-corpus returns SKIPPED, move the inbox file to .processed/ with a renamed suffix -duplicate-of-{matched-seed-id} and exit — don't re-write the matched seed.npx claudepluginhub lyndonkl/claude --plugin thinking-frameworks-skillsNormalizes inbox files (markdown, Claude JSON/JSONL, Readwise, transcripts, link captures) into clean markdown with partial frontmatter. Handles format-specific edge cases like content-block arrays and timestamp stripping.
Bulk imports knowledge from files, directories, or URLs into structured backlogs, or captures a single document with a 5-section template (claims, worth-keeping, contested, action, reaction).
Processes Obsidian Inbox items into a knowledge base: reads source, discusses key ideas, then files synthesized notes. Also saves conversation answers as permanent wiki pages.