Skip to main content

PLG analysis toolkit for codebases - analyze code, detect growth opportunities, generate documentation

Project description

skene-growth

PLG (Product-Led Growth) analysis toolkit for codebases. Analyze your code, detect growth opportunities, and generate documentation of your stack.

Quick Start

No installation required - just run with uvx:

#install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Analyze your codebase
uvx skene-growth analyze . --api-key "your-openai-api-key"

# Or set the API key as environment variable
export SKENE_API_KEY="your-openai-api-key"
uvx skene-growth analyze .

Get an OpenAI API key at: https://platform.openai.com/api-keys

What It Does

skene-growth scans your codebase and generates a growth manifest containing:

  • Tech Stack Detection - Framework, language, database, auth, deployment
  • Growth Hubs - Features with growth potential (signup flows, sharing, invites, billing)
  • GTM Gaps - Missing features that could drive user acquisition and retention

With the --product-docs flag, it also collects:

  • Product Overview - Tagline, value proposition, target audience
  • Features - User-facing feature documentation with descriptions and examples
  • Product Docs - Generates user-friendly product-docs.md file

After the manifest is created, skene-growth generates a custom growth template (JSON + Markdown) tailored to your business type using LLM analysis. The templates use examples in src/templates/ as reference but create custom lifecycle stages and keywords specific to your product.

Installation

Option 1: uvx (Recommended)

Install uv

curl -LsSf https://astral.sh/uv/install.sh | sh

Zero installation - runs instantly (requires API key):

uvx skene-growth analyze . --api-key "your-openai-api-key"
uvx skene-growth validate ./growth-manifest.json

Note: The analyze command requires an API key. By default, it uses OpenAI (get a key at https://platform.openai.com/api-keys). You can also use Gemini with --provider gemini, Anthropic with --provider anthropic, or local LLMs with --provider lmstudio or --provider ollama (experimental).

Option 2: pip install

pip install skene-growth

CLI Commands

analyze - Analyze a codebase

Requires an API key (set via --api-key, SKENE_API_KEY env var, or config file).

# Analyze current directory (uses OpenAI by default)
uvx skene-growth analyze . --api-key "your-openai-api-key"

# Using environment variable
export SKENE_API_KEY="your-openai-api-key"
uvx skene-growth analyze .

# Analyze specific path with custom output
uvx skene-growth analyze ./my-project -o manifest.json

# With verbose output
uvx skene-growth analyze . -v

# Use a specific model
uvx skene-growth analyze . --model gpt-4o

# Use Gemini instead of OpenAI
uvx skene-growth analyze . --provider gemini --api-key "your-gemini-api-key"

# Use Anthropic (Claude)
uvx skene-growth analyze . --provider anthropic --api-key "your-anthropic-api-key"

# Use LM Studio (local server)
uvx skene-growth analyze . --provider lmstudio --model "your-loaded-model"

# Use Ollama (local server) - Experimental
uvx skene-growth analyze . --provider ollama --model "llama2"

# Specify business type for custom growth template
uvx skene-growth analyze . --business-type "design-agency"
uvx skene-growth analyze . --business-type "b2b-saas"

# Generate product documentation (collects product overview and features)
uvx skene-growth analyze . --product-docs

Output:

  • ./skene-context/growth-manifest.json (structured data)
  • ./skene-context/growth-manifest.md (analysis summary)
  • ./skene-context/growth-template.json (if --business-type specified)
  • ./skene-context/growth-template.md (if --business-type specified)
  • ./skene-context/product-docs.md (if --product-docs flag used)

Growth Templates: The system generates custom templates tailored to your business type, with lifecycle stages and keywords specific to your user journey. If no business type is specified, the LLM infers it from your codebase.

Flags:

  • --product-docs: Generate user-friendly product documentation (collects product overview, features, and generates product-docs.md)
  • --business-type: Specify business type for custom growth template

The --product-docs flag enables enhanced analysis mode which collects product overview and feature documentation, producing a v2.0 manifest with additional fields and a user-friendly product-docs.md file.

validate - Validate a manifest

uvx skene-growth validate ./growth-manifest.json

config - Manage configuration

# Show current configuration
uvx skene-growth config

# Create a config file in current directory
uvx skene-growth config --init

Configuration

skene-growth supports configuration files for storing defaults:

Configuration Files

Location Purpose
./.skene-growth.toml Project-level config (checked into repo)
~/.config/skene-growth/config.toml User-level config (personal settings)

Sample Config File

# .skene-growth.toml

# API key for LLM provider (can also use SKENE_API_KEY env var)
# api_key = "your-api-key"

# LLM provider to use: "openai" (default), "gemini", "anthropic", "lmstudio", or "ollama" (experimental)
provider = "openai"

# Model to use (provider-specific defaults apply if not set)
# openai: gpt-4o-mini | gemini: gemini-2.0-flash | anthropic: claude-sonnet-4-20250514 | ollama: llama2
# model = "gpt-4o-mini"

# Default output directory
output_dir = "./skene-context"

# Enable verbose output
verbose = false

Configuration Priority

Settings are loaded in this order (later overrides earlier):

  1. User config (~/.config/skene-growth/config.toml)
  2. Project config (./.skene-growth.toml)
  3. Environment variables (SKENE_API_KEY, SKENE_PROVIDER)
  4. CLI arguments

Python API

CodebaseExplorer

Safe, sandboxed access to codebase files:

from skene_growth import CodebaseExplorer

explorer = CodebaseExplorer("/path/to/repo")

# Get directory tree
tree = await explorer.get_directory_tree(".", max_depth=3)

# Search for files
files = await explorer.search_files(".", "**/*.py")

# Read file contents
content = await explorer.read_file("src/main.py")

# Read multiple files
contents = await explorer.read_multiple_files(["src/a.py", "src/b.py"])

Analyzers

from pydantic import SecretStr
from skene_growth import ManifestAnalyzer, CodebaseExplorer
from skene_growth.llm import create_llm_client

# Initialize
codebase = CodebaseExplorer("/path/to/repo")
llm = create_llm_client(
    provider="openai",  # or "gemini", "anthropic", "lmstudio", or "ollama" (experimental)
    api_key=SecretStr("your-api-key"),
    model_name="gpt-4o-mini",  # or "gemini-2.0-flash" / "claude-sonnet-4-20250514" / local model
)

# Run analysis
analyzer = ManifestAnalyzer()
result = await analyzer.run(
    codebase=codebase,
    llm=llm,
    request="Analyze this codebase for growth opportunities",
)

# Access results (the manifest is in result.data["output"])
manifest = result.data["output"]
print(manifest["tech_stack"])
print(manifest["growth_hubs"])

Documentation Generator

from skene_growth import DocsGenerator, GrowthManifest

# Load manifest
manifest = GrowthManifest.parse_file("growth-manifest.json")

# Generate docs
generator = DocsGenerator()
context_doc = generator.generate_context_doc(manifest)
product_doc = generator.generate_product_docs(manifest)

Growth Manifest Schema

The growth-manifest.json output contains:

{
  "version": "1.0",
  "project_name": "my-app",
  "description": "A SaaS application",
  "tech_stack": {
    "framework": "Next.js",
    "language": "TypeScript",
    "database": "PostgreSQL",
    "auth": "NextAuth.js",
    "deployment": "Vercel"
  },
  "growth_hubs": [
    {
      "feature_name": "User Invites",
      "file_path": "src/components/InviteModal.tsx",
      "detected_intent": "referral",
      "confidence_score": 0.85,
      "growth_potential": ["viral_coefficient", "user_acquisition"]
    }
  ],
  "gtm_gaps": [
    {
      "feature_name": "Social Sharing",
      "description": "No social sharing for user content",
      "priority": "high"
    }
  ],
  "generated_at": "2024-01-15T10:30:00Z"
}

Product Docs Schema (v2.0)

When using --product-docs flag, the manifest includes additional fields:

{
  "version": "2.0",
  "project_name": "my-app",
  "description": "A SaaS application",
  "tech_stack": { ... },
  "growth_hubs": [ ... ],
  "gtm_gaps": [ ... ],
  "product_overview": {
    "tagline": "The easiest way to collaborate with your team",
    "value_proposition": "Simplify team collaboration with real-time editing and sharing.",
    "target_audience": "Remote teams and startups"
  },
  "features": [
    {
      "name": "Team Workspaces",
      "description": "Create dedicated spaces for your team to collaborate on projects.",
      "file_path": "src/features/workspaces/index.ts",
      "usage_example": "<WorkspaceCard workspace={workspace} />",
      "category": "Collaboration"
    }
  ],
  "generated_at": "2024-01-15T10:30:00Z"
}

Environment Variables

Variable Description
SKENE_API_KEY API key for LLM provider
SKENE_PROVIDER LLM provider to use: openai (default), gemini, anthropic, lmstudio, or ollama (experimental)
LMSTUDIO_BASE_URL LM Studio server URL (default: http://localhost:1234/v1)
OLLAMA_BASE_URL Ollama server URL (default: http://localhost:11434/v1) - Experimental

Requirements

Troubleshooting

LM Studio: Context length error

If you see an error like:

Error code: 400 - {'error': 'The number of tokens to keep from the initial prompt is greater than the context length...'}

This means the model's context length is too small for the analysis. To fix:

  1. In LM Studio, unload the current model
  2. Go to Developer > Load
  3. Click on Context Length: Model supports up to N tokens
  4. Reload to apply changes

See: https://github.com/lmstudio-ai/lmstudio-bug-tracker/issues/237

LM Studio: Connection refused

If you see a connection error, ensure:

  • LM Studio is running
  • A model is loaded and ready
  • The server is running on the default port (http://localhost:1234)

If using a different port or host, set the LMSTUDIO_BASE_URL environment variable:

export LMSTUDIO_BASE_URL="http://localhost:8080/v1"

Ollama: Connection refused (Experimental)

Note: Ollama support is experimental and has not been fully tested. Please report any issues.

If you see a connection error, ensure:

  • Ollama is running (ollama serve)
  • A model is pulled and available (ollama list to check)
  • The server is running on the default port (http://localhost:11434)

If using a different port or host, set the OLLAMA_BASE_URL environment variable:

export OLLAMA_BASE_URL="http://localhost:8080/v1"

To get started with Ollama:

# Install Ollama (see https://ollama.com)
# Pull a model
ollama pull llama2

# Run the server (usually runs automatically)
ollama serve

MCP Server

skene-growth includes an MCP server for integration with AI assistants.

Add this to your AI assistant configuration file:

{
  "mcpServers": {
    "skene-growth": {
      "command": "uvx",
      "args": ["--from", "skene-growth[mcp]", "skene-growth-mcp"],
      "env": {
        "SKENE_API_KEY": "your-openai-api-key"
      }
    }
  }
}

See docs/mcp-server.md for more detailed instructions.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skene_growth-0.1.7b1.tar.gz (143.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skene_growth-0.1.7b1-py3-none-any.whl (97.7 kB view details)

Uploaded Python 3

File details

Details for the file skene_growth-0.1.7b1.tar.gz.

File metadata

  • Download URL: skene_growth-0.1.7b1.tar.gz
  • Upload date:
  • Size: 143.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skene_growth-0.1.7b1.tar.gz
Algorithm Hash digest
SHA256 e5dc6c95f1daa7ae4de87e60b29cec37b46cbf14c05fcee4318fb53e50a99245
MD5 8215a67aa1f33e675ab35c70dcc3d9e7
BLAKE2b-256 e50cd7e9a3f90887fa6c652a83474108b43f3591aa60d49b2db269b9497cf615

See more details on using hashes here.

Provenance

The following attestation bundles were made for skene_growth-0.1.7b1.tar.gz:

Publisher: publish.yml on SkeneTechnologies/skene-growth

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file skene_growth-0.1.7b1-py3-none-any.whl.

File metadata

  • Download URL: skene_growth-0.1.7b1-py3-none-any.whl
  • Upload date:
  • Size: 97.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for skene_growth-0.1.7b1-py3-none-any.whl
Algorithm Hash digest
SHA256 fdbfdcb403b973cc54b8076a728545cc64504c9cf8d784f8c70ecb031216bd5f
MD5 6547e58c8a1c9be58ee92ca51f6f0fdd
BLAKE2b-256 da1cfab2839223c4c62af9ddb57ac1d7e847ac4abc42e7c9adb6859499ccfe54

See more details on using hashes here.

Provenance

The following attestation bundles were made for skene_growth-0.1.7b1-py3-none-any.whl:

Publisher: publish.yml on SkeneTechnologies/skene-growth

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page