Skip to content
Agent Orchestration
Skill

/bmad-ingest

Turns a transcript, thread, voice memo or long document into a cited note agents can act on. Use when the user says "ingest this", "process this transcript", "make notes from this thread or recording" or "what came out of this meeting".

From plugin
bmad-method
55k33 skills

Claude Code

$ npx -y skills add bmad-code-org/bmad-method --skill bmad-ingest --agent claude-code

SKILL.md

bmad-ingest.SKILL.md
name: bmad-ingest
description: 'Turns a transcript, thread, voice memo or long document into a cited note agents can act on. Use when the user says "ingest this", "process this transcript", "make notes from this thread or recording" or "what came out of this meeting".'

Ingest

You turn raw input (a transcript, a chat or email thread, a voice memo, a long document) into a note that a person or agent reads instead of the raw. That reader acts on the note without checking it, so every item must trace to a place in the raw and nothing may appear that the raw does not say. The raw is kept as it arrived, so anyone can check.

Run headless when the caller says so or no person is present: ask nothing.

On activation

1. Config: `uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key core.output_folder`. Script not found: BMad is not set up here; offer the `bmad` skill's setup, installing `bmad` first if needed (`npx skills add bmad-code-org/BMAD-METHOD --skill bmad`), then run it again. 2. Customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow`; on any other failure read `{skill-root}/customize.toml` and use its defaults. Run each entry of `{workflow.activation_steps_prepend}`, hold every entry of `{workflow.persistent_facts}` as fact for the run (`file:` entries are paths or globs under `{project-root}` to read), then run each entry of `{workflow.activation_steps_append}`.

Keep the raw

`{workflow.raw_folder}` holds originals so a note can link its raw by a relative path that holds in source control. Name what you store `YYYY-MM-DD-<slug>`, dated by when the input happened (its last day, for a range) as the raw or its file name shows it; when neither does, leave the date off rather than use today, which a reader would take for the input's date. When a different original already has that name, add `-2`, `-3` and so on.

  • An original outside the project: copy it to `{workflow.raw_folder}`. One with attachments (images, slides, files on an email) goes in as a folder holding the original and its attachments.
  • An original already inside the project: leave it where it is.
  • A URL: record it. When you fetched the content to read it, also save what you read to `{workflow.raw_folder}`, because the page can change or disappear.

Choose the template

Use a template the caller or user named by path or URL. Otherwise list them: `uv run {project-root}/_bmad/scripts/list_templates.py {workflow.template_libraries} <libraries the caller passed> --folder ingest-templates --root <folder>`, with one `--root` for the project's skills folder, then one for each user-level skills folder your host loads. Script not found: the BMad install predates it; ask the `bmad` skill to update, which refreshes the shared scripts, then list again. Follow each `tool_sources` sentence to reach that library's templates too. Name any `unreachable` source, `missing` path other than `{project-root}/_bmad/custom/ingest-templates` or `~/.bmad/ingest-templates`, or `orphaned` extension, and go on without it. Read any GitHub file through `gh`.

Use a template named by id; otherwise pick from the descriptions alone, say why in one line, and name close alternatives. Nothing fits: `meeting` for a conversation, `document` for anything else. Load the chosen template and each of its `extensions`, the first listed winning a conflict.

Comments in a template steer you and stay out of the note; its `done when` is what Review checks. A section the raw has nothing for says so in one line, unless its comment makes it optional.

Write the note

The note's folder is the first of these that applies:

1. The caller or the user named one. 2. The work in progress makes it obvious, such as a document being written with a `sources/` folder beside it. 3. The template's `output`. 4. `{workflow.notes_folder}`, a path or an instruction to follow.

Write one note per raw unless the caller or user asks for one combined note. Name it `<raw name>.md`; when anything other than this raw's own earlier note already has that name, add `-2`, `-3` and so on. Its frontmatter holds `title`, `description` (one line a later reader uses to decide whether to open it), `template`, `ingested` (today) and `source` (the raw's path relative to the note, or its URL).

  • Point each item to where it sits in the raw: a timestamp, a section, a message's date and speaker, or a short quote.
  • Owners, dates, figures and conditions ("once X is done", "only if") appear only as the raw states them, each on the item it belongs to.
  • Beside a relative date ("Monday", "next week"), add the calendar date when the raw's own date is known. Get dates and weekdays from `date` or `cal`, not from memory.
  • Name people as the raw names them.
  • When something said is later reversed or corrected, give the final state and say it changed.
  • Quote exactly where the wording carries weight: a commitment, a customer's own words.
  • Link the attachments that matter from the raw folder rather than copying them.
  • Put what the raw itself leaves unsettled (an inaudible passage, an unclear speaker, two accounts that conflict) under a last `## Unclear in the source` section, and leave it out when there is none. Questions the people left open go where the template puts them.

A raw too long to hold whole is read in parts, keeping running notes as you go. Before writing, settle against the raw whatever changed across parts, such as a morning decision reversed in the afternoon.

Once written, check that `source` and every relative link in the note resolve from the note's folder.

Review

A writer misses what it misread, so a reader that did not write the note checks it: a subagent when your host has them, otherwise a second pass of your own over the raw. Give the reviewer the note, the raw and the template, and have it return each of these with the raw's location:

  • a decisio
Read more
@bmad-code-org
Ships withbmad-method

Breakthrough Method for Agile Ai Driven Development

Stars on GitHub

Momentum

stars in total
55.2k
Star history of bmad-code-org/bmad-method on GitHub, a chart by star-history.com

Other skills on bmad-method.

bmad-agent-pm

bmad-agent-pm

John, the Product Manager. Use when the user asks for John, the PM or the product manager, wants a planning document written,…

More skills from other plugins.

1password

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

clawdis11d393k
@steipete@steipeteInstall Skill
computer-use

computer-use

Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and…

orca10d111k
@stablyai@stablyaiInstall Skill
agentmail

agentmail

Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…

paperclip10d109k
@paperclipai@paperclipaiInstall Skill
adr-create

adr-create

Create a new Architecture Decision Record with sequential numbering and AgentDB registration

@ruvnet@ruvnetInstall Skill

Questions about bmad-ingest.

Which coding agents can use bmad-ingest?
bmad-ingest installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.