Files
2026-02-19 18:24:56 -05:00

11 KiB

name, description, user-invocable, argument-hint
name description user-invocable argument-hint
internalai-business-context 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. true
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

# 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

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)

# 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:

{
  "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:

# 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

# 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:

# 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):

{
  "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:

ls -la Greyhaven_Company_Documentation.md || echo "Run /init-greyhaven first"

Fetch meeting (latest):

dataindex_query_entities(
    entity_types="meeting",
    connector_ids="reflector",
    search="internalai",
    limit=1,
    sort_by="timestamp",
    sort_order="desc"
)

Fetch meeting (by ID):

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):

# Launch parallel subagents, one per participant
# Each subagent runs up to 10 dataindex_search queries
# Subagent constructs queries based on meeting context

Generate output:

# 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 — meeting queries and business context search
  • init-greyhaven — Greyhaven business context generation (if needed)
  • contactdb — 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