Files
2026-02-19 17:55:22 -05:00

249 lines
8.1 KiB
Markdown

---
name: init-greyhaven
description: Build comprehensive Greyhaven business documentation by analyzing Reflector meeting transcripts and Zulip threads from the last 4 months via DataIndex API, using parallel subagents to extract business context, positioning, product details, and open items from authoritative sources (Corey Gallon, Max, Jordan). Only Zulip threads and Reflector transcripts are used.
user-invocable: true
---
# Initialize Greyhaven Business Context
## What I do
- Query DataIndex for all-hands meetings and Greyhaven-related Zulip threads from the last 4 months (only Zulip threads and Reflector transcripts)
- Launch parallel subagents to analyze transcripts and threads for Greyhaven/data-sovereignty content
- Synthesize findings into a structured business document covering vision, positioning, product, marketing, and open items
- Prioritize statements from **Corey Gallon**, **Max**, and **Jordan (jordan@monadical.com)**
## When to use me
Use this when you need to create or update comprehensive company documentation for Greyhaven, extract business context from meetings and Zulip threads, or synthesize information across multiple data sources into a single reference document.
## Prerequisites
- DataIndex API access (meeting and threaded_conversation entities)
- ContactDB for resolving participant names
- Subagent capability for parallel analysis
## Data Sources (Explicit Connector Requirements)
This skill ONLY uses these two connectors - do not query any others:
| Connector | Entity Type | Use For |
|-----------|-------------|---------|
| `reflector` | `meeting` | Meeting recordings with transcripts |
| `zulip` | `threaded_conversation` | Zulip topic threads |
**⚠️ NEVER use:** `ics_calendar`, `mbsync_email`, `hedgedoc`, `babelfish`, `browser_history`, or other connectors.
## Workflow
### Step 1: Query Reflector all-hands meetings
**REQUIRED QUERY PATTERN:**
```
GET /dataindex/api/v1/query
?entity_types=meeting
&connector_ids=reflector
&room_name=allhands
&date_from={4_months_ago}
&date_to={today}
&limit=100
```
**Entity type:** `meeting`
**Connector:** `reflector` (MUST be specified)
**Room filter:** `room_name=allhands` (MUST be specified - only all-hands meetings)
**Date range:** Last 4 months (120 days)
**Key fields to extract:**
- `transcript` - Full meeting transcript text
- `summary` - AI-generated summary
- `room_name` - Should be "allhands" (verified by filter)
- `participants` - List of attendees
- `start_time`, `end_time` - Meeting timestamps
**⚠️ CRITICAL:**
- Only use `connector_ids=reflector`
- MUST filter by `room_name=allhands` - this ensures we only get company all-hands meetings
- Never use other meeting sources or other room types
### Step 2: Fetch full meeting transcripts
For each meeting, fetch the complete entity:
```
GET /dataindex/api/v1/entities/{meeting_id}
?include_raw_data=false
```
If a transcript exceeds 200KB, save it to a temp file and pass the file path to subagents.
### Step 3: Analyze meetings in parallel
Launch one subagent per meeting to scan for Greyhaven/data-sovereignty mentions.
**Subagent prompt template:**
```
Analyze this meeting transcript for mentions of "greyhaven", "data sovereignty",
or related topics (data privacy, data ownership, data control, local data storage).
Meeting: {meeting_id} | Date: {timestamp} | Title: {title}
Transcript: {transcript_content}
Return JSON:
{
"is_relevant": true/false,
"quotes": [{"timestamp": "HH:MM:SS", "speaker": "Name", "quote": "exact text"}],
"explanation": "Why this is relevant"
}
```
Launch all subagents simultaneously.
### Step 4: Query Zulip threaded conversations
**REQUIRED QUERY PATTERN:**
```
GET /dataindex/api/v1/query
?entity_types=threaded_conversation
&connector_ids=zulip
&date_from={4_months_ago}
&date_to={today}
&limit=100
```
**Entity type:** `threaded_conversation` (NOT `conversation` or `conversation_message`)
**Connector:** `zulip` (MUST be specified)
**Date range:** Last 4 months (120 days)
**Why `threaded_conversation`:**
- Represents a **Zulip topic thread** (grouped messages under a topic)
- Contains `recent_messages` with full thread content
- Better for analysis than individual `conversation_message` entities
**High-priority streams to search:**
- `[greyhaven] marketing` (stream 212)
- `[greyhaven] branding` (stream 206)
- `[greyhaven] leads` (stream 208)
- `InternalAI` (stream 193)
- `engineering` - selfhostyour.tech topic
- `bizdev + marketing`
**⚠️ CRITICAL:** Only use `connector_ids=zulip` and `entity_types=threaded_conversation`. Never use other chat connectors like `babelfish`.
### Step 5: Filter threads by relevance
Launch a subagent to rank threads and return the top 20-30 most relevant, scored by Greyhaven/data-sovereignty content and message activity.
### Step 6: Fetch and analyze top threads
For each high-priority thread, fetch full content via `GET /dataindex/api/v1/entities/{thread_id}?include_raw_data=false`, then launch parallel subagents to extract:
1. Substantive Greyhaven mentions
2. Data sovereignty content
3. Key decisions or debates
4. Quotes from Max, Corey Gallon, or Jordan Wimmer
### Step 7: Synthesize into categories
Launch four specialized subagents in parallel, each focused on one domain:
| Subagent | Extracts |
|----------|----------|
| Business Context & Vision | Origin, problem statement, target market/ICP, vision, fundraising status, value proposition |
| Positioning & Marketing | Market positioning, go-to-market strategy, marketing channels, branding, investor comms |
| Product & Technical | Architecture, features, projects built on Greyhaven, user stories, data sovereignty concepts |
| Open Items & Risks | Unresolved decisions, action items, risks, areas of agreement/disagreement among stakeholders |
All subagents should prioritize statements from Corey Gallon, Max, and Jordan.
### Step 8: Compile documentation
Create `Greyhaven_Company_Documentation.md` with this structure:
```markdown
# Greyhaven Company Documentation
## Executive Summary
## 1. Business Context & Origin
## 2. Vision & Philosophy
## 3. Market Positioning
## 4. Product Architecture
## 5. Product Portfolio
## 6. Projects Built on Greyhaven
## 7. User Stories & Use Cases
## 8. Go-to-Market Strategy
## 9. Branding & Identity
## 10. Open Discussions & Debates
## 11. Unresolved Items
## 12. Risks & Challenges
## 13. Key Stakeholder Perspectives
## 14. Action Items & Next Steps
## 15. Appendix
```
**Writing guidelines:**
- Include direct quotes with attribution
- Maintain neutral tone while capturing debates
- Include timestamps where available
- Cross-reference multiple sources for key claims
### Step 9: Clean up
Remove any temporary JSON or transcript files created during analysis.
## Error handling
- **Large transcripts (>200KB):** Save to file, pass path to subagent
- **Missing transcript:** Skip meeting with a note
- **Empty thread:** Mark as low relevance, skip
- **API failures:** Retry with backoff, continue with available data
## Query Patterns Summary
**EXACT API CALLS TO MAKE:**
### For Reflector all-hands meetings:
```python
dataindex_query_entities(
entity_types="meeting",
connector_ids="reflector",
room_name="allhands", # MUST filter for all-hands only
date_from="2024-10-19T00:00:00Z", # 4 months ago
date_to="2025-02-19T23:59:59Z", # today
limit=100
)
```
Then for each meeting ID:
```python
dataindex_get_entity_by_id(
entity_id="reflector:{meeting_id}",
max_content_length=null # Get full transcript
)
```
### For Zulip threads:
```python
dataindex_query_entities(
entity_types="threaded_conversation", # MUST be threaded_conversation
connector_ids="zulip", # MUST be zulip
date_from="2024-10-19T00:00:00Z", # 4 months ago
date_to="2025-02-19T23:59:59Z", # today
limit=100
)
```
Then for each thread ID:
```python
dataindex_get_entity_by_id(
entity_id="zulip:{thread_id}",
max_content_length=null # Get full thread content
)
```
## Dependencies
- [dataindex](../dataindex/SKILL.md) — entity querying
- [contactdb](../contactdb/SKILL.md) — participant resolution
- [notebook-patterns](../notebook-patterns/SKILL.md) — pagination helpers (if needed)