feat: internalai-business-context
This commit is contained in:
406
.agents/skills/internalai-business-context/SKILL.md
Normal file
406
.agents/skills/internalai-business-context/SKILL.md
Normal 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`
|
||||
Reference in New Issue
Block a user