Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Processes external resources into stored knowledge with quality scoring and routing. Use when ingesting articles, papers, or docs into a memory palace.
.claude/skills/athola-knowledge-intake/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 258% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 352% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 236% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 416% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 484% | 0% |
Process external resources into the knowledge store. When a user links an article, blog post, or paper, this skill guides evaluation, storage decisions, and application routing.
A knowledge governance framework that answers three questions for every external resource:
> When a user links an external resource, it is a signal of importance.
The act of sharing indicates the resource passed the user's own filter. Our job is to:
When a user shares a link:
1. FETCH → Detect format, retrieve and convert content
2. EVALUATE → Apply importance criteria
3. DECIDE → Storage location and application type
4. STORE → Create structured knowledge entry
5. VALIDATE → Scribe verification (slop scan + doc verify)
6. CONNECT → Link to existing palace structures
7. PROMOTE → Offer Discussion promotion (score 80+)
8. APPLY → Route to codebase or infrastructure updates
9. PRUNE → Identify displaced/outdated knowledgeBefore retrieving content, detect the source format from the URL or file path to choose the right retrieval method.
Web articles and blog posts (default path): Use WebFetch to retrieve HTML content directly. No conversion needed.
Document URLs (PDF, DOCX, PPTX, XLSX): Apply the leyline:document-conversion protocol. This tries the markitdown MCP tool first for high-quality markdown, then falls back to native Claude Code tools (Read for PDFs, etc.), then informs the user if the format is unsupported without markitdown.
Local files (user shares a file path): Construct a file:// URI from the absolute path and apply the leyline:document-conversion protocol.
Format detection heuristics:
| URL Pattern | Format | Retrieval | |-------------|--------|-----------| | *.pdf, arxiv.org/pdf/* | PDF | document-conversion | | *.docx, *.doc | Word | document-conversion | | *.pptx, *.ppt | PowerPoint | document-conversion | | *.xlsx, *.xls | Excel | document-conversion | | *.epub | E-book | document-conversion | | drive.google.com/* | Various | document-conversion | | Everything else | HTML/web | WebFetch (existing) |
After retrieval (regardless of method), wrap the content in external content boundary markers per leyline:content-sanitization before proceeding to Step 2 (EVALUATE).
All knowledge corpus entries MUST pass scribe validation before finalizing.
Run Skill(scribe:slop-detector) on the new entry:
Use Agent(scribe:doc-verifier) to validate:
bash# Quick validation for knowledge corpus entry /slop-scan docs/knowledge-corpus/[entry-name].md # Doc verification is now agent-only: Agent(scribe:doc-verifier) "Verify docs/knowledge-corpus/[entry-name].md"
DO NOT finalize entries with slop score > 2.5 - rewrite with concrete specifics. Verification: Run the command with --help flag to verify availability.
When the evaluation score is 80-100 (evergreen), you MUST execute the Discussion promotion workflow. If the score is below 80, skip this step entirely.
Execute these steps in order:
modules/discussion-promotion.md for thefull GraphQL workflow
maturity. Publishing to GitHub Discussions. Y/n]"
gh api graphql commands from the moduleto create or update a Discussion in the "Knowledge" category
discussion_urldiscussion_url field,update the existing Discussion instead of creating a new one
gh is unavailable or promotion fails, warnthe user and continue to Step 8 (APPLY)
Publishing is the default for qualifying entries. It never blocks the intake workflow.
| Criterion | Weight | Questions | |-----------|--------|-----------| | Novelty | 25% | Does this introduce new patterns or concepts? | | Applicability | 30% | Can we apply this to current work? | | Durability | 20% | Will this remain relevant in 6+ months? | | Connectivity | 15% | Does it connect to multiple existing concepts? | | Authority | 10% | Is the source credible and well-reasoned? |
Apply when knowledge directly improves current project:
Action: Update code, add comments, create ADR
Apply when knowledge improves our plugin ecosystem:
Action: Update skills, create modules, enhance agents
**Verification:** Run the command with `--help` flag to verify availability.
Is the knowledge...
├── About HOW we build things? → Meta-infrastructure
│ ├── Skill patterns → Update abstract/memory-palace skills
│ ├── Learning methods → Add to knowledge-corpus
│ └── Tool techniques → Create new skill module
│
└── About WHAT we're building? → Local codebase
├── Domain knowledge → Store in project docs
├── Implementation patterns → Update code/architecture
└── Bug/issue solutions → Apply fix, documentVerification: Run the command with --help flag to verify availability.
| Knowledge Type | Location | Format | |----------------|----------|--------| | Meta-learning patterns | docs/knowledge-corpus/ | Full memory palace entry | | Skill design insights | skills/*/modules/ | Technique module | | Tool/library knowledge | docs/references/ | Quick reference | | Temporary insights | Digital garden seedling | Lightweight note |
> "A cluttered palace is a cluttered mind."
New knowledge often displaces old, but time is not the criterion. Relevance and aspirational alignment are.
The human in the loop defines what stays. Before major tidying:
For each piece of knowledge, both must be yes:
| Finding | Action | |---------|--------| | Supersedes | Archive old with gratitude, link as context | | Contradicts | Evaluate both, keep what sparks joy | | No longer aligned | Release with gratitude | | Complements | Create bidirectional links |
"I might need this someday" is fear, not joy. Release it.
> "If it can't teach something the existing corpus can't already teach → skip it."
Before storing ANY knowledge, run the marginal value filter to prevent corpus pollution.
1. Redundancy Check
2. Delta Analysis (for partial overlap only)
3. Integration Decision
pythonfrom memory_palace.corpus import MarginalValueFilter # Initialize filter with corpus and index directories filter = MarginalValueFilter( corpus_dir="docs/knowledge-corpus", index_dir="docs/knowledge-corpus/indexes" ) # Evaluate new content redundancy, delta, integration = filter.evaluate_content( content=article_text, title="Structured Concurrency in Python", tags=["async", "concurrency", "python"], ) # Get human-readable explanation explanation = filter.explain_decision(redundancy, delta, integration) print(explanation) # Act on decision if integration.decision == IntegrationDecision.SKIP: print(f"Skipping: {integration.rationale}") elif integration.decision == IntegrationDecision.STANDALONE: # Store as new entry store_knowledge(content, title) elif integration.decision == IntegrationDecision.MERGE: # Enhance existing entry enhance_entry(integration.target_entries[0], content) elif integration.decision == IntegrationDecision.REPLACE: # Replace outdated entry replace_entry(integration.target_entries[0], content)
Verification: Run the command with --help flag to verify availability.
**Verification:** Run the command with `--help` flag to verify availability.
=== Marginal Value Assessment ===
Redundancy: partial
Overlap: 65%
Matches: async-patterns, python-concurrency
- Partial overlap (65%) with 2 entries
Delta Type: novel_insight
Value Score: 75%
Teaching Delta: Introduces 8 new concepts
Novel aspects:
+ New concepts: structured, taskgroup, context-manager
+ New topics: Error Propagation, Resource Cleanup
Decision: STANDALONE
Confidence: 80%
Rationale: Novel insights justify standalone: Introduces 8 new conceptsVerification: Run the command with --help flag to verify availability.
The marginal value filter respects autonomy levels (see plan Phase 4):
Current implementation: Level 0 (all human-in-the-loop).
The knowledge corpus uses reinforcement learning signals to dynamically score entry quality based on actual usage patterns.
Usage signals score an entry after it is stored, from how it gets accessed. They cannot catch a summary that was never clear enough to be useful. Before an entry is written, gate it on the MMPO dual-probe (arXiv:2605.30159), adapted from task state to knowledge value:
concrete capability or decision it enables, not a topic label.
bounded open questions it leaves, not generic "more research".
| Value probe | Gap probe | Decision | |-------------|-----------|----------| | Names a concrete use | Bounded, specific gaps | Store at the evaluated score | | Names a concrete use | "Everything" / empty | Store, but cap at seedling until gaps are named | | Vague ("useful background") | Any | Do not store as knowledge: capture the key quote only or skip |
This gate is qualitative and complements, does not replace, the Importance Criteria score: a summary can score well on Applicability yet still fail the value probe if it cannot name what it enables. When memory-palace:memory-clarity-probe is installed, delegate the dual-probe evaluation to it and use its Recommendation as the gate.
| Signal | Weight | Description | |--------|--------|-------------| | ACCESS | +0.1 | Entry was accessed/read | | CITATION | +0.3 | Entry was cited in another context | | POSITIVE_FEEDBACK | +0.5 | User marked as helpful | | NEGATIVE_FEEDBACK | -0.3 | User marked as unhelpful | | CORRECTION | +0.2 | Entry was corrected/updated | | STALE_FLAG | -0.4 | Entry marked as potentially outdated |
Knowledge entries decay over time unless validated:
| Maturity | Half-Life | Decay Curve | |----------|-----------|-------------| | Seedling | 14 days | Exponential | | Growing | 30 days | Exponential | | Evergreen | 90 days | Logarithmic |
Entries are classified by decay status:
Hybrid lineage tracking based on source importance:
Full Lineage (for important sources):
Simple Lineage (for standard sources):
Full lineage is used for:
The KnowledgeOrchestrator coordinates all quality systems:
pythonfrom memory_palace.corpus import KnowledgeOrchestrator, UsageSignal # Initialize orchestrator orchestrator = KnowledgeOrchestrator( corpus_dir="docs/knowledge-corpus", index_dir="docs/knowledge-corpus/indexes" ) # Record usage events orchestrator.record_usage("entry-1", UsageSignal.ACCESS) orchestrator.record_usage("entry-1", UsageSignal.POSITIVE_FEEDBACK) # Assess entry quality entry = {"id": "entry-1", "maturity": "growing"} assessment = orchestrator.assess_entry(entry) print(f"Quality: {assessment.overall_score:.0%}") print(f"Status: {assessment.status}") print(f"Recommendations: {assessment.recommendations}") # Get maintenance queue entries = [...] # Your entry list queue = orchestrator.get_maintenance_queue(entries) for item in queue: print(f"{item.entry_id}: {item.status} - {item.recommendations}") # Ingest new content with lineage from memory_palace.corpus import SourceReference, SourceType source = SourceReference( source_id="src-1", source_type=SourceType.DOCUMENTATION, url="https://docs.example.com/api", title="API Documentation", ) entry_id, decision = orchestrator.ingest_with_lineage( content="# API Reference\n...", title="API Documentation", source=source )
Verification: Run the command with --help flag to verify availability.
The marginal value filter emits RL signals on integration decisions:
pythonfrom memory_palace.corpus import MarginalValueFilter filter = MarginalValueFilter(corpus_dir, index_dir) # Evaluate with RL signal emission redundancy, delta, integration, rl_signal = filter.evaluate_with_rl( content=article_text, title="New Article", tags=["python", "async"] ) # RL signal contains: # - signal_type: UsageSignal to emit # - weight: Signal weight for scoring # - action: What happened (new_entry_created, entry_enhanced, etc.) # - decision: Integration decision made # - confidence: Decision confidence print(f"RL Signal: {rl_signal['action']} (weight: {rl_signal['weight']})")
Verification: Run the command with --help flag to verify availability.
User shares: "Check out this article on structured concurrency"
yamlintake: source: "https://example.com/structured-concurrency" # PHASE 3: Marginal Value Filter marginal_value: redundancy: level: partial_overlap overlap_score: 0.65 matching_entries: [async-patterns, python-concurrency] delta: type: novel_insight value_score: 0.75 novel_aspects: [structured, taskgroup, context-manager] teaching_delta: "Introduces structured concurrency pattern" integration: decision: standalone confidence: 0.80 rationale: "Novel insights justify standalone entry" # Continue with evaluation if filter passes evaluation: novelty: 75 # New pattern for error handling applicability: 90 # Directly relevant to async code durability: 85 # Core concept, won't age quickly connectivity: 70 # Links to error handling, async patterns authority: 80 # Well-known author, cited sources total: 82 # Evergreen, store and apply routing: type: both local_application: - Refactor async error handling in current project - Add structured concurrency pattern to codebase meta_application: - Create module in relevant skill - Add to knowledge-corpus as reference storage: location: docs/knowledge-corpus/structured-concurrency.md format: memory_palace_entry maturity: growing pruning: displaces: - Old async error patterns (mark deprecated) complements: - Existing error handling module - Async patterns documentation
Verification: Run the command with --help flag to verify availability.
Research sessions and external content are automatically queued for review in docs/knowledge-corpus/queue/.
bash# List pending queue entries ls -1t docs/knowledge-corpus/queue/*.yaml # Review specific entry cat docs/knowledge-corpus/queue/2025-12-31_topic.yaml # Process approved entry # 1. Create memory palace entry in docs/knowledge-corpus/ # 2. Update queue entry status to 'processed' # 3. Archive or delete queue entry
Verification: Run the command with --help flag to verify availability.
The research-queue-integration hook automatically queues:
Queue entry format: See docs/knowledge-corpus/queue/README.md
**Verification:** Run the command with `--help` flag to verify availability.
pending_review → [Review] → approved/rejected
approved → [Create Entry] → processed
processed → [Archive] → queue/archive/Verification: Run the command with --help flag to verify availability.
uv run python scripts/intake_cli.py --candidate path/to/intake_candidate.json --auto-acceptdocs/knowledge-corpus/*.md),developer drafts (docs/developer-drafts/), and appends audit rows to docs/curation-log.md.
--output-root in tests or sandboxes to avoid mutating the main corpus.--process-queue flag to review and process queued entries interactively.modules/evaluation-rubric.mdmodules/storage-patterns.mdmodules/konmari-tidying.mdmodules/pruning-workflows.mdfor evergreen entries (score 80+). Publishing is the default action. See modules/discussion-promotion.md for full workflow.
Memory-palace hooks automatically detect content that may need knowledge intake processing:
| Hook | Event | When Triggered | |------|-------|----------------| | url_detector | UserPromptSubmit | User message contains URLs | | web_content_processor | PostToolUse (WebFetch/WebSearch) | After fetching web content | | local_doc_processor | PostToolUse (Read) | Reading files in knowledge paths | | research_queue_integration | SessionEnd | Research sessions with 3+ WebSearch calls |
When hooks detect potential knowledge content, they add context messages:
**Verification:** Run `pytest -v` to verify tests pass.
Memory Palace: New web content fetched from {url}.
Consider running knowledge-intake to evaluate and store if valuable.Verification: Run the command with --help flag to verify availability.
**Verification:** Run the command with `--help` flag to verify availability.
Memory Palace: Reading local knowledge doc '{path}'.
This path is configured for knowledge tracking.
Consider running knowledge-intake if this contains valuable reference material.Verification: Run the command with --help flag to verify availability.
Hooks check the memory-palace-index.yaml to avoid redundant processing:
Before signaling intake, hooks validate content:
The deduplication index stores fields aligned with this skill's evaluation:
yamlentries: "https://example.com/article": content_hash: "xxh:abc123..." stored_at: "docs/knowledge-corpus/article.md" importance_score: 82 # From evaluation framework, in [0, 100] maturity: "growing" # seedling, growing, evergreen routing_type: "both" # local, meta, both last_updated: "2025-12-06T..."
Verification: Run the command with --help flag to verify availability.
memory-palace-architect - Structures stored knowledge spatiallydigital-garden-cultivator - Manages knowledge lifecycleknowledge-locator - Finds and retrieves stored knowledgeskills-eval (abstract) - Evaluates meta-infrastructure updatesmemory-clarity-probe - Dual-probe gate for the clarity check aboveproduces no index entry (enforced by web_research_handler)
value probe names a concrete capability the knowledge enables
importance_score in [0, 100] and arouting decision from the Application Routing tree
stored as full knowledge notes
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 15,191 | 18,097 | +19% | 1 | 1 | 0% | 2,775 | 9,932 | +258% | 0 | 0 | — |
case-01 | fail→pass | 12,499 | 16,785 | +34% | 1 | 1 | 0% | 2,157 | 9,747 | +352% | 0 | 0 | — |
case-03 | fail→fail | 17,682 | 5,474 | -69% | 1 | 1 | 0% | 2,726 | 6,785 | +149% | 0 | 0 | — |
case-04 | fail→pass | 25,064 | 4,216 | -83% | 1 | 1 | 0% | 2,179 | 7,322 | +236% | 0 | 0 | — |
case-05 | fail→fail | 10,120 | 6,709 | -34% | 1 | 1 | 0% | 1,543 | 7,609 | +393% | 0 | 0 | — |
case-06 | fail→pass | 8,167 | 4,095 | -50% | 1 | 1 | 0% | 1,398 | 7,218 | +416% | 0 | 0 | — |
case-07 | fail→pass | 7,499 | 3,394 | -55% | 1 | 1 | 0% | 1,195 | 6,974 | +484% | 0 | 0 | — |
case-08 | pass→pass | 11,360 | 7,234 | -36% | 1 | 1 | 0% | 1,784 | 7,655 | +329% | 0 | 0 | — |
case-09 | fail→fail | 8,404 | 2,663 | -68% | 1 | 1 | 0% | 1,297 | 6,866 | +429% | 0 | 0 | — |
case-10 | pass→pass | 6,119 | 2,911 | -52% | 1 | 1 | 0% | 917 | 6,935 | +656% | 0 | 0 | — |
case-11 | fail→pass | 7,662 | 5,055 | -34% | 1 | 1 | 0% | 1,249 | 7,283 | +483% | 0 | 0 | — |
case-12 | pass→pass | 8,840 | 3,106 | -65% | 1 | 1 | 0% | 1,365 | 6,929 | +408% | 0 | 0 | — |
case-13 | pass→pass | 8,476 | 2,913 | -66% | 1 | 1 | 0% | 1,321 | 6,923 | +424% | 0 | 0 | — |
case-14 | fail→pass | 13,207 | 3,926 | -70% | 1 | 1 | 0% | 2,131 | 7,136 | +235% | 0 | 0 | — |
case-15 | pass→pass | 5,068 | 3,557 | -30% | 1 | 1 | 0% | 737 | 7,024 | +853% | 0 | 0 | — |
case-16 | fail→pass | 7,232 | 2,006 | -72% | 1 | 1 | 0% | 1,219 | 6,743 | +453% | 0 | 0 | — |
case-17 | fail→pass | 4,973 | 1,931 | -61% | 1 | 1 | 0% | 902 | 6,746 | +648% | 0 | 0 | — |
case-18 | pass→pass | 6,813 | 4,542 | -33% | 1 | 1 | 0% | 1,176 | 7,195 | +512% | 0 | 0 | — |
case-19 | fail→pass | 9,522 | 3,358 | -65% | 1 | 1 | 0% | 1,581 | 7,010 | +343% | 0 | 0 | — |
case-20 | fail→pass | 4,154 | 2,590 | -38% | 1 | 1 | 0% | 733 | 6,860 | +836% | 0 | 0 | — |
case-21 | pass→pass | 7,373 | 4,233 | -43% | 1 | 1 | 0% | 1,056 | 7,050 | +568% | 0 | 0 | — |
case-22 | pass→pass | 3,663 | 2,799 | -24% | 1 | 1 | 0% | 575 | 6,868 | +1094% | 0 | 0 | — |
case-23 | pass→fail | 4,738 | 4,984 | +5% | 1 | 1 | 0% | 722 | 6,657 | +822% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 21 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +43 percentage points is the difference between those two pass rates over the 21 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.