frappe-project-triage
Frappe Project Triage
Quickly analyze a Frappe project to determine its type, installed apps, version, and available tooling.
When to use
- First step when opening a new Frappe project
- Before making any code changes to understand the codebase
- When debugging to determine which apps/versions are involved
- To identify the development environment (Bench vs Frappe Manager)
Inputs required
- Project root path (where
apps/,sites/, or app code lives) - Access to run shell commands (for version checks)
Procedure
0) Identify project structure
Check for these patterns:
| Pattern | Project Type |
|---|---|
apps/ + sites/ directories |
Bench installation |
docker-compose.yml with frappe |
Frappe Manager site |
pyproject.toml or setup.py with frappe |
Standalone app |
doctype/ directory |
Inside an app module |
1) Detect installed apps
# Inside Bench/FM shell
bench --site <site> list-apps
# Or check apps directory
ls apps/
2) Check Frappe version
# Inside Bench/FM shell
bench version
# Or check from Python
bench --site <site> console
>>> frappe.__version__
3) Identify tooling
| File/Directory | Tooling |
|---|---|
Procfile |
Standard bench |
docker-compose.yml |
Docker/FM |
cypress/ |
UI testing available |
.github/workflows/ |
CI configured |
package.json with @frappe/* |
JS build tooling |
4) Check development mode
# Check site config
bench --site <site> console
>>> frappe.conf.developer_mode
Verification
- Project type identified (bench/FM/standalone app)
- Installed apps listed
- Frappe version known
- Development mode status confirmed
- Available tooling documented
Failure modes / debugging
- No site found: May be inside an app directory, navigate to bench root
- bench command not found: Not in bench environment, use
fm shellor activate venv - Permission errors: Check if running as correct user
Escalation
If project structure is unclear:
- Look for
hooks.pyto identify app root - Look for
sites/common_site_config.jsonfor bench root - Check git remote for app repository identification
Output format
After triage, document:
Project Type: [bench|frappe-manager|standalone-app]
Frappe Version: X.Y.Z
Installed Apps: [list]
Developer Mode: [yes|no]
Tooling: [list]
Site Name: <site>
Use this output to route to the appropriate skill:
- DocType work →
frappe-doctype-development - API work →
frappe-api-development - Testing →
frappe-testing - Enterprise patterns →
frappe-enterprise-patterns
Guardrails
- Never modify code before completing triage - understand the project first
- Check for custom apps that may override standard behavior
- Verify site exists before running site-specific commands
- Check developer_mode before making schema changes (required for DocType modifications)
- Note Node.js version - frontend builds require compatible Node (typically 18+ for v15)
Common Mistakes
| Mistake | Why It Fails | Fix |
|---|---|---|
Running bench migrate without site |
Affects wrong/default site | Always use --site sitename |
| Assuming ERPNext is installed | Import errors, missing DocTypes | Check list-apps output first |
| Missing FM shell context | bench commands not found | Use fm shell sitename first |
| Wrong directory level | Commands fail silently | Navigate to bench root (where apps/ exists) |
| Ignoring custom app overrides | Unexpected behavior | Check hooks.py for overrides |
| Not checking Python version | Syntax/compatibility errors | Verify Python >= 3.10 for v15+ |
More from lubusin/agent-skills
frappe-frontend-development
Build modern Vue 3 frontend apps using Frappe UI with components, data fetching, and portal pages. Use when creating custom frontends, SPAs, or portal interfaces for Frappe applications.
94frappe-app-development
Scaffold and architect custom Frappe apps including app structure, hooks, background jobs, service layers, and production hardening. Use when creating new apps, setting up app architecture, or implementing cross-cutting patterns like caching, logging, and error handling.
85frappe-router
Route to the appropriate Frappe skill based on task type. Use as the entry point when working on Frappe projects to determine which specialized skill to apply.
82frappe-api-development
Build REST and RPC APIs in Frappe including whitelisted methods, authentication, and permission handling. Use when creating custom endpoints, integrating with external systems, or exposing business logic via API.
82frappe-desk-customization
Customize Frappe Desk UI with form scripts, list view scripts, report scripts, dialogs, and client-side JavaScript APIs. Use when building interactive Desk experiences, adding custom buttons, or scripting form behavior.
80frappe-doctype-development
Create and modify Frappe DocTypes including schema design, controllers, child tables, and customization. Use when building data models, adding fields, or implementing document lifecycle logic.
78