Token导航 LogoToken导航

Agent Skill · 前端设计

frappe-app-development(冰沙应用程序开发)

frappe-app-development 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

frappe-app-development 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为执行命令;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 2,883。

总安装 1,797周安装 72GitHub Stars 16下载 582核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:frappe-app-development(冰沙应用程序开发)
来源仓库:https://github.com/lubusin/agent-skills
仓库路径:skills/frappe-app-development
安装命令:
npx skills add https://github.com/lubusin/agent-skills --skill frappe-app-development
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/lubusin/agent-skills --skill frappe-app-development

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

用于处理 GitHub 仓库、Issue 和 Pull Request 协作信息。支持代码变更追踪、仓库状态整理和协作事项归纳,提升开发效率。可结合原始 README 和安装命令进一步验证功能细节和使用限制。安装前建议确认权限范围和维护状态,避免触发不必要的网络请求。

使用时需注意信息时效性,优先基于最新提交和历史记录进行分析。

来源仓库内路径:skills/frappe-app-development

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/lubusin/agent-skills --skill frappe-app-develo…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要执行命令,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

frappe-app-development 怎么安装?

在终端执行 npx skills add https://github.com/lubusin/agent-skills --skill frappe-app-development。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

frappe-app-development 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

frappe-app-development 需要什么权限?

权限级别是执行命令。安装流程涉及命令执行,可能通过 npx skills add https://github.com/lubusin/agent-skills --skill frappe-app-development 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

frappe-app-development 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

frappe-app-development 用的人多吗?

公开数据是累计安装 1,797 次,近一周安装 72 次,下载 582 次,GitHub 16 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

frappe-app-development 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要执行命令,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。

不太适合

  • 不能接受 Skill 在你机器上执行命令的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
frappe-app-development

冰沙应用程序开发 · 本页

1,79716执行命令未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Frappe App Development

Scaffold, structure, and architect custom Frappe applications with production-grade patterns.

When to use

  • Creating a new custom Frappe app from scratch
  • Setting up app architecture (modules, services, utils)
  • Configuring hooks.py for events, scheduler, overrides
  • Implementing background jobs and async processing
  • Building service layers and domain logic patterns
  • Adding caching, logging, error handling utilities
  • Preparing apps for production deployment
  • Managing translations, versioning, and packaging

Inputs required

  • App name and purpose
  • Target Frappe version (v13+, v15+, v16+)
  • Module structure (which DocTypes, APIs, services)
  • Whether hooks/overrides of other apps are needed
  • Background job requirements
  • Production readiness needs

Procedure

0) Scaffold the app

# Create the app
bench new-app my_app

# Install on site
bench --site mysite.local install-app my_app

# Verify developer mode
bench --site mysite.local console
>>> frappe.conf.developer_mode  # Must be True

1) Plan app structure

Follow the domain architecture pattern — keep DocType controllers thin and business logic in service modules:

my_app/
├── my_app/
│   ├── __init__.py
│   ├── hooks.py              # App hooks and configuration
│   ├── api.py                # Public API surface (RPC endpoints)
│   ├── services/             # Business logic modules
│   │   └── billing.py
│   ├── utils/                # Cross-cutting utilities
│   │   ├── cache.py
│   │   ├── errors.py
│   │   ├── logging.py
│   │   ├── permissions.py
│   │   └── validation.py
│   ├── background_jobs/      # Async job handlers
│   │   └── export_job.py
│   ├── integrations/         # External system connectors
│   │   └── payment_gateway.py
│   ├── my_module/
│   │   ├── doctype/
│   │   │   └── my_doc/
│   │   │       ├── my_doc.json
│   │   │       ├── my_doc.py
│   │   │       ├── my_doc.js
│   │   │       └── test_my_doc.py
│   │   ├── report/
│   │   └── dashboard/
│   └── translations/
│       ├── en.csv
│       └── fr.csv
├── setup.py
└── README.md

Use the mini-app-template in assets/mini-app-template/ as a starting scaffold.

2) Configure hooks.py

# hooks.py

app_name = "my_app"
app_title = "My App"
app_publisher = "My Company"

# DocType lifecycle events
doc_events = {
    "Sales Order": {
        "on_submit": "my_app.services.billing.on_order_submit",
        "on_cancel": "my_app.services.billing.on_order_cancel",
    },
    "*": {
        "after_insert": "my_app.utils.logging.log_creation",
    }
}

# Scheduled tasks
scheduler_events = {
    "daily": [
        "my_app.background_jobs.cleanup.run_daily_cleanup"
    ],
    "cron": {
        "0 */6 * * *": [
            "my_app.background_jobs.sync.sync_external_data"
        ]
    }
}

# Client-side script injection
doctype_js = {
    "Sales Order": "public/js/sales_order.js"
}

doctype_list_js = {
    "Sales Order": "public/js/sales_order_list.js"
}

# Override another app's controller (use sparingly)
# override_doctype_class = {
#     "ToDo": "my_app.overrides.custom_todo.CustomToDo"
# }

# Extend controller without full replacement (v16+, preferred)
# extend_doctype_class = {
#     "ToDo": "my_app.overrides.todo_extension.TodoExtension"
# }

# Override whitelisted methods
# override_whitelisted_methods = {
#     "frappe.client.get_list": "my_app.overrides.custom_get_list"
# }

3) Implement service layer

Keep DocType controllers thin — delegate business logic to services:

# my_app/services/billing.py
import frappe

def on_order_submit(doc, method):
    """Handle order submission — called via doc_events hook."""
    if doc.grand_total > 10000:
        create_approval_request(doc)
    generate_invoice(doc)

def generate_invoice(order):
    """Create invoice from submitted order."""
    invoice = frappe.get_doc({
        "doctype": "Sales Invoice",
        "customer": order.customer,
        "items": [
            {"item_code": i.item_code, "qty": i.qty, "rate": i.rate}
            for i in order.items
        ]
    })
    invoice.insert()
    invoice.submit()
    return invoice

4) Set up background jobs

# my_app/background_jobs/export_job.py
import frappe

def enqueue_export(filters):
    """Enqueue a long-running export job."""
    frappe.enqueue(
        "my_app.background_jobs.export_job.run_export",
        filters=filters,
        queue="long",
        timeout=600,
        is_async=True
    )

def run_export(filters):
    """Execute the export — runs in background worker."""
    data = frappe.get_all("Sales Order", filters=filters, fields=["*"])
    # Process data...
    frappe.publish_realtime("export_complete", {"count": len(data)})

5) Add cross-cutting utilities

# my_app/utils/cache.py
import frappe

def get_cached_settings(key):
    """Cache expensive settings lookups."""
    value = frappe.cache().get_value(f"my_app:{key}")
    if value is None:
        value = frappe.db.get_single_value("My Settings", key)
        frappe.cache().set_value(f"my_app:{key}", value)
    return value

def invalidate_cache(key):
    frappe.cache().delete_value(f"my_app:{key}")
# my_app/utils/errors.py
import frappe

def api_error(message, status_code=400, exc=None):
    """Consistent error response for API endpoints."""
    frappe.local.response["http_status_code"] = status_code
    frappe.throw(message, exc or frappe.ValidationError)

6) Handle translations

# In Python code
frappe._("Hello World")   # Mark string for translation

# In JavaScript
__("Hello World")         # Mark string for translation
# Translation CSV files go in my_app/translations/
# e.g., my_app/translations/fr.csv:
# Hello World,Bonjour le monde

7) Version compatibility

FeatureMinimum Version
extend_doctype_classFrappe v16+
REST API v2 (/api/v2/)Frappe v15+
Token-based authFrappe v11.0.3+

When targeting multiple versions, guard version-specific features:

import frappe

if hasattr(frappe, 'extend_doctype_class'):
    # v16+ pattern
    pass
else:
    # Fallback for older versions
    pass

Verification

  • App installs without errors: bench --site <site> install-app my_app
  • Hooks fire correctly (check scheduler logs, doc events)
  • Background jobs enqueue and complete
  • bench --site <site> migrate succeeds
  • Tests pass: bench --site <site> run-tests --app my_app

Failure modes / debugging

  • App not found: Check apps.txt and sites/<site>/site_config.json
  • Hooks not firing: Verify hooks.py syntax; restart bench
  • Background jobs stuck: Check worker status with bench doctor; verify Redis
  • Import errors: Ensure module paths in hooks match actual Python paths
  • Developer mode off: DocType changes won't export to files

Escalation

  • For DocType creation details → frappe-doctype-development
  • For API endpoint patterns → frappe-api-development
  • For Desk UI customization → frappe-desk-customization
  • For Frappe UI frontends → frappe-frontend-development
  • For print formats and Jinja → frappe-printing-templates
  • For reports → frappe-reports
  • For web forms → frappe-web-forms
  • For testing → frappe-testing
  • For enterprise architecture → frappe-enterprise-patterns
  • For Docker/FM environments → frappe-manager

References

Cross-references (owned by specialized skills)

Guardrails

  • Use Frappe UI for custom frontends: Never use vanilla JS, jQuery, or custom frameworks. Frappe UI (Vue 3 + TailwindCSS) is the ecosystem standard. See frappe-frontend-development for setup.
  • Follow CRM/Helpdesk patterns for CRUD apps: Follow frappe-ui-patterns skill for app shell, navigation, list views, and form layouts derived from official Frappe apps.
  • Follow naming conventions: App name must be lowercase with underscores, valid Python identifier
  • Use hooks.py for integrations: Never monkey-patch; use doc_events, scheduler_events, boot_session hooks
  • Keep hooks.py clean: Only configuration, no logic; import from modules
  • Maintain backwards compatibility: Use frappe.version checks for cross-version support
  • Export fixtures properly: Use fixtures in hooks.py for data that should sync with app

Common Mistakes

MistakeWhy It FailsFix
App not in installed_appsApp code not loadedRun bench --site <site> install-app my_app
Wrong module path in hooksEvents don't fireVerify path matches actual my_app/module/file.py structure
Duplicate hook registrationsEvents fire multiple timesCheck hooks.py for duplicates; use list not repeated keys
Editing hooks.py without restartChanges not picked upRun bench restart after hooks.py changes
Missing __init__.py filesModule import errorsEnsure every directory has __init__.py
Logic in hooks.pyHard to test, import errorsMove logic to separate modules, import in hooks
Building frontend with vanilla JS/jQueryInconsistent with ecosystemUse Frappe UI (Vue 3); see frappe-frontend-development
Custom app shell for CRUD appsInconsistent UXFollow CRM/Helpdesk patterns for navigation and layouts

平台分布

Codex

34.77%
按下载量换算202

Claude

32.93%
按下载量换算192

Cursor

18.44%
按下载量换算107

Gemini CLI

9.15%
按下载量换算53

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

执行命令

安装流程涉及命令执行,可能通过 npx skills add https://github.com/lubusin/agent-skills --skill frappe-app-development 联网下载 Skill 或依赖。用户安装前应确认命令来源、仓库内容和执行环境。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills