$npx -y skills add frappe/skills --skill frappe-app-devBuilds full-stack Frappe Framework applications end-to-end. Use this skill any time the user mentions: creating or modifying a DocType, writing a controller or lifecycle hook, adding a whitelisted API, setting up a new Frappe app or bench site, building a desk form or list view,
| 1 | # Frappe Full-Stack App Builder |
| 2 | |
| 3 | ## Global Rules |
| 4 | |
| 5 | - Use bare `bench`. Not `./env/bin/bench`. Not a full path. |
| 6 | - Do not run `which bench`, `bench --version`, `bench --help`, or check frappe version. No discovery commands. |
| 7 | - Do not delegate bench detection to a subagent. Run `ls apps/ sites/ Procfile` yourself. |
| 8 | - Do not create DocType folders with `mkdir`. Frappe creates them via `bench migrate`. |
| 9 | - Run `bench start` in a background process only. |
| 10 | - Before running `bench start`, check if it's already running in an existing terminal. Do not start a second instance. |
| 11 | - Always pass `--site <site>` explicitly to bench commands. Never run bare `bench migrate`. |
| 12 | |
| 13 | ## Flow Selection |
| 14 | |
| 15 | Determine which flow applies, then read ONLY the relevant file: |
| 16 | |
| 17 | ### Creating a brand new app |
| 18 | |
| 19 | Read [new-app.md](./references/new-app.md) — covers bench setup, app scaffolding, site creation, and installation. |
| 20 | |
| 21 | ### Working on an existing app |
| 22 | |
| 23 | Read [existing-app.md](./references/existing-app.md) — covers finding the bench, locating the app, confirming site, and extending features. |
| 24 | |
| 25 | ## Feature References |
| 26 | |
| 27 | Load ONLY the references needed for the current task: |
| 28 | |
| 29 | | Topic | When to load | File | |
| 30 | | ---------------- | -------------------------------------------- | ------------------------------------------------------- | |
| 31 | | Site management | Finding/creating/managing sites | [site-management.md](./references/site-management.md) | |
| 32 | | DocTypes | Creating/modifying DocTypes, fields, naming | [doctypes.md](./references/doctypes.md) | |
| 33 | | Controllers | Document lifecycle, server logic | [controllers.md](./references/controllers.md) | |
| 34 | | Whitelisted APIs | REST endpoints, `@frappe.whitelist()` | [api.md](./references/api.md) | |
| 35 | | Database & ORM | `frappe.db`, queries, raw SQL | [database.md](./references/database.md) | |
| 36 | | Caching | Redis, `frappe.cache` | [caching.md](./references/caching.md) | |
| 37 | | Realtime | WebSocket, `publish_realtime` | [realtime.md](./references/realtime.md) | |
| 38 | | Background jobs | `frappe.enqueue`, scheduled jobs | [background-jobs.md](./references/background-jobs.md) | |
| 39 | | Hooks | `hooks.py` patterns | [hooks.md](./references/hooks.md) | |
| 40 | | Permissions | Roles, DocType permissions, `has_permission` | [permissions.md](./references/permissions.md) | |
| 41 | | Testing | Writing & running tests | [testing.md](./references/testing.md) | |
| 42 | | Frontend & UI | Desk UI, Vue SPA, portal pages | [frontend.md](./references/frontend.md) (router → 3 sub-files) | |
| 43 | | Bench CLI | All bench commands reference | [bench-operations.md](./references/bench-operations.md) | |
| 44 | |
| 45 | ## Important: Do NOT load all references at once. Read only what the current task requires. |