[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71GSP80640KD3FFMAS5TXKR":3,"skill-same:01M71GSP80640KD3FFMAS5TXKR":86},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":14,"repositoryHtmlUrl":69,"repositoryHomepageUrl":6,"ownerHtmlUrl":70,"ownerBlogUrl":6,"ownerDescription":71,"updatedAt":72,"install":73,"resources":85},"01M71GSP80640KD3FFMAS5TXKR","meeting-ingestion",null,"Ingest meeting transcripts into brain pages with attendee enrichment, entity\npropagation, and timeline merge. A meeting is NOT fully ingested until the\nenrich skill has processed every entity.","weareturnone\u002Fgbrain","weareturnone","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F106660686?v=4","01M71GRFW4YZ9DFYK6J17YXQNB","Roelof Stoelwinder ","01M71GRFWVQF5ASVB08TP5VKWG",0,"MIT","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fmeeting-ingestion\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"meeting ingestion","meeting","ingestion","query","true","enrich","with","people","propagation","pages","get","merge","ingest","process","meetings","page","enrichment","search","transcript","notes","2026-11-10 10:12:30",false,"---\nname: meeting-ingestion\nversion: 1.0.0\ndescription: |\n  Ingest meeting transcripts into brain pages with attendee enrichment, entity\n  propagation, and timeline merge. A meeting is NOT fully ingested until the\n  enrich skill has processed every entity.\ntriggers:\n  - \"meeting transcript\"\n  - \"process this meeting\"\n  - \"meeting notes\"\n  - meeting transcript received\ntools:\n  - search\n  - query\n  - get_page\n  - put_page\n  - add_link\n  - add_timeline_entry\nmutating: true\nwrites_pages: true\nwrites_to:\n  - meetings\u002F\n  - people\u002F\n  - companies\u002F\n---\n\n# Meeting Ingestion Skill\n\n> **Filing rule:** Read `skills\u002F_brain-filing-rules.md` before creating any new page.\n\n## Contract\n\nThis skill guarantees:\n- Meeting page created with attendees, summary, key decisions, action items\n- EVERY attendee gets a people page (created or updated)\n- EVERY company discussed gets entity propagation\n- Timeline entries on ALL mentioned entities (timeline merge)\n- Meeting is NOT fully ingested until enrich runs for every entity\n- Back-links created bidirectionally\n\n> **Convention:** See `skills\u002Fconventions\u002Fquality.md` for Iron Law back-linking.\n\nEvery attendee and company mentioned MUST get a back-link from their page to\nthe meeting page. An unlinked mention is a broken brain.\n\n## Phases\n\n### Phase 1: Parse the transcript\n\nExtract from the transcript:\n- Attendees (names, roles if available)\n- Date, time, duration\n- Key topics discussed\n- Decisions made\n- Action items with owners\n- Companies and projects mentioned\n\n### Phase 2: Create meeting page\n\n```markdown\n# {Meeting Title} — {Date}\n\n**Attendees:** {list with links to people pages}\n**Date:** {YYYY-MM-DD}\n**Duration:** {if available}\n\n## Summary\n{3-5 bullet key outcomes}\n\n## Key Decisions\n{Decisions with context}\n\n## Action Items\n{Tasks with owners and deadlines}\n\n## Discussion Notes\n{Structured notes by topic}\n```\n\n### Phase 3: Attendee enrichment (MANDATORY)\n\nFor EACH attendee:\n1. `gbrain search \"{name}\"` — does a people page exist?\n2. If NO → create via enrich skill (this is mandatory, not optional)\n3. If YES → update compiled truth with meeting context\n4. Add timeline entry on the person's page:\n   `gbrain timeline-add \u003Cperson-slug> \u003Cdate> \"Attended \u003Cmeeting-title>\"`\n\n**Note (v0.10.1):** Once the meeting page is written via `gbrain put`, the\nauto-link post-hook automatically creates `attended` links from the meeting\nto each attendee whose page is referenced as `[Name](people\u002Fslug)`. You don't\nneed to call `gbrain link` for attendees. You DO still need `gbrain timeline-add`\nfor dated events (auto-link only handles links, not timeline entries).\n\n### Phase 4: Entity propagation (MANDATORY)\n\nFor each company, project, or concept discussed:\n1. Check brain for existing page\n2. Create\u002Fupdate as needed\n3. Add timeline entry referencing the meeting\n4. Back-link from entity page to meeting page\n\n### Phase 5: Timeline merge\n\nThe same event appears on ALL mentioned entities' timelines. If Alice met Bob at\nAcme Corp, the event goes on Alice's page, Bob's page, AND Acme Corp's page.\n\n### Phase 6: Sync\n\n`gbrain sync` to update the index.\n\n## Output Format\n\nMeeting page created. Report: \"Meeting ingested: {N} attendees enriched, {N} entities\nupdated, {N} action items captured.\"\n\n## Anti-Patterns\n\n- Creating the meeting page without enriching attendees\n- Skipping entity propagation (\"I'll do that later\")\n- Not merging timelines across all mentioned entities\n- Creating attendee stubs without meaningful content\n- Filing meeting pages without cross-linking to all participants\n","# Meeting Ingestion Skill\n\n> **Filing rule:** Read `skills\u002F_brain-filing-rules.md` before creating any new page.\n\n## Contract\n\nThis skill guarantees:\n- Meeting page created with attendees, summary, key decisions, action items\n- EVERY attendee gets a people page (created or updated)\n- EVERY company discussed gets entity propagation\n- Timeline entries on ALL mentioned entities (timeline merge)\n- Meeting is NOT fully ingested until enrich runs for every entity\n- Back-links created bidirectionally\n\n> **Convention:** See `skills\u002Fconventions\u002Fquality.md` for Iron Law back-linking.\n\nEvery attendee and company mentioned MUST get a back-link from their page to\nthe meeting page. An unlinked mention is a broken brain.\n\n## Phases\n\n### Phase 1: Parse the transcript\n\nExtract from the transcript:\n- Attendees (names, roles if available)\n- Date, time, duration\n- Key topics discussed\n- Decisions made\n- Action items with owners\n- Companies and projects mentioned\n\n### Phase 2: Create meeting page\n\n```markdown\n# {Meeting Title} — {Date}\n\n**Attendees:** {list with links to people pages}\n**Date:** {YYYY-MM-DD}\n**Duration:** {if available}\n\n## Summary\n{3-5 bullet key outcomes}\n\n## Key Decisions\n{Decisions with context}\n\n## Action Items\n{Tasks with owners and deadlines}\n\n## Discussion Notes\n{Structured notes by topic}\n```\n\n### Phase 3: Attendee enrichment (MANDATORY)\n\nFor EACH attendee:\n1. `gbrain search \"{name}\"` — does a people page exist?\n2. If NO → create via enrich skill (this is mandatory, not optional)\n3. If YES → update compiled truth with meeting context\n4. Add timeline entry on the person's page:\n   `gbrain timeline-add \u003Cperson-slug> \u003Cdate> \"Attended \u003Cmeeting-title>\"`\n\n**Note (v0.10.1):** Once the meeting page is written via `gbrain put`, the\nauto-link post-hook automatically creates `attended` links from the meeting\nto each attendee whose page is referenced as `[Name](people\u002Fslug)`. You don't\nneed to call `gbrain link` for attendees. You DO still need `gbrain timeline-add`\nfor dated events (auto-link only handles links, not timeline entries).\n\n### Phase 4: Entity propagation (MANDATORY)\n\nFor each company, project, or concept discussed:\n1. Check brain for existing page\n2. Create\u002Fupdate as needed\n3. Add timeline entry referencing the meeting\n4. Back-link from entity page to meeting page\n\n### Phase 5: Timeline merge\n\nThe same event appears on ALL mentioned entities' timelines. If Alice met Bob at\nAcme Corp, the event goes on Alice's page, Bob's page, AND Acme Corp's page.\n\n### Phase 6: Sync\n\n`gbrain sync` to update the index.\n\n## Output Format\n\nMeeting page created. Report: \"Meeting ingested: {N} attendees enriched, {N} entities\nupdated, {N} action items captured.\"\n\n## Anti-Patterns\n\n- Creating the meeting page without enriching attendees\n- Skipping entity propagation (\"I'll do that later\")\n- Not merging timelines across all mentioned entities\n- Creating attendee stubs without meaningful content\n- Filing meeting pages without cross-linking to all participants\n",{"name":5,"tools":49,"version":54,"mutating":55,"triggers":56,"writes_to":61,"description":65,"writes_pages":55},[41,27,50,51,52,53],"get_page","put_page","add_link","add_timeline_entry","1.0.0",true,[57,58,59,60],"meeting transcript","process this meeting","meeting notes","meeting transcript received",[62,63,64],"meetings\u002F","people\u002F","companies\u002F","Ingest meeting transcripts into brain pages with attendee enrichment, entity\npropagation, and timeline merge. A meeting is NOT fully ingested until the\nenrich skill has processed every entity.\n","master","1fd9e273fe234ffb8d2a7705955f087f861a5c3d","skills\u002Fmeeting-ingestion","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain","https:\u002F\u002Fgithub.com\u002Fweareturnone","I have a passion for operations, systems and doing good for the world.","2026-07-08 23:38:19",{"source":8,"skillName":5,"commands":74,"prompt":84,"zipAvailable":55},[75,78,81],{"tool":76,"command":77},"npx","npx skills add weareturnone\u002Fgbrain --skill meeting-ingestion",{"tool":79,"command":80},"bunx","bunx skills add weareturnone\u002Fgbrain --skill meeting-ingestion",{"tool":82,"command":83},"pnpm","pnpm dlx skills add weareturnone\u002Fgbrain --skill meeting-ingestion","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fmeeting-ingestion\u002FSKILL.md",[],[87,104,116,131,145,165],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":44},"01M71GTZ2PH49PD2R6RR7MHJZP","signal-detector","Always-on ambient signal capture for the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fsignal-detector\u002FSKILL.md",[],[94,95,96,97,98,99,100,101,102,103],"signal","signal detector","detector","for","openclaw","capture","reference","message","fixture","ambient",{"skillNo":105,"name":27,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":44},"01M71GTY1250DC73PGRWDE82KW","Look up brain pages in the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fquery\u002FSKILL.md",[],[27,110,100,111,98,112,33,113,114,41,115,97,102],"do","lookup","look","up","brain","about",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":122,"publishedAt":44},"01M71GTX0T1T9224P29SD7CSG7","context-now","ALWAYS-ON time-sensitivity discipline for the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fcontext-now\u002FSKILL.md",[],[123,124,125,126,127,98,97,128,100,102,129,130],"context","context now","now","time","how","discipline","sensitivity","long",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":44},"01M71GTVZJTSWXBM4ZRF4A7QVA","brain-ops","Core read\u002Fwrite cycle for the OpenClaw reference fixture.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fopenclaw-reference-minimal\u002Fskills\u002Fbrain-ops\u002FSKILL.md",[],[138,114,139,140,111,98,31,100,28,97,141,142,143,102,144],"brain ops","ops","Citation","read","cycle","core","write",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":44},"01M71GTT4F64V9RMNZ0WRTKWNG","webhook-transforms","Generic framework for converting external events (SMS, meetings, social mentions)\ninto brain-ingestible signals. Define a transform function, register a webhook URL,\nand incoming events get processed through the brain pipeline.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fwebhook-transforms\u002FSKILL.md",[],[152,153,154,155,156,113,38,157,158,159,28,160,41,161,162,39,97,163,164,34],"webhook","transforms","webhook transforms","SET","register","signals","URL","define","social","event","pipeline","sms","generic",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":182,"publishedAt":44},"01M71GTRDKSM500PRZEXFNQHF9","testing","Skill validation framework. Validates every skill has SKILL.md with frontmatter,\nevery reference exists, every env var is declared. The testing contract for the\nskill system itself.","https:\u002F\u002Fgithub.com\u002Fweareturnone\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Ftesting\u002FSKILL.md",[171,176,179],{"categoryNo":172,"categoryName":173,"taxonomyType":174,"taxonomyTypeDesc":175},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":177,"categoryName":178,"taxonomyType":174,"taxonomyTypeDesc":175},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":180,"categoryName":181,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[167,183,184,185,186,187,30,188,189,190,191,192,193,194,33,195,41,196,197,97],"test skills","validation","run","health check","test","health","check","env","skill validation","false","contract","tests","skill health","system","validate skills"]