/project-analyzer
Detects a project's technology stack, framework, deploy target, ORM, primary language, and active payment use cases by reading package.json/pyproject.toml/composer.json/Gemfile, schema files, route files, and deploy configs. Use this skill at the start of any PagoKit flow to
Claude Code
$ npx -y skills add Hainrixz/agente-pagokit --skill project-analyzer --agent claude-code
Codex
$ npx skills add Hainrixz/agente-pagokit --skill project-analyzer -a codex -y
Cursor
$ npx skills add Hainrixz/agente-pagokit --skill project-analyzer -a cursor -y
Gemini CLI
$ npx skills add Hainrixz/agente-pagokit --skill project-analyzer -a gemini-cli -y
GitHub Copilot
$ npx skills add Hainrixz/agente-pagokit --skill project-analyzer -a github-copilot -y
OpenCode
$ npx skills add Hainrixz/agente-pagokit --skill project-analyzer -a opencode -y
Windsurf
$ npx skills add Hainrixz/agente-pagokit --skill project-analyzer -a windsurf -y
SKILL.md
project-analyzer.SKILL.mdname: project-analyzer
description: Detects a project's technology stack, framework, deploy target, ORM, primary language, and active payment use cases by reading package.json/pyproject.toml/composer.json/Gemfile, schema files, route files, and deploy configs. Use this skill at the start of any PagoKit flow to ground recommendations in the real project context. Emits a structured detection result for payment-advisor and integration-specialist to consume.
when_to_use: |
- Beginning of /pagokit:start, before asking the user any questions
- When integration-specialist needs to know stack + ORM + deploy target before writing files
- When /pagokit:doctor audits an existing integration
allowed-tools: Read, Glob, Grep, Bash(ls *), Bash(cat *)
<!-- Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) · tododeia.com · id er-fee52fa9 -->
project-analyzer
You inspect the user's project and emit a structured detection report that downstream PagoKit skills consume. You do NOT recommend a payment method — that is payment-advisor's job. You also do NOT write any files.
What you read (in order)
1. **Manifests** — first hit wins for stack detection:
- `package.json` (Node.js / Bun ecosystem)
- `pyproject.toml`, `requirements.txt`, `Pipfile` (Python)
- `composer.json` (PHP)
- `Gemfile` (Ruby)
- `go.mod` (Go)
- `*.csproj`, `*.fsproj` (.NET)
2. **Framework signal** — look at dependencies:
- `next` → `nextjs-app-router` if `app/` directory exists, else `nextjs-pages-router`
- `express` → `express`
- `@nestjs/core` → `nestjs`
- `fastapi` → `fastapi`
- `django` → `django`
- `flask` → `flask`
- `laravel/framework` → `laravel`
- Rails: presence of `Gemfile` + `config/application.rb`
- Default to `unknown` if no clear signal.
3. **ORM** — look at deps + presence of schema files:
- `@prisma/client` + `prisma/schema.prisma` → `prisma`
- `drizzle-orm` + `drizzle.config.*` → `drizzle`
- `sqlalchemy` + `alembic.ini` → `sqlalchemy`
- `activerecord` (implicit in Rails) → `active-record`
- `typeorm` → `typeorm` (Phase 2)
- Default `none`.
4. **Deploy target** — look at config files (read existence, not contents):
- `vercel.json` or `.vercel/` → `vercel`
- `railway.toml`, `railway.json` → `railway`
- `render.yaml` → `render`
- `fly.toml` → `fly`
- `Procfile` (and no other PaaS file) → `heroku`
- `amplify.yml` → `aws-amplify`
- `wrangler.toml`, `wrangler.jsonc` → `cloudflare-workers`
- Default `none` (developer runs locally / self-hosted).
5. **Route files** — Glob for:
- `app/**/route.{ts,js}` (Next.js App Router)
- `pages/api/**/*.{ts,js}` (Next.js Pages Router)
- `routes/*.{js,ts,php,rb}`
- `urls.py`, `main.py`, `app.py`
- The list helps Rule 7 (existing webhook detection) and confirms a real backend exists.
6. **DB schema** — Glob for:
- `prisma/schema.prisma`
- `drizzle/schema.{ts,js}` or `**/schema/*.ts`
- `alembic/versions/*.py`
- `db/schema.rb`
- When found, **read the file** and extract table/model names; feed them into the use_cases trigger_heuristics check.
7. **README + CLAUDE.md** — read both to extract a one-sentence product description. Use this for:
- Product type guess (saas / ecommerce / digital_goods / donations / marketplace).
- Language fallback (if user's prompt language is ambiguous).
Use case detection
Load `skills/payment-advisor/data/use_cases.json`. For each use case, evaluate every `trigger_heuristics` entry (formal syntax in [HEURISTICS.md](./HEURISTICS.md)). Compute a confidence score:
confidence = matches / total_heuristics
Mark a use case as **detected** if `confidence >= confidence_threshold`. Mark as **ambiguous** if `0 < confidence < threshold`. Mark as **not present** if `confidence == 0`.
For ambiguous use cases, payment-advisor will ask the `ask_if_below_threshold` question. For detected use cases, payment-advisor proceeds without asking.
Language detection
The agent's output language is determined in this priority:
1. The language of the user's first prompt to `/pagokit:start` (Spanish / English / Portuguese / French / German). 2. If ambiguous, the language of the project's `README.md`. 3. Default: English.
Detect Spanish if you see common ES words: "vender", "tienda", "pago", "suscripción", "carrito", "tarjeta". Portuguese for BR: "venda", "pagamento", "assinatura", "cartão".
Greenfield mode
If the project lacks both a route file AND a schema file AND the README is empty/missing, mark `greenfield: true`. payment-advisor will skip the "I detected X — correct?" confirmation and instead ask "What do you plan to sell?".
Output format (structured)
Emit your detection report in this exact JSON-like shape (in a fenced ```json block in your reply), then continue in natural language:
{
"stack": "nextjs-app-router|nextjs-pages-router|express|nestjs|fastapi|django|flask|laravel|rails|go-gin|dotnet|hono|unknown",
"framework_version": "string or null",
"language": "es|en|pt|fr|de|other",
"deploy_target": "vercel|railway|render|fly|heroku|aws-amplify|cloudflare-workers|none",
"orm": "prisma|drizzle|sqlalchemy|active-record|typeorm|none",
"package_manager": "npm|pnpm|yarn|bun|pip|poetry|composer|bundler|other",
"route_files": ["app/api/checkout/route.ts", "..."],
"schema_files": ["prisma/schema.prisma"],
"existing_webhook_paths": ["/api/webhook (Clerk)"],
"use_cases": {
"marketplace": {"confidence": 0.0, "status": "not_present"},
"mobile_digital_goods": {"confidence": 0.0, "status": "not_present"},
"save_card_subscription": {"confidence": 0.5, "status": "ambiguous"},
"creator_donations": {"confidence": 0.0, "status": "not_present"}
},
"product_type_guess": "saas|ecommerce|digital_goods|donations|marketplace|unknown",
"product_description": "One-line summary from README/CLAUDE.md or null",
"greenfield": false
}Then immediately follow up in natural language (in the de
Read more
name: project-analyzer description: Detects a project's technology stack, framework, deploy target, ORM, primary language, and active payment use cases by reading package.json/pyproject.toml/composer.json/Gemfile, schema files, route files, and deploy configs. Use this skill at the start of any PagoKit flow to ground recommendations in the real project context. Emits a structured detection result for payment-advisor and integration-specialist to consume. when_to_use: | - Beginning of /pagokit:start, before asking the user any questions - When integration-specialist needs to know stack + ORM + deploy target before writing files - When /pagokit:doctor audits an existing integration allowed-tools: Read, Glob, Grep, Bash(ls *), Bash(cat *)
<!-- Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) · tododeia.com · id er-fee52fa9 -->
project-analyzer
You inspect the user's project and emit a structured detection report that downstream PagoKit skills consume. You do NOT recommend a payment method — that is payment-advisor's job. You also do NOT write any files.
What you read (in order)
1. **Manifests** — first hit wins for stack detection:
- `package.json` (Node.js / Bun ecosystem)
- `pyproject.toml`, `requirements.txt`, `Pipfile` (Python)
- `composer.json` (PHP)
- `Gemfile` (Ruby)
- `go.mod` (Go)
- `*.csproj`, `*.fsproj` (.NET)
2. **Framework signal** — look at dependencies:
- `next` → `nextjs-app-router` if `app/` directory exists, else `nextjs-pages-router`
- `express` → `express`
- `@nestjs/core` → `nestjs`
- `fastapi` → `fastapi`
- `django` → `django`
- `flask` → `flask`
- `laravel/framework` → `laravel`
- Rails: presence of `Gemfile` + `config/application.rb`
- Default to `unknown` if no clear signal.
3. **ORM** — look at deps + presence of schema files:
- `@prisma/client` + `prisma/schema.prisma` → `prisma`
- `drizzle-orm` + `drizzle.config.*` → `drizzle`
- `sqlalchemy` + `alembic.ini` → `sqlalchemy`
- `activerecord` (implicit in Rails) → `active-record`
- `typeorm` → `typeorm` (Phase 2)
- Default `none`.
4. **Deploy target** — look at config files (read existence, not contents):
- `vercel.json` or `.vercel/` → `vercel`
- `railway.toml`, `railway.json` → `railway`
- `render.yaml` → `render`
- `fly.toml` → `fly`
- `Procfile` (and no other PaaS file) → `heroku`
- `amplify.yml` → `aws-amplify`
- `wrangler.toml`, `wrangler.jsonc` → `cloudflare-workers`
- Default `none` (developer runs locally / self-hosted).
5. **Route files** — Glob for:
- `app/**/route.{ts,js}` (Next.js App Router)
- `pages/api/**/*.{ts,js}` (Next.js Pages Router)
- `routes/*.{js,ts,php,rb}`
- `urls.py`, `main.py`, `app.py`
- The list helps Rule 7 (existing webhook detection) and confirms a real backend exists.
6. **DB schema** — Glob for:
- `prisma/schema.prisma`
- `drizzle/schema.{ts,js}` or `**/schema/*.ts`
- `alembic/versions/*.py`
- `db/schema.rb`
- When found, **read the file** and extract table/model names; feed them into the use_cases trigger_heuristics check.
7. **README + CLAUDE.md** — read both to extract a one-sentence product description. Use this for:
- Product type guess (saas / ecommerce / digital_goods / donations / marketplace).
- Language fallback (if user's prompt language is ambiguous).
Use case detection
Load `skills/payment-advisor/data/use_cases.json`. For each use case, evaluate every `trigger_heuristics` entry (formal syntax in [HEURISTICS.md](./HEURISTICS.md)). Compute a confidence score:
confidence = matches / total_heuristics
Mark a use case as **detected** if `confidence >= confidence_threshold`. Mark as **ambiguous** if `0 < confidence < threshold`. Mark as **not present** if `confidence == 0`.
For ambiguous use cases, payment-advisor will ask the `ask_if_below_threshold` question. For detected use cases, payment-advisor proceeds without asking.
Language detection
The agent's output language is determined in this priority:
1. The language of the user's first prompt to `/pagokit:start` (Spanish / English / Portuguese / French / German). 2. If ambiguous, the language of the project's `README.md`. 3. Default: English.
Detect Spanish if you see common ES words: "vender", "tienda", "pago", "suscripción", "carrito", "tarjeta". Portuguese for BR: "venda", "pagamento", "assinatura", "cartão".
Greenfield mode
If the project lacks both a route file AND a schema file AND the README is empty/missing, mark `greenfield: true`. payment-advisor will skip the "I detected X — correct?" confirmation and instead ask "What do you plan to sell?".
Output format (structured)
Emit your detection report in this exact JSON-like shape (in a fenced ```json block in your reply), then continue in natural language:
{
"stack": "nextjs-app-router|nextjs-pages-router|express|nestjs|fastapi|django|flask|laravel|rails|go-gin|dotnet|hono|unknown",
"framework_version": "string or null",
"language": "es|en|pt|fr|de|other",
"deploy_target": "vercel|railway|render|fly|heroku|aws-amplify|cloudflare-workers|none",
"orm": "prisma|drizzle|sqlalchemy|active-record|typeorm|none",
"package_manager": "npm|pnpm|yarn|bun|pip|poetry|composer|bundler|other",
"route_files": ["app/api/checkout/route.ts", "..."],
"schema_files": ["prisma/schema.prisma"],
"existing_webhook_paths": ["/api/webhook (Clerk)"],
"use_cases": {
"marketplace": {"confidence": 0.0, "status": "not_present"},
"mobile_digital_goods": {"confidence": 0.0, "status": "not_present"},
"save_card_subscription": {"confidence": 0.5, "status": "ambiguous"},
"creator_donations": {"confidence": 0.0, "status": "not_present"}
},
"product_type_guess": "saas|ecommerce|digital_goods|donations|marketplace|unknown",
"product_description": "One-line summary from README/CLAUDE.md or null",
"greenfield": false
}Then immediately follow up in natural language (in the de
Claude Code plugin that picks and implements the right payment method for your app — from your terminal. 42 providers, 136 payment rails, and deterministic validators that block insecure payment code as it is written.
Other skills on pagokit.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about project-analyzer.
- Which coding agents can use project-analyzer?
- project-analyzer installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

