Skills give your agents new capabilities. Browse the catalog, pick what you need, and install with a single command.
Featured
Ingest a large dataset into memory as a skimmed map. Cold-store the raw files under a workspace imports directory, census them into a slice plan, skim each slice into compact map pages that point back at the raw files, ingest the map with the memory ingest CLI, and author a drill-in retrieval skill so the corpus stays searchable on demand. For recording archives, transcript collections, document dumps, and any corpus too large to hold in memory directly.
Bring a large dataset into the assistant's working knowledge without stuffing it into memory. The model is a library: the workspace holds the stacks (the raw files, cold and complete), memory holds the card catalog (a small set of map pages that say what exists, when it is from, and where to look), and a purpose-built retrieval skill is the librarian that walks to the right shelf on demand.
Two invariants drive everything below:
memory/concepts/ except the map pages, and nothing is ever appended to memory/buffer.md (bulk buffer appends trip the consolidation burst guard and per-run caps; the map bypasses the buffer entirely via assistant memory ingest).Identify the source and its size before committing:
du -sh /path/to/raw-corpus
find /path/to/raw-corpus -type f | wc -l
Tell the user what will happen: the raw files move into the workspace, a bounded number of summarization passes read them once to build the map, the map is ingested into memory, and a lookup skill is authored for drill-in. Skimming a large corpus is real LLM work that costs time and money; confirm before starting. For Fathom recording exports, read references/fathom.md first for format discovery and slicing guidance.
Land the raw files under an imports directory in the workspace, one directory per source:
Screen for credentials BEFORE copying: an arbitrary corpus can carry secret
material, and anything landed under imports/ becomes reachable by workspace
tools, backups, and retrieval flows.
cd "$VELLUM_WORKSPACE_DIR"
# 1a. Screen for secret-bearing FILE NAMES; review every hit with the user.
find /path/to/raw-corpus \( -name '.env*' -o -name '*.key' -o -name '*.pem' \
-o -name '*credential*' -o -name '*secret*' -o -name 'cookies*' \
-o -path '*tokens*' -o -path '*oauth*' \) -print
# 1b. Screen file CONTENTS for credential shapes. --hidden and --no-ignore
# matter: rg skips dotfiles and gitignored paths by default, which is
# exactly where credentials live. Capture the FULL list (no truncation):
# every file named here must be excluded below or cleaned with the user
# before it lands.
rg -l -i --hidden --no-ignore \
"api[_-]?key|access[_-]?token|refresh[_-]?token|client[_-]?secret|password\s*[=:]|passwd|bearer |AKIA[0-9A-Z]{16}|BEGIN [A-Z ]*PRIVATE KEY" \
/path/to/raw-corpus > /tmp/corpus-secret-hits.txt
cat /tmp/corpus-secret-hits.txt
# 2. Build rsync exclusions from the content hits (paths relative to the
# corpus root), then copy with ALL flagged paths excluded.
sed 's|^/path/to/raw-corpus/||' /tmp/corpus-secret-hits.txt > /tmp/corpus-secret-exclusions.txt
mkdir -p imports/<source>
rsync -a --exclude='.env*' --exclude='*.key' --exclude='*.pem' \
--exclude='tokens/' --exclude='oauth/' --exclude='cookies*' \
--exclude-from=/tmp/corpus-secret-exclusions.txt \
/path/to/raw-corpus/ imports/<source>/
Rules:
memory/. The cold store is imports/<source>/; the map is the only thing that enters memory.Census the corpus and produce a machine-readable slice plan:
mkdir -p "$VELLUM_WORKSPACE_DIR/imports/<source>/.staging"
bun run {baseDir}/scripts/inventory.ts "$VELLUM_WORKSPACE_DIR/imports/<source>" \
> "$VELLUM_WORKSPACE_DIR/imports/<source>/.staging/plan.json"
The script prints a human census to stderr (file count, total size, extension mix, date range) and a JSON plan to stdout: { files, totalBytes, byExtension, dateRange, suggestedSlices }. Each suggested slice is a date-windowed group of files sized for one skim pass. Review the plan before skimming:
For each slice in the plan, run one summarization pass that reads the slice's files and writes one staged map page:
<slug>.md (for example imports/fathom/.staging/fathom-recordings-2025-q1.md). The slug is the filename minus .md.references/map-page-template.md exactly: lead that stands alone as the retrieval card, a Raw data: pointer line in the lead, ## sections per topic or time slice, and source: / origin_date: / ref_files: / links: frontmatter.kind: index) whose links: enumerate all slice pages.Bound the fan-out. The number of skim passes equals the number of slices in the plan, full stop. Run them a few at a time (parallelism of 3 or 4 is plenty). Never spawn one pass per file, never let a pass recursively spawn more passes, and never re-skim slices that already have a staged page unless their content changed. An unbounded fan-out over a large corpus is the expensive failure mode of this skill.
A skim pass extracts what a future search needs to route: decisions, recurring topics, named people and projects, date spans, open threads. It does not transcribe. Verbatim content stays cold; the map records that it exists and where.
Dry-run first, review, then ingest for real:
cd "$VELLUM_WORKSPACE_DIR"
assistant memory ingest --dir imports/<source>/.staging --dry-run
The dry run validates every page and reports per-page results without writing. Fix anything reported invalid (bad frontmatter, bad slug), then run without --dry-run. Notes:
memory.v3.live or memory.v2.enabled).--overwrite is passed; use --overwrite when re-running after edits.After ingest, the maintain job picks up the new pages and embeds their sections; the map becomes retrievable shortly after, with each page's card dated by its origin_date rather than the import day.
The map tells the model a slice exists; the drill-in skill is how it follows the pointer. Author a workspace skill for this corpus under $VELLUM_WORKSPACE_DIR/skills/<source>-lookup/:
SKILL.md with frontmatter per the Agent Skills spec (name matching the directory, keyword-rich description) and activation hints drawn from the intents you actually observed while scoping (for example "when the user asks what was said in a meeting", "when a question needs the <source> archive").scripts/ with actually runnable search commands over the cold store, not prose descriptions of searching. A minimal helper is a ripgrep wrapper scoped to the imports directory with date filtering:#!/usr/bin/env bash
# search.sh <pattern> [YYYY-MM] scoped search over the <source> cold store
DIR="$VELLUM_WORKSPACE_DIR/imports/<source>"
if [ -n "$2" ]; then
# Two globs: a slash-free pattern matches the date in any basename, and
# the "**/" prefixed pattern matches the date in a directory segment at
# any depth (a leading "*" cannot cross path separators).
rg -i -C 3 "$1" "$DIR" --glob "*$2*" --glob "**/*$2*/**"
else
rg -i -C 3 "$1" "$DIR"
fi
Confirm the new skill appears in assistant skills list (workspace skills are picked up from the workspace skills/ directory).
Run 3 to 5 representative queries a real user would ask of this corpus (mix a routing question, a specific-fact question, and a date-scoped question). For each, check:
Raw data: pointer or invokes the drill-in skill to reach the actual files.If a query routes to nothing, the relevant lead is not doing its card job; rewrite it and re-ingest that page with --overwrite. For large ingests, assistant memory v3 eval can additionally gate the change, but it is a two-corpus comparison requiring --snapshot, --staging, and --out; use it only when you captured a pre-ingest snapshot of memory/concepts/ to compare against. Otherwise the query checks above are the verification.
memory/concepts/ or memory/buffer.md. Map pages only, via assistant memory ingest.imports/<source>/ and is read-only after landing.Raw data: line) live in the page lead, because the card renderer injects the lead plus a section list; a pointer buried in a section is invisible at routing time.origin_date: is the content's own date, never the import date.references/map-page-template.md: the exact article shape for map pages, with a full example. Read before writing any staged page.references/fathom.md: Fathom recording archives specifically; export discovery, speaker and date extraction, slicing, and what belongs in the map versus the cold store.