Skip to content
Back to skills

Mem Ingest

ASecurity

Ingest source files into the wicked-estate knowledge store as cited chunks. Handles text files (md, txt, csv, html, json, code) with deterministic chunking and binary documents (pdf, docx, pptx, xlsx, png, jpg, gif, webp) via LLM vision — the agent extracts and chunks, estate persists and ranks. Use when: dispatched by the wicked-garden-mem skill's ingest action, or directly for 'ingest this file', 'add this document to the knowledge base', 'index this directory', 'learn from this pdf'.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 18, 2026
ai-agentspythongojavabashnodebackend

Works with

  • mcp

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 18, 2026

npx -y skills add mikeparcewski/wicked-garden --skill mem-ingest --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mem Ingest?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Mem Ingest
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mikeparcewski-mem-ingest/badge)](https://www.skillsdirectory.com/skills/mikeparcewski-mem-ingest)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: wicked-garden-mem-ingest
description: "Ingest source files into the wicked-estate knowledge store as cited chunks. Handles text files (md, txt, csv, html, json, code) with deterministic chunking and binary documents (pdf, docx, pptx, xlsx, png, jpg, gif, webp) via LLM vision — the agent extracts and chunks, estate persists and ranks. Use when: dispatched by the wicked-garden-mem skill's ingest action, or directly for 'ingest this file', 'add this document to the knowledge base', 'index this directory', 'learn from this pdf'."
metadata:
  role: worker
---

# Mem Ingest Worker

This skill is designed to run as an isolated worker; when your harness cannot fork, run it inline and keep its output separate from the caller's.

You ingest source files into the **wicked-estate knowledge store** so later
`knowledge.recall` / cited-answer calls can return them with `source`
citations. This ports the brain-era ingest pipeline (FOLD-2, Phase 5-S7)
onto estate: **you** read, extract, and chunk (DEC-R: the agent is the
reasoner); the **engine** writes and ranks (`knowledge.ingest` /
`knowledge.write` — deterministic, never calls a model). Estate's embedded
method card `skill://knowledge-ingest/SKILL.md` is the chunking doctrine
this pipeline follows.

## Runtime
Script-backed steps use the `wicked-garden` launcher: `wicked-garden run <plugin-root-relative path, e.g. scripts/…> [args]`. It is on PATH after `npm i -g wicked-garden`; otherwise use `npx wicked-garden run …`; inside a wicked-crew run it is `"$WICKED_GARDEN_ROOT/scripts/wicked-garden"`.
If none of these is available, or Python 3 is missing, skip the script-backed step, say so, and follow the manual alternative where one is given next to it — never invent the script's output.
Relative paths in this skill are relative to the directory that contains this SKILL.md.

## Parameters

- **source** (required): path to a file or directory
- **scope** (optional): estate scope, default `project:<cwd-basename>`
- **title** (optional): document title, default derived from the filename

## The write seam

All writes go through the mem backend (stdio shim → estate MCP):

```bash
wicked-garden run \
  scripts/mem/estate_memory.py ingest -
```

with a JSON body on stdin (chunks are long — never inline them in argv):

```json
{"title": "<doc title>", "chunks": ["<chunk 1>", "<chunk 2>"],
 "scope": "<scope>", "source": "<absolute-or-repo-relative source path>"}
```

Rules that make chunks worth storing:

- **Self-contained** — one idea per chunk (a section, a slide, a sheet, a
  table row group). Recall returns chunks verbatim; a fragment that needs
  its neighbours is a bad chunk.
- **Source provenance always** — `source` is what a cited answer cites. An
  uncited chunk cannot back `wicked-garden-search answer`. Never omit it.
- For a single standalone fact, use the `write` action instead
  (`{"content": ..., "class": "concept", "source": ...}`).

## Step 1 — assess the source

- Single file → Step 2 (text) or Step 3 (binary) by extension.
- Directory → Step 4 (batch).
- Health check when in doubt: `... estate_memory.py health '{}'` — on
  `"ok": false`, stop and report the degrade (estate binary missing or
  store unreachable). Do not fake success.

Text extensions: `.md .txt .csv .html .htm .json .py .js .jsx .ts .tsx .sh
.rs .go .java .yaml .yml .toml`. Binary (vision) extensions: `.pdf .docx
.pptx .xlsx .png .jpg .jpeg .gif .webp`.

## Step 2 — TEXT files (deterministic chunking)

1. Read the file.
2. Split:
   - **Markdown**: on H1/H2 headings; sub-split any section over ~800 words
     at paragraph breaks.
   - **Code**: one chunk per file (small files) or per top-level
     class/function group; prepend a one-line `path — what it is` header so
     the chunk stands alone.
   - **CSV/other text**: paragraph groups of ~800 words; for CSV keep the
     header row with every chunk.
3. Send title + chunks + scope + source through the write seam (one `ingest`
   call per file).

## Step 3 — BINARY files (LLM vision)

You receive the document natively via `Read` — examine it visually and
extract content as markdown. This is the one genuinely agent-only stage of
the pipeline; everything around it stays deterministic.

- **PDF**: one chunk per logical section (or every 3–5 pages). `Read` PDFs
  with the `pages` parameter for long documents.
- **PPTX**: one chunk per slide or tight slide group; capture speaker-note
  intent, not just visible text.
- **DOCX**: one chunk per section heading.
- **XLSX**: one chunk per sheet; render data as markdown tables (downsample
  huge sheets: header + representative rows + totals).
- **Images**: one chunk describing the visual content, plus any legible
  text verbatim.

Preserve numbers, names, and tables exactly — a cited answer will quote
them. Then write through the same seam as Step 2, `source` = the original
binary's path.

## Step 4 — directories (batch)

Do NOT ingest files one-by-one in conversation. Write a small Python batch
script to the session scratch dir that walks the tree (skip dotdirs,
`node_modules`, `__pycache__`, lockfiles), applies the Step-2 chunking to
each text file, and pipes one `ingest` JSON per file into
`wicked-garden run scripts/mem/estate_memory.py ingest -`. Run it, then:

- Report `files → chunks` counts from its output.
- List the binary files it found and vision-ingest the important ones
  yourself (Step 3), or hand the list back for the caller to choose.

## Step 5 — verify (seeded recall)

Pick 1–2 distinctive phrases from the ingested content and confirm they
come back cited:

```bash
wicked-garden run \
  scripts/mem/estate_memory.py sources '{"query":"<distinctive phrase>"}'
```

The matching chunk must appear with the right `source`. If it doesn't,
say so — never report an unverified ingest as done.

## Step 6 — report

- `{N} files ingested, {M} chunks written, scope {scope}`
- doc_ids returned by the backend
- binary files pending vision ingest (if any were deferred)
- verification: which seeded phrases came back, with their `source`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.