Agent skill

Frappe Errors Permissions

by Impertio-Studio in Impertio-Studio/Frappe_Claude_Skill_Package

A skill your agent uses when debugging or handling permission errors in Frappe/ERPNext.

MITAuto-check passedDevelopment

Install Frappe Errors Permissions

skills CLI
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-errors-permissions -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-permissions --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-permissions .claude/skills/frappe-errors-permissions && 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-permissions
GitHub stars
189
Token cost
~3.2k tokens
SKILL.md length
651 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 or handling permission errors in Frappe/ERPNext.

  • Works in 7 steps: Wrap permission hooks in try/except —… → Return None (not True) in has_permission… → Use frappe.db.escape() in query… → …
  • Handling permission errors in Frappe/ERPNext
  • SKILL.md covers Quick Diagnostic: Error…, Decision Tree: Where Is the…, Permission Hook Errors and User Permission Errors, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Frappe Errors Permissions is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when debugging or handling permission errors in Frappe/ERPNext. Prevents broken document access from throwing in permission hooks. Covers PermissionError (403), haspermission hook failures, User Permission restricting too much or too little, permlevel blocking field access, System Manager bypass not working, Guest access denied, sharing permissions not applying, permissionqueryconditions breaking getlist, owner-based permissions confusion, Apply User Permission checkbox behavior, and the permission debug…

Its SKILL.md is about 3.2k 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 Debugging. 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

  • Handling permission errors in Frappe/ERPNext
  • Tasks that involve Debugging

Example prompts

  • “/frappe-errors-permissions”

Requirements

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

Workflow steps

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

  1. Wrap permission hooks in try/except — unhandled errors break all access
  2. Return None (not True) in has_permission — hooks can only deny
  3. Use frappe.db.escape() in query conditions — prevent SQL injection
  4. Check System Manager / Administrator first in custom hooks
  5. Use frappe.has_permission(throw=True) for endpoint permission checks
  6. Use get_list (not get_all) for user-facing queries — get_all bypasses permissions
  7. Log permission denials for security audit with frappe.log_error()

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).

    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 Permissions loads about 3.2k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 207 tokens; SKILL.md has 651 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~207
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k
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). 651 words, ~3,249 tokens.

Download SKILL.mdSave it as .claude/skills/frappe-errors-permissions/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
frappe-errors-permissions
description
Use when debugging or handling permission errors in Frappe/ERPNext. Prevents broken document access from throwing in permission hooks. Covers PermissionError (403), has_permission hook failures, User Permission restricting too much or too little, perm_level blocking field access, System Manager bypass not working, Guest access denied, sharing permissions not applying, permission_query_conditions breaking get_list, owner-based permissions confusion, Apply User Permission checkbox behavior, and the permission debug workflow using frappe.permissions.get_doc_permissions. Keywords: PermissionError, has_permission, permission_query_conditions,, permission denied, cannot access, user blocked, sharing not working, role not enough. User Permission, perm_level, sharing, guest access, owner permission.
compatibility
Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
license
MIT
metadata.author
OpenAEC-Foundation
metadata.version
2.0

Permission Error Handling

For permission system overview see frappe-core-permissions. For hook syntax see frappe-syntax-hooks.


Quick Diagnostic: Error Message -> Cause -> Fix

Error MessageCauseFix
frappe.exceptions.PermissionErrorUser lacks role or doc-level accessAdd role in Role Permissions Manager or grant User Permission
"Not permitted" on document openhas_permission hook returns False or role missing readCheck frappe.permissions.get_doc_permissions(doc, user) output
List view shows 0 recordspermission_query_conditions returns overly restrictive SQLDebug the SQL condition; check User Permissions for the Link field
"Not allowed to access ... for Guest"Endpoint missing allow_guest=True or DocType lacks Guest readAdd allow_guest=True to @frappe.whitelist()
Field invisible despite role having readperm_level > 0 on field and role lacks that levelAdd role permission row for the specific perm_level
"User Permission restriction" blockingUser Permission on a Link field auto-filters documentsUncheck "Apply User Permissions" on that role row or add matching User Permission
Sharing not granting accessSharing adds access but never overrides role absenceUser MUST have base role permission; sharing only adds doc-level grants
ignore_permissions has no effectFlag set after get_doc already checked permissionsSet flags.ignore_permissions = True BEFORE calling save() or insert()
System Manager cannot accessCustom has_permission hook denies without checking roleALWAYS check for System Manager / Administrator in hook

Decision Tree: Where Is the Error?

Permission error occurred
├── Document-level (single doc access)?
│   ├── has_permission hook returning False?
│   │   └── Debug: frappe.permissions.get_doc_permissions(doc, user)
│   ├── User Permission restricting Link field?
│   │   └── Check: frappe.get_all("User Permission", filters={"user": user})
│   ├── perm_level blocking field?
│   │   └── Check: role has permission row for that perm_level
│   └── Sharing not applying?
│       └── Check: user has base role + sharing record exists
├── List-level (0 records in list view)?
│   ├── permission_query_conditions returning bad SQL?
│   │   └── Debug: run condition manually in MariaDB console
│   ├── User Permission auto-filtering?
│   │   └── Check "Apply User Permissions" checkbox on role row
│   └── get_all vs get_list confusion?
│       └── ALWAYS use get_list for user-facing queries
├── API endpoint (403 response)?
│   ├── Missing @frappe.whitelist()?
│   │   └── Add decorator to Python method
│   ├── Missing allow_guest=True?
│   │   └── Add allow_guest parameter for public endpoints
│   └── frappe.only_for() blocking?
│       └── Check user has required role
└── System Manager bypass failing?
    └── Custom hook does not check for System Manager role

Permission Hook Errors

has_permission Hook: NEVER Throw
python
# hooks.py
has_permission = {
    "Sales Order": "myapp.permissions.sales_order_has_permission",
}
python
# WRONG — Breaks ALL document access
def sales_order_has_permission(doc, user, permission_type):
    if doc.status == "Locked":
        frappe.throw("Locked")  # NEVER do this

# CORRECT — Return False to deny, None to defer
def sales_order_has_permission(doc, user, permission_type):
    """
    ALWAYS wrap in try/except. NEVER throw. NEVER return True.
    Returns: False (deny) or None (defer to standard system).
    """
    try:
        user = user or frappe.session.user
        if user == "Administrator":
            return None

        # ALWAYS check System Manager early
        if "System Manager" in frappe.get_roles(user):
            return None

        # Deny write on locked docs (but allow read)
        if permission_type in ("write", "delete", "cancel"):
            if doc.get("status") == "Locked":
                return False

        return None  # Defer to standard permission system

    except Exception:
        frappe.log_error(frappe.get_traceback(),
            f"has_permission error: {getattr(doc, 'name', 'unknown')}")
        return None  # Safe fallback — defer

Critical rules for has_permission hooks:

  • ALWAYS return None to defer, False to deny. NEVER return True — hooks can only restrict, not grant.
  • ALWAYS wrap the entire function in try/except. An unhandled exception breaks ALL access to that DocType.
  • ALWAYS check for Administrator and System Manager at the top.
  • NEVER call frappe.throw() inside this hook.
permission_query_conditions: NEVER Throw
python
# hooks.py
permission_query_conditions = {
    "Sales Order": "myapp.permissions.sales_order_query",
}
python
# WRONG — Breaks list view for all users
def sales_order_query(user):
    if not user:
        frappe.throw("User required")  # NEVER do this
    return f"owner = '{user}'"  # SQL injection!

# CORRECT — Return SQL string or empty string
def sales_order_query(user):
    """
    ALWAYS return a string. Empty string = no restriction.
    ALWAYS use frappe.db.escape(). ALWAYS wrap in try/except.
    """
    try:
        user = user or frappe.session.user
        if user == "Administrator":
            return ""
        if "System Manager" in frappe.get_roles(user):
            return ""

        return f"`tabSales Order`.owner = {frappe.db.escape(user)}"

    except Exception:
        frappe.log_error(frappe.get_traceback(), "Query conditions error")
        # SAFE FALLBACK: most restrictive
        return f"`tabSales Order`.owner = {frappe.db.escape(frappe.session.user)}"

Critical rules for permission_query_conditions:

  • NEVER throw errors — return "1=0" to deny all or a restrictive SQL string.
  • ALWAYS use frappe.db.escape() for every user-supplied value.
  • This hook ONLY affects frappe.get_list() / frappe.db.get_list(). It does NOT affect frappe.get_all() / frappe.db.get_all().

User Permission Errors

Too Restrictive: Records Disappear
Error: User can't see any Sales Orders despite having Sales User role.
Cause: A User Permission for "Company" exists, and "Apply User Permissions"
       is checked on the Sales Order role row. Sales Order has a Company
       Link field, so ALL Sales Orders are filtered by that Company value.

Debug steps:

python
# Step 1: Check what User Permissions exist
frappe.get_all("User Permission",
    filters={"user": "john@example.com"},
    fields=["allow", "for_value", "applicable_for"])

# Step 2: Check if Apply User Permissions is checked
frappe.get_all("DocPerm",
    filters={"parent": "Sales Order", "role": "Sales User"},
    fields=["role", "permlevel", "apply_user_permissions"])  # [v14]

# Step 3: Check effective permissions on a specific doc
from frappe.permissions import get_doc_permissions
perms = get_doc_permissions(frappe.get_doc("Sales Order", "SO-001"), "john@example.com")

Fix patterns:

  • Remove overly broad User Permissions that filter unintended DocTypes.
  • Use the applicable_for field [v14+] to limit which DocType a User Permission applies to.
  • Uncheck "Apply User Permissions" on the role permission row if blanket filtering is unwanted.
Too Permissive: User Sees Everything
Error: User Permission set for Territory = "North" but user sees all territories.
Cause: "Apply User Permissions" is NOT checked on the role permission row,
       or the DocType has no Link field for Territory.

Fix: Ensure the role permission row has "Apply User Permissions" checked AND the DocType has a Link field to the restricted DocType.


Show full SKILL.md (264 more words)Show less

perm_level Errors

Error: Field "cost_center" is invisible despite user having read permission.
Cause: Field has permlevel=1 but role only has permission for permlevel=0.
python
# Check which perm_levels a role has access to
frappe.get_all("DocPerm",
    filters={"parent": "Sales Invoice", "role": "Accounts User"},
    fields=["permlevel", "read", "write"])

Fix: Add a new row in the DocType's Permission table for the role at the required permlevel.


Sharing Permission Errors

Error: Document shared with user but user still gets PermissionError.
Cause: User has NO base role permission on the DocType. Sharing only
       supplements — it never replaces role-based permissions.
python
# Share a document (user MUST already have a role with at least read)
frappe.share.add("Sales Order", "SO-001", "john@example.com",
    read=1, write=1, share=1)

# Check if sharing grants access
frappe.share.get_sharing_permissions("Sales Order", "SO-001", "john@example.com")

Rules:

  • ALWAYS ensure the user has at least one role with read permission on the DocType before sharing.
  • Sharing adds document-level grants on top of role permissions.
  • [v15+] frappe.share.add accepts notify=1 to send email notification.

Guest Access Errors

Error: "Not permitted" for unauthenticated users.
Cause: DocType has no Guest read permission, or API missing allow_guest.

Fix for web pages / portal:

python
# Add Guest read permission in DocType Permission table
# Role: Guest, Level: 0, Read: checked

Fix for API endpoints:

python
@frappe.whitelist(allow_guest=True)
def public_endpoint():
    # ALWAYS validate input — guest endpoints are exposed to the internet
    pass

NEVER grant Guest write/create/delete permissions unless the DocType is specifically designed for public submission (e.g., Web Form backend).


Debug Workflow: frappe.permissions

python
import frappe
from frappe.permissions import get_doc_permissions

# Get all effective permissions for a user on a document
doc = frappe.get_doc("Sales Order", "SO-001")
perms = get_doc_permissions(doc, user="john@example.com")
# Returns dict: {"read": 1, "write": 0, "create": 0, ...}

# Check specific permission with full context
frappe.has_permission("Sales Order", ptype="write",
    doc="SO-001", user="john@example.com", throw=False)

# List all roles for a user
frappe.get_roles("john@example.com")

# Check User Permissions
frappe.get_all("User Permission",
    filters={"user": "john@example.com"},
    fields=["allow", "for_value", "applicable_for", "is_default"])

Critical Rules

ALWAYS
  1. Wrap permission hooks in try/except — unhandled errors break all access
  2. Return None (not True) in has_permission — hooks can only deny
  3. Use frappe.db.escape() in query conditions — prevent SQL injection
  4. Check System Manager / Administrator first in custom hooks
  5. Use frappe.has_permission(throw=True) for endpoint permission checks
  6. Use get_list (not get_all) for user-facing queries — get_all bypasses permissions
  7. Log permission denials for security audit with frappe.log_error()
NEVER
  1. Throw in has_permission or permission_query_conditions — breaks access entirely
  2. Return True in has_permission — has no effect, hooks can only restrict
  3. Use string formatting for SQL — use frappe.db.escape() to prevent injection
  4. Grant Guest write/delete permissions — security risk
  5. Use ignore_permissions without documenting why — creates audit gaps
  6. Assume sharing replaces role permissions — sharing only supplements

Reference Files

FileContents
references/patterns.mdComplete hook patterns, query conditions, API endpoints
references/examples.mdFull working examples with hooks.py configuration
references/anti-patterns.md15 common mistakes with wrong/correct comparisons

See Also

  • frappe-core-permissions — Permission system architecture
  • frappe-errors-api — API error handling (401/403/404)
  • frappe-errors-hooks — Hook error handling patterns
  • frappe-syntax-hooks — Hook registration syntax

© 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-permissions 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 Permissions 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 Permissions compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Frappe Errors Permissions this skillImpertio-Studio/Frappe_Claude_Skill_Package189—~3.2kAutomated safety check: PassMIT
Trellis Session Insightmindfold-ai/Trellis15k4 repos~1.7kAutomated safety check: PassAGPL-3.0
Native Data FetchingCherryHQ/cherry-studio-app4k6 repos~2.9kAutomated safety check: NotesMIT
Debugging Executionsn8n-io/n8n207k—~2.6kAutomated safety check: PassCustom licence
Aoti Debugpytorch/pytorch104k1 repos~1.7kAutomated safety check: PassCustom licence
Herdr Throwaway Reproductionherdrdev/herdr43k—~2.4kAutomated safety check: PassApache-2.0

Similar skills

  • Trellis Session Insight

    mindfold-ai/Trellis

    Reach into past AI conversation history through the trellis mem CLI.

    15k GitHub starsUsed in 4 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Native Data Fetching

    CherryHQ/cherry-studio-app

    A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.

    4k GitHub starsUsed in 6 repos~2.9k tokens
    DevelopmentAuto-check: notes
  • Official

    Debug failed or wrong-output workflow executions using executions tools.

    207k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Aoti Debug

    pytorch/pytorch

    Debug AOTInductor (AOTI) errors and crashes. An agent skill from pytorch/pytorch.

    104k GitHub starsUsed in 1 repo~1.7k tokens
    DevelopmentAuto-check passed
  • Runs a disposable, uniquely named Herdr session inside an existing one so runtime, pane, terminal or API bugs can be reproduced without touching the main session.

    43k GitHub stars~2.4k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Systematic Debugging

    ultralisp/ultralisp

    A skill your agent uses when encountering any bug, test failure, or unexpected behavior, before proposing fixes

    258 GitHub starsUsed in 51 repos~2.4k tokens
    DevelopmentAuto-check passed

More from Impertio-Studio/Frappe_Claude_Skill_Package

All 61 skills in this repo
  • 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.

    189 GitHub stars~2.5k tokensUpdated 22 days ago
    Auto-check passed
  • Frappe Agent Architect

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when designing multi-app Frappe architectures, deciding whether to split functionality into separate apps, or implementing cross-app communication patterns.

    189 GitHub stars~2.8k tokensUpdated 22 days ago
    Auto-check passed
  • Frappe Agent Debugger

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when debugging Frappe errors, using bench console for live inspection, analyzing tracebacks, or reading Frappe log files.

    189 GitHub stars~2.9k tokensUpdated 22 days ago
    Auto-check passed
  • 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.

    189 GitHub stars~3.2k tokensUpdated 22 days ago
    Auto-check passed
  • Frappe Agent Migrator

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when migrating a Frappe app between major versions, detecting breaking API changes, or resolving post-migration errors.

    189 GitHub stars~2.8k tokensUpdated 22 days ago
    Auto-check: notes
  • Frappe Agent Validator

    Impertio-Studio/Frappe_Claude_Skill_Package

    A skill your agent uses when reviewing or validating Frappe/ERPNext code against best practices and common pitfalls.

    189 GitHub stars~2.8k tokensUpdated 22 days ago
    Auto-check passed

Categories

Questions about Frappe Errors Permissions

What does Frappe Errors Permissions do?

A skill your agent uses when debugging or handling permission errors in Frappe/ERPNext. Frappe Errors Permissions is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when debugging or handling permission errors in Frappe/ERPNext.

When should I use Frappe Errors Permissions?

Frappe Errors Permissions fits situations like: handling permission errors in Frappe/ERPNext; tasks that involve Debugging.

How do I install Frappe Errors Permissions in Claude Code?

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

How do I install Frappe Errors Permissions in Codex?

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

Can I use Frappe Errors Permissions 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-permissions -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-permissions, .gemini/skills/frappe-errors-permissions, .github/skills/frappe-errors-permissions and .opencode/skills/frappe-errors-permissions in your project.

What does Frappe Errors Permissions need to run?

SKILL.md names no scripts, command-line tools or credentials: Frappe Errors Permissions 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 Permissions 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 Permissions 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 Permissions use?

Frappe Errors Permissions 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 Permissions use?

About 3.2k tokens (SKILL.md is roughly 13k 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 Permissions?

Skills that share tags, products or a category with Frappe Errors Permissions: Trellis Session Insight (mindfold-ai/Trellis, 15k stars), Native Data Fetching (CherryHQ/cherry-studio-app, 4k stars), Debugging Executions (n8n-io/n8n, 207k stars) and Aoti Debug (pytorch/pytorch, 104k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Frappe Errors Permissions?

Impertio-Studio (a GitHub organization) maintains it in Impertio-Studio/Frappe_Claude_Skill_Package, which has 189 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.