feat: internalai-business-context

This commit is contained in:
Nik L
2026-02-19 18:24:56 -05:00
parent 8c4b32df08
commit 864038a60e

View File

@@ -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`