407 lines
11 KiB
Markdown
407 lines
11 KiB
Markdown
---
|
|
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`
|