Skip to content
Back to skills

Ingest

ASecurity

Use when a raw source file needs to be ingested into the knowledge graph.

  • 35 stars
  • 0 votes
  • 0 copies
  • 9 views
  • Added September 19, 2026
ai-agents

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add xcota/pos --skill ingest --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ingest?

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

Security grade badge for Ingest
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/xcota-ingest/badge)](https://www.skillsdirectory.com/skills/xcota-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: ingest
description: "Use when a raw source file needs to be ingested into the knowledge graph."
version: 3.1
user_invocable: true
---
# /ingest — Structured Data Extraction

Extract structured knowledge from raw data sources into the knowledge graph.

## Arguments
- `[source_type]` — source kind: telegram | transcript | youtube | notes | bio | survey | audio
- `[path]` — path to the file or directory holding the data
- `[topic]` — optional topic/context to focus extraction

## Pipeline

### Phase 1: R2C (Raw → Characteristics)
1. Detect source type (auto-detect, or from the argument).
   - YouTube URL: create `inbox/youtube/{slug}_{video_id}/`, fetch auto-subs with `yt-dlp --skip-download --write-auto-subs --sub-langs "en.*,<primary>.*" --sub-format vtt` (use the subject's primary language from `context/identity.md` if profiled, else `en`; run `yt-dlp --list-subs <url>` first if unsure). Needs `yt-dlp` installed. **If no `.vtt` is produced** (yt-dlp exits 0 even when it finds nothing), do NOT fabricate a transcript — mark the source `unresolved` and ask the user to paste one. Otherwise normalize VTT into `transcript.md` + `transcript.txt`, then process as `transcript`.
2. Load the source-specific extraction prompt from `projects/ingest/prompts/{source_type}.md`.
   - If `projects/ingest/prompts/youtube.md` is missing, use `transcript.md` and add focus on: source metadata, chapter outline, reusable concepts, architecture deltas, action items.
3. Split input into chunks (~1500 tokens, with overlap).
4. Parallel subagents: each chunk × each dimension —
   - **bio** — biographical facts, events, chronology
   - **patterns** — patterns of behavior, decisions, thinking
   - **values** — values, beliefs, priorities
   - **connections** — people, relationships, social graph
   - **insights** — insights, unique ideas, non-obvious observations
5. Output format per chunk:
   ```
   date/period – dimension – fact/observation – "evidence quote" – confidence (0-1)
   ```

### Phase 2: C2F (Characteristics → Final)
1. Collect all Phase 1 results.
2. Deduplicate: merge identical facts, raise confidence.
3. Consolidate: group by topic/entity.
4. Create/update files in `knowledge/`:
   - New entity → `knowledge/{type}/{entity-name}.md` with frontmatter + `[[wikilinks]]`.
   - Existing entity → append/merge new facts.
   - Wikilink validation: every `[[link]]` must point at a file that exists.

### Phase 3: Output
1. Summary: how many entities created/updated, key findings.
2. Update `state/current.md` with the ingest result.
3. Append to `daily/{today}.md`.

## Rules
- Confidence < 0.5 → mark as uncertain, do not create an entity.
- Don't duplicate already-known facts (check `knowledge/` before writing).
- One entity = one file. Don't smear a single entity across multiple files.
- Filenames: `[a-z0-9_-]` only (hard rule from CLAUDE.md).
- Don't create entities for small everyday trivia.
- For architectural sources: a single summary is not enough. Fold the delta into the relevant `context/`, `knowledge/concepts/`, MOC, or skill files.
- **On conflict** (a new claim contradicts an existing one about the same subject): use **conflict-as-record**, do NOT overwrite. Create `knowledge/conflicts/<slug>-conflict-{date}.md` (both claims + provenance + `promotion_blocked: true`), downgrade the original (frontmatter `epistemic_status: disputed` + `conflicts: [...]`), backlink, and ask the user. Protocol: `knowledge/conflicts/AGENTS.md`. "Fresh > old" applies ONLY to undisputed updates from the SAME source.
- **Epistemic frontmatter** (Phase 2): write `modality` / `epistemic_status` / `confidence` (from the per-chunk confidence 0-1 already in the pipeline) per entity. `confidence < 0.5` → `epistemic_status: extracted_candidate` (do not promote). Enums: `knowledge/conflicts/AGENTS.md`.
- **Coverage gate** (Phase 3): every processed source → one line `{covered | omitted_boilerplate | redacted | unresolved}` + reason. Any `unresolved` blocks ingest completion. Put the table in the summary + `daily/{today}`.

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.