From 864038a60e5109b485318df204b64639e3f7acd7 Mon Sep 17 00:00:00 2001 From: Nik L Date: Thu, 19 Feb 2026 18:24:56 -0500 Subject: [PATCH] feat: internalai-business-context --- .../internalai-business-context/SKILL.md | 406 ++++++++++++++++++ 1 file changed, 406 insertions(+) create mode 100644 .agents/skills/internalai-business-context/SKILL.md diff --git a/.agents/skills/internalai-business-context/SKILL.md b/.agents/skills/internalai-business-context/SKILL.md new file mode 100644 index 0000000..788b130 --- /dev/null +++ b/.agents/skills/internalai-business-context/SKILL.md @@ -0,0 +1,406 @@ +--- +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`