Skip to main content

skill-meeting

Investor meeting note processing and CSV tracking

Ir a la instalación

Datos de origen

Repositorio
benbrastmckie/nvim
Última actividad en el origen
3 de mayo de 2026 a las 01:26
Idioma detectado de SKILL.md
inglés
Estrellas
443
Forks
459

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
skill-meeting
description
Investor meeting note processing and CSV tracking
allowed-tools
Task, Bash, Edit, Read, Write
# Meeting Skill Thin wrapper that routes investor meeting note processing requests to the `meeting-agent`. **IMPORTANT**: This skill implements the skill-internal postflight pattern. After the subagent returns, this skill handles all postflight operations (status update, artifact linking, git commit) before returning. ## Context Pointers Reference (do not load eagerly): - Path: `.opencode/context/formats/subagent-return.md` - Purpose: Return validation - Load at: Subagent execution only Note: This skill is a thin wrapper. Context is loaded by the delegated agent, not this skill. ## Trigger Conditions This skill activates when: ### Direct Invocation - User explicitly runs `/meeting` command with task number - User runs `/research` on a founder task with `task_type: "meeting"` ### Implicit Invocation (during task implementation) When an implementing agent encounters any of these patterns: **Plan step language patterns**: - "Process meeting notes" - "Create investor meeting file" - "Update investor CSV" - "Meeting report" **Target mentions**: - "meeting notes" - "investor meeting" - "CSV tracker" - "investor profile" ### When NOT to trigger Do not invoke for: - Market sizing (use skill-market) - Competitive analysis (use skill-analyze) - GTM strategy (use skill-strategy) - Contract review (use skill-legal) - Financial analysis (use skill-finance) --- ## Execution Flow ### Stage 1: Input Validation Validate required inputs: - `task_number` - Must be provided and exist in state.json - `notes_path` - Optional, file path to meeting notes or structured meeting file - `update_only` - Optional, boolean (default: false) ```bash # Lookup task task_data=$(jq -r --argjson num "$task_number" \ '.active_projects[] | select(.project_number == $num)' \ specs/state.json) # Validate exists if [ -z "$task_data" ]; then return error "Task $task_number not found" fi # Extract fields task_type=$(echo "$task_data" | jq -r '.task_type // "founder"') status=$(echo "$task_data" | jq -r '.status') project_name=$(echo "$task_data" | jq -r '.project_name') description=$(echo "$task_data" | jq -r '.description // ""') # Extract notes_path from task metadata (stored at task creation) stored_notes_path=$(echo "$task_data" | jq -r '.notes_path // null') # Use provided notes_path or fall back to stored one notes_path="${notes_path:-$stored_notes_path}" if [ -z "$notes_path" ] || [ "$notes_path" = "null" ]; then return error "No notes_path found. Provide a file path or ensure task has notes_path stored." fi # Validate file exists if [ ! -f "$notes_path" ]; then return error "File not found: $notes_path" fi ``` --- ### Stage 2: Preflight Status Update Update task status to "researching" BEFORE invoking subagent. **Update state.json**: ```bash jq --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --arg status "researching" \ --arg sid "$session_id" \ '(.active_projects[] | select(.project_number == '$task_number')) |= . + { status: $status, last_updated: $ts, session_id: $sid }' specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json ``` **Update TODO.md**: Use Edit tool to change status marker to `[RESEARCHING]`. --- ### Stage 3: Create Postflight Marker ```bash padded_num=$(printf "%03d" "$task_number") mkdir -p "specs/${padded_num}_${project_name}" cat > "specs/${padded_num}_${project_name}/.postflight-pending" << EOF { "session_id": "${session_id}", "skill": "skill-meeting", "task_number": ${task_number}, "operation": "research", "reason": "Postflight pending: status update, artifact linking, git commit", "created": "$(date -u +%Y-%m-%dT%H:%M:%SZ)" } EOF ``` --- ### Stage 4: Prepare Delegation Context ```json { "task_context": { "task_number": N, "project_name": "{project_name}", "description": "{description}", "task_type": "founder", "task_type": "meeting" }, "notes_path": "/absolute/path/to/meeting-notes.md", "update_only": false, "metadata_file_path": "specs/{NNN}_{SLUG}/.return-meta.json", "metadata": { "session_id": "sess_{timestamp}_{random}", "delegation_depth": 1, "delegation_path": ["orchestrator", "meeting", "skill-meeting"] } } ``` --- ### Stage 5: Invoke Agent **CRITICAL**: You MUST use the **Task** tool to spawn the agent. **Required Tool Invocation**: ``` Tool: Task (NOT Skill) Parameters: - subagent_type: "meeting-agent" - prompt: [Include task_context, notes_path, update_only, metadata_file_path, metadata] - description: "Investor meeting note processing" ``` The agent will: - Read raw meeting notes from `notes_path` - Web research the investor for profile data - Generate structured meeting file with YAML frontmatter + markdown body - Update CSV tracker in the same directory - Write metadata file - Return brief text summary --- ### Stage 5b: Self-Execution Fallback **CRITICAL**: If you performed the work above WITHOUT using the Task tool (i.e., you read files, wrote artifacts, or updated metadata directly instead of spawning a subagent), you MUST write a `.return-meta.json` file now before proceeding to postflight. Use the schema from `return-metadata-file.md` with the appropriate status value for this operation. If you DID use the Task tool, skip this stage -- the subagent already wrote the metadata. --- ## Postflight (ALWAYS EXECUTE) The following stages MUST execute after work is complete, whether the work was done by a subagent or inline (Stage 5b). Do NOT skip these stages for any reason. ### Stage 6: Read Metadata File ```bash padded_num=$(printf "%03d" "$task_number") metadata_file="specs/${padded_num}_${project_name}/.return-meta.json" if [ -f "$metadata_file" ] && jq empty "$metadata_file" 2>/dev/null; then status=$(jq -r '.status' "$metadata_file") artifact_path=$(jq -r '.artifacts[0].path // ""' "$metadata_file") artifact_type=$(jq -r '.artifacts[0].type // ""' "$metadata_file") artifact_summary=$(jq -r '.artifacts[0].summary // ""' "$metadata_file") else status="failed" fi ``` --- ### Stage 7: Update Task Status (Postflight) If status is "researched", update state.json and TODO.md. **Update state.json**: ```bash jq --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --arg status "researched" \ '(.active_projects[] | select(.project_number == '$task_number')) |= . + { status: $status, last_updated: $ts }' specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json ``` **Update TODO.md**: Use Edit tool to change status marker to `[RESEARCHED]`. --- ### Stage 8: Link Artifacts Add artifact to state.json with summary. **IMPORTANT**: Use two-step jq pattern to avoid escaping issues. ```bash if [ -n "$artifact_path" ]; then # Step 1: Filter out existing research artifacts (use "| not" pattern) jq '(.active_projects[] | select(.project_number == '$task_number')).artifacts = [(.active_projects[] | select(.project_number == '$task_number')).artifacts // [] | .[] | select(.type == "research" | not)]' \ specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json # Step 2: Add new research artifact jq --arg path "$artifact_path" \ --arg type "$artifact_type" \ --arg summary "$artifact_summary" \ '(.active_projects[] | select(.project_number == '$task_number')).artifacts += [{"path": $path, "type": $type, "summary": $summary}]' \ specs/state.json > specs/tmp/state.json && mv specs/tmp/state.json specs/state.json fi ``` **Update TODO.md**: Link artifact using count-aware format. Apply the four-case Edit logic from `@.opencode/context/patterns/artifact-linking-todo.md` with `field_name=**Research**`, `next_field=**Plan**`. --- ### Stage 9: Git Commit ```bash git add -A git commit -m "task ${task_number}: complete research Session: ${session_id} ``` --- ### Stage 10: Cleanup ```bash rm -f "specs/${padded_num}_${project_name}/.postflight-pending" rm -f "specs/${padded_num}_${project_name}/.postflight-loop-guard" rm -f "specs/${padded_num}_${project_name}/.return-meta.json" ``` --- ### Stage 11: Return Brief Summary ``` Meeting notes processed for task {N}: - Investor: {investor_name} - Meeting date: {meeting_date} - Meeting file: {output_path} - Action items: {count} - CSV tracker: {updated|created|skipped} - Update-only mode: {yes|no} - Research report: {artifact_path} - Status updated to [RESEARCHED] - Changes committed - Next: Review meeting file for accuracy ``` --- ## Return Format Brief text summary (NOT JSON). --- ## Error Handling ### Input Validation Errors Return immediately if task not found or notes_path missing. ### File Not Found Return error if notes_path does not exist on disk. ### Metadata File Missing Keep status as "researching" for resume. ### User Abandonment Return partial status with progress made. ### Git Commit Failure Non-blocking: Log failure but continue.
Ver en GitHub