Claude Skill

lov-bp-outline

Turn existing project materials into a source-backed investor BP brief, evidence ledger, and 12–15 slide outline. Use before making slides, when the product positioning is unclear, or when an existing outline is too technical, generic, or unsupported. Trigger on "写 BP 大纲", "融资叙事"

LLM Mart · 0 points · 10 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download lovstudio-skills-skills_bp-outline-77d464c.zip · 15 KB
Part of lovstudio/skills — 83 skills
This skill couldn't be refreshed from GitHub on the last check — you're seeing the last imported snapshot.

Install

skills CLI npx skills add https://github.com/lovstudio/skills/tree/main/skills/bp-outline
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install lovstudio-skills@llmmart
Git git clone https://github.com/lovstudio/skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole lovstudio/skills collection as a plugin from our marketplace. Git is the plain clone.

README

BP 蓝图 · BP Blueprint

Version

把项目资料整理成投资人能看懂的产品定义、证据账本和 12–15 页 BP 大纲。

安装

npx skills add bp-outline -g -y

使用

$lov-bp-outline 根据当前仓库和用户访谈写 BP 大纲
$lov-bp-outline 重写这份大纲,先不要做 PPT

交付物

  • brief.md
  • evidence-ledger.md
  • outline.md
  • 待补证据清单

大纲确认后,可交给 lov-bp-deck 继续制作 PPT。

License

MIT

Skill manifest

BP 蓝图 · BP Blueprint

Build the investment story before choosing a visual style. This skill stops at an approved, source-backed outline and does not generate PPTX/PDF.

Input

Any combination of:

  • repository, product docs, PRD, website, prior applications, or existing BP;
  • analytics exports, payment/usage data, GitHub evidence, and customer notes;
  • product screenshots, founder profile, team history, brand assets;
  • financing stage, amount, equity/instrument, and milestones.

Output Contract

business-plan/
├── brief.md
├── evidence-ledger.md
├── outline.md
└── assets/

The output is ready for lov-bp-deck only when the evidence gate passes.

Workflow (MANDATORY)

Step 0: Resolve the skill and workspace

Resolve this SKILL.md directory as SKILL_DIR. If the user already has a business-plan/ workspace, continue in it. Otherwise initialize one:

python3 "$SKILL_DIR/scripts/init_bp.py" \
  --name "Project Name" \
  --stage seed \
  --output ./business-plan

Read references/user-config.md for portable path and brand resolution.

Step 1: Inspect before asking

Search the user's supplied scope first. Prefer exact repo/files/URLs over broad discovery. Extract known audience, financing stage, ask, product, buyer, traction, business model, market, competition, growth, and team evidence.

Ask at most one compact round of questions for missing decisions that materially change the outline. If the user says “不要问”“按推荐方案”, assume seed investors, 12–15 slides, 8–10 minutes, and mark the financing ask as a visible gap if unknown.

Step 2: Build the evidence ledger

Record every material claim as:

  • fact;
  • inference;
  • assumption;
  • missing.

Include source, as-of date, slide destination, and next action. For changing claims, verify current authoritative sources. Never substitute a broad AI forecast for a buyer-linked market calculation. Read references/evidence-and-market.md.

Step 3: Define the investor-readable product

Before the vision, draft three one-line definitions:

  1. literal category;
  2. accurate comparator (“X for Y”);
  3. category-creation language with a plain-language explanation.

Choose the line a non-technical investor can repeat after ten seconds. Separate:

early wedge → adjacent users → long-term market

Treat technical modes as implementation unless the buyer actually pays for the mechanism. Read references/investor-story.md.

Step 4: Write the 12–15 page argument

Use this 12-page base:

  1. one sentence: who you are;
  2. concrete user problem;
  3. how the product solves it;
  4. product demo or core experience;
  5. why now;
  6. real validation;
  7. business model;
  8. market size and wedge;
  9. competition and differentiation;
  10. growth plan;
  11. why this team;
  12. financing ask, use, and next proof.

Expand only when a product demo, moat, B2B deployment model, or financial model needs a dedicated page. Read references/deck-architecture.md.

Each slide entry must contain:

  • conclusion headline;
  • investor takeaway;
  • evidence IDs and sources;
  • exact visual/chart proof;
  • speaker purpose;
  • unresolved gap or “none”.

Step 5: Run the evidence gate

The outline is ready only when:

  • all 12 investor questions are covered;
  • the product definition is investor-readable;
  • every core number traces to evidence or a labeled assumption;
  • traction stages and denominators are not mixed;
  • TAM/SAM/SOM has a buyer-price-reachability bridge;
  • the financing ask connects to 18–24 month validation milestones;
  • no placeholder is hidden as final copy.

Report the page map and at most five evidence gaps. Do not start slide generation unless the user asked for a complete BP or explicitly continues with bp-deck.

Recommended Next Step

$lov-bp-deck ./business-plan/outline.md

Runtime context (shared)

运行前读取本 Skill 包的 skill.yaml,由宿主提供 skill-runtime/v1 上下文。字段解析顺序为:当前请求、项目上下文、个人 Preferences、品牌 Profile、通用默认值。

  • 只使用 Manifest 声明的字段;Profile 保存公开品牌事实,Preferences 保存个人工作偏好。
  • required: true 字段缺失时,按 Manifest 的问题配置向用户提出一个聚焦问题;用户明确同意后再保存回答。
  • 报错提供可复制的 context_id、字段路径与来源,诊断内容避开秘密、完整私人路径和原始配置。

通用反馈闭环

用户在 Skill 驱动任务中提出修改意见时,继续当前产物前必须执行:

  1. 先判断意见是 task-specific(仅本次)还是 reusable(可跨任务复用)。
  2. task-specific 只修改当前任务,不改 Skill。
  3. reusable 先确定作用域:领域规则先更新对应 canonical Skill;适用于所有 Skill 的规则先更新共享规范。
  4. 完成规则更新、版本、lint 与分发核验后,再把修改应用到当前任务。
  5. reusable 修改会使此前的“确认”“继续”“发吧”失效;完成当前产物修改和回读后必须停下,等待用户下一步指示,不自动进入发布、提交或其他外部写入。
Files (skills)
  • assets
    • templates
      • brief.md 1.2 KB
        # {{PROJECT_NAME}} — BP Brief
        
        Updated: {{DATE}}
        
        ## Financing task
        
        - Audience: early-stage investors who may not know the technology
        - Stage: {{STAGE}}
        - Target presentation: 12–15 slides / 8–10 minutes
        - Financing ask: missing
        - Instrument / equity: missing
        - Validation window: 18–24 months (assumption until confirmed)
        
        ## Product definition
        
        - One-line product definition: missing
        - Category: missing
        - Core user / buyer: missing
        - Core job to be done: missing
        - Early wedge: missing
        - Adjacent users: missing
        - Long-term market: missing
        
        ## Investment thesis
        
        - Problem: missing
        - Product insight: missing
        - Why now: missing
        - Evidence already proven: missing
        - Evidence not yet proven: missing
        - Business model: missing
        - Defensibility: missing
        - Founder–market/product fit: missing
        
        ## Required source material
        
        - [ ] Product docs and current screenshots
        - [ ] Current usage / retention / revenue data
        - [ ] Customer interviews, pilots, orders, or support evidence
        - [ ] Competitor product pages and pricing
        - [ ] Market data with source and date
        - [ ] Team profile and execution evidence
        - [ ] Financing amount, use of funds, and milestones
        - [ ] Brand assets and contact action
        
      • evidence-ledger.md 1.5 KB
        # {{PROJECT_NAME}} — Evidence Ledger
        
        Updated: {{DATE}}
        
        Status values: `fact`, `inference`, `assumption`, `missing`.
        
        | ID | Claim | Status | Source | As of | Slide | Notes / next action |
        |---|---|---|---|---|---|---|
        | E-001 | Product definition | missing | — | {{DATE}} | 1 | Validate with product and buyer language |
        | E-002 | Core problem evidence | missing | — | {{DATE}} | 2 | Add interview, workflow, or measured cost |
        | E-003 | Product workflow | missing | — | {{DATE}} | 3–4 | Add real screenshot and current capability boundary |
        | E-004 | Why-now evidence | missing | — | {{DATE}} | 5 | Verify current primary sources |
        | E-005 | Traction | missing | — | {{DATE}} | 6 | Separate install, active, retained, trial, and paid |
        | E-006 | Business model | assumption | — | {{DATE}} | 7 | Identify buyer, offer, price, and sales motion |
        | E-007 | TAM/SAM/SOM | missing | — | {{DATE}} | 8 | Build bottom-up and cross-check top-down |
        | E-008 | Competition | missing | — | {{DATE}} | 9 | Verify current product pages and pricing |
        | E-009 | Growth plan | assumption | — | {{DATE}} | 10 | Tie channels to measurable capacity |
        | E-010 | Team fit | missing | — | {{DATE}} | 11 | Add execution and domain evidence |
        | E-011 | Financing ask | missing | — | {{DATE}} | 12 | Amount, structure, use, window, milestones |
        
        ## Source notes
        
        Record definitions, denominators, query dates, screenshots, and exclusions here.
        Do not paste credentials or private customer information.
        
      • outline.md 3.1 KB
        # {{PROJECT_NAME}} — Investor BP Outline
        
        Stage: {{STAGE}}
        Updated: {{DATE}}
        Audience: Early-stage investors
        Length: 12–15 slides / 8–10 minutes
        
        ## Slide 1 — Product definition
        
        Headline: TODO — one investor-readable definition
        Investor takeaway: TODO
        Evidence: E-001
        Visual: clean cover; product/company name + definition
        Speaker purpose: establish what the company is in ten seconds
        Gap: E-001
        
        ## Slide 2 — Concrete problem
        
        Headline: TODO — state the user pain as a conclusion
        Investor takeaway: TODO
        Evidence: E-002
        Visual: before workflow, direct quote, or measured pain
        Speaker purpose: prove frequency and cost
        Gap: E-002
        
        ## Slide 3 — Solution
        
        Headline: TODO — show the changed user outcome
        Investor takeaway: TODO
        Evidence: E-003
        Visual: before/after or solution flow
        Speaker purpose: connect pain to the product insight
        Gap: E-003
        
        ## Slide 4 — Product demo
        
        Headline: TODO — describe what the real experience proves
        Investor takeaway: TODO
        Evidence: E-003
        Visual: real product screenshot or demo sequence
        Speaker purpose: make the product tangible
        Gap: E-003
        
        ## Slide 5 — Why now
        
        Headline: TODO — state the structural change
        Investor takeaway: TODO
        Evidence: E-004
        Visual: timeline or 2–3 converging trends with sources
        Speaker purpose: explain timing
        Gap: E-004
        
        ## Slide 6 — Real validation
        
        Headline: TODO — state what is proven and what is not
        Investor takeaway: TODO
        Evidence: E-005
        Visual: evidence ladder, cohort, revenue, pilots, or usage chart
        Speaker purpose: reduce execution and demand uncertainty
        Gap: E-005
        
        ## Slide 7 — Business model
        
        Headline: TODO — explain who pays for what value
        Investor takeaway: TODO
        Evidence: E-006
        Visual: value/revenue staircase or buyer-to-payment flow
        Speaker purpose: show how money enters the system
        Gap: E-006
        
        ## Slide 8 — Market and wedge
        
        Headline: TODO — connect the first buyer to the larger market
        Investor takeaway: TODO
        Evidence: E-007
        Visual: bottom-up TAM/SAM/SOM bridge with formulas
        Speaker purpose: establish venture-scale potential and credible entry
        Gap: E-007
        
        ## Slide 9 — Competition and differentiation
        
        Headline: TODO — state the defensible position
        Investor takeaway: TODO
        Evidence: E-008
        Visual: comparison table or defensible quadrant
        Speaker purpose: show alternatives honestly and explain the wedge
        Gap: E-008
        
        ## Slide 10 — Growth plan
        
        Headline: TODO — state the repeatable acquisition hypothesis
        Investor takeaway: TODO
        Evidence: E-009
        Visual: funnel, flywheel, or phased channel plan
        Speaker purpose: connect channel activity to measurable growth
        Gap: E-009
        
        ## Slide 11 — Team fit
        
        Headline: TODO — state why this team is unusually suited
        Investor takeaway: TODO
        Evidence: E-010
        Visual: evidence timeline, founder-product loop, or customer access
        Speaker purpose: prove founder–market/product fit
        Gap: E-010
        
        ## Slide 12 — Financing and next proof
        
        Headline: TODO — amount + most important proof this round buys
        Investor takeaway: TODO
        Evidence: E-011
        Visual: use-of-funds chart + 18–24 month milestone gates + contact
        Speaker purpose: make the investment decision concrete
        Gap: E-011
        
  • references
    • deck-architecture.md 2.9 KB
      # 12–15 Slide Investor Deck Architecture
      
      ## Base 12-slide sequence
      
      | # | Investor question | Required proof | Strong visual |
      |---:|---|---|---|
      | 1 | What are you? | Product definition + company/brand | Clean cover or one visual metaphor |
      | 2 | What hurts? | Concrete user moment, frequency, cost | Before workflow, quote, or pain funnel |
      | 3 | What changes? | Specific product response | Before/after or solution flow |
      | 4 | Does it work? | Real product or experience | Product screenshot / demo sequence |
      | 5 | Why now? | 2–3 structural changes | Timeline or converging trend chart |
      | 6 | What is proven? | Usage, retention, revenue, speed, or pilots | Evidence ladder / cohort / verified metrics |
      | 7 | How do you make money? | Buyer, offer, price, sales motion | Value/revenue staircase |
      | 8 | How large can it be? | Source-backed TAM/SAM/SOM + wedge | Market bridge / rings with methodology |
      | 9 | Why you vs. alternatives? | Honest competitor dimensions | Matrix, table, or value-chain map |
      | 10 | How will you grow? | Channels, milestones, economics | Funnel, flywheel, or phased roadmap |
      | 11 | Why this team? | Founder-market/product fit | Evidence timeline, not résumé wall |
      | 12 | What are you raising? | Ask, use, runway, 18–24 month proof | Use-of-funds chart + milestone gates |
      
      ## When to expand to 13–15 slides
      
      Add a page only when it carries evidence that cannot fit cleanly elsewhere:
      
      - a second product-demo page for a complex workflow;
      - a technology/moat page with measurable defensibility;
      - a dedicated go-to-market wedge page;
      - a regulated/B2B deployment model;
      - a financial model when revenue complexity materially affects the investment case.
      
      Do not add generic mission, feature grids, long roadmaps, or “thank you” pages merely
      to reach a page count.
      
      ## Slide contract
      
      Each outline entry should contain:
      
      ```markdown
      ## Slide 06 — Real validation
      
      Headline: One conclusion, not a topic label
      Investor takeaway: What uncertainty this page removes
      Evidence: Exact facts and source IDs
      Visual: Chart type and field mapping
      Speaker purpose: Why this page exists in the spoken story
      Gap: Missing evidence or “none”
      ```
      
      ## Page discipline
      
      - One page, one argument.
      - The headline contains the conclusion.
      - A viewer should understand the page in 8–12 seconds.
      - Keep only the numbers needed for the conclusion.
      - Put methodology and source notes at the bottom, not in the speaker's memory.
      - 8–10 minutes means roughly 35–50 seconds per page; demo pages may take longer.
      
      ## Executive summary rule
      
      For a long-form business plan, write the executive summary last. It must include:
      
      1. what the company does;
      2. problem and buyer;
      3. solution and difference;
      4. market opportunity with a traceable number;
      5. exact ask and what it unlocks.
      
      The pitch deck's first and last pages should make the same promise and ask, from
      opposite ends of the argument.
      
    • evidence-and-market.md 2.8 KB
      # Evidence and Market Sizing
      
      ## Evidence classes
      
      Every material claim belongs to one class:
      
      | Class | Meaning | How to present |
      |---|---|---|
      | Fact | Directly supported by a reliable source | State with source and as-of date |
      | Inference | Reasoned conclusion from facts | Label as inference and show bridge |
      | Assumption | Planning input not yet verified | Label and sensitivity-test |
      | Missing | Necessary evidence not yet available | Keep as a named gap, never fill by intuition |
      
      ## Source hierarchy
      
      Prefer sources in this order:
      
      1. Product database, payment processor, analytics, contracts, repository history.
      2. Direct customer interviews, support conversations, signed pilots, orders.
      3. Official government, company, exchange, standards, or research data.
      4. Reputable analyst/research reports with disclosed methodology.
      5. Quality secondary reporting.
      6. Search snippets, social posts, and unsourced aggregations only as leads.
      
      Time-sensitive facts must be checked live. Capture the date and exact URL. If a
      source is inaccessible, say so in the report.
      
      ## Evidence ledger format
      
      | ID | Claim | Status | Source | As of | Slide | Notes / next action |
      |---|---|---|---|---|---|---|
      | E-001 | ... | fact | URL or dashboard export | YYYY-MM-DD | 6 | ... |
      
      Use stable IDs in the outline so charts and slide copy can be traced back.
      
      ## TAM / SAM / SOM methodology
      
      Do not paste a broad “AI will be worth $X trillion” forecast into a deck. Build a
      bridge from actual buyer to price.
      
      ### TAM
      
      All plausible buyers × annual value of the complete category.
      
      ```text
      TAM = global buyer count × realistic annual spend per buyer
      ```
      
      Use a top-down source only as a cross-check.
      
      ### SAM
      
      The part of TAM reachable by current product scope, geography, regulation, and sales
      motion.
      
      ```text
      SAM = target buyer count in reachable segments × current annual contract value
      ```
      
      ### SOM
      
      A three-to-five-year operating plan, not a percentage chosen for visual symmetry.
      
      ```text
      SOM = acquired accounts × annual price × expected retention
      ```
      
      Show the channel capacity or sales capacity that makes acquired accounts credible.
      
      ## Scenario model
      
      Use at least two scenarios:
      
      - conservative: slower conversion, lower price, longer sales cycle;
      - base: management plan;
      - upside: only if named leading indicators improve.
      
      Never present the upside case as a forecast. Put assumptions next to the chart.
      
      ## Metric hygiene
      
      - Distinguish downloads, clones, activated users, active users, retained users, and
        paid users.
      - Distinguish trial, activation, conversion, renewal, and revenue.
      - Use cohorts for retention; do not infer retention from cumulative installs.
      - Define the period, denominator, timezone, duplicates, bots, and internal usage.
      - Put “as of YYYY-MM-DD” on changing metrics.
      - When the number is zero, say zero; the honest gap can define the financing thesis.
      
    • investor-story.md 3.1 KB
      # Investor Story
      
      ## The investor's reading order
      
      An investor does not read a BP like a product manual. The sequence is closer to:
      
      1. Can I understand what this is in ten seconds?
      2. Is the pain real, frequent, and expensive enough?
      3. Is the product response specific and demonstrable?
      4. Why can this become large now?
      5. What has already been de-risked?
      6. How does money enter the system?
      7. Why will this team win?
      8. What exactly does this financing buy?
      
      Every slide should reduce one uncertainty in that order.
      
      ## Three layers of positioning
      
      ### Layer 1: Product definition
      
      State the category or the completed job. It should be repeatable, not poetic.
      
      - Chinese: ideally 14–20 characters.
      - English: ideally 8–12 words.
      - One subject, one category/job, one clear beneficiary.
      - Do not lead with architecture, protocols, model names, or number of Agents.
      
      Draft three alternatives:
      
      1. **Literal category** — “面向 X 的 Y”。
      2. **Comparator** — “X 版的 Y” or “X for Y”.
      3. **Category creation** — a new category with an immediate plain-language gloss.
      
      Choose the line a non-technical investor can repeat accurately after ten seconds.
      
      ### Layer 2: Market wedge
      
      Name the first buyer and the urgent use case. A credible wedge is narrower than the
      vision but large enough to prove demand.
      
      ```text
      Core wedge → adjacent users → long-term market
      ```
      
      Do not confuse the wedge with the final market, or describe the final market as the
      current customer base.
      
      ### Layer 3: Vision
      
      Explain the structural change that makes the company matter. Vision earns its place
      after the product and wedge are clear.
      
      ## Product vs. implementation
      
      Ask: “If this mechanism changed tomorrow, would the customer still buy the result?”
      
      - If yes, it is implementation and should not define the company.
      - If no, it may be the category or moat.
      
      Examples of implementation-heavy framing:
      
      - number of Agents;
      - local vs. cloud runtime without explaining user benefit;
      - branch/worktree selection;
      - model/provider list;
      - architecture components.
      
      Translate them into the user consequence: continuity, control, trust, speed, cost,
      collaboration, or creative freedom.
      
      ## Before / after test
      
      | Weak | Better |
      |---|---|
      | “We integrate many models and Agents.” | “One workspace keeps AI work controllable from idea to delivery.” |
      | “Local-first multi-Agent orchestration.” | “Your work, context, and choices stay portable while AI does the execution.” |
      | “Everyone can command an Agent team.” | “Creators can reliably turn intent into finished digital products.” |
      
      The “better” line is still a hypothesis. It must match the actual product and buyer.
      
      ## Narrative red flags
      
      - The first three slides require a glossary.
      - The one-liner is a slogan with no product noun or job.
      - The company is defined by a feature available in every model vendor.
      - The market slide appears before the buyer is clear.
      - The deck claims “no competitors” or makes strong competitors look foolish.
      - Vision, TAM, and product roadmap describe three different businesses.
      - The financing ask does not connect to the key risks still unproven.
      
    • user-config.md 2.3 KB
      # User Configuration
      
      This skill follows the portable agent skill profile contract. It must not
      assume a private workspace, personal absolute paths, or private brand assets.
      
      ## Resolution Order
      
      1. Explicit CLI flags.
      2. Environment variables.
      3. Shared profile JSON.
      4. Safe defaults such as the current working directory or `$HOME/Documents`.
      5. Ask the user once for missing required fields.
      
      ## Shared Profile
      
      Default profile path:
      
      ```bash
      ${SKILL_PROFILE_PATH:-$HOME/.skill-publisher/skills/profile.json}
      ```
      
      Example:
      
      ```json
      {
        "user": {
          "name": "Your Name",
          "language": "zh-CN",
          "timezone": "Asia/Shanghai"
        },
        "workspace": {
          "root": "$HOME/projects",
          "output_dir": "$HOME/Documents/lov-skill-output"
        },
        "brand": {
          "name": "Your Brand",
          "site": "https://example.com",
          "profile": "$HOME/.skill-publisher/skills/brand.json",
          "design_guide": "$HOME/.skill-publisher/skills/design-guide.md"
        }
      }
      ```
      
      Environment variable overrides:
      
      | Variable | Meaning |
      |----------|---------|
      | `SKILL_PROFILE_PATH` | Path to the shared profile JSON |
      | `SKILLS_CONFIG_DIR` | Shared Skill Publisher skills config/data directory |
      | `SKILL_WORKSPACE_ROOT` | User workspace root |
      | `SKILL_OUTPUT_DIR` | Default generated output directory |
      | `SKILL_PROFILE_PATH` | Brand profile JSON or Markdown |
      | `SKILL_DESIGN_GUIDE` | Design guide path |
      
      BP-specific overrides take precedence over shared values:
      
      | Variable | Meaning |
      |----------|---------|
      | `SKILL_BP_OUTPUT_DIR` | Default output directory for BP workspaces |
      | `SKILL_BP_BRAND_PROFILE` | Brand profile used by the deck |
      | `SKILL_BP_DESIGN_GUIDE` | Visual design guide used by the deck |
      
      If none are set, use an explicit `--output` path or a project-local
      `business-plan/` directory. Never assume an author's private workspace.
      
      ## Implementation Notes
      
      - Store source descriptions in `evidence-ledger.md`; do not copy secrets into the
        BP workspace.
      - Prefer relative paths inside the workspace so it can be moved or shared.
      - Brand files remain user-owned inputs. The public Yoda assets are an example, not
        a default theme.
      
      - Scripts should accept explicit paths via CLI flags.
      - Missing profile fields should produce actionable errors.
      - Skill Publisher maintainer defaults belong in an optional profile, not in the workflow.
      
  • scripts
    • init_bp.py 6.2 KB
      #!/usr/bin/env python3
      """Create a portable investor-BP workspace without overwriting existing work."""
      
      from __future__ import annotations
      
      import argparse
      import datetime as dt
      import json
      import os
      import re
      import sys
      from pathlib import Path
      from typing import Any, Dict, Optional
      
      
      def expand_path(value: str) -> Path:
          return Path(os.path.expandvars(os.path.expanduser(value))).resolve()
      
      
      def slugify(value: str) -> str:
          normalized = re.sub(r"[^\w\u4e00-\u9fff]+", "-", value.strip().lower(), flags=re.UNICODE)
          return normalized.strip("-_") or "project"
      
      
      def load_profile(path: Path) -> Dict[str, Any]:
          if not path.exists():
              return {}
          try:
              data = json.loads(path.read_text(encoding="utf-8"))
          except (OSError, json.JSONDecodeError) as exc:
              raise SystemExit(f"Cannot read profile {path}: {exc}") from exc
          if not isinstance(data, dict):
              raise SystemExit(f"Profile must be a JSON object: {path}")
          return data
      
      
      def nested(data: Dict[str, Any], *keys: str) -> Optional[str]:
          current: Any = data
          for key in keys:
              if not isinstance(current, dict):
                  return None
              current = current.get(key)
          return current if isinstance(current, str) and current.strip() else None
      
      
      def resolve_output(args: argparse.Namespace, profile: Dict[str, Any]) -> Path:
          if args.output:
              return expand_path(args.output)
          skill_output = os.environ.get("SKILL_BP_OUTPUT_DIR")
          if skill_output:
              return expand_path(skill_output) / f"{slugify(args.name)}-business-plan"
          shared_output = os.environ.get("SKILL_OUTPUT_DIR")
          if shared_output:
              return expand_path(shared_output) / f"{slugify(args.name)}-business-plan"
          profile_output = nested(profile, "workspace", "output_dir")
          if profile_output:
              return expand_path(profile_output) / f"{slugify(args.name)}-business-plan"
          return (Path.cwd() / "business-plan").resolve()
      
      
      def resolve_optional(explicit: Optional[str], env_name: str, profile: Dict[str, Any], key: str) -> str:
          value = explicit or os.environ.get(env_name) or nested(profile, "brand", key)
          return str(expand_path(value)) if value else "not configured"
      
      
      def render_template(template: Path, destination: Path, values: Dict[str, str]) -> None:
          text = template.read_text(encoding="utf-8")
          for key, value in values.items():
              text = text.replace("{{" + key + "}}", value)
          destination.write_text(text, encoding="utf-8")
      
      
      def ensure_safe_destination(output: Path) -> None:
          home = Path.home().resolve()
          if output in {Path("/").resolve(), home}:
              raise SystemExit(f"Refusing to use broad destination: {output}")
          if output.exists() and any(output.iterdir()):
              raise SystemExit(
                  f"Destination already contains files: {output}\n"
                  "Continue in that workspace manually or choose a new --output path."
              )
      
      
      def parse_args() -> argparse.Namespace:
          parser = argparse.ArgumentParser(
              description="Create a source-backed 12–15 slide investor-BP workspace."
          )
          parser.add_argument("--name", required=True, help="Project or company name")
          parser.add_argument(
              "--stage",
              default="seed",
              choices=("pre-seed", "seed", "angel", "pre-a", "series-a", "growth", "other"),
              help="Financing stage (default: seed)",
          )
          parser.add_argument("--output", help="Exact workspace directory")
          parser.add_argument("--profile", help="Shared Skill Publisher skills profile JSON")
          parser.add_argument("--brand-profile", help="Brand profile file")
          parser.add_argument("--design-guide", help="Design guide file")
          parser.add_argument("--json", action="store_true", help="Print machine-readable result")
          return parser.parse_args()
      
      
      def main() -> int:
          args = parse_args()
          profile_path = expand_path(
              args.profile
              or os.environ.get("SKILL_PROFILE_PATH")
              or "$HOME/.skill-publisher/skills/profile.json"
          )
          profile = load_profile(profile_path)
          output = resolve_output(args, profile)
          ensure_safe_destination(output)
      
          skill_root = Path(__file__).resolve().parent.parent
          template_root = skill_root / "assets" / "templates"
          required_templates = {
              "brief.md": template_root / "brief.md",
              "evidence-ledger.md": template_root / "evidence-ledger.md",
              "outline.md": template_root / "outline.md",
          }
          missing = [str(path) for path in required_templates.values() if not path.exists()]
          if missing:
              raise SystemExit("Missing templates:\n- " + "\n- ".join(missing))
      
          output.mkdir(parents=True, exist_ok=True)
          (output / "assets").mkdir(exist_ok=True)
          (output / "assets" / ".gitkeep").touch()
      
          today = dt.date.today().isoformat()
          values = {
              "PROJECT_NAME": args.name.strip(),
              "STAGE": args.stage,
              "DATE": today,
              "VERSION": "draft-0.1",
          }
          created = []
          for relative, template in required_templates.items():
              destination = output / relative
              render_template(template, destination, values)
              created.append(str(destination))
      
          brand_profile = resolve_optional(
              args.brand_profile, "SKILL_BP_BRAND_PROFILE", profile, "profile"
          )
          design_guide = resolve_optional(
              args.design_guide, "SKILL_BP_DESIGN_GUIDE", profile, "design_guide"
          )
          source_note = output / "source-config.md"
          source_note.write_text(
              "# BP Source Configuration\n\n"
              f"- Project: {args.name.strip()}\n"
              f"- Stage: {args.stage}\n"
              f"- Created: {today}\n"
              f"- Brand profile: {brand_profile}\n"
              f"- Design guide: {design_guide}\n\n"
              "Do not store credentials or private customer data in this file.\n",
              encoding="utf-8",
          )
          created.append(str(source_note))
      
          result = {
              "project": args.name.strip(),
              "stage": args.stage,
              "workspace": str(output),
              "created": created,
          }
          if args.json:
              print(json.dumps(result, ensure_ascii=False, indent=2))
          else:
              print(f"Created investor-BP workspace: {output}")
              for path in created:
                  print(f"  - {path}")
              print("Next: replace missing/TODO items, pass the evidence gate, then use bp-deck.")
          return 0
      
      
      if __name__ == "__main__":
          sys.exit(main())
      
  • CHANGELOG.md 317 B
    # Changelog
    
    All notable changes to this skill are documented here.
    Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning: [SemVer](https://semver.org/)
    
    ## [0.2.0] - 2026-08-24
    
    ### Added
    
    - add the shared feedback-classification and approval-invalidation gate used by every LovStudio Skill
    
  • README.md 557 B
    # BP 蓝图 · BP Blueprint
    
    ![Version](https://img.shields.io/badge/version-0.2.0-CC785C)
    
    把项目资料整理成投资人能看懂的产品定义、证据账本和 12–15 页 BP 大纲。
    
    ## 安装
    
    ```bash
    npx skills add bp-outline -g -y
    ```
    
    ## 使用
    
    ```text
    $lov-bp-outline 根据当前仓库和用户访谈写 BP 大纲
    $lov-bp-outline 重写这份大纲,先不要做 PPT
    ```
    
    ## 交付物
    
    - `brief.md`
    - `evidence-ledger.md`
    - `outline.md`
    - 待补证据清单
    
    大纲确认后,可交给 `lov-bp-deck` 继续制作 PPT。
    
    ## License
    
    MIT
    
  • SKILL.md 5.7 KB
    ---
    name: lov-bp-outline
    description: >
      Turn existing project materials into a source-backed investor BP brief, evidence
      ledger, and 12–15 slide outline. Use before making slides, when the product
      positioning is unclear, or when an existing outline is too technical, generic,
      or unsupported. Trigger on "写 BP 大纲", "融资叙事", "梳理商业计划书",
      "先不要做 PPT", "BP outline", "investor narrative", or "pitch deck outline".
    license: MIT
    metadata:
      author: contributors
      version: "0.2.0"
      tags: business-plan outline investor narrative evidence market positioning
    ---
    
    # BP 蓝图 · BP Blueprint
    
    Build the investment story before choosing a visual style. This skill stops at an
    approved, source-backed outline and does not generate PPTX/PDF.
    
    ## Input
    
    Any combination of:
    
    - repository, product docs, PRD, website, prior applications, or existing BP;
    - analytics exports, payment/usage data, GitHub evidence, and customer notes;
    - product screenshots, founder profile, team history, brand assets;
    - financing stage, amount, equity/instrument, and milestones.
    
    ## Output Contract
    
    ```text
    business-plan/
    ├── brief.md
    ├── evidence-ledger.md
    ├── outline.md
    └── assets/
    ```
    
    The output is ready for `lov-bp-deck` only when the evidence gate passes.
    
    ## Workflow (MANDATORY)
    
    ### Step 0: Resolve the skill and workspace
    
    Resolve this `SKILL.md` directory as `SKILL_DIR`. If the user already has a
    `business-plan/` workspace, continue in it. Otherwise initialize one:
    
    ```bash
    python3 "$SKILL_DIR/scripts/init_bp.py" \
      --name "Project Name" \
      --stage seed \
      --output ./business-plan
    ```
    
    Read `references/user-config.md` for portable path and brand resolution.
    
    ### Step 1: Inspect before asking
    
    Search the user's supplied scope first. Prefer exact repo/files/URLs over broad
    discovery. Extract known audience, financing stage, ask, product, buyer, traction,
    business model, market, competition, growth, and team evidence.
    
    Ask at most one compact round of questions for missing decisions that materially
    change the outline. If the user says “不要问”“按推荐方案”, assume seed investors,
    12–15 slides, 8–10 minutes, and mark the financing ask as a visible gap if unknown.
    
    ### Step 2: Build the evidence ledger
    
    Record every material claim as:
    
    - fact;
    - inference;
    - assumption;
    - missing.
    
    Include source, as-of date, slide destination, and next action. For changing claims,
    verify current authoritative sources. Never substitute a broad AI forecast for a
    buyer-linked market calculation. Read `references/evidence-and-market.md`.
    
    ### Step 3: Define the investor-readable product
    
    Before the vision, draft three one-line definitions:
    
    1. literal category;
    2. accurate comparator (“X for Y”);
    3. category-creation language with a plain-language explanation.
    
    Choose the line a non-technical investor can repeat after ten seconds. Separate:
    
    ```text
    early wedge → adjacent users → long-term market
    ```
    
    Treat technical modes as implementation unless the buyer actually pays for the
    mechanism. Read `references/investor-story.md`.
    
    ### Step 4: Write the 12–15 page argument
    
    Use this 12-page base:
    
    1. one sentence: who you are;
    2. concrete user problem;
    3. how the product solves it;
    4. product demo or core experience;
    5. why now;
    6. real validation;
    7. business model;
    8. market size and wedge;
    9. competition and differentiation;
    10. growth plan;
    11. why this team;
    12. financing ask, use, and next proof.
    
    Expand only when a product demo, moat, B2B deployment model, or financial model
    needs a dedicated page. Read `references/deck-architecture.md`.
    
    Each slide entry must contain:
    
    - conclusion headline;
    - investor takeaway;
    - evidence IDs and sources;
    - exact visual/chart proof;
    - speaker purpose;
    - unresolved gap or “none”.
    
    ### Step 5: Run the evidence gate
    
    The outline is ready only when:
    
    - all 12 investor questions are covered;
    - the product definition is investor-readable;
    - every core number traces to evidence or a labeled assumption;
    - traction stages and denominators are not mixed;
    - TAM/SAM/SOM has a buyer-price-reachability bridge;
    - the financing ask connects to 18–24 month validation milestones;
    - no placeholder is hidden as final copy.
    
    Report the page map and at most five evidence gaps. Do not start slide generation
    unless the user asked for a complete BP or explicitly continues with `bp-deck`.
    
    ## Recommended Next Step
    
    ```text
    $lov-bp-deck ./business-plan/outline.md
    ```
    
    ## Runtime context (shared)
    
    运行前读取本 Skill 包的 `skill.yaml`,由宿主提供 `skill-runtime/v1` 上下文。字段解析顺序为:当前请求、项目上下文、个人 Preferences、品牌 Profile、通用默认值。
    
    - 只使用 Manifest 声明的字段;Profile 保存公开品牌事实,Preferences 保存个人工作偏好。
    - `required: true` 字段缺失时,按 Manifest 的问题配置向用户提出一个聚焦问题;用户明确同意后再保存回答。
    - 报错提供可复制的 `context_id`、字段路径与来源,诊断内容避开秘密、完整私人路径和原始配置。
    
    ## 通用反馈闭环
    
    用户在 Skill 驱动任务中提出修改意见时,继续当前产物前必须执行:
    
    1. 先判断意见是 `task-specific`(仅本次)还是 `reusable`(可跨任务复用)。
    2. `task-specific` 只修改当前任务,不改 Skill。
    3. `reusable` 先确定作用域:领域规则先更新对应 canonical Skill;适用于所有 Skill 的规则先更新共享规范。
    4. 完成规则更新、版本、lint 与分发核验后,再把修改应用到当前任务。
    5. `reusable` 修改会使此前的“确认”“继续”“发吧”失效;完成当前产物修改和回读后必须停下,等待用户下一步指示,不自动进入发布、提交或其他外部写入。
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related