HyperFrames Media Use
heygen-com/hyperframes
Finds, generates and edits media for HyperFrames video projects: music, sound effects, images, icons, logos, voiceovers, captions and color grades.
Ingest meeting transcripts from ANY meeting recorder into brain pages with attendee enrichment, entity propagation, and timeline merge.
$ npx skills add garrytan/gbrain --skill meeting-ingestion -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install garrytan/gbrain meeting-ingestion --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/meeting-ingestion .claude/skills/meeting-ingestion && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "meeting-ingestion" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/meeting-ingestion into .claude/skills/meeting-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "meeting-ingestion", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/garrytan/gbrain/tree/master/skills/meeting-ingestionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add garrytan/gbrain --skill meeting-ingestion -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install garrytan/gbrain meeting-ingestion --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/meeting-ingestion .agents/skills/meeting-ingestion && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "meeting-ingestion" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/meeting-ingestion into .agents/skills/meeting-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "meeting-ingestion", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add garrytan/gbrain --skill meeting-ingestion -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install garrytan/gbrain meeting-ingestion --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/meeting-ingestion .cursor/skills/meeting-ingestion && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "meeting-ingestion" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/meeting-ingestion into .cursor/skills/meeting-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "meeting-ingestion", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/garrytan/gbrain.git --path skills/meeting-ingestion--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add garrytan/gbrain --skill meeting-ingestion -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install garrytan/gbrain meeting-ingestion --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/meeting-ingestion .gemini/skills/meeting-ingestion && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "meeting-ingestion" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/meeting-ingestion into .gemini/skills/meeting-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "meeting-ingestion", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install garrytan/gbrain meeting-ingestionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add garrytan/gbrain --skill meeting-ingestion -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/meeting-ingestion .github/skills/meeting-ingestion && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "meeting-ingestion" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/meeting-ingestion into .github/skills/meeting-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "meeting-ingestion", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add garrytan/gbrain --skill meeting-ingestion -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install garrytan/gbrain meeting-ingestion --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/garrytan/gbrain.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/meeting-ingestion .opencode/skills/meeting-ingestion && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "meeting-ingestion" agent skill from https://github.com/garrytan/gbrain/tree/master/skills/meeting-ingestion into .opencode/skills/meeting-ingestion/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "meeting-ingestion", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
meeting-ingestionIngest meeting transcripts from ANY meeting recorder into brain pages with attendee enrichment, entity propagation, and timeline merge.
Meeting Ingestion is an agent skill from garrytan/gbrain. Ingest meeting transcripts from ANY meeting recorder into brain pages with attendee enrichment, entity propagation, and timeline merge. One unified pipeline: normalize the source into a standard transcript record, split multi-meeting recordings, resolve speakers by evidence, create the page, pass every surprising claim through the consistency check (transcript + brain + plausibility), enrich every entity, then run the verification checklist — substance AND sequence. A meeting is NOT fully ingested until the…
Its SKILL.md is about 7.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file.
It sits in Media & Creative, covering Transcription. The repository describes itself as: Garry's Opinionated OpenClaw/Hermes Agent Brain. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f250a51. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash, yaml and markdown).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Meeting Ingestion loads about 7.7k tokens when it runs. Until then it costs about 168 tokens; SKILL.md has 3,996 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from garrytan/gbrain at commit f250a51, republished under its MIT licence (© garrytan). 3,996 words, ~7,680 tokens.
.claude/skills/meeting-ingestion/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Filing rule: Read
skills/_brain-filing-rules.mdbefore creating any new page.
Convention: See
skills/conventions/quality.mdfor Iron Law back-linking, andskills/conventions/brain-first.mdfor the lookup chain — resolve every name against the brain BEFORE reaching for external lookups.
This skill guarantees:
Every attendee and company mentioned MUST get a back-link from their page to the meeting page. An unlinked mention is a broken brain.
Meeting content arrives from many sources: an AI notetaker (Granola and Circleback are common examples), a phone voice memo, a video-call transcript export, or a transcript the user pastes directly. Do NOT build per-vendor pipelines or paraphrase this skill in ad-hoc instructions — normalize whatever the source provides into the transcript record below, then run the shared phases. Source-specific logic ends at normalization.
Before running the pipeline, reduce the input to this shape (mentally or as a scratch file — it does not get written to the brain as-is):
source: "<recorder name, or 'manual'>"
source_id: "<unique recording id from the source, if any>"
title: "Meeting Title"
date: YYYY-MM-DD
time: "HH:MM TZ" # null if unknown
duration: "45m" # null if unknown
attendees: # the SOURCE'S notion of who was there —
- name: "..." # may need correction during speaker resolution
email: "..." # only if the source provides it
role: "..." # only if known
transcript_segments: # structured form when the source diarizes
- speaker: "..." # resolved name OR "UNKNOWN_N" if unresolved
speaker_raw: "..." # the source's raw speaker label, for traceability
text: "..."
raw_transcript_text: "..." # the complete transcript. NEVER truncate.
source_summary: "..." # the recorder's AI summary if present — a CLAIM, not a FACT
source_url: "..." # link back to the source platform, if anyInvariants:
raw_transcript_text is complete and untruncated. Always.attendees is a claim by the source. People invited ≠ people present.source_summary is TWO lossy layers deep (speech-to-text, then AI
summarization). Both layers confabulate. Verify before writing anything
from it into the brain.Retain the raw transcript when the source provides one: file it as a sidecar
page with type: source at sources/meetings/YYYY-MM-DD-{slug}-transcript
(the default pack files raw evidence as source under sources/; never
invent meeting-transcript, and don't write the transcript alias) or keep
the source file reachable, and link it from the meeting page. The transcript is the canonical
evidence for every quote and claim check downstream. Put
facts_backstop: false in the sidecar's frontmatter: automatic fact
extraction would otherwise mine the raw transcript, garbles and banter
included, beside the verified meeting page (Phase 5).
Redact before you retain. A raw transcript routinely captures pasted
secrets and PII (a read-aloud API key, a screen-shared token, a private phone
number). Before writing the sidecar, scan for secret-shaped strings (sk-…,
ghp_…, AKIA…, bearer tokens, long hex/base64 blobs) and PII, and redact
matches to labeled placeholders — same deterministic deny-list /
runPrivacyLint model as conversation-archive. "Untruncated" means the
transcript's substance, never a live credential.
Build the transcript record from whatever arrived. If the input is malformed (empty transcript, summary-only payload with no transcript, in-progress recording), STOP — do not create a meeting page from a summary alone. Surface the problem to the user.
For raw transcript files with no structure at all, gbrain capture is the
preferred entry (it handles dedup and frontmatter routing); this pipeline is
for building structured meeting pages.
A single recording is often several distinct meetings stitched together (a recorder left running across back-to-back sessions). Detect this BEFORE page creation, so each real meeting becomes its own page and dedupes/enriches correctly.
Split signals (one is enough to investigate; two or more = split almost certainly):
When a split is detected:
source_id so dedup never re-merges them.Borderline judgment: same people + one flowing conversation that wanders topics = ONE meeting; don't over-split. The test is roster + hard context break, not "the topic changed." If you genuinely cannot tell, surface the boundary to the user rather than guessing.
Users increasingly run two recorders at once as a backup. Before creating a
page, check whether the same meeting already exists:
gbrain search "{title or attendee names}", then match by date ± 1 day +
attendee overlap ≥ 50% + similar title.
Recorders ship anonymous labels (UNKNOWN_N, Participant 2, microphone)
and sometimes confidently WRONG names. Resolve by evidence:
[Room] or UNKNOWN and flag it.
A wrong attribution is worse than no attribution.gbrain search "{name}" for each candidate;
read their page before accepting an identification.high (roster-confirmed), medium
(named unambiguously in the transcript), low (inferred from content —
flag explicitly).---
type: meeting
attendees: [{comma-separated slugs of the same people, e.g. people/alice-example}]
facts_backstop: false
---
# {Meeting Title} — {Date}
Attendees: {comma-separated links to the people pages of everyone in the room}
**Date:** {YYYY-MM-DD}
**Duration:** {if available}
## Summary
{3-5 bullet key outcomes}
## Key Decisions
{Decisions with context. If none: _No decisions — discussion only._}
## Action Items
{Tasks with owners and deadlines. If none: _None — exploratory conversation._}
## Notable Quotes
{Verbatim from the transcript, attributed, `>` blockquotes.
If none: _No notable quotes — operational/logistics meeting._}
## Discussion Notes
{Structured notes by topic}The Attendees: line is the page's attendance record, and the link extractor
reads it literally. Write it as one line that starts with Attendees: (no
bold markup) and holds only links to people pages, one per person who was in
the room, separated by commas (no "and"). Link a person only when the
identification is high or medium confidence (Phase 4). Put a company, role,
speaker confidence, a low-confidence guess, or an unresolved speaker such as
UNKNOWN_2 in Discussion Notes instead: any extra text on the line stops the
extractor from reading it as the attendance record, and a line wrapped onto a
second line loses everyone after the break. Leave people who were only
invited or mentioned off the line. The attendees: frontmatter lists
exactly the same people by slug; extraction reads it as a second attendance
record, so the two must agree.
The four required sections are Summary, Key Decisions, Action Items, and
Notable Quotes — additional sections (Discussion Notes, a link to the
transcript sidecar) are additive, never replacements. An empty section always
carries an explicit reason; a bare - None. is a dodge, not an answer.
Quotes are VERBATIM. Write what was said the way it was said — a paraphrase in a blockquote is a fabricated quote.
Timeline events (life/events/) are extracted from the saved meeting page in
the background (Life Chronicle, on by default; one paid chat call per page).
Check the write receipt: chronicle_backstop.pending: "next_cycle" means the
next cycle extracts it (gbrain dream --phase chronicle runs it now, paid), and
chronicle_backstop.skipped names the reason and its fix. Never hand-write
life/events/ pages; edit the meeting page and extraction updates its events.
See docs/guides/life-chronicle.md.
Facts (what recall returns) are also extracted from saved pages in the
background, on by default, one paid chat call each time a page's body changes.
Extraction files each fact on the entity page it names, so it reaches people
and company pages without passing Phase 6, and it never takes back facts it
filed from an earlier version of the page. That is why the template drafts
the meeting page with facts_backstop: false (the receipt reads
facts_backstop: { skipped: "opted_out" }): nothing is extracted while the
page is still being corrected. When the verification checklist passes, save
the page once more without that line; the receipt then reads
facts_backstop: { queued: true }. Everything on the verified page is
extraction input, so an uncertain note kept under the downgrade protocol
becomes a lower-confidence fact. The transcript sidecar keeps its
facts_backstop: false. Don't call extract_facts for the meeting or its
transcript.
Recorder summaries inject false facts: speech-to-text garbles proper nouns, and AI summaries turn banter into commitments. Before writing ANY of the following claim types to a person/company page (compiled truth, frontmatter, or timeline), verify:
| Claim type | Verification bar |
|---|---|
| Relationship/role change ("joined as cofounder", "became CTO", "left widget-co") | Find the verbatim transcript lines. The claim must be EXPLICIT in what was said, not an inference from enthusiasm. |
| Ownership/attribution ("her project", "his company") | A speaker saying a word ≠ owning the thing. Require explicit ownership language or brain corroboration. |
| New proper nouns (project/company/product names not already in the brain) | Search the brain and the web for the canonical spelling first. If unresolvable, annotate (unverified spelling) — never write it bare. |
| Major life/deal events (raised, acquired, hired, shut down) | Verbatim transcript support required. These propagate the furthest and are the most expensive to be wrong about. |
Consistency check — transcript support alone is NOT sufficient. A claim can be faithfully transcribed and still wrong. Every claim that passes the transcript bar ALSO gets:
gbrain query "{entity}" and read the
relevant pages. Does the new claim CONTRADICT established brain truth?
When it does, the ESTABLISHED truth wins by default — flag the conflict to
the user, don't silently overwrite. New claims override old truth only with
explicit, verbatim, unambiguous transcript support, and even then the
change is flagged in the ingest report.Downgrade protocol: if the transcript supports only an inference, record it as an explicitly-uncertain note on the meeting page — never in an entity page's compiled truth or frontmatter.
Propagation rule: a claim that fails verification must not fan out. Do not copy it to other entity pages or timeline entries, and keep it off the verified meeting page too: fact extraction carries that page's claims to entity pages (Phase 5). A false claim written to five pages costs five corrections.
For EACH attendee:
gbrain search "{name}" — does a people page exist?skills/enrich/SKILL.md). Every
person who was actually IN the meeting gets a page, even a thin one. Skip
only ephemeral third-party mentions (a name invoked about someone not
present, with no standalone context) and non-participants (a server taking
orders).gbrain timeline-add {person-slug} {date} "Attended {meeting-title}"Back-link known people who are MENTIONED or SPEAK in the transcript too, not just attendees — but high-confidence identifications only. Never backlink a garbled name or a low-confidence guess; a wrong backlink pollutes the graph worse than a missing one.
Note: Once the meeting page is written via gbrain put, the auto-link
post-hook reads attendance from the page. Where the active schema pack does
not override attendance (gbrain-base-v2, which gbrain init sets), each
person on the Attendees: line and in attendees: frontmatter (Phase 5) gets a
person --attended--> meeting edge, and people linked anywhere else on the
page are not recorded as attendance; a pack that overrides attendance, such as
the older gbrain-base, sets its own rule and direction. Leave attendance to
auto-link rather than gbrain link or add_link: a hand-written attended
edge can point the wrong way. Over MCP, put_page does not auto-link inline
(the receipt says auto_links.skipped: remote). It queues plain mentions
edges to pages that already exist (auto_links.mention_links: queued), but
never the typed attended edges. Those come from a maintenance pass: a stdio
gbrain serve runs it on its startup and idle sweeps; behind
gbrain serve --http the host runs gbrain sweep --once or
gbrain extract links --source db. No MCP tool runs that pass for you, so
over HTTP ask the host operator, and don't hand-write attended with
add_link.
A missing attended edge has one of two causes. Either the attendee record
breaks a Phase 5 rule, or it names a person whose page did not exist when the
meeting page was written; auto-link then reports an error and writes none of
the page's links. This skill creates new people pages in Phase 7, after the
meeting page, so once Phase 7 is done run gbrain extract --stale (over MCP,
the sweep above) to link the page. You DO still need gbrain timeline-add for
dated events (auto-link only handles links, not timeline entries).
For each company, project, or concept discussed:
gbrain search, then gbrain get).Timeline merge: the same event appears on ALL mentioned entities' timelines. If alice-example met charlie-example at acme-example, the event goes on alice-example's page, charlie-example's page, AND acme-example's page. For a multi-company session (e.g. group office hours), disaggregate the feedback per company — each company's timeline entry carries its own content, not a blob about the whole session.
If the meeting contains original thinking worth extracting beyond the page
itself, chain into skills/signal-detector/SKILL.md after ingestion.
The pages are already in the brain; this step catches the index up to the brain repo checkout. Use the form that matches the brain:
gbrain sync --source <id> --no-pull.
A managed checkout moves only through gbrain sources refresh <id>, never
through sync, so a bare gbrain sync there would pull the checkout behind
the coordinator's back.gbrain sync.If you can't tell which, use gbrain sync --source <id> --no-pull: it is
correct on both and never moves the checkout.
The write phases do the work; this phase verifies the work was actually done. Run the checklist on the finished page — every item, every meeting, including "quick" logistics meetings. Never report a meeting as ingested until every item passes. Saying "ingested" first and fixing later is a contract violation; a false completion report is worse than an honest partial one.
V1 — Required sections have substance.
## Summary carries real outcomes (2+ bullets or a few substantive
sentences), not one vague line.## Key Decisions, ## Action Items, and ## Notable Quotes each have
real content OR an explicit reason (_None — exploratory conversation._).- None. or _n/a_ written to silence the checklist is a violation.
Before writing "none", confirm against the transcript that there truly were
no decisions/commitments/quotes worth keeping.V2 — Every people/companies slug has a page AND a timeline backlink. For each person/company slug referenced by the meeting page:
gbrain get people/{slug} # page exists?
gbrain timeline people/{slug} # has an entry pointing back at this meeting?A slug with no page means Phase 7/8 was skipped — go do it. A page with no timeline entry for this meeting means the merge was incomplete — add it.
V3 — Speaker map resolved.
No Participant N / UNKNOWN_N / raw recorder labels remain in the page
without either a resolution or an explicit uncertainty flag ([Room],
⚠️ attribution uncertain). Every named speaker carries a confidence from
Phase 4. An unflagged anonymous label means speaker resolution was skipped.
V4 — Every quote grounded VERBATIM in the transcript.
> blockquote,
verify its contiguous span appears in the transcript sidecar. Filler words
(like, you know, I mean) may be stripped from both sides; a genuine
quote still shares a long contiguous run of content words, a fabricated one
does not.gbrain get sources/meetings/{date}-{slug}-transcript # then locate each quote spanV5 — Fabricated-attendee sanity checks. Recorders confidently invent names and emails for unlabeled speakers.
V6 — Sequence verify (order, not substance). A meeting page can be right on depth and wrong on order — they are independent failure axes, and V1–V5 never look at order. Verify the narrated sequence:
{phase, place, people} — where phase is its
position relative to the meeting's central event (before / during / after)
as the PROSE claims it.gbrain day {date}sequence: WAIVED by user — {contradiction} stands.The loop: fix → re-check → fix, until every item passes (or V6 is
explicitly waived). Then save the meeting page without the draft
facts_backstop: false line (Phase 5), and report.
If the title or transcript signals legal or deeply personal content
(deposition, attorney, counsel, privileged, health): keep the page minimal and
factual, keep its facts_backstop: false unless the user agrees to fact
extraction, do not extract biographical color into other pages, and prefer
restraint on back-links. When in doubt about whether content should propagate,
ask the user.
Meeting page created AND the verification checklist passed. Report: "Meeting
ingested: {N} attendees enriched, {N} entities updated, {N} action items
captured. Verification: passed. Sequence: PASS." If the sequence check was
waived, say so explicitly: "Sequence: WAIVED by user — {contradiction} stands
(acknowledged, not resolved)." If the recording was split, report one line per
resulting meeting page. Name the final meeting-page save's facts_backstop
receipt: queued, or opted_out with the reason extraction stays off (a
sensitive meeting the user did not clear). If a claim was withheld or a contradiction flagged by
Phase 6, list each flag — the user resolves them, not silence. If any
checklist item cannot be made to pass, report the meeting as NOT ingested and
name the failing item.
Follow the agent operator protocol for any gbrain error code, exit code, [AGENT] block or notice block. Specific to this skill:
add_link / auto-link reports an error after the meeting page was written: the page is saved but the links are not; list the failed links and add them after fixing slugs.put_page returns revision_conflict on an attendee page: re-read and merge; never overwrite a person page from an old read.[Room]/UNKNOWN and flagging- None. under a required section to silence the checklist without
confirming against the transcript© garrytan, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in skills/meeting-ingestion of garrytan/gbrain.
Open the folder on GitHubat commit f250a51
Meeting Ingestion next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Meeting Ingestion this skillgarrytan/gbrain | 31k | — | ~7.7k | Automated safety check: Pass | MIT | |
| HyperFrames Media Useheygen-com/hyperframes | 60k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Native Subtitle Quote Imagechengyi-ai/native-subtitle-quote-image | 2.6k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Edu Chem Videowy51ai/edulab | 1.4k | — | ~2.1k | Automated safety check: Notes | Apache-2.0 | |
| Transcription Memory ReconstructionNxcoreAI/EverRoom | 3k | — | ~714 | Automated safety check: Pass | Custom licence | |
| Edu Math Videowy51ai/edulab | 1.4k | — | ~2.5k | Automated safety check: Notes | Apache-2.0 |
heygen-com/hyperframes
Finds, generates and edits media for HyperFrames video projects: music, sound effects, images, icons, logos, voiceovers, captions and color grades.
chengyi-ai/native-subtitle-quote-image
将本地视频或用户有权处理的在线视频,经过来源获取、文字稿定位、选题选句、精确取帧、紧凑裁切、拼图和逐张质检,制作成 3:4 或保留画面原比例的视频字幕长图。支持两种明确分开的输出:保留画面内已烧录字幕的原生字幕模式,以及把已审核的时间点与台词绘制到真实视频帧上的脚本字幕模式。用户要求原生字幕截图、字幕帧拼图、YouTube…
wy51ai/edulab
A skill your agent uses when asked to make an explainer / walkthrough video (讲解视频、解题视频、例题精讲、微课) for a chemistry problem (化学题: 氧化还原配平 双线桥 电子守恒, 物质的量计算, 化学平衡 三段式 平衡常数 转化率 反应速率, 离子反应, 电化学, 溶液 滴定…
NxcoreAI/EverRoom
Reconstruct a complete, searchable memory from an untrusted meeting or conversation transcript.
wy51ai/edulab
A skill your agent uses when asked to make an explainer / walkthrough video (讲解视频、解题视频、例题精讲、微课) for a math problem (数学题, geometry, algebra, functions, motion/行程 problems), from a problem screenshot…
JetBrains/skills
Transcribe audio files to text with optional diarization and known-speaker hints.
garrytan/gbrain
Traces a factual error the user points out back to its source (a brain page, a memory file, SOUL.md or USER.md, or a hallucination) and fixes that source instead of just noting the correction.
garrytan/gbrain
Searches and writes a company-wide knowledge brain through the gbrain CLI, so durable decisions and facts about people, projects and history stay findable beyond one session.
garrytan/gbrain
Ingest links, articles, tweets, and ideas into the brain. An agent skill from garrytan/gbrain.
garrytan/gbrain
Sends what your notes already know about a topic to Perplexity, so the cited web search reports only what is new, such as entity updates or deal changes.
garrytan/gbrain
Migrate a brain from gbrain-base (or any pack) to gbrain-base-v2's 14-canonical-type taxonomy via gbrain onboard --check + the unify-types Minion handler.
garrytan/gbrain
Run gbrain skillpack-check to produce an agent-readable JSON health report for the gbrain install.
Categories
Ingest meeting transcripts from ANY meeting recorder into brain pages with attendee enrichment, entity propagation, and timeline merge. Meeting Ingestion is an agent skill from garrytan/gbrain. Ingest meeting transcripts from ANY meeting recorder into brain pages with attendee enrichment, entity propagation, and timeline merge.
Meeting Ingestion fits situations like: tasks that involve Transcription.
Run `npx skills add garrytan/gbrain --skill meeting-ingestion -a claude-code`. Or copy the skill folder (skills/meeting-ingestion in garrytan/gbrain) into .claude/skills/meeting-ingestion in your project. Claude Code loads it when a task matches its description.
Run `npx skills add garrytan/gbrain --skill meeting-ingestion -a codex`. Or copy the skill folder (skills/meeting-ingestion in garrytan/gbrain) into .agents/skills/meeting-ingestion in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add garrytan/gbrain --skill meeting-ingestion -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/meeting-ingestion, .gemini/skills/meeting-ingestion, .github/skills/meeting-ingestion and .opencode/skills/meeting-ingestion in your project.
SKILL.md names no scripts, command-line tools or credentials: Meeting Ingestion is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Meeting Ingestion is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.7k tokens (SKILL.md is roughly 31k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Meeting Ingestion: HyperFrames Media Use (heygen-com/hyperframes, 60k stars), Native Subtitle Quote Image (chengyi-ai/native-subtitle-quote-image, 2.6k stars), Edu Chem Video (wy51ai/edulab, 1.4k stars) and Transcription Memory Reconstruction (NxcoreAI/EverRoom, 3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
garrytan (a GitHub user) maintains it in garrytan/gbrain, which has 30,736 GitHub stars. The repository holds 47 skills in this directory. The repository was last updated on October 10, 2026.
Source: garrytan/gbrain on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.