feat: migrate to skills-based approach
This commit is contained in:
264
.agents/skills/project-init/SKILL.md
Normal file
264
.agents/skills/project-init/SKILL.md
Normal file
@@ -0,0 +1,264 @@
|
||||
---
|
||||
name: project-init
|
||||
description: Initialize a new project analysis. Creates directory structure, discovers relevant data sources (Zulip streams, git repos, meeting rooms), and writes datasources.md, background.md skeleton, and sync-state.md.
|
||||
disable-model-invocation: true
|
||||
argument-hint: [project-name]
|
||||
---
|
||||
|
||||
# Initialize Project Analysis
|
||||
|
||||
**When to use:** Starting analysis of a new project. This skill sets up the project structure and discovers data sources. It does NOT gather historical data — use `/project-history` for that after reviewing the datasources.
|
||||
|
||||
## Step 1: Create Project Structure
|
||||
|
||||
```bash
|
||||
mkdir -p projects/$0/timeline
|
||||
```
|
||||
|
||||
## Step 2: Discover and Document Data Sources
|
||||
|
||||
Investigate what data sources exist for this project. Use the [connectors skill](../connectors/SKILL.md) and [company skill](../company/SKILL.md) for reference.
|
||||
|
||||
### Discovery process
|
||||
|
||||
1. **Zulip streams**: Search DataIndex for `threaded_conversation` entities matching the project name. Note which stream IDs appear. Cross-reference with the company skill's Zulip channel list to identify primary vs. secondary streams.
|
||||
2. **Git repositories**: Ask the user for the repository URL, or search Gitea/GitHub if accessible.
|
||||
3. **Meeting rooms**: Search DataIndex for `meeting` entities matching the project name. Note which `room_name` values appear — these are the relevant meeting rooms.
|
||||
4. **Search terms**: Identify the project name, key technologies, and domain-specific terms that surface relevant data.
|
||||
5. **Entity type priority**: Determine which entity types are most relevant (typically `threaded_conversation`, `meeting`, and possibly `email`).
|
||||
|
||||
### Write datasources.md
|
||||
|
||||
**File:** `projects/$0/datasources.md`
|
||||
|
||||
```markdown
|
||||
# $0 - Data Sources
|
||||
|
||||
## Zulip Streams
|
||||
|
||||
### PRIMARY Streams (Analyze All)
|
||||
| Stream ID | Name | Topics | Priority | What to Look For |
|
||||
|-----------|------|--------|----------|------------------|
|
||||
| XXX | stream-name | N topics | CRITICAL | Development discussions |
|
||||
|
||||
### SECONDARY Streams (Selective)
|
||||
| Stream ID | Name | Topics to Analyze | Context |
|
||||
|-----------|------|-------------------|---------|
|
||||
| YYY | integration-stream | specific-topic | Integration work |
|
||||
|
||||
### EXCLUDE
|
||||
- stream-id-1: reason
|
||||
- stream-id-2: reason
|
||||
|
||||
## Git Repository
|
||||
|
||||
**URL:** https://...
|
||||
|
||||
**Commands:**
|
||||
```
|
||||
git clone {url} ./tmp/$0-clone
|
||||
cd ./tmp/$0-clone
|
||||
git log --format="%H|%an|%ae|%ad|%s" --date=short > commits.csv
|
||||
git log --format="%an|%ae" | sort | uniq -c | sort -rn
|
||||
```
|
||||
|
||||
## Meeting Rooms
|
||||
|
||||
### PRIMARY
|
||||
- room-name: Project-specific discussions
|
||||
|
||||
### SECONDARY (Context Only)
|
||||
- allhands: General updates
|
||||
|
||||
### EXCLUDE
|
||||
- personal-rooms: Other projects
|
||||
|
||||
## Search Terms
|
||||
|
||||
### Primary
|
||||
- project-name
|
||||
- key-technology-1
|
||||
|
||||
### Technical
|
||||
- architecture-term-1
|
||||
|
||||
## Entity Types Priority
|
||||
1. threaded_conversation (Zulip)
|
||||
2. meeting (recordings)
|
||||
3. [Exclude: calendar, email, document if not relevant]
|
||||
```
|
||||
|
||||
## Step 3: Create Project Dashboard (Living Document)
|
||||
|
||||
**File:** `projects/$0/project.md`
|
||||
|
||||
This is the **entry point** — the living document showing current status.
|
||||
|
||||
```markdown
|
||||
# $0 Project
|
||||
|
||||
**One-liner:** [Brief description]
|
||||
**Status:** [Active/On Hold/Deprecated]
|
||||
**Repository:** URL
|
||||
**Last Updated:** [Date]
|
||||
|
||||
---
|
||||
|
||||
## This Week's Focus
|
||||
|
||||
### Primary Objective
|
||||
[What the team is working on right now]
|
||||
|
||||
### Active Work
|
||||
- [Current task 1]
|
||||
- [Current task 2]
|
||||
|
||||
### Blockers
|
||||
- [Any blockers]
|
||||
|
||||
---
|
||||
|
||||
## Last Week's Focus
|
||||
|
||||
### Delivered
|
||||
- ✅ [What was completed]
|
||||
|
||||
### Decisions Made
|
||||
- [Key decisions from last week]
|
||||
|
||||
---
|
||||
|
||||
## Team
|
||||
|
||||
### Core Contributors (Active)
|
||||
| Name | Focus | Availability |
|
||||
|------|-------|--------------|
|
||||
| [Name] | [Area] | Full-time/Part-time |
|
||||
|
||||
### Occasional Contributors
|
||||
- [Name] - [Role]
|
||||
|
||||
---
|
||||
|
||||
## Milestones
|
||||
|
||||
### In Progress 🔄
|
||||
| Milestone | Target | Business Objective |
|
||||
|-----------|--------|-------------------|
|
||||
| [Name] | [Date] | [WHY this matters] |
|
||||
|
||||
### Recently Completed ✅
|
||||
| Milestone | Date | Business Objective |
|
||||
|-----------|------|-------------------|
|
||||
| [Name] | [Date] | [WHY this mattered] |
|
||||
|
||||
### Lost in Sight / Paused ⏸️
|
||||
| Milestone | Status | Reason |
|
||||
|-----------|--------|--------|
|
||||
| [Name] | Paused | [Why paused] |
|
||||
|
||||
---
|
||||
|
||||
## Recent Decisions
|
||||
|
||||
### Week [N] (Current)
|
||||
- **[Decision]** - [Context]
|
||||
|
||||
### Week [N-1]
|
||||
- **[Decision]** - [Context]
|
||||
|
||||
---
|
||||
|
||||
## Quick Links
|
||||
|
||||
- [📊 Timeline](./timeline/index.md) - Week-by-week history
|
||||
- [📋 Background](./background.md) - Project architecture and details
|
||||
- [🔌 Data Sources](./datasources.md) - How to gather information
|
||||
- [⚙️ Sync State](./sync-state.md) - Last sync information
|
||||
|
||||
---
|
||||
|
||||
*This is a living document. It reflects the current state and changes frequently.*
|
||||
```
|
||||
|
||||
## Step 4: Create Background Skeleton
|
||||
|
||||
**File:** `projects/$0/background.md`
|
||||
|
||||
Static/architecture information that rarely changes.
|
||||
|
||||
```markdown
|
||||
# $0 - Background
|
||||
|
||||
**Type:** [Web app/Mobile app/Library/Service]
|
||||
**Repository:** URL
|
||||
|
||||
## What is $0?
|
||||
|
||||
[Brief description of what the project does]
|
||||
|
||||
## Architecture
|
||||
|
||||
### Components
|
||||
- Component 1 - Purpose
|
||||
- Component 2 - Purpose
|
||||
|
||||
### Technology Stack
|
||||
- Technology 1 - Usage
|
||||
- Technology 2 - Usage
|
||||
|
||||
## Data Sources
|
||||
|
||||
See: [datasources.md](./datasources.md)
|
||||
|
||||
## Timeline Structure
|
||||
|
||||
Weekly timeline files are organized in `timeline/` directory.
|
||||
|
||||
## How This Project Is Updated
|
||||
|
||||
1. Gather Data: Query Zulip, Git, meetings
|
||||
2. Update Timeline: Create week-by-week entries
|
||||
3. Update Project Dashboard: Refresh [project.md](./project.md)
|
||||
|
||||
For current status, see: [project.md](./project.md)
|
||||
```
|
||||
|
||||
## Step 4: Create Timeline Index
|
||||
|
||||
**File:** `projects/$0/timeline/index.md`
|
||||
|
||||
```markdown
|
||||
# $0 Timeline Index
|
||||
|
||||
## Key Milestones
|
||||
|
||||
| Date | Milestone | Status |
|
||||
|------|-----------|--------|
|
||||
| [To be filled by project-history] | | |
|
||||
|
||||
## Summary by Quarter
|
||||
|
||||
[To be filled by project-history]
|
||||
```
|
||||
|
||||
## Step 5: Initialize Sync State
|
||||
|
||||
**File:** `projects/$0/sync-state.md`
|
||||
|
||||
```markdown
|
||||
# Sync State
|
||||
|
||||
status: initialized
|
||||
created_at: [today's date]
|
||||
last_sync_date: null
|
||||
initial_history_from: null
|
||||
initial_history_to: null
|
||||
```
|
||||
|
||||
## Done
|
||||
|
||||
After this skill completes, the user should:
|
||||
1. **Review `datasources.md`** — confirm the streams, repos, and meeting rooms are correct
|
||||
2. **Edit `background.md`** — fill in any known project details
|
||||
3. **Run `/project-history $0 [date-from] [date-to]`** — to build the initial historical timeline
|
||||
Reference in New Issue
Block a user