Skip to main content

skill-founder-spreadsheet

Cost breakdown spreadsheet generation with forcing questions

Ir para a instalação

Informações da origem

Repositório
benbrastmckie/nvim
Última atividade na origem
10 de agosto de 2026 às 06:35
Idioma detectado do SKILL.md
inglês
Estrelas
444
Forks
459

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
skill-founder-spreadsheet
description
Cost breakdown spreadsheet generation with forcing questions
allowed-tools
Agent, Bash, Edit, Read, Write
# Spreadsheet Skill Thin wrapper that routes cost breakdown spreadsheet requests to the `founder-spreadsheet-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: `.claude/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 `/sheet` command with task number - User runs `/research` on a founder task with `task_type: "sheet"` ### Implicit Invocation (during task implementation) When an implementing agent encounters any of these patterns: **Plan step language patterns**: - "Create cost breakdown" - "Build financial spreadsheet" - "Generate cost analysis" - "Cost modeling spreadsheet" **Target mentions**: - "cost breakdown" - "budget spreadsheet" - "expense analysis" - "financial model" ### When NOT to trigger Do not invoke for: - Market sizing (use skill-market) - Revenue projections (use skill-strategy) - General business analysis (use skill-analyze) - Project timelines (use skill-project) --- ## Execution Flow ### Stage 1: Input Validation Validate required inputs: - `task_number` - Must be provided and exist in state.json - `mode` - Optional, one of: ESTIMATE, BUDGET, FORECAST, ACTUALS ```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 pre-gathered forcing_data (if present) forcing_data=$(echo "$task_data" | jq -r '.forcing_data // null') pre_gathered_mode=$(echo "$forcing_data" | jq -r '.mode // null' 2>/dev/null) # Validate mode if provided if [ -n "$mode" ]; then case "$mode" in ESTIMATE|BUDGET|FORECAST|ACTUALS) ;; *) return error "Invalid mode: $mode. Must be ESTIMATE, BUDGET, FORECAST, or ACTUALS" ;; esac fi ``` --- ### Stage 2 + Stage 3: Preflight Status Update and Postflight Marker Source `skill-base.sh` once, then follow `@.claude/context/patterns/skill-preflight-flow.md` in full for Stage 2 (preflight status update) and Stage 3 (marker creation): ```bash source .claude/scripts/skill-base.sh padded_num=$(printf "%03d" "$task_number") skill_name="skill-founder-spreadsheet" operation="research" ``` --- ### Stage 4: Prepare Delegation Context Include pre-gathered forcing_data when available: ```json { "task_context": { "task_number": N, "project_name": "{project_name}", "description": "{description}", "task_type": "founder", "task_type": "sheet" }, "forcing_data": { "mode": "{pre_gathered_mode}", "scope_period": "{pre_gathered_period}", "scope_entity": "{pre_gathered_entity}", "gathered_at": "{timestamp}" }, "mode": "ESTIMATE|BUDGET|FORECAST|ACTUALS or use forcing_data.mode", "metadata_file_path": "specs/{NNN}_{SLUG}/.return-meta.json", "metadata": { "session_id": "sess_{timestamp}_{random}", "delegation_depth": 1, "delegation_path": ["orchestrator", "sheet", "skill-founder-spreadsheet"] } } ``` **Note**: If `forcing_data` is present from STAGE 0 of /sheet command, pass it to the agent. The agent will use pre-gathered data and only ask follow-up questions for missing details. --- ### Stage 5: Invoke Agent **CRITICAL**: You MUST use the **Agent** tool to spawn the agent. **Required Tool Invocation**: ``` Tool: Agent (NOT Skill, NOT Plan) Parameters: - subagent_type: "founder-spreadsheet-agent" - prompt: [Include task_context, forcing_data, mode, metadata_file_path, metadata] - description: "Cost breakdown spreadsheet generation" ``` The agent will: - Use pre-gathered forcing_data if available (skip already-answered questions) - Present mode selection only if not pre-selected - Ask follow-up forcing questions for cost details - Generate XLSX with native Excel formulas - Export JSON metrics for Typst integration - Create research report at specs/{NNN}_{SLUG}/reports/ - Write metadata file - Return brief text summary --- ### Stage 5b: Self-Execution Fallback **CRITICAL**: If you performed the work above WITHOUT using the Agent 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 Agent 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") artifacts=$(jq -r '.artifacts' "$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 bash .claude/scripts/state-write.sh \ '(.active_projects[] | select(.project_number == $num)) |= . + { status: $status, last_updated: $ts }' \ --session-id "$session_id" \ --argjson num "$task_number" --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" --arg status "researched" ``` **Update TODO.md**: Use Edit tool to change status marker to `[RESEARCHED]`. --- ### Stage 8: Link Artifacts Add artifacts to state.json with summaries. **IMPORTANT**: Use two-step jq pattern to avoid escaping issues. ```bash # For each artifact type (research, spreadsheet, metrics) for artifact in $(echo "$artifacts" | jq -c '.[]'); do path=$(echo "$artifact" | jq -r '.path') type=$(echo "$artifact" | jq -r '.type') summary=$(echo "$artifact" | jq -r '.summary') # Step 1: Filter out existing artifacts of same type (use "| not" pattern) bash .claude/scripts/state-write.sh \ '(.active_projects[] | select(.project_number == $num)).artifacts = [(.active_projects[] | select(.project_number == $num)).artifacts // [] | .[] | select(.type == $type | not)]' \ --session-id "$session_id" \ --argjson num "$task_number" --arg type "$type" # Step 2: Add new artifact bash .claude/scripts/state-write.sh \ '(.active_projects[] | select(.project_number == $num)).artifacts += [{"path": $path, "type": $type, "summary": $summary}]' \ --session-id "$session_id" \ --argjson num "$task_number" --arg path "$path" --arg type "$type" --arg summary "$summary" done ``` **Update TODO.md**: Link artifact using count-aware format. Apply the four-case Edit logic from `@.claude/context/patterns/artifact-linking-todo.md` with `field_name=**Research**`, `next_field=**Plan**`. --- ### Stage 9: Git Commit Apply the `research` scope from `.claude/context/standards/git-staging-scope.md` — targeted staging, never a repo-wide add: ```bash git add \ "specs/${padded_num}_${project_name}/reports/" \ "specs/${padded_num}_${project_name}/.return-meta.json" \ "specs/TODO.md" \ "specs/state.json" git commit -m "task ${task_number}: complete research Session: ${session_id} ``` --- ### Stage 10: Cleanup Follow `@.claude/context/patterns/skill-postflight-flow.md`'s Stage 9 (cleanup): ```bash skill_cleanup "$padded_num" "$project_name" ``` --- ### Stage 11: Return Brief Summary ``` Cost breakdown research completed for task {N}: - Mode: {mode}, {questions_asked} forcing questions completed - Categories: {category_list} - Line items: {count} - Monthly total: ${total_monthly} - Pre-gathered data used: {yes/no} - Spreadsheet: specs/{NNN}_{SLUG}/cost-breakdown.xlsx - Research report: specs/{NNN}_{SLUG}/reports/01_{short-slug}.md - Status updated to [RESEARCHED] - Changes committed - Next: Run /plan {N} to create implementation plan ``` --- ## MUST NOT (Postflight Boundary) After the agent returns -- whether with status researched, partial, or failed -- this skill MUST proceed immediately to postflight (Stage 6). The skill MUST NOT: 1. **Edit source/report files** - All research work is done by agent 2. **Run domain analysis or calculations** - Analysis is agent work 3. **Use MCP or WebSearch tools** - Research tools are for agent use only 4. **Analyze or grep source** - Analysis is agent work 5. **Write reports** - Artifact creation is done by agent > **PROHIBITION**: If the subagent returned partial or failed status, the lead skill MUST NOT > attempt to continue, complete, or "fill in" the subagent's work. Report the partial/failed > status and let the user re-run `/research` to resume. The postflight phase is LIMITED TO: - Reading agent metadata file - Calling `update-task-status.sh` for status updates (state.json + TODO.md) - Linking artifacts in state.json - Git commit - Cleanup of temp/marker files Reference: @.claude/context/standards/postflight-tool-restrictions.md --- ## Return Format Brief text summary (NOT JSON). Expected successful return: ``` Cost breakdown research completed for task {N}: - Mode: BUDGET, 8 forcing questions completed - Categories: Personnel, Infrastructure, Marketing, Operations - Line items: 12 - Monthly total: $81,200 - Pre-gathered data used: yes (2 questions from STAGE 0) - Spreadsheet: specs/234_cost_breakdown_saas/cost-breakdown.xlsx - Research report: specs/234_cost_breakdown_saas/reports/01_cost-breakdown.md - Status updated to [RESEARCHED] - Changes committed with session sess_1736700000_abc123 - Next: Run /plan 234 to create implementation plan ``` --- ## Error Handling ### Input Validation Errors Return immediately if task not found. ### 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 no GitHub