[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N0N5P13NBWM07C84JQMQ18":3,"skill-same:01M6N0N5P13NBWM07C84JQMQ18":84},{"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":18,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":62,"commitSha":63,"skillDirectory":64,"forksCount":65,"repositoryHtmlUrl":66,"repositoryHomepageUrl":6,"ownerHtmlUrl":67,"ownerBlogUrl":68,"ownerDescription":69,"updatedAt":70,"install":71,"resources":83},"01M6N0N5P13NBWM07C84JQMQ18","enrich",null,"Enrich brain pages with tiered enrichment protocol. Creates and updates\nperson\u002Fcompany pages with compiled truth, timeline, and cross-links.\nUse when a new entity is mentioned or an existing page needs updating.","garrytan\u002Fgbrain","garrytan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F19957?v=4","01M6DJCCDDG53MTYYRTXAXFG17","Garry Tan","01M6MZQZCEN3RRMD33E1X9ZZR9",32847,"MIT","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fenrich\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"add","new","when","company","Existing","updates","true","links","people","backlinks","create","pages","brain","get","query","up","use","who is this","page","search","update","2026-11-10 10:12:30",false,"---\nname: enrich\nversion: 1.0.0\ndescription: |\n  Enrich brain pages with tiered enrichment protocol. Creates and updates\n  person\u002Fcompany pages with compiled truth, timeline, and cross-links.\n  Use when a new entity is mentioned or an existing page needs updating.\ntriggers:\n  - \"enrich\"\n  - \"create person page\"\n  - \"update company page\"\n  - \"who is this person\"\n  - \"look up this company\"\ntools:\n  - get_page\n  - put_page\n  - search\n  - query\n  - add_link\n  - add_timeline_entry\n  - get_backlinks\nmutating: true\nwrites_pages: true\nwrites_to:\n  - people\u002F\n  - companies\u002F\n---\n\n# Enrich Skill\n\nEnrich person and company pages from external sources. Scale effort to importance.\n\n## Contract\n\nThis skill guarantees:\n- Every enriched page has compiled truth (State section) with inline citations\n- Every enriched page has a timeline with dated entries\n- Back-links are created bidirectionally\n- Tiered enrichment: Tier 1 (full), Tier 2 (medium), Tier 3 (minimal) based on notability\n- No stubs: every new page has meaningful content from web search or existing brain context\n\n> **Filing rule:** Read `skills\u002F_brain-filing-rules.md` before creating any new page.\n\n> **Convention:** See `skills\u002Fconventions\u002Fquality.md` for Iron Law back-linking.\n\nEvery mention of a person or company with a brain page MUST create a back-link\nFROM that entity's page TO the page mentioning them. An unlinked mention is a\nbroken brain. See `skills\u002F_brain-filing-rules.md` for format.\n\n## Philosophy\n\nA brain page should read like an intelligence dossier, not a LinkedIn scrape.\nFacts are table stakes. Texture is the value -- what do they believe, what are\nthey building, what makes them tick, where are they headed.\n\n## Citation Requirements (MANDATORY)\n\n> **Convention:** see `skills\u002Fconventions\u002Fquality.md` for citation formats and source precedence.\n\nWhen sources conflict, note the contradiction with both citations.\n\n## When To Enrich\n\n### Primary triggers\n- User mentions an entity in conversation\n- Entity appears in a meeting transcript or email\n- New contact appears with significant context\n- Entity makes news or has a major event\n- Any ingest pipeline encounters a notable entity\n\n### Do NOT enrich\n- Random mentions with no relationship signal\n- Bot\u002Fspam accounts\n- Entities with no substantive connection to the user's work\n- Same page enriched within the past week (unless new signal warrants it)\n\n## Enrichment Tiers\n\nScale enrichment to importance. Don't waste API calls on low-value entities.\n\n| Tier | Who | Effort | Sources |\n|------|-----|--------|---------|\n| 1 (key) | Inner circle, close collaborators, key contacts | Full pipeline | All available APIs + deep web research |\n| 2 (notable) | Occasional interactions, industry figures | Moderate | Web research + social + brain cross-ref |\n| 3 (minor) | Worth tracking, not critical | Light | Brain cross-ref + social lookup if handle known |\n\n## The Enrichment Protocol (7 Steps)\n\n### Step 1: Identify entities\n\nExtract people, companies, concepts from the incoming signal.\n\n### Step 2: Check brain state\n\nFor each entity:\n- `gbrain search \"name\"` -- does a page already exist?\n- **If yes:** UPDATE path (add new signal, update compiled truth if material)\n- **If no:** CREATE path (check notability gate first, then create)\n\n### Step 3: Extract signal from source\n\nDon't just capture facts. Capture texture:\n\n| Signal Type | What to Extract |\n|-------------|----------------|\n| Opinions, beliefs | What They Believe section |\n| Current projects, features shipped | What They're Building section |\n| Ambition, career arc, motivation | What Motivates Them section |\n| Topics they return to obsessively | Hobby Horses section |\n| Who they amplify, argue with, respect | Network \u002F Relationships |\n| Ascending, plateauing, pivoting? | Trajectory section |\n| Role, company, funding, location | State section (hard facts) |\n\n### Step 4: External data source lookups\n\nPriority order -- stop when you have enough signal for the entity's tier.\n\n**4a. Brain cross-reference (always, all tiers)**\n- `gbrain search \"name\"` and `gbrain query \"what do we know about name\"`\n- Check related pages: company pages for person enrichment and vice versa\n- This is free and often the richest source\n\n**4b. Web research (Tier 1 and 2)**\n- Use Perplexity, Brave Search, Exa, or equivalent web research tool\n- **Key pattern:** Send existing brain knowledge as context so the search\n  returns DELTA (what's new vs what you already know), not a rehash\n- Opus-class models for Tier 1 deep research, lighter models for Tier 2\n\n**4c. Social media lookup (all tiers when handle known)**\n- Pull recent posts\u002Ftweets for tone, interests, current focus\n- Social media is the highest-texture signal for what someone actually thinks\n\n**4d. People enrichment APIs (Tier 1)**\n- LinkedIn data, career history, connections, education\n\n**4e. Company enrichment APIs (Tier 1)**\n- Company data, financials, headcount, key hires, recent news\n\n| Data Need | Example Sources | Tier |\n|-----------|----------------|------|\n| Web research | Perplexity, Brave, Exa | 1-2 |\n| LinkedIn \u002F career | Crustdata, Proxycurl, People Data Labs | 1 |\n| Career history | Happenstance, LinkedIn | 1 |\n| Funding \u002F company data | Crunchbase, PitchBook, Clearbit | 1 |\n| Social media | Platform APIs, web scraping | 1-3 |\n| Meeting history | Calendar\u002Fmeeting transcript tools | 1-2 |\n\n### Step 5: Save raw data (preserves provenance)\n\nStore raw API responses via `put_raw_data` in gbrain:\n```json\n{\n  \"source\": \"crustdata\",\n  \"fetched_at\": \"2026-04-11T...\",\n  \"query\": \"jane doe\",\n  \"data\": { ... }\n}\n```\n\nRaw data preserves provenance. If the compiled truth is ever questioned,\nthe raw data shows exactly what the API returned.\n\n### Step 6: Write to brain\n\n#### CREATE path\n\n1. Check notability gate (see `skills\u002F_brain-filing-rules.md`)\n2. Resolve the entity's type, directory and subtype from the ACTIVE schema\n   pack, never from the templates below: follow\n   `skills\u002Fbrain-taxonomist\u002FSKILL.md` (`gbrain schema show --json`, or MCP\n   `get_active_schema_pack`; `schema_explain_type` for one type). When the\n   pack declares an entity type the evidence fits better than `person` or\n   `company` (an investment firm, a protocol foundation), file it under that\n   type's directory with its subtype. If no declared type fits, say so and\n   ask; don't fall back to `companies\u002F`.\n3. Create the page from the template below, with the `type` and directory\n   from step 2. Frontmatter carries only keys the pack declares for the type or\n   that existing pages of the type already use, and only with known values:\n   omit an unknown field entirely, never write `null`, an empty value or a\n   placeholder.\n4. Fill compiled truth with citations\n5. Add first timeline entry\n6. Leave empty sections as `[No data yet]` (don't fill with boilerplate)\n7. In a batch, create the pages other pages will link to first. A link to a\n   page that doesn't exist yet is recorded as a wanted page and becomes an\n   edge once that page is written (`gbrain wanted` lists them).\n\n#### UPDATE path\n\n1. Add new timeline entries (reverse-chronological, append-only)\n2. Update compiled truth ONLY if the new signal materially changes the picture\n3. Update State section with new facts\n4. Flag contradictions between new signal and existing compiled truth\n5. Don't overwrite user-written assessments with API boilerplate\n\n#### Person page template\n\n```markdown\n---\ntitle: Full Name\ntype: person\ncreated: YYYY-MM-DD\nupdated: YYYY-MM-DD\ntags: []\ncompany: Current Company\nrelationship: How the user knows them\n# email, linkedin, twitter, location: add each only when you know it\n---\n\n# Full Name\n\n> 1-paragraph executive summary: HOW do you know them, WHY do they matter,\n> what's the current state of the relationship.\n\n## State\nRole, company, key context. Hard facts only.\n\n## What They Believe\nIdeology, first principles, worldview. What hills do they die on?\n\n## What They're Building\nCurrent projects, recent launches, what they're focused on.\n\n## What Motivates Them\nAmbition, career arc, what drives them.\n\n## Communication Style\nHow they like to communicate, how they handle disagreement, what energizes\nthem in a conversation. Write only what you observed directly (meetings,\ntheir emails or posts) or what they said about themselves; label each line\nobserved, self-described or inferred. One data point is a timeline entry,\nnot a pattern. Confidence follows interaction count: low after one, high\nafter five or more.\n\n## Hobby Horses\nTopics they return to obsessively. Recurring themes in their work\u002Fposts.\n\n## Assessment\nYour read on this person. Strengths, gaps, trajectory.\n\n## Trajectory\nAscending, plateauing, pivoting, declining? Where are they headed?\n\n## Relationship\nHistory of interactions, shared context, relationship quality.\n\n## Contact\nEmail, social handles, preferred communication channel.\n\n## Network\nKey connections, mutual contacts, organizational relationships.\n\n## Open Threads\nActive conversations, pending items, things to follow up on.\n\n---\n\n## Timeline\nReverse chronological. Every entry has a date and [Source: ...] citation.\n- **YYYY-MM-DD** | Event description [Source: ...]\n```\n\n#### Company page template\n\n```markdown\n---\ntitle: Company Name\ntype: company\ncreated: YYYY-MM-DD\nupdated: YYYY-MM-DD\ntags: []\n---\n\n# Company Name\n\n> 1-paragraph executive summary.\n\n## State\nWhat they do, stage, key people, key metrics, your connection.\n\n## Open Threads\nActive items, pending decisions, things to track.\n\n---\n\n## Timeline\n- **YYYY-MM-DD** | Event description [Source: ...]\n```\n\n### Step 7: Cross-reference\n\n- Update company pages from person enrichment (and vice versa)\n- Update related project\u002Fdeal pages if relevant context surfaced\n- Check index files if the brain uses them\n\n**Note (v0.10.1):** Links between brain pages are auto-created on every\n`put_page` call (auto-link post-hook). Step 7 focuses on content\ncross-references (updating related pages' compiled truth with new signal\nfrom this enrichment), not on creating links. On a trusted local write the\nput_page response carries `auto_links: { created, removed, errors }`. MCP\nwrites (stdio and HTTP) skip inline auto-link (`auto_links.skipped: \"remote\"`)\nbut queue plain `mentions` edges to pages that already exist\n(`auto_links.mention_links: \"queued\"`). Typed and frontmatter edges\n(`works_at`, `invested_in`, `source`, ...) wait for a maintenance pass: the\nstdio serve sweep, or `gbrain sweep --once` on the host for an HTTP brain.\nUse `add_link` for a typed edge you need immediately.\nTimeline entries still need explicit `gbrain timeline-add` calls.\n\n## Bulk Enrichment Rules\n\n- **Test on 3-5 entities first.** Read actual output. Check quality.\n- Only proceed to bulk after test shots pass your quality bar.\n- 3+ entities from one source -> batch process or spawn sub-agent\n- Throttle API calls. Respect rate limits.\n- Commit every 5-10 entities during bulk runs.\n- Save a report after bulk enrichment (see Report Storage below).\n\n## Validation Rules\n\n- Connection count \u003C 20 on LinkedIn = likely wrong person, skip\n- Name mismatch between brain and API = skip, flag for review\n- Joke profiles or obviously wrong data = save to raw, don't update page\n- Don't overwrite user-written assessments with API boilerplate\n- When in doubt: save raw data but don't update brain page\n\n## Report Storage\n\nAfter enrichment sweeps, save a report:\n- Number of entities processed\n- New pages created vs existing updated\n- Data sources called and results quality\n- Notable discoveries or contradictions\n- Validation flags or API failures\n\nThis creates an audit trail for brain enrichment over time.\n\n## When it fails\n\nFollow the [agent operator protocol](..\u002Fconventions\u002Fagent-operator-protocol.md) for any gbrain error `code`, exit code, `[AGENT]` block or notice block. Specific to this skill:\n\n- External enrichment APIs return `rate_limited` or an auth failure: back off for the stated delay; on auth failure stop and tell the user which key is missing. Never fill the gap with guessed facts.\n- `put_page` returns `revision_conflict`: re-read the entity page, merge, and save with the new revision.\n- `auto_links.errors` is non-empty on a write: the page saved but some links did not; list them in the report and add them with `add_link` after fixing the slugs.\n\n## Anti-Patterns\n\n- Creating stub pages with no content\n- Enriching without checking brain first\n- Overwriting user's direct statements with API data\n- Creating pages for non-notable entities\n\n## Output Format\n\nAn enriched person page contains:\n- **Frontmatter** with type, tags, company, relationship, and contact fields\n- **Executive summary** (1 paragraph: how you know them, why they matter, relationship state)\n- **State** section with hard facts and inline `[Source: ...]` citations\n- **Texture sections** (What They Believe, What They're Building, What Motivates Them, Hobby Horses)\n- **Assessment** with trajectory read\n- **Relationship** history and contact info\n- **Network** connections and mutual contacts\n- **Timeline** in reverse chronological order, every entry dated with source citation\n\nAn enriched company page contains:\n- **Frontmatter** with type and tags\n- **Executive summary** (1 paragraph)\n- **State** section (what they do, stage, key people, metrics, your connection)\n- **Open Threads** (active items, pending decisions)\n- **Timeline** in reverse chronological order with dated, cited entries\n\nBoth page types have bidirectional back-links to every entity they mention.\n\n## Tools Used\n\n- Read a page from gbrain (get_page)\n- Store\u002Fupdate a page in gbrain (put_page)\n- Add a timeline entry in gbrain (add_timeline_entry)\n- List pages in gbrain by type (list_pages)\n- Store raw API data in gbrain (put_raw_data)\n- Retrieve raw data from gbrain (get_raw_data)\n- Link entities in gbrain (add_link)\n- Check backlinks in gbrain (get_backlinks)\n","# Enrich Skill\n\nEnrich person and company pages from external sources. Scale effort to importance.\n\n## Contract\n\nThis skill guarantees:\n- Every enriched page has compiled truth (State section) with inline citations\n- Every enriched page has a timeline with dated entries\n- Back-links are created bidirectionally\n- Tiered enrichment: Tier 1 (full), Tier 2 (medium), Tier 3 (minimal) based on notability\n- No stubs: every new page has meaningful content from web search or existing brain context\n\n> **Filing rule:** Read `skills\u002F_brain-filing-rules.md` before creating any new page.\n\n> **Convention:** See `skills\u002Fconventions\u002Fquality.md` for Iron Law back-linking.\n\nEvery mention of a person or company with a brain page MUST create a back-link\nFROM that entity's page TO the page mentioning them. An unlinked mention is a\nbroken brain. See `skills\u002F_brain-filing-rules.md` for format.\n\n## Philosophy\n\nA brain page should read like an intelligence dossier, not a LinkedIn scrape.\nFacts are table stakes. Texture is the value -- what do they believe, what are\nthey building, what makes them tick, where are they headed.\n\n## Citation Requirements (MANDATORY)\n\n> **Convention:** see `skills\u002Fconventions\u002Fquality.md` for citation formats and source precedence.\n\nWhen sources conflict, note the contradiction with both citations.\n\n## When To Enrich\n\n### Primary triggers\n- User mentions an entity in conversation\n- Entity appears in a meeting transcript or email\n- New contact appears with significant context\n- Entity makes news or has a major event\n- Any ingest pipeline encounters a notable entity\n\n### Do NOT enrich\n- Random mentions with no relationship signal\n- Bot\u002Fspam accounts\n- Entities with no substantive connection to the user's work\n- Same page enriched within the past week (unless new signal warrants it)\n\n## Enrichment Tiers\n\nScale enrichment to importance. Don't waste API calls on low-value entities.\n\n| Tier | Who | Effort | Sources |\n|------|-----|--------|---------|\n| 1 (key) | Inner circle, close collaborators, key contacts | Full pipeline | All available APIs + deep web research |\n| 2 (notable) | Occasional interactions, industry figures | Moderate | Web research + social + brain cross-ref |\n| 3 (minor) | Worth tracking, not critical | Light | Brain cross-ref + social lookup if handle known |\n\n## The Enrichment Protocol (7 Steps)\n\n### Step 1: Identify entities\n\nExtract people, companies, concepts from the incoming signal.\n\n### Step 2: Check brain state\n\nFor each entity:\n- `gbrain search \"name\"` -- does a page already exist?\n- **If yes:** UPDATE path (add new signal, update compiled truth if material)\n- **If no:** CREATE path (check notability gate first, then create)\n\n### Step 3: Extract signal from source\n\nDon't just capture facts. Capture texture:\n\n| Signal Type | What to Extract |\n|-------------|----------------|\n| Opinions, beliefs | What They Believe section |\n| Current projects, features shipped | What They're Building section |\n| Ambition, career arc, motivation | What Motivates Them section |\n| Topics they return to obsessively | Hobby Horses section |\n| Who they amplify, argue with, respect | Network \u002F Relationships |\n| Ascending, plateauing, pivoting? | Trajectory section |\n| Role, company, funding, location | State section (hard facts) |\n\n### Step 4: External data source lookups\n\nPriority order -- stop when you have enough signal for the entity's tier.\n\n**4a. Brain cross-reference (always, all tiers)**\n- `gbrain search \"name\"` and `gbrain query \"what do we know about name\"`\n- Check related pages: company pages for person enrichment and vice versa\n- This is free and often the richest source\n\n**4b. Web research (Tier 1 and 2)**\n- Use Perplexity, Brave Search, Exa, or equivalent web research tool\n- **Key pattern:** Send existing brain knowledge as context so the search\n  returns DELTA (what's new vs what you already know), not a rehash\n- Opus-class models for Tier 1 deep research, lighter models for Tier 2\n\n**4c. Social media lookup (all tiers when handle known)**\n- Pull recent posts\u002Ftweets for tone, interests, current focus\n- Social media is the highest-texture signal for what someone actually thinks\n\n**4d. People enrichment APIs (Tier 1)**\n- LinkedIn data, career history, connections, education\n\n**4e. Company enrichment APIs (Tier 1)**\n- Company data, financials, headcount, key hires, recent news\n\n| Data Need | Example Sources | Tier |\n|-----------|----------------|------|\n| Web research | Perplexity, Brave, Exa | 1-2 |\n| LinkedIn \u002F career | Crustdata, Proxycurl, People Data Labs | 1 |\n| Career history | Happenstance, LinkedIn | 1 |\n| Funding \u002F company data | Crunchbase, PitchBook, Clearbit | 1 |\n| Social media | Platform APIs, web scraping | 1-3 |\n| Meeting history | Calendar\u002Fmeeting transcript tools | 1-2 |\n\n### Step 5: Save raw data (preserves provenance)\n\nStore raw API responses via `put_raw_data` in gbrain:\n```json\n{\n  \"source\": \"crustdata\",\n  \"fetched_at\": \"2026-04-11T...\",\n  \"query\": \"jane doe\",\n  \"data\": { ... }\n}\n```\n\nRaw data preserves provenance. If the compiled truth is ever questioned,\nthe raw data shows exactly what the API returned.\n\n### Step 6: Write to brain\n\n#### CREATE path\n\n1. Check notability gate (see `skills\u002F_brain-filing-rules.md`)\n2. Resolve the entity's type, directory and subtype from the ACTIVE schema\n   pack, never from the templates below: follow\n   `skills\u002Fbrain-taxonomist\u002FSKILL.md` (`gbrain schema show --json`, or MCP\n   `get_active_schema_pack`; `schema_explain_type` for one type). When the\n   pack declares an entity type the evidence fits better than `person` or\n   `company` (an investment firm, a protocol foundation), file it under that\n   type's directory with its subtype. If no declared type fits, say so and\n   ask; don't fall back to `companies\u002F`.\n3. Create the page from the template below, with the `type` and directory\n   from step 2. Frontmatter carries only keys the pack declares for the type or\n   that existing pages of the type already use, and only with known values:\n   omit an unknown field entirely, never write `null`, an empty value or a\n   placeholder.\n4. Fill compiled truth with citations\n5. Add first timeline entry\n6. Leave empty sections as `[No data yet]` (don't fill with boilerplate)\n7. In a batch, create the pages other pages will link to first. A link to a\n   page that doesn't exist yet is recorded as a wanted page and becomes an\n   edge once that page is written (`gbrain wanted` lists them).\n\n#### UPDATE path\n\n1. Add new timeline entries (reverse-chronological, append-only)\n2. Update compiled truth ONLY if the new signal materially changes the picture\n3. Update State section with new facts\n4. Flag contradictions between new signal and existing compiled truth\n5. Don't overwrite user-written assessments with API boilerplate\n\n#### Person page template\n\n```markdown\n---\ntitle: Full Name\ntype: person\ncreated: YYYY-MM-DD\nupdated: YYYY-MM-DD\ntags: []\ncompany: Current Company\nrelationship: How the user knows them\n# email, linkedin, twitter, location: add each only when you know it\n---\n\n# Full Name\n\n> 1-paragraph executive summary: HOW do you know them, WHY do they matter,\n> what's the current state of the relationship.\n\n## State\nRole, company, key context. Hard facts only.\n\n## What They Believe\nIdeology, first principles, worldview. What hills do they die on?\n\n## What They're Building\nCurrent projects, recent launches, what they're focused on.\n\n## What Motivates Them\nAmbition, career arc, what drives them.\n\n## Communication Style\nHow they like to communicate, how they handle disagreement, what energizes\nthem in a conversation. Write only what you observed directly (meetings,\ntheir emails or posts) or what they said about themselves; label each line\nobserved, self-described or inferred. One data point is a timeline entry,\nnot a pattern. Confidence follows interaction count: low after one, high\nafter five or more.\n\n## Hobby Horses\nTopics they return to obsessively. Recurring themes in their work\u002Fposts.\n\n## Assessment\nYour read on this person. Strengths, gaps, trajectory.\n\n## Trajectory\nAscending, plateauing, pivoting, declining? Where are they headed?\n\n## Relationship\nHistory of interactions, shared context, relationship quality.\n\n## Contact\nEmail, social handles, preferred communication channel.\n\n## Network\nKey connections, mutual contacts, organizational relationships.\n\n## Open Threads\nActive conversations, pending items, things to follow up on.\n\n---\n\n## Timeline\nReverse chronological. Every entry has a date and [Source: ...] citation.\n- **YYYY-MM-DD** | Event description [Source: ...]\n```\n\n#### Company page template\n\n```markdown\n---\ntitle: Company Name\ntype: company\ncreated: YYYY-MM-DD\nupdated: YYYY-MM-DD\ntags: []\n---\n\n# Company Name\n\n> 1-paragraph executive summary.\n\n## State\nWhat they do, stage, key people, key metrics, your connection.\n\n## Open Threads\nActive items, pending decisions, things to track.\n\n---\n\n## Timeline\n- **YYYY-MM-DD** | Event description [Source: ...]\n```\n\n### Step 7: Cross-reference\n\n- Update company pages from person enrichment (and vice versa)\n- Update related project\u002Fdeal pages if relevant context surfaced\n- Check index files if the brain uses them\n\n**Note (v0.10.1):** Links between brain pages are auto-created on every\n`put_page` call (auto-link post-hook). Step 7 focuses on content\ncross-references (updating related pages' compiled truth with new signal\nfrom this enrichment), not on creating links. On a trusted local write the\nput_page response carries `auto_links: { created, removed, errors }`. MCP\nwrites (stdio and HTTP) skip inline auto-link (`auto_links.skipped: \"remote\"`)\nbut queue plain `mentions` edges to pages that already exist\n(`auto_links.mention_links: \"queued\"`). Typed and frontmatter edges\n(`works_at`, `invested_in`, `source`, ...) wait for a maintenance pass: the\nstdio serve sweep, or `gbrain sweep --once` on the host for an HTTP brain.\nUse `add_link` for a typed edge you need immediately.\nTimeline entries still need explicit `gbrain timeline-add` calls.\n\n## Bulk Enrichment Rules\n\n- **Test on 3-5 entities first.** Read actual output. Check quality.\n- Only proceed to bulk after test shots pass your quality bar.\n- 3+ entities from one source -> batch process or spawn sub-agent\n- Throttle API calls. Respect rate limits.\n- Commit every 5-10 entities during bulk runs.\n- Save a report after bulk enrichment (see Report Storage below).\n\n## Validation Rules\n\n- Connection count \u003C 20 on LinkedIn = likely wrong person, skip\n- Name mismatch between brain and API = skip, flag for review\n- Joke profiles or obviously wrong data = save to raw, don't update page\n- Don't overwrite user-written assessments with API boilerplate\n- When in doubt: save raw data but don't update brain page\n\n## Report Storage\n\nAfter enrichment sweeps, save a report:\n- Number of entities processed\n- New pages created vs existing updated\n- Data sources called and results quality\n- Notable discoveries or contradictions\n- Validation flags or API failures\n\nThis creates an audit trail for brain enrichment over time.\n\n## When it fails\n\nFollow the [agent operator protocol](..\u002Fconventions\u002Fagent-operator-protocol.md) for any gbrain error `code`, exit code, `[AGENT]` block or notice block. Specific to this skill:\n\n- External enrichment APIs return `rate_limited` or an auth failure: back off for the stated delay; on auth failure stop and tell the user which key is missing. Never fill the gap with guessed facts.\n- `put_page` returns `revision_conflict`: re-read the entity page, merge, and save with the new revision.\n- `auto_links.errors` is non-empty on a write: the page saved but some links did not; list them in the report and add them with `add_link` after fixing the slugs.\n\n## Anti-Patterns\n\n- Creating stub pages with no content\n- Enriching without checking brain first\n- Overwriting user's direct statements with API data\n- Creating pages for non-notable entities\n\n## Output Format\n\nAn enriched person page contains:\n- **Frontmatter** with type, tags, company, relationship, and contact fields\n- **Executive summary** (1 paragraph: how you know them, why they matter, relationship state)\n- **State** section with hard facts and inline `[Source: ...]` citations\n- **Texture sections** (What They Believe, What They're Building, What Motivates Them, Hobby Horses)\n- **Assessment** with trajectory read\n- **Relationship** history and contact info\n- **Network** connections and mutual contacts\n- **Timeline** in reverse chronological order, every entry dated with source citation\n\nAn enriched company page contains:\n- **Frontmatter** with type and tags\n- **Executive summary** (1 paragraph)\n- **State** section (what they do, stage, key people, metrics, your connection)\n- **Open Threads** (active items, pending decisions)\n- **Timeline** in reverse chronological order with dated, cited entries\n\nBoth page types have bidirectional back-links to every entity they mention.\n\n## Tools Used\n\n- Read a page from gbrain (get_page)\n- Store\u002Fupdate a page in gbrain (put_page)\n- Add a timeline entry in gbrain (add_timeline_entry)\n- List pages in gbrain by type (list_pages)\n- Store raw API data in gbrain (put_raw_data)\n- Retrieve raw data from gbrain (get_raw_data)\n- Link entities in gbrain (add_link)\n- Check backlinks in gbrain (get_backlinks)\n",{"name":5,"tools":45,"version":51,"mutating":52,"triggers":53,"writes_to":58,"description":61,"writes_pages":52},[46,47,38,33,48,49,50],"get_page","put_page","add_link","add_timeline_entry","get_backlinks","1.0.0",true,[5,54,55,56,57],"create person page","update company page","who is this person","look up this company",[59,60],"people\u002F","companies\u002F","Enrich brain pages with tiered enrichment protocol. Creates and updates\nperson\u002Fcompany pages with compiled truth, timeline, and cross-links.\nUse when a new entity is mentioned or an existing page needs updating.\n","master","074ec301549ded4930f04d2c3b22d709a6c095cc","skills\u002Fenrich",4902,"https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain","https:\u002F\u002Fgithub.com\u002Fgarrytan","https:\u002F\u002Fblog.garrytan.com","Writes software, dreams. ","2026-11-14 04:11:30",{"source":8,"skillName":5,"commands":72,"prompt":82,"zipAvailable":52},[73,76,79],{"tool":74,"command":75},"npx","npx skills add garrytan\u002Fgbrain --skill enrich",{"tool":77,"command":78},"bunx","bunx skills add garrytan\u002Fgbrain --skill enrich",{"tool":80,"command":81},"pnpm","pnpm dlx skills add garrytan\u002Fgbrain --skill enrich","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Fskills\u002Fenrich\u002FSKILL.md",[],[85,95,101,118,145,159],{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":40},"01M6N109FNGH1PK49T734PZXGB","query-helper","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fquery-helper\u002FSKILL.md",[],[91,92,33,38,37,93,94],"query helper","helper","find","false",{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":40},"01M6N108A23GW6NGQEQ0E7GV0A","broken","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fbroken\u002FSKILL.md",[],[97],{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":107,"publishedAt":40},"01M6N105E88C5K2H03H0CC79G1","brain-ops","Read, enrich, and write brain pages with source attribution.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog\u002Fskills\u002Fbrain-ops\u002FSKILL.md",[],[108,31,109,25,110,37,111,112,34,113,33,30,27,114,5,115,116,117,38],"brain ops","ops","attribution","read","write","look","with","web","path","source",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":129,"publishedAt":40},"01M6N102GRMF22TVCNT6RK5MRD","meeting-prep","Build a briefing before you meet someone, from their recent threads, open loops and what they care about.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Fmeeting-prep\u002FSKILL.md",[124],{"categoryNo":125,"categoryName":126,"taxonomyType":127,"taxonomyTypeDesc":128},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[130,131,132,133,134,38,135,136,137,33,94,138,139,140,141,142,143,144],"meeting","prep","meeting prep","me","prepare","brief","open","build","loops","about","you","briefing","threads","for","Meet",{"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":40},"01M6N1005QK7REHX5KGMNR5PF0","inbox-zero","Triage the inbox into replies, delegations and archives.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Finbox-zero\u002FSKILL.md",[],[152,153,154,38,155,94,156,157,158],"inbox zero","ZeRO","inbox","clear","replies","my","triage",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":40},"01M6N0ZXQ8RRRW71PNV61T57GP","deal-memo","Draft an investment memo from the deal pages and the founder history already in the brain.","https:\u002F\u002Fgithub.com\u002Fgarrytan\u002Fgbrain\u002Fblob\u002Fmaster\u002Ftest\u002Ffixtures\u002Fskill-catalog-query\u002Fskills\u002Fdeal-memo\u002FSKILL.md",[],[166,167,168,30,31,169,170,112,171,25,38,172],"deal memo","deal","memo","draft","investment","history","founder"]