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:
# Analyze your codebase
uvx skene-growth analyze . --api-key "your-gemini-api-key"
# Or set the API key as environment variable
export SKENE_API_KEY="your-gemini-api-key"
uvx skene-growth analyze .
Get a free Gemini API key at: https://aistudio.google.com/apikey
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 --docs flag, it also collects:
- Product Overview - Tagline, value proposition, target audience
- Features - User-facing feature documentation with descriptions and examples
Installation
Option 1: uvx (Recommended)
Zero installation - runs instantly (requires API key):
uvx skene-growth analyze . --api-key "your-gemini-api-key"
uvx skene-growth generate
uvx skene-growth inject
uvx skene-growth validate ./growth-manifest.json
Note: The
analyzecommand requires a Gemini API key. Get one free at https://aistudio.google.com/apikey
Option 2: pip install
pip install skene-growth
CLI Commands
analyze - Analyze a codebase
Requires a Gemini API key (set via --api-key, SKENE_API_KEY env var, or config file).
# Analyze current directory
uvx skene-growth analyze . --api-key "your-gemini-api-key"
# Using environment variable
export SKENE_API_KEY="your-gemini-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 gemini-2.5-pro
# Enable docs mode (collects product overview and features)
uvx skene-growth analyze . --docs
Output: ./skene-context/growth-manifest.json
The --docs flag enables documentation mode which produces a v2.0 manifest with additional fields for generating richer documentation.
generate - Generate documentation
# Generate docs from manifest (auto-detected)
uvx skene-growth generate
# Specify manifest and output directory
uvx skene-growth generate -m ./manifest.json -o ./docs
Output: Markdown documentation in ./skene-docs/
inject - Generate growth loop injection plan
# Generate injection plan using built-in growth loops
uvx skene-growth inject
# Use custom growth loops from CSV
uvx skene-growth inject --csv loops.csv
# Specify manifest
uvx skene-growth inject -m ./manifest.json
Output: ./skene-injection-plan.json
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-gemini-api-key"
# LLM provider to use (default: gemini)
provider = "gemini"
# Default output directory
output_dir = "./skene-context"
# Enable verbose output
verbose = false
Configuration Priority
Settings are loaded in this order (later overrides earlier):
- User config (
~/.config/skene-growth/config.toml) - Project config (
./.skene-growth.toml) - Environment variables (
SKENE_API_KEY,SKENE_PROVIDER) - 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="gemini",
api_key=SecretStr("your-api-key"),
model_name="gemini-2.0-flash",
)
# 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"])
Growth Loop Catalog
from skene_growth import GrowthLoopCatalog
catalog = GrowthLoopCatalog()
# Get all loops
all_loops = catalog.get_all()
# Get by category
referral_loops = catalog.get_by_category("referral")
activation_loops = catalog.get_by_category("activation")
# Get specific loop
invite_loop = catalog.get_by_id("user-invites")
# Load custom loops from CSV
catalog.load_from_csv("my-loops.csv")
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)
Injection Planner
from skene_growth import InjectionPlanner, GrowthLoopCatalog, GrowthManifest
manifest = GrowthManifest.parse_file("growth-manifest.json")
catalog = GrowthLoopCatalog()
planner = InjectionPlanner()
# Generate quick plan (no LLM required)
plan = planner.generate_quick_plan(manifest, catalog)
# Save plan
planner.save_plan(plan, "injection-plan.json")
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"
}
Docs Mode Schema (v2.0)
When using --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"
}
Built-in Growth Loops
The catalog includes these growth loop templates:
| Loop | Category | Description |
|---|---|---|
| User Invites | Referral | Users invite others to join |
| Social Sharing | Acquisition | Share content on social media |
| Onboarding Completion | Activation | Guide users to key actions |
| Usage Streaks | Retention | Encourage regular usage |
| Upgrade Prompts | Revenue | Prompt upgrades at limits |
| User-Generated Content | Acquisition | Content that attracts users |
| Re-engagement Notifications | Retention | Bring back inactive users |
Environment Variables
| Variable | Description |
|---|---|
SKENE_API_KEY |
API key for LLM provider (Gemini) |
SKENE_PROVIDER |
LLM provider to use (default: gemini) |
Requirements
- Python 3.11+
- Gemini API key (required for
analyzecommand) - Get one free at https://aistudio.google.com/apikey
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file skene_growth-0.1.2.tar.gz.
File metadata
- Download URL: skene_growth-0.1.2.tar.gz
- Upload date:
- Size: 79.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30dac4c6a86f90ca4ebf92ee48b8abc8c680203fb15623920a19edf069551545
|
|
| MD5 |
f58c7d6efcebad140185106b64644af1
|
|
| BLAKE2b-256 |
869e9d9f1a4fd8a68b98458a4cf6003241c4d060b12ac8c6856763b21cb744d8
|
Provenance
The following attestation bundles were made for skene_growth-0.1.2.tar.gz:
Publisher:
publish.yml on SkeneTechnologies/skene-growth
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skene_growth-0.1.2.tar.gz -
Subject digest:
30dac4c6a86f90ca4ebf92ee48b8abc8c680203fb15623920a19edf069551545 - Sigstore transparency entry: 804960143
- Sigstore integration time:
-
Permalink:
SkeneTechnologies/skene-growth@f4caa4673a474b005e2f98719a041b3fed63e390 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/SkeneTechnologies
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f4caa4673a474b005e2f98719a041b3fed63e390 -
Trigger Event:
release
-
Statement type:
File details
Details for the file skene_growth-0.1.2-py3-none-any.whl.
File metadata
- Download URL: skene_growth-0.1.2-py3-none-any.whl
- Upload date:
- Size: 66.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b6aa88dc39fe8868acc86fe8da9c1481c67e4ce8372f4fbe7df9ebd66f513fb
|
|
| MD5 |
bd83d4b9b97a6e372dc2a89b47058364
|
|
| BLAKE2b-256 |
63f8ba86dbc0ab26e1e1a99587fca8e8ebd7dd51eafa90209d6615c71a456887
|
Provenance
The following attestation bundles were made for skene_growth-0.1.2-py3-none-any.whl:
Publisher:
publish.yml on SkeneTechnologies/skene-growth
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
skene_growth-0.1.2-py3-none-any.whl -
Subject digest:
5b6aa88dc39fe8868acc86fe8da9c1481c67e4ce8372f4fbe7df9ebd66f513fb - Sigstore transparency entry: 804960148
- Sigstore integration time:
-
Permalink:
SkeneTechnologies/skene-growth@f4caa4673a474b005e2f98719a041b3fed63e390 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/SkeneTechnologies
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f4caa4673a474b005e2f98719a041b3fed63e390 -
Trigger Event:
release
-
Statement type: