--- name: internalai-business-context description: Generate business context updates for InternalAI meetings. Fetches the latest InternalAI meeting (or specified meeting ID), analyzes participant contributions, researches business context via DataIndex, and creates a concise business update document with 1-week priorities. Requires Greyhaven_Company_Documentation.md in repo root. user-invocable: true argument-hint: [meeting_id] --- # InternalAI Business Context Update Generate a business context update document for InternalAI meetings, connecting technical discussions to Greyhaven's strategic mission. ## What I do - Fetch the latest InternalAI meeting transcript (or use specified meeting ID) - Extract participant talking points and work items - Research business context for each participant via DataIndex (last 30 days) - Synthesize findings into a concise business update document - Map work to Greyhaven's strategic pillars and revenue goals ## When to use me Use this skill after InternalAI meetings to create business-focused updates that: - Connect technical work to business value - Show strategic alignment with Greyhaven's mission - Highlight immediate priorities (1 week ahead) - Provide context for stakeholders (Max, Jordan, investors) ## Prerequisites - Greyhaven_Company_Documentation.md in repository root - DataIndex API access for meeting transcripts and business context - If Greyhaven doc missing, run `/init-greyhaven` first ## Workflow ### Step 1: Check for Greyhaven Documentation ```bash # Check if Greyhaven_Company_Documentation.md exists in repo root ls -la Greyhaven_Company_Documentation.md ``` **If missing:** Run `/init-greyhaven` to generate it, then retry this skill. ### Step 2: Fetch Meeting Data **Option A: Use specified meeting ID** ```python dataindex_get_entity_by_id( entity_id="reflector:{meeting_id}", include_raw_data=true, max_content_length=null ) ``` **Option B: Fetch latest InternalAI meeting (default)** ```python # Query for latest InternalAI meeting dataindex_query_entities( entity_types="meeting", connector_ids="reflector", search="internalai", limit=1, sort_by="timestamp", sort_order="desc" ) # Then fetch full transcript dataindex_get_entity_by_id( entity_id="reflector:{latest_meeting_id}", include_raw_data=true, max_content_length=null ) ``` **Extract from meeting entity:** - `raw_data.transcript` - Full conversation text - `participants` - List of attendees with contact_ids - `title` - Meeting title - `timestamp` - Meeting date - `id` - Meeting ID for reference links (extract UUID portion) ### Step 3: Parse Meeting into JSON Structure Create structured JSON with participant talking points: ```json { "meeting": { "title": "Meeting Title", "date": "2026-02-18", "room": "internalai", "participants": ["Name1", "Name2"], "meeting_id": "reflector:xxx" }, "participants": { "ParticipantName": { "business_value": ["talking point 1", "talking point 2"], "things_done": ["completed item 1"], "things_in_progress": ["current work 1"], "things_to_do": ["planned item 1"], "key_references": ["reference 1"] } } } ``` **Parsing approach:** 1. Segment transcript by speaker (lines starting with "SpeakerName: ") 2. Extract business outcomes from each segment 3. Categorize into: completed, in-progress, planned 4. Identify key technical references mentioned ### Step 4: Research Business Context (Parallel Subagents) For each participant, launch parallel subagents to search DataIndex. **Subagent task template:** ``` Research business context for {participant_name} from meeting on {date}. Meeting context: {meeting_title} - {brief_description_of_discussion} Search DataIndex for the last 30 days (from {date_minus_30} to {date}) to find: - What projects this person is working on - What business problems they're solving - Recent decisions or priorities - Related work from other team members **Search Command to Use:** Use dataindex_search with these parameters: - query: [your search terms] - limit: 10 - date_from: {date_minus_30} (ISO format) - date_to: {date} (ISO format) **Maximum 10 searches per participant.** Choose your search queries strategically based on the meeting topics discussed. **URL Construction Helpers:** For Zulip references (from threaded_conversation entities): - Base: https://zulip.monadical.com/#narrow/channel/ - Format: https://zulip.monadical.com/#narrow/channel/{stream_id}-{stream_name}/topic/{topic_name}/with/{first_message_id} - stream_id: From entity.connector_metadata.stream_id or parse from entity.id - stream_name: From entity.title (extract stream name before the dash) - topic_name: From entity.connector_metadata.topic or parse from entity.title - message_id: Use the first message ID from entity.recent_messages[0].id For Reflector references (from meeting entities): - Base: https://reflector.monadical.com/transcripts/ - Format: https://reflector.monadical.com/transcripts/{transcript_id} - transcript_id: Extract from meeting.entity_id (remove "reflector:" prefix) **What to return:** For each participant, provide: 1. Key themes from their work (2-3 themes) 2. Business value of each theme (1 sentence) 3. Strategic alignment with Greyhaven (1 sentence) 4. Direct URLs to relevant sources (use formats above) Return as structured JSON: { "participant": "Name", "research_date_range": "{date_minus_30} to {date}", "key_themes": [ { "theme": "Theme name", "business_value": "Why this matters commercially", "strategic_alignment": "How this supports Greyhaven's mission", "references": [ { "type": "zulip|reflector", "title": "Brief description", "url": "Full URL" } ] } ] } ``` **Launch all subagents simultaneously** - one per participant. **Search command example for subagents:** ```python # Example search - subagent adapts query based on context dataindex_search( query="{participant_name} {topic}", limit=10, date_from="2026-01-18T00:00:00Z", date_to="2026-02-18T23:59:59Z" ) ``` ### Step 5: Read Greyhaven Business Context ```bash # Read Greyhaven documentation cat Greyhaven_Company_Documentation.md ``` Extract key context: - Three Pillars: Human-centered design, Local-first sovereignty, Rapid prototyping - Other Three Pillars of Data Sovereignty: Choice, Control, Clarity - Current positioning: "Palantir for SMEs" - Key stakeholders: Max (Founder), Jordan (BizDev), Corey Gallon (Strategic Advisor) - Immediate business priorities: Fundraising, first paying customer (Electra), enterprise readiness ### Step 6: Generate Business Context Document **Output file:** `internalai_context_YYYY-MM-DD.md` (in repo root) **Document structure:** ```markdown # InternalAI Business Context Update [2-3 sentences total business impact across all participants] --- ## Participant Updates ### {Participant Name} **What They've Done:** [2-3 sentences on completed work with business outcomes] **Immediate Priorities (Next 7 Days):** - [Priority 1] - [Priority 2] **Strategic Context:** [1-2 sentences connecting work to Greyhaven's mission and pillars] **References:** - [Title](https://zulip.monadical.com/#narrow/channel/{stream_id}-{stream}/topic/{topic}/with/{message_id}) - [Title](https://reflector.monadical.com/transcripts/{transcript_id}) --- **Revenue Enablement:** [How this work supports fundraising, customer acquisition, or retention] **Market Positioning:** [How this supports "Palantir for SMEs" or data sovereignty messaging] --- ## Reference Links ### Key Meetings - [Meeting Title](https://reflector.monadical.com/transcripts/{transcript_id}) ### Zulip Threads - [Thread Title](https://zulip.monadical.com/#narrow/channel/{stream_id}-{stream}/topic/{topic}/with/{message_id}) --- *Document generated from meeting transcript and DataIndex research* ``` **Content guidelines:** - **Per participant:** Max 2 short paragraphs (What Done + Strategic Context) - **Immediate priorities:** Only 1 week ahead (not 2 weeks) - **Business language:** No technical jargon, focus on outcomes - **URL formats:** - Zulip: `https://zulip.monadical.com/#narrow/channel/{stream_id}-{stream_name}/topic/{topic_name}/with/{message_id}` - Reflector: `https://reflector.monadical.com/transcripts/{transcript_id}` ### Step 7: Generate Meeting JSON Create `{date}_meeting_analysis.json` with parsed talking points (saved by default): ```json { "meeting": { "title": "...", "date": "...", "participants": ["..."], "meeting_url": "https://reflector.monadical.com/transcripts/{id}" }, "participants": { "Name": { "business_value": [...], "things_done": [...], "things_in_progress": [...], "things_to_do": [...], "key_references": [...] } }, "decisions_made": [...], "open_questions": [...] } ``` ### Step 8: Output Summary Display to user: ``` ✅ Business Context Update Complete 📄 Documents generated: - internalai_context_{date}.md - {date}_meeting_analysis.json 👥 Participants covered: {names} 🎯 Key business themes: - {theme 1} - {theme 2} ``` ## Commands Summary **Pre-flight check:** ```bash ls -la Greyhaven_Company_Documentation.md || echo "Run /init-greyhaven first" ``` **Fetch meeting (latest):** ```python dataindex_query_entities( entity_types="meeting", connector_ids="reflector", search="internalai", limit=1, sort_by="timestamp", sort_order="desc" ) ``` **Fetch meeting (by ID):** ```python dataindex_get_entity_by_id( entity_id="reflector:{meeting_id}", include_raw_data=true, max_content_length=null ) ``` **Research business context (per participant - max 10 searches):** ```python # Launch parallel subagents, one per participant # Each subagent runs up to 10 dataindex_search queries # Subagent constructs queries based on meeting context ``` **Generate output:** ```bash # Write to: internalai_context_YYYY-MM-DD.md # Write to: YYYY-MM-DD_meeting_analysis.json ``` ## URL Construction Reference ### Zulip URLs From `threaded_conversation` entity: ``` https://zulip.monadical.com/#narrow/channel/{stream_id}-{stream_name}/topic/{topic_name}/with/{message_id} ``` **Field mapping:** - `stream_id`: entity.connector_metadata.stream_id - `stream_name`: Parse from entity.title (before dash) - `topic_name`: entity.connector_metadata.topic - `message_id`: entity.recent_messages[0].id ### Reflector URLs From `meeting` entity: ``` https://reflector.monadical.com/transcripts/{transcript_id} ``` **Field mapping:** - `transcript_id`: entity.entity_id.replace("reflector:", "") ## Error Handling - **Greyhaven doc missing:** Prompt user to run `/init-greyhaven` - **No InternalAI meetings found:** Check room_name filter, suggest checking reflector connector status - **Empty transcript:** Mark meeting as processed but note limited content - **Subagent failures:** Continue with available data, note gaps in output - **Large transcripts (>200KB):** Save to temp file, pass path to subagents ## Dependencies - [dataindex](../dataindex/SKILL.md) — meeting queries and business context search - [init-greyhaven](../init-greyhaven/SKILL.md) — Greyhaven business context generation (if needed) - [contactdb](../contactdb/SKILL.md) — participant name resolution ## Example Usage **Default (latest meeting):** ``` /internalai-business-context ``` **Specific meeting:** ``` /internalai-business-context aecfd2e9-990f-4f25-b746-eb14ddae7494 ``` **Output location:** - `{repo_root}/internalai_context_2026-02-18.md` - `{repo_root}/2026-02-18_meeting_analysis.json`