"Operate M-flow ingestion, loader selection, memorization stages,
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill ingestion-pipelines --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ingestion Pipelines?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-ingestion-pipelines)More formats (shields.io, HTML) on the badges page.
---
name: ingestion-pipelines
description: "Operate M-flow ingestion, loader selection, memorization stages,
procedural learning, and custom pipeline workflows."
disable-model-invocation: true
metadata:
disco-role: operating
license: Apache 2.0
---
# M-flow ingestion pipelines
Use this sub-skill when the task is about getting data into M-flow memory or assembling ingestion/memorization pipelines:
- choose input shapes, loaders, `preferred_loaders`, chunking, and `content_type`;
- run one-step `ingest()`, staged `add()` then `memorize()`, or advanced `run_custom_pipeline()` workflows;
- configure memorization layers: episodic, procedural, content routing, episode routing, precise mode, and conflict handling;
- extract procedural memory later with `learn()` from already-built episodic memory.
Route elsewhere:
- basic CLI/API quickstarts, dataset CRUD, and first-time examples → `core-memory-api`;
- `RecallMode`, `search()`, `query()`, graph/vector adapter tuning, and retrieval ranking → `retrieval-graph-search`;
- running API servers, UI, MCP, Docker, and service integration topology → `service-integrations`.
## First decisions
1. **Separate ingestion from memorization when you need control.** Use `ingest()` for the common add+memorize path. Use `add()` then `memorize()` when you need to validate stored data first, use different loader/chunking settings, skip/query later, or recover from a failed memorize stage.
2. **Declare content shape before LLM routing.** With content routing enabled, pass `content_type=ContentType.TEXT` for articles/notes/code-like prose and `content_type=ContentType.DIALOG` for chats, interviews, meeting logs, or transcripts. For mixed article + transcript data, prefer separate calls/datasets per content type instead of one mixed call.
3. **Choose memory layers intentionally.** Episodic memory is enabled by default. Procedural extraction is opt-in during `memorize(enable_procedural=True)` or can be run later with `learn()`.
4. **Use `conflict_mode="error"` for production jobs.** It prevents accidental concurrent `memorize()` runs over the same dataset. Use `"warn"` for interactive work and `"ignore"` only when you accept duplicate/inconsistent graph risk.
5. **Inspect the runtime before advising.** Run [scripts/pipeline_stage_inspector.py](scripts/pipeline_stage_inspector.py) to list the installed loader registry and public signatures without executing a pipeline.
## Common recipes
### One-step ingestion with explicit routing
```python
import m_flow
from m_flow import ContentType
result = await m_flow.ingest(
data=["meeting-notes.txt", "transcript.txt"],
dataset_name="team-memory",
content_type=ContentType.DIALOG,
enable_content_routing=True,
enable_procedural=True,
conflict_mode="error",
)
if result.needs_retry():
# add() succeeded but memorize() failed; retry only the dataset's memorize stage.
await m_flow.memorize(datasets=[result.dataset_name], content_type=ContentType.DIALOG)
```
### Staged add then memorize
```python
import m_flow
from m_flow import ContentType
await m_flow.add(
data=["docs/overview.md", "docs/reference.pdf"],
dataset_name="docs",
preferred_loaders=[
{"advanced_pdf_loader": {"strategy": "hi_res"}},
"pypdf_loader",
"text_loader",
],
)
await m_flow.memorize(
datasets=["docs"],
chunk_size=1200,
chunks_per_batch=20,
content_type=ContentType.TEXT,
enable_content_routing=True,
precise_mode=True,
conflict_mode="error",
)
```
### Learn procedures from existing episodic memory
```python
import m_flow
# Prefer dataset-wide learning for duplicate prevention: learn() skips Episodes
# that already have derived_procedure edges when it discovers Episodes itself.
summary = await m_flow.learn(datasets=["team-memory"])
print(summary)
```
`learn(run_in_background=True)` is accepted by the public signature but currently logs a warning and runs synchronously so it can create `derived_procedure` edges after procedure persistence.
## Reference map
- [references/data-formats.md](references/data-formats.md): accepted data shapes, loader registry, optional loader extras, `preferred_loaders`, and content-type decisions.
- [references/pipeline-reference.md](references/pipeline-reference.md): memorize stage order, toggles, `learn()`, `Stage`, `run_custom_pipeline()`, and validation commands.
- [references/troubleshooting.md](references/troubleshooting.md): loader, path, routing, concurrency, procedural, and custom-pipeline failure signals.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!