A skill your agent uses when debugging hooks.py errors in Frappe/ERPNext.

MITAuto-check passedDevelopment

Install Frappe Errors Hooks

skills CLI
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-errors-hooks -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-errors-hooks --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/source/errors/frappe-errors-hooks .claude/skills/frappe-errors-hooks && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
frappe-errors-hooks
GitHub stars
187
Token cost
~3.9k tokens
SKILL.md length
721 words
Files
4 (incl. references)
Skills in repo
61
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when debugging hooks.py errors in Frappe/ERPNext.

  • Works in 8 steps: Restart bench after changing hooks.py → Use try/except in scheduler tasks — no… → Call frappe.db.commit() in scheduler —… → …
  • Debugging hooks.py errors in Frappe/ERPNext
  • SKILL.md covers Error-to-Fix Mapping Table, Hook Registration Errors, app_include_js /… and scheduler_events Not Running, plus 9 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Frappe Errors Hooks is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when debugging hooks.py errors in Frappe/ERPNext. Covers hook not firing (typo, wrong dict structure), circular imports, appincludejs path errors, schedulerevents not running, docevents on wrong DocType, permissionqueryconditions SQL errors, overridedoctypeclass import failures, extenddoctypeclass [v16+] conflicts, fixtures not loading. Error diagnosis by hook type for v14/v15/v16. Keywords: hooks.py error, hook not firing, scheduler not running,, hook not working, scheduler not running, appinclude not…

Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/anti-patterns.md`, `references/examples.md` and `references/patterns.md`). Compatibility notes: Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.

It sits in Development, covering SQL. It works with SQL. The repository describes itself as: 60 deterministic Claude AI skills for Frappe Framework & ERPNext v14-v16 development and operations. The licence is MIT.

When your agent uses it

  • Debugging hooks.py errors in Frappe/ERPNext
  • Tasks that involve SQL

Example prompts

  • “/frappe-errors-hooks”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Restart bench after changing hooks.py
  2. Use try/except in scheduler tasks — no user sees errors
  3. Call frappe.db.commit() in scheduler — no auto-commit
  4. Return safe fallbacks in permission hooks — NEVER throw
  5. Call super() in override classes — re-raise ValidationError
  6. Wrap extend_bootinfo in try/except — errors break login
  7. Wrap wildcard "*" doc_events in try/except — errors break ALL saves
  8. Prefix extend_doctype_class [v16+] methods with app name

What it can do on your machine

Read from SKILL.md and the folder at commit 36cfa80. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python and bash).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.

    From compatibility in the SKILL.md frontmatter.

Context cost

Frappe Errors Hooks loads about 3.9k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 162 tokens; SKILL.md has 721 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~162
When it runs · the whole SKILL.md, loaded when a task matches
~3.9k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Impertio-Studio/Frappe_Claude_Skill_Package at commit 36cfa80, republished under its MIT licence (© Impertio-Studio). 721 words, ~3,906 tokens.

Download SKILL.mdSave it as .claude/skills/frappe-errors-hooks/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
frappe-errors-hooks
description
Use when debugging hooks.py errors in Frappe/ERPNext. Covers hook not firing (typo, wrong dict structure), circular imports, app_include_js path errors, scheduler_events not running, doc_events on wrong DocType, permission_query_conditions SQL errors, override_doctype_class import failures, extend_doctype_class [v16+] conflicts, fixtures not loading. Error diagnosis by hook type for v14/v15/v16. Keywords: hooks.py error, hook not firing, scheduler not running,, hook not working, scheduler not running, app_include not loading, override not applied. doc_events error, circular import, fixtures error, override class error.
compatibility
Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
license
MIT
metadata.author
OpenAEC-Foundation
metadata.version
2.0

Frappe Hooks Error Diagnosis & Resolution

Cross-ref: frappe-syntax-hooks (syntax), frappe-impl-hooks (workflows), frappe-errors-controllers (controller errors).


Error-to-Fix Mapping Table

Error / SymptomCauseFix
Hook not firing at allTypo in dotted pathVerify module path matches actual file location
ImportError on bench startWrong module path or circular importFix import path; break circular dependency
AttributeError: module has no attributeFunction name typo in hooks.pyMatch function name exactly to Python definition
app_include_js not loadingPath missing assets/ prefix or wrong extensionUse "assets/myapp/js/file.js" format
scheduler_events not runningScheduler disabled or workers downbench scheduler enable, check bench doctor
doc_events handler never calledDocType name misspelled in dict keyUse exact DocType name with spaces: "Sales Invoice"
permission_query_conditions breaks list viewSQL syntax error or frappe.throw() in handlerReturn valid SQL string; NEVER throw
override_doctype_class import failureParent class import path changed between versionsPin import to correct module path for target version
extend_doctype_class [v16+] method conflictTwo extensions define same method nameRename conflicting methods; check hook resolution order
Fixtures not loading on installWrong dt key or DocType doesn't exist on targetVerify DocType exists before export; check filter syntax
extend_bootinfo breaks loginUnhandled exception in boot handlerWrap ALL bootinfo code in try/except
Wildcard "*" handler breaks all savesUnhandled exception in wildcard doc_eventsALWAYS wrap wildcard handlers in try/except
Hook fires but changes lostMissing frappe.db.commit() in schedulerAdd explicit commit in scheduler/background tasks
Multiple handler chain brokenFirst handler throws, others never runIsolate non-critical ops in try/except

Hook Registration Errors

Hook Not Firing: Diagnosis Checklist
IS YOUR HOOK NOT FIRING?
│
├─► Check 1: Is the dotted path correct?
│   hooks.py: "myapp.events.sales.validate"
│   File:     myapp/events/sales.py → def validate(doc, method=None):
│   COMMON MISTAKE: "myapp.events.sales_invoice.validate" when file is sales.py
│
├─► Check 2: Is the dict structure correct?
│   doc_events uses NESTED dict: {"Sales Invoice": {"validate": "path"}}
│   scheduler_events uses LIST: {"daily": ["path1", "path2"]}
│   permission_query uses FLAT dict: {"Sales Invoice": "path"}
│
├─► Check 3: Is bench restarted after hooks.py change?
│   ALWAYS run: bench restart (or bench clear-cache for dev)
│
├─► Check 4: Is the DocType name exact?
│   "Sales Invoice" NOT "SalesInvoice" NOT "sales_invoice"
│   Use exact DocType name as shown in Frappe UI
│
└─► Check 5: Is the app installed on the site?
    bench --site mysite list-apps
Circular Import Errors
python
# ❌ CAUSES ImportError — circular dependency
# myapp/hooks.py imports from myapp.events
# myapp/events/sales.py imports from myapp.hooks

# ✅ CORRECT — break the cycle
# Move shared constants to myapp/constants.py
# Import from constants in both hooks.py and events/

Rule: NEVER import from hooks.py in your event handlers. hooks.py is read by the framework, not imported by your code.

Wrong Dict Structure by Hook Type
python
# ❌ WRONG — doc_events needs nested dict, not flat
doc_events = {
    "Sales Invoice": "myapp.events.validate"  # WRONG: string, not dict
}

# ✅ CORRECT
doc_events = {
    "Sales Invoice": {
        "validate": "myapp.events.sales.validate"
    }
}

# ❌ WRONG — scheduler_events daily needs list
scheduler_events = {
    "daily": "myapp.tasks.daily_sync"  # WRONG: string, not list
}

# ✅ CORRECT
scheduler_events = {
    "daily": ["myapp.tasks.daily_sync"]
}

# ❌ WRONG — cron needs nested dict with list values
scheduler_events = {
    "cron": ["0 9 * * *", "myapp.tasks.morning"]  # WRONG structure
}

# ✅ CORRECT
scheduler_events = {
    "cron": {
        "0 9 * * 1-5": ["myapp.tasks.morning_report"]
    }
}

app_include_js / app_include_css Errors

python
# ❌ WRONG — missing assets/ prefix
app_include_js = "js/myapp.js"

# ❌ WRONG — using Python module path instead of file path
app_include_js = "myapp.public.js.myapp"

# ✅ CORRECT — full asset path
app_include_js = "assets/myapp/js/myapp.js"

# ✅ CORRECT — multiple files as list
app_include_js = ["assets/myapp/js/app.js", "assets/myapp/js/utils.js"]
app_include_css = "assets/myapp/css/myapp.css"

Diagnosis: If JS/CSS not loading, check browser DevTools Network tab for 404. Run bench build after adding new files. ALWAYS verify the file exists at myapp/public/js/myapp.js.


scheduler_events Not Running

Diagnosis Steps
bash
# Step 1: Is scheduler enabled?
bench scheduler status
# If disabled: bench scheduler enable

# Step 2: Are workers running?
bench doctor
# Look for: "Workers online: X"
# If 0: bench start (dev) or supervisorctl restart all (prod)

# Step 3: Check Scheduled Job Log
# In Frappe UI: /api/method/frappe.client.get_list?doctype=Scheduled Job Log&limit=5

# Step 4: Check Error Log for task failures
# In Frappe UI: /app/error-log

# Step 5: Is the task registered?
bench execute frappe.utils.scheduler.get_all_tasks
Common Scheduler Failures
python
# ❌ PROBLEM: Task runs but changes not persisted
def daily_sync():
    for item in frappe.get_all("Item", limit=100):
        frappe.db.set_value("Item", item.name, "synced", 1)
    # MISSING: frappe.db.commit() — ALL changes lost!

# ✅ FIX: ALWAYS commit in scheduler tasks
def daily_sync():
    for item in frappe.get_all("Item", limit=100):
        frappe.db.set_value("Item", item.name, "synced", 1)
    frappe.db.commit()

# ❌ PROBLEM: Task fails silently — no debugging possible
def daily_task():
    try:
        process_records()
    except Exception:
        pass  # Silent death

# ✅ FIX: ALWAYS log errors in scheduler
def daily_task():
    try:
        process_records()
        frappe.db.commit()
    except Exception:
        frappe.log_error(frappe.get_traceback(), "Daily Task Error")

doc_events Errors

Error Handling by Event Phase
EventThrow EffectTransactionPattern
validatePrevents save, full rollbackPre-writeCollect errors, throw once
before_savePrevents save, full rollbackPre-writeSame as validate
on_updateDoc already saved, error shownPost-writeIsolate non-critical ops
after_insertDoc already saved, error shownPost-writeIsolate non-critical ops
on_submitDoc already submittedPost-writeIsolate non-critical ops
on_cancelDoc already cancelledPost-writeIsolate non-critical ops
Multiple Handler Chain Problem
python
# If App A and App B both register validate for Sales Invoice:
# App A's handler throws → App B's handler NEVER runs

# ✅ ALWAYS be aware: your handler is not alone
def validate(doc, method=None):
    """Collect errors, throw once at end."""
    errors = []
    if doc.grand_total < 0:
        errors.append(_("Total cannot be negative"))
    if errors:
        frappe.throw("<br>".join(errors))

# ✅ For on_update: isolate independent operations
def on_update(doc, method=None):
    try:
        send_notification(doc)
    except Exception:
        frappe.log_error(frappe.get_traceback(), f"Notify error: {doc.name}")
    try:
        sync_external(doc)
    except Exception:
        frappe.log_error(frappe.get_traceback(), f"Sync error: {doc.name}")
NEVER Commit in doc_events
python
# ❌ BREAKS transaction management
def on_update(doc, method=None):
    frappe.db.set_value("Counter", "main", "count", 100)
    frappe.db.commit()  # Partial commit — dangerous!

# ✅ Framework handles commits automatically
def on_update(doc, method=None):
    frappe.db.set_value("Counter", "main", "count", 100)

Permission Hook Errors

permission_query_conditions: NEVER Throw
python
# ❌ BREAKS list view entirely
def query_conditions(user):
    if "Sales User" not in frappe.get_roles(user):
        frappe.throw("Access denied")  # LIST VIEW CRASHES
    return f"owner = '{user}'"  # Also: SQL injection!

# ✅ CORRECT — safe fallback, escaped values
def query_conditions(user):
    try:
        user = user or frappe.session.user
        if "System Manager" in frappe.get_roles(user):
            return ""
        return f"`tabSales Invoice`.owner = {frappe.db.escape(user)}"
    except Exception:
        frappe.log_error(frappe.get_traceback(), "Query Conditions Error")
        return f"`tabSales Invoice`.owner = {frappe.db.escape(frappe.session.user)}"

Note: permission_query_conditions only affects frappe.db.get_list(), NOT frappe.db.get_all().

has_permission: NEVER Throw
python
# ❌ BREAKS document access
def has_permission(doc, user=None, permission_type=None):
    if doc.status == "Locked":
        frappe.throw("Locked")  # DOCUMENT INACCESSIBLE

# ✅ Return False to deny, None to defer
def has_permission(doc, user=None, permission_type=None):
    try:
        user = user or frappe.session.user
        if doc.status == "Locked" and permission_type == "write":
            return False
        return None  # Defer to default permission system
    except Exception:
        frappe.log_error(frappe.get_traceback(), "Permission Error")
        return None

Override & Extend Errors

override_doctype_class: Import Failures
python
# ❌ COMMON: Import path changes between ERPNext versions
# v14 path:
override_doctype_class = {
    "Sales Invoice": "myapp.overrides.CustomSI"
}
# myapp/overrides.py:
from erpnext.accounts.doctype.sales_invoice.sales_invoice import SalesInvoice
# This path may change in v15/v16!

# ✅ ALWAYS call super(), re-raise validation errors
class CustomSalesInvoice(SalesInvoice):
    def validate(self):
        try:
            super().validate()
        except frappe.ValidationError:
            raise  # ALWAYS re-raise validation errors
        except Exception:
            frappe.log_error(frappe.get_traceback(), "Parent validate error")
            raise
        self.custom_validation()

Warning: Only ONE app's override_doctype_class is active per DocType ("last writer wins"). Use extend_doctype_class [v16+] for multi-app compatibility.

Show full SKILL.md (283 more words)Show less
extend_doctype_class [v16+]: Conflicts
python
# hooks.py
extend_doctype_class = {
    "Sales Invoice": ["myapp.extensions.si.SalesInvoiceMixin"]
}

# ❌ CONFLICT: Two extensions define same method
# App A: class Mixin: def custom_calc(self): ...
# App B: class Mixin: def custom_calc(self): ...
# Result: Last app's method wins silently

# ✅ ALWAYS prefix method names with app name
class SalesInvoiceMixin:
    def myapp_custom_calc(self):
        """Prefixed to avoid conflicts with other extensions."""
        pass

extend_bootinfo Errors

python
# ❌ BREAKS LOGIN — unhandled error prevents desk from loading
def extend_boot(bootinfo):
    settings = frappe.get_single("My Settings")  # DoesNotExistError!
    bootinfo.config = settings.config

# ✅ ALWAYS wrap in try/except with safe defaults
def extend_boot(bootinfo):
    bootinfo.myapp_config = {}
    try:
        if frappe.db.exists("My Settings", "My Settings"):
            settings = frappe.get_single("My Settings")
            bootinfo.myapp_config = {"feature": settings.feature or False}
    except Exception:
        frappe.log_error(frappe.get_traceback(), "Bootinfo Error")

Fixtures Not Loading

python
# ❌ WRONG — dt key misspelled
fixtures = [{"doctype": "Custom Field", "filters": [...]}]  # "doctype" not "dt"!

# ✅ CORRECT — use "dt" key
fixtures = [{"dt": "Custom Field", "filters": [["module", "=", "My App"]]}]

# ❌ PROBLEM: DocType doesn't exist on target site
fixtures = [{"dt": "My Custom DocType"}]  # If not created yet → install fails

# ✅ FIX: Ensure DocType is created before fixtures are imported
# Order: DocType JSON → fixtures JSON (install order matters)

Export command: bench --site mysite export-fixtures Import: Automatic during bench --site mysite install-app myapp


Critical Rules

ALWAYS
  1. Restart bench after changing hooks.py
  2. Use try/except in scheduler tasks — no user sees errors
  3. Call frappe.db.commit() in scheduler — no auto-commit
  4. Return safe fallbacks in permission hooks — NEVER throw
  5. Call super() in override classes — re-raise ValidationError
  6. Wrap extend_bootinfo in try/except — errors break login
  7. Wrap wildcard "*" doc_events in try/except — errors break ALL saves
  8. Prefix extend_doctype_class [v16+] methods with app name
NEVER
  1. Throw in permission_query_conditions — breaks list views
  2. Throw in has_permission — breaks document access
  3. Commit in doc_events — breaks transaction management
  4. Import from hooks.py in event handlers — causes circular imports
  5. Assume single handler — multiple apps register doc_events
  6. Use string formatting in permission SQL — SQL injection risk
  7. Ignore scheduler errors — they fail completely silently

Quick Reference: Error Handling by Hook Type

Hook TypeCan Throw?Commit?Error Strategy
doc_events (validate)YESNEVERCollect errors, throw once
doc_events (on_update+)CarefulNEVERIsolate non-critical ops
scheduler_eventsPointlessALWAYStry/except + log_error
permission_query_conditionsNEVERNEVERReturn "" or owner filter
has_permissionNEVERNEVERReturn None on error
extend_bootinfoNEVERNEVERtry/except + safe defaults
override_doctype_classYESNEVERsuper() + re-raise
extend_doctype_class [v16+]YESNEVERPrefix methods, avoid conflicts
fixturesN/AN/AVerify dt key and DocType existence
app_include_js/cssN/AN/ACheck assets/ prefix, run bench build

Reference Files

FileContents
references/patterns.mdComplete error handling patterns by hook type
references/examples.mdFull working examples with error handling
references/anti-patterns.mdCommon mistakes with wrong/correct pairs

See Also

  • frappe-syntax-hooks — Hook syntax and dict structures
  • frappe-impl-hooks — Implementation workflows
  • frappe-errors-controllers — Controller error handling
  • frappe-errors-database — Database error handling
  • frappe-errors-serverscripts — Server Script error handling

© Impertio-Studio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files (references) in skills/source/errors/frappe-errors-hooks of Impertio-Studio/Frappe_Claude_Skill_Package.

  • SKILL.md
  • references/anti-patterns.md
  • references/examples.md
  • references/patterns.md

Open the folder on GitHubat commit 36cfa80

Compare with similar skills

Frappe Errors Hooks next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Frappe Errors Hooks compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Frappe Errors Hooks this skillImpertio-Studio/Frappe_Claude_Skill_Package187—~3.9kAutomated safety check: PassMIT
Code Nest Project Specxiaou61/Code-Nest770—~1.3kAutomated safety check: PassMIT
Sassasjs/core132—~3.1kAutomated safety check: PassMIT
Protheus Data Dictionary Lookuptotvs/engpro-advpl-tlpp-skills143—~1.5kAutomated safety check: PassMIT
Android Profilerarindamxd/camerax-android1322 repos~493Automated safety check: PassApache-2.0
SQL Root Cause Analysiszj-unicom-ai/UniEmployee358—~433Automated safety check: PassMIT

Similar skills

  • Code Nest Project Spec

    xiaou61/Code-Nest

    Code-Nest 多模块全栈项目协作规范与落点导航。Use when modifying this repository for feature development, bug fixing, refactor, API change, SQL migration, or frontend-backend联调 so changes land in the correct module…

    770 GitHub stars~1.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Sas

    sasjs/core

    Expert guidance for the SAS programming language - DATA step, PROC SQL, macro language, formats, ODS, and common procedures.

    132 GitHub stars~3.1k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Protheus Data Dictionary Lookup

    totvs/engpro-advpl-tlpp-skills

    Queries the TOTVS Protheus ERP data dictionary for tables, fields, indexes, parameters, triggers and lookups, including impact checks during refactoring.

    143 GitHub stars~1.5k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Android Profiler

    arindamxd/camerax-android

    Manages Android performance profiling and debugging. An agent skill from arindamxd/camerax-android.

    132 GitHub starsUsed in 2 repos~493 tokens
    DevelopmentAuto-check passed
  • SQL Root Cause Analysis

    zj-unicom-ai/UniEmployee

    SQL 版归因分析技能。当用户问为什么、指标异常、趋势下滑/增长、KPI 未达标、营收/订单/转化/成本波动时使用. An agent skill from zj-unicom-ai/UniEmployee.

    358 GitHub stars~433 tokensUpdated today
    DevelopmentAuto-check passed
  • External Mindstudio Ascend Profiler DB Explorer

    ascend-ai-coding/awesome-ascend-skills

    面向 Ascend PyTorch Profiler / msprof DB(如 ascendpytorchprofiler.db、msprof.db)的 SQL 分析技能。将自然语言问题(算子耗时、通信、下发、调度、schema/table 查询)转为安全可执行 SQL,并按需从官方文档提取表结构详情。

    174 GitHub stars~1.4k tokensUpdated today
    DevelopmentAuto-check passed

More from Impertio-Studio/Frappe_Claude_Skill_Package

All 61 skills in this repo
  • Frappe Agent Interpreter

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when receiving vague or unclear ERPNext/Frappe development requests that need interpretation.

    187 GitHub starsUsed in 1 repo~3.2k tokens
    Auto-check passed
  • Frappe Ops Website Deploy

    Impertio-Studio/Frappe_Claude_Skill_Package

    Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API.

    187 GitHub stars~2.5k tokensUpdated 21 days ago
    Auto-check passed
  • Frappe Core API

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when building ERPNext/Frappe API integrations (v14/v15/v16) including REST API, RPC API, authentication, webhooks, and rate limiting.

    187 GitHub starsUsed in 1 repo~3.2k tokens
    Auto-check passed
  • Frappe Errors API

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when debugging or handling API errors in Frappe/ERPNext v14/v15/v16.

    187 GitHub starsUsed in 1 repo~4k tokens
    Auto-check passed
  • Frappe Impl Hooks

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when implementing hooks.py configurations in a Frappe custom app.

    187 GitHub starsUsed in 1 repo~3k tokens
    Auto-check passed
  • Frappe Impl Whitelisted

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when building API endpoints with @frappe.whitelist() in Frappe.

    187 GitHub starsUsed in 1 repo~3.1k tokens
    Auto-check passed

Works with

Questions about Frappe Errors Hooks

What does Frappe Errors Hooks do?

A skill your agent uses when debugging hooks.py errors in Frappe/ERPNext. Frappe Errors Hooks is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package.py errors in Frappe/ERPNext.

When should I use Frappe Errors Hooks?

Frappe Errors Hooks fits situations like: debugging hooks.py errors in Frappe/ERPNext; tasks that involve SQL.

How do I install Frappe Errors Hooks in Claude Code?

Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-errors-hooks -a claude-code`. Or copy the skill folder (skills/source/errors/frappe-errors-hooks in Impertio-Studio/Frappe_Claude_Skill_Package) into .claude/skills/frappe-errors-hooks in your project. Claude Code loads it when a task matches its description.

How do I install Frappe Errors Hooks in Codex?

Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-errors-hooks -a codex`. Or copy the skill folder (skills/source/errors/frappe-errors-hooks in Impertio-Studio/Frappe_Claude_Skill_Package) into .agents/skills/frappe-errors-hooks in your project. Codex loads it when a task matches its description.

Can I use Frappe Errors Hooks in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-errors-hooks -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/frappe-errors-hooks, .gemini/skills/frappe-errors-hooks, .github/skills/frappe-errors-hooks and .opencode/skills/frappe-errors-hooks in your project.

What does Frappe Errors Hooks need to run?

SKILL.md names no scripts, command-line tools or credentials: Frappe Errors Hooks is instructions for the agent only. Our summary lists: Python 3. Compatibility (from SKILL.md): Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16..

Does Frappe Errors Hooks access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Frappe Errors Hooks safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Frappe Errors Hooks use?

Frappe Errors Hooks is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Frappe Errors Hooks use?

About 3.9k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 8.5k tokens, read only when the agent opens those files.

What are the alternatives to Frappe Errors Hooks?

Skills that share tags, products or a category with Frappe Errors Hooks: Code Nest Project Spec (xiaou61/Code-Nest, 770 stars), Sas (sasjs/core, 132 stars), Protheus Data Dictionary Lookup (totvs/engpro-advpl-tlpp-skills, 143 stars) and Android Profiler (arindamxd/camerax-android, 132 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Frappe Errors Hooks?

Impertio-Studio (a GitHub organization) maintains it in Impertio-Studio/Frappe_Claude_Skill_Package, which has 187 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on September 17, 2026.

Source: Impertio-Studio/Frappe_Claude_Skill_Package on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.