Skene
CLI docs

skene-growth CLI documentation

Analyze codebases for product-led growth opportunities, generate growth plans, and build implementation prompts.

Manifest Schema Reference

Complete JSON schema reference for growth manifests produced by skene-growth analysis.

Overview

skene-growth outputs a structured JSON file called growth-manifest.json that captures everything discovered during codebase analysis. There are two schema versions:

VersionSchemaDescription
1.0GrowthManifestStandard PLG analysis output. Contains tech stack, growth features, opportunities, and revenue leakage.
2.0DocsManifestExtended manifest for documentation generation. Inherits all v1.0 fields and adds product_overview and features.

The analyze command produces a v1.0 manifest by default. When run with the --product-docs flag (or via the generate_manifest MCP tool with product_docs: true), it produces a v2.0 manifest instead.

Both versions are defined as Pydantic models in src/skene_growth/manifest/schema.py.

v1.0 Manifest Example (GrowthManifest)

{
  "version": "1.0",
  "project_name": "my-saas-app",
  "description": "A SaaS application for team collaboration",
  "tech_stack": {
    "framework": "Next.js",
    "language": "TypeScript",
    "database": "PostgreSQL",
    "auth": "NextAuth.js",
    "deployment": "Vercel",
    "package_manager": "npm",
    "services": ["Stripe", "SendGrid"]
  },
  "industry": {
    "primary": "Productivity",
    "secondary": ["B2B", "SaaS", "Enterprise"],
    "confidence": 0.85,
    "evidence": [
      "README mentions 'team collaboration' as primary use case",
      "Target audience includes 'businesses' and 'teams'"
    ]
  },
  "current_growth_features": [
    {
      "feature_name": "Team Invitations",
      "file_path": "src/features/invitations/index.ts",
      "detected_intent": "Viral growth through team expansion",
      "confidence_score": 0.85,
      "entry_point": "/invite",
      "growth_potential": [
        "Add referral tracking",
        "Implement invite rewards"
      ]
    }
  ],
  "growth_opportunities": [
    {
      "feature_name": "Analytics Dashboard",
      "description": "No usage analytics for tracking team activity",
      "priority": "high"
    }
  ],
  "revenue_leakage": [
    {
      "issue": "Free tier allows unlimited usage without conversion prompts",
      "file_path": "src/pricing/tiers.py",
      "impact": "high",
      "recommendation": "Add usage limits or upgrade prompts to encourage paid conversions"
    }
  ],
  "generated_at": "2025-01-15T10:30:00"
}

v2.0 Manifest Example (DocsManifest)

A v2.0 manifest includes all v1.0 fields plus product_overview and features:

{
  "version": "2.0",
  "project_name": "my-saas-app",
  "description": "A SaaS application for team collaboration",
  "tech_stack": {
    "framework": "Next.js",
    "language": "TypeScript",
    "database": "PostgreSQL",
    "auth": "NextAuth.js",
    "deployment": "Vercel",
    "package_manager": "npm",
    "services": ["Stripe", "SendGrid"]
  },
  "industry": {
    "primary": "Productivity",
    "secondary": ["B2B", "SaaS", "Enterprise"],
    "confidence": 0.85,
    "evidence": [
      "README mentions 'team collaboration' as primary use case",
      "Target audience includes 'businesses' and 'teams'"
    ]
  },
  "current_growth_features": [
    {
      "feature_name": "Team Invitations",
      "file_path": "src/features/invitations/index.ts",
      "detected_intent": "Viral growth through team expansion",
      "confidence_score": 0.85,
      "entry_point": "/invite",
      "growth_potential": [
        "Add referral tracking",
        "Implement invite rewards"
      ]
    }
  ],
  "growth_opportunities": [
    {
      "feature_name": "Analytics Dashboard",
      "description": "No usage analytics for tracking team activity",
      "priority": "high"
    }
  ],
  "revenue_leakage": [
    {
      "issue": "Free tier allows unlimited usage without conversion prompts",
      "file_path": "src/pricing/tiers.py",
      "impact": "high",
      "recommendation": "Add usage limits or upgrade prompts to encourage paid conversions"
    }
  ],
  "product_overview": {
    "tagline": "Team collaboration that scales with your organization",
    "value_proposition": "Simplifies cross-team communication and project tracking, reducing coordination overhead by 40%",
    "target_audience": "Engineering and product teams at mid-size B2B companies"
  },
  "features": [
    {
      "name": "Real-time Chat",
      "description": "Instant messaging with threading, mentions, and emoji reactions",
      "file_path": "src/features/chat/index.ts",
      "usage_example": "import { ChatProvider } from '@/features/chat'",
      "category": "Communication"
    },
    {
      "name": "Project Boards",
      "description": "Kanban-style boards for tracking tasks and milestones",
      "file_path": "src/features/boards/index.ts",
      "usage_example": null,
      "category": "Project Management"
    }
  ],
  "generated_at": "2025-01-15T10:30:00"
}

Field Reference

GrowthManifest (top-level, v1.0)

FieldTypeRequiredDescription
versionstringNo (default: "1.0")Manifest schema version.
project_namestringYesName of the analyzed project.
descriptionstring | nullNoBrief description of the project.
tech_stackTechStackYesDetected technology stack.
industryIndustryInfo | nullNoInferred industry/market vertical classification.
current_growth_featuresGrowthFeature[]No (default: [])Identified current features with growth potential.
growth_opportunitiesGrowthOpportunity[]No (default: [])Growth opportunities to address.
revenue_leakageRevenueLeakage[]No (default: [])Potential revenue leakage issues.
generated_atdatetimeNo (auto-set)When the manifest was generated. Always overwritten to current machine time.

DocsManifest (additional fields, v2.0)

Inherits all GrowthManifest fields above. The version field defaults to "2.0".

FieldTypeRequiredDescription
versionstringNo (default: "2.0")Manifest schema version for docs-enabled manifests.
product_overviewProductOverview | nullNoHigh-level product overview for documentation.
featuresFeature[]No (default: [])User-facing feature documentation.

TechStack

FieldTypeRequiredDescription
frameworkstring | nullNoPrimary framework (e.g., "Next.js", "FastAPI", "Rails").
languagestringYesPrimary programming language (e.g., "Python", "TypeScript").
databasestring | nullNoDatabase technology (e.g., "PostgreSQL", "MongoDB").
authstring | nullNoAuthentication method (e.g., "JWT", "OAuth", "Clerk").
deploymentstring | nullNoDeployment platform (e.g., "Vercel", "AWS", "Docker").
package_managerstring | nullNoPackage manager (e.g., "npm", "poetry", "cargo").
servicesstring[]No (default: [])Third-party services and integrations (e.g., "Stripe", "SendGrid", "Twilio").

GrowthFeature

FieldTypeRequiredDescription
feature_namestringYesName of the feature or growth area.
file_pathstringYesPrimary file path where this feature is implemented.
detected_intentstringYesDetected purpose or intent of the feature.
confidence_scorefloatYesConfidence in the detection, between 0.0 and 1.0.
entry_pointstring | nullNoEntry point for users (e.g., URL path, function name).
growth_potentialstring[]No (default: [])List of growth opportunities specific to this feature.

GrowthOpportunity

FieldTypeRequiredDescription
feature_namestringYesName of the missing feature or opportunity.
descriptionstringYesDescription of what is missing and why it matters.
priority"high" | "medium" | "low"YesPriority level for addressing this opportunity.

RevenueLeakage

FieldTypeRequiredDescription
issuestringYesDescription of the revenue leakage issue.
file_pathstring | nullNoFile path where this issue is detected (if applicable).
impact"high" | "medium" | "low"YesEstimated impact on revenue.
recommendationstringYesRecommendation for addressing this issue.

IndustryInfo

FieldTypeRequiredDescription
primarystring | nullNoPrimary industry vertical (e.g., "DevTools", "FinTech", "E-commerce").
secondarystring[]No (default: [])Supporting tags for sub-verticals or go-to-market nuance (e.g., "B2B", "SaaS").
confidencefloat | nullNoConfidence score between 0.0 and 1.0 for the classification.
evidencestring[]No (default: [])Short bullets citing specific repo signals that support the classification.

ProductOverview (v2.0 only)

FieldTypeRequiredDescription
taglinestring | nullNoShort one-liner describing the product (under 15 words).
value_propositionstring | nullNoWhat problem the product solves and why it matters.
target_audiencestring | nullNoWho the product is for (e.g., developers, businesses).

Feature (v2.0 only)

FieldTypeRequiredDescription
namestringYesHuman-readable feature name.
descriptionstringYesUser-facing description of what the feature does.
file_pathstring | nullNoPrimary file where this feature is implemented.
usage_examplestring | nullNoCode snippet or usage example.
categorystring | nullNoFeature category (e.g., "Authentication", "API", "UI").

Validation

Use the validate command to check that a manifest file conforms to the schema:

uvx skene-growth validate ./growth-manifest.json
# Or using the shorthand:
uvx skene validate ./growth-manifest.json

The command parses the JSON and validates it against the GrowthManifest Pydantic model. On success, it prints a summary table showing the project name, version, tech stack language, and counts of growth features and opportunities. On failure, it prints the validation error and exits with code 1.

Note that validate uses the v1.0 GrowthManifest schema. Since DocsManifest (v2.0) inherits from GrowthManifest, a v2.0 manifest will also pass v1.0 validation -- the extra product_overview and features fields are simply ignored.

How Manifests Are Generated

There are two ways to generate a manifest:

1. The analyze CLI command

The primary way to generate a manifest is through the analyze command:

# Generate a v1.0 GrowthManifest
uvx skene-growth analyze .

# Generate a v2.0 DocsManifest (includes product_overview and features)
uvx skene-growth analyze . --product-docs

By default, the manifest is written to ./skene-context/growth-manifest.json. You can change the output path with the --output flag:

uvx skene-growth analyze . --output ./my-manifest.json

2. The generate_manifest MCP tool

When using skene-growth as an MCP server, the generate_manifest tool produces the same output programmatically. It accepts pre-computed analysis results for individual phases (tech stack, industry, features) or auto-analyzes any missing phases. Set the product_docs parameter to true to generate a v2.0 DocsManifest.

Notes on generated_at

The generated_at field is always overwritten to the current machine time via a Pydantic model validator, regardless of what value the LLM provides during analysis. This ensures the timestamp accurately reflects when the manifest was created on your system.