Agent skill

Frappe Syntax Serverscripts

by Impertio-Studio in Impertio-Studio/Frappe_Claude_Skill_Package

A skill your agent uses when writing Python code for ERPNext/Frappe Server Scripts including Document Events, API endpoints, Scheduler Events, and Permission Queries.

MITAuto-check passedBackend & APIs

Install Frappe Syntax Serverscripts

skills CLI
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-serverscripts -a claude-code

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

GitHub CLI
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-syntax-serverscripts --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/syntax/frappe-syntax-serverscripts .claude/skills/frappe-syntax-serverscripts && 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-syntax-serverscripts
GitHub stars
187
Token cost
~3.1k tokens
SKILL.md length
461 words
Files
8 (incl. references)
Skills in repo
61
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when writing Python code for ERPNext/Frappe Server Scripts including Document Events, API endpoints, Scheduler Events, and Permission Queries.

  • Works in 5 steps: NEVER write import — everything is in… → NEVER call doc.save() inside a Before… → NEVER call frappe.db.commit() in… → …
  • Writing Python code for ERPNext/Frappe Server Scripts including Document Events
  • SKILL.md covers CRITICAL: The Sandbox Rule, Enabling Server Scripts, Script Types and Event Name Mapping (Document…, plus 7 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Frappe Syntax Serverscripts is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when writing Python code for ERPNext/Frappe Server Scripts including Document Events, API endpoints, Scheduler Events, and Permission Queries. Prevents the 1 AI mistake: using import statements in Server Scripts (sandbox blocks ALL imports). Covers frappe. methods, event name mapping, and correct v14/v15/v16 syntax. Keywords: Server Script, frappe, ERPNext, sandbox, import, doc event, validate, onsubmit, beforesave, server script example, import not allowed, sandbox rules, which script type to use.

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

It sits in Backend & APIs, covering REST APIs. It works with Python. 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

  • Writing Python code for ERPNext/Frappe Server Scripts including Document Events
  • Scheduler Events
  • Permission Queries

Example prompts

  • “/frappe-syntax-serverscripts”

Requirements

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

Workflow steps

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

  1. NEVER write import — everything is in the frappe namespace
  2. NEVER call doc.save() inside a Before Save script — causes infinite loop
  3. NEVER call frappe.db.commit() in Document Event scripts — framework handles it
  4. ALWAYS call frappe.db.commit() at the end of Scheduler scripts
  5. ALWAYS use parameterized queries: %(var)s with dict, NEVER f-strings in SQL

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 Syntax Serverscripts loads about 3.1k tokens when it runs, and up to ~17k if it reads all its reference files. Until then it costs about 135 tokens; SKILL.md has 461 words of instructions outside code blocks.

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

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). 461 words, ~3,064 tokens.

Download SKILL.mdSave it as .claude/skills/frappe-syntax-serverscripts/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
frappe-syntax-serverscripts
description
Use when writing Python code for ERPNext/Frappe Server Scripts including Document Events, API endpoints, Scheduler Events, and Permission Queries. Prevents the #1 AI mistake: using import statements in Server Scripts (sandbox blocks ALL imports). Covers frappe.* methods, event name mapping, and correct v14/v15/v16 syntax. Keywords: Server Script, frappe, ERPNext, sandbox, import, doc event, validate, on_submit, before_save, server script example, import not allowed, sandbox rules, which script type to use.
compatibility
Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
license
MIT
metadata.author
OpenAEC-Foundation
metadata.version
2.0

Frappe Server Scripts — Complete Reference

Server Scripts are Python scripts managed via Setup > Server Script in the Frappe/ERPNext UI. They run inside a RestrictedPython sandbox.

CRITICAL: The Sandbox Rule

┌──────────────────────────────────────────────────────────────────┐
│  ALL import STATEMENTS ARE BLOCKED                               │
│                                                                  │
│  import json             → ImportError: __import__ not found     │
│  from datetime import *  → ImportError: __import__ not found     │
│  import frappe           → ImportError (even frappe itself!)     │
│                                                                  │
│  EVERYTHING you need is pre-loaded in the frappe namespace.      │
│  NEVER write an import line. ALWAYS use frappe.utils.*, etc.     │
└──────────────────────────────────────────────────────────────────┘

ALWAYS use the pre-loaded namespace instead of imports:

Blocked importUse instead
import jsonfrappe.parse_json() / frappe.as_json()
from datetime import datefrappe.utils.today() / frappe.utils.now_datetime()
from frappe.utils import cintfrappe.utils.cint() (already loaded)
import requestsfrappe.make_get_request() / frappe.make_post_request()
import reNot available — restructure logic without regex
import os / import sysNot available — use a custom app instead

Enabling Server Scripts

bash
# v14: enabled by default
# v15+: DISABLED by default — you MUST enable explicitly:
bench set-config -g server_script_enabled 1
# Or set server_script_enabled: true in site_config.json

NEVER expect Server Scripts to work on Frappe Cloud shared benches — they require a private bench.

Script Types

TypeTriggerKey Variable
Document EventDocument lifecycle (save, submit, cancel)doc
APIHTTP request to /api/method/{name}frappe.form_dict
Scheduler EventCron schedule(none)
Permission QueryDocument list filteringuser, conditions

Event Name Mapping (Document Events)

CRITICAL: The UI names differ from internal hook names:

Server Script UIInternal HookFires When
Before Insertbefore_insertBefore new doc saved to DB
After Insertafter_insertAfter first DB insert
Before Validatebefore_validateBefore framework validation
Before SavevalidateBefore save (new + update)
After Saveon_updateAfter successful save
Before Submitbefore_submitBefore submit (docstatus 0→1)
After Submiton_submitAfter submit completes
Before Cancelbefore_cancelBefore cancel (docstatus 1→2)
After Cancelon_cancelAfter cancel completes
Before Deleteon_trashBefore permanent delete
After Deleteafter_deleteAfter permanent delete

NEVER confuse "Before Save" with before_save — the UI label "Before Save" maps to the validate hook. The actual before_save hook runs AFTER validate.

Decision Tree: Server Script vs Document Controller

Need custom Python logic for a DocType?
│
├─► Can you install a custom Frappe app?
│   ├─► YES: Use a Document Controller when you need:
│   │   • import statements (any Python library)
│   │   • File system access
│   │   • Complex class inheritance
│   │   • autoname / before_naming hooks
│   │   • Unit-testable code
│   │
│   └─► NO: Use a Server Script when:
│       • You only have UI access (no bench CLI)
│       • Logic is simple validation / field calculation
│       • You need a quick API endpoint
│       • You need dynamic permission filtering
│
└─► Is logic > 50 lines or needs external libraries?
    ├─► YES → Document Controller in a custom app
    └─► NO  → Server Script is fine

Quick Reference: Available in Sandbox

Pre-loaded Objects
python
doc                         # Current document (Document Event only)
frappe                      # Core namespace — ALWAYS available
frappe.db                   # Database operations
frappe.utils                # Date, number, string utilities
frappe.session              # Current session (user, csrf_token)
frappe.form_dict            # Request parameters (API scripts)
frappe.response             # Response object (API scripts)
frappe.request              # Werkzeug request object
frappe.qb                   # Query Builder (v14+)
json                        # Python json module (pre-loaded)
Core Methods
python
# Documents
frappe.get_doc(doctype, name)           # Fetch document
frappe.new_doc(doctype)                 # Create new document
frappe.get_cached_doc(doctype, name)    # Cached fetch (read-only)
frappe.get_last_doc(doctype)            # Most recent document
frappe.get_mapped_doc(...)              # Map fields between DocTypes
frappe.delete_doc(doctype, name)        # Delete document
frappe.rename_doc(doctype, old, new)    # Rename document

# Querying
frappe.get_all(doctype, filters, fields, order_by, limit)   # No permission check
frappe.get_list(doctype, filters, fields, order_by, limit)  # With permission check
frappe.db.get_value(doctype, name, fieldname)
frappe.db.get_single_value(doctype, fieldname)
frappe.db.set_value(doctype, name, fieldname, value)
frappe.db.exists(doctype, name_or_filters)
frappe.db.count(doctype, filters)
frappe.db.sql(query, values, as_dict)   # ALWAYS parameterize!
frappe.db.escape(value)                 # SQL escape
frappe.db.commit()                      # ONLY in Scheduler scripts
frappe.db.rollback()                    # ONLY in Scheduler scripts

# Messaging
frappe.throw(msg, exc, title)           # Stop execution + show error
frappe.msgprint(msg, title, indicator)  # User notification
frappe.log_error(message, title)        # Error Log entry

# HTTP (yes, these work in sandbox!)
frappe.make_get_request(url, params, headers)
frappe.make_post_request(url, data, headers)
frappe.make_put_request(url, data, headers)

# Email
frappe.sendmail(recipients, sender, subject, message)

# Utilities
frappe.utils.today()                    # "2024-01-15"
frappe.utils.now()                      # "2024-01-15 10:30:00"
frappe.utils.now_datetime()             # datetime object
frappe.utils.add_days(date, n)          # Date arithmetic
frappe.utils.add_months(date, n)
frappe.utils.date_diff(d1, d2)          # Days between dates
frappe.utils.flt(val)                   # Safe float (None → 0.0)
frappe.utils.cint(val)                  # Safe int (None → 0)
frappe.utils.cstr(val)                  # Safe string (None → "")
frappe.parse_json(string)               # JSON string → dict/list
frappe.as_json(obj)                     # dict/list → JSON string
frappe.render_template(template, ctx)   # Jinja rendering
frappe.get_url()                        # Site URL
frappe.get_hooks(hook)                  # Read app hooks
run_script(script_name, **kwargs)       # Call another Server Script

# Session / Permissions
frappe.session.user                     # Current user email
frappe.get_roles(user)                  # User's roles list
frappe.has_permission(doctype, ptype, doc)
frappe.get_fullname(user)               # User's display name
_("translatable string")               # Translation function
Python Builtins Available
python
str, int, float, bool, list, dict, tuple, set  # Types
range, enumerate, zip, map, filter              # Iteration
sum, min, max, len, sorted, reversed            # Aggregation
isinstance, type, hasattr, getattr              # Introspection
all, any, abs, round, divmod                    # Math/logic
print                                           # → server log
True, False, None                               # Constants
Python Builtins BLOCKED
python
open, file          # No file I/O
eval, exec, compile # No dynamic code execution
__import__          # No imports (this is the root cause)
globals, locals     # No scope introspection

Syntax Per Script Type

Document Event
python
# Config: Reference DocType = Sales Invoice, Event = Before Save
if doc.grand_total < 0:
    frappe.throw("Total MUST NOT be negative")

doc.requires_approval = 1 if doc.grand_total > 10000 else 0
Show full SKILL.md (184 more words)Show less
API
python
# Config: API Method = get_customer_orders, Allow Guest = No
# Endpoint: /api/method/get_customer_orders
customer = frappe.form_dict.get("customer")
if not customer:
    frappe.throw("Parameter 'customer' is required")

orders = frappe.get_all("Sales Order",
    filters={"customer": customer, "docstatus": 1},
    fields=["name", "grand_total", "status"],
    order_by="creation desc",
    limit=20
)
frappe.response["message"] = {"orders": orders, "count": len(orders)}
Scheduler Event
python
# Config: Event Frequency = Cron, Cron Format = 0 9 * * *
overdue = frappe.get_all("Sales Invoice",
    filters={"status": "Unpaid", "due_date": ["<", frappe.utils.today()], "docstatus": 1},
    fields=["name", "customer", "grand_total"]
)
for inv in overdue:
    frappe.log_error(f"Overdue: {inv.name} ({inv.customer})", "Invoice Reminder")

frappe.db.commit()  # ALWAYS commit in Scheduler scripts
Permission Query
python
# Config: Reference DocType = Sales Invoice
# Variables available: user, conditions
roles = frappe.get_roles(user)
if "System Manager" in roles:
    conditions = ""
elif "Sales User" in roles:
    conditions = f"`tabSales Invoice`.owner = {frappe.db.escape(user)}"
else:
    conditions = "1=0"

Version Differences

Featurev14v15v16
Server Scripts enabledBy defaultDisabled by defaultDisabled by default
Enable commandNot neededbench set-config -g server_script_enabled 1Same as v15
frappe.qb (Query Builder)AvailableAvailableAvailable
run_script() for librariesv13+AvailableAvailable
frappe.make_get_request()AvailableAvailableAvailable
Frappe Cloud shared benchSupportedNOT supportedNOT supported

Top 5 Rules

  1. NEVER write import — everything is in the frappe namespace
  2. NEVER call doc.save() inside a Before Save script — causes infinite loop
  3. NEVER call frappe.db.commit() in Document Event scripts — framework handles it
  4. ALWAYS call frappe.db.commit() at the end of Scheduler scripts
  5. ALWAYS use parameterized queries: %(var)s with dict, NEVER f-strings in SQL

References

Cross-References

  • frappe-syntax-api — Frappe REST API and whitelisted methods
  • frappe-syntax-doctype — DocType field types and schema
  • frappe-core-database — frappe.db deep dive
  • frappe-core-permissions — Permission system architecture
  • frappe-errors-common — Error handling patterns

© 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 7 other files (references) in skills/source/syntax/frappe-syntax-serverscripts of Impertio-Studio/Frappe_Claude_Skill_Package.

  • SKILL.md
  • references/anti-patterns.md
  • references/events.md
  • references/examples.md
  • references/hooks.md
  • references/methods.md
  • references/patterns.md
  • references/syntax.md

Open the folder on GitHubat commit 36cfa80

Compare with similar skills

Frappe Syntax Serverscripts 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 Syntax Serverscripts compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Frappe Syntax Serverscripts this skillImpertio-Studio/Frappe_Claude_Skill_Package187—~3.1kAutomated safety check: PassMIT
Zhihu Searchitwanger/toBeBetterJavaer18k—~1.5kAutomated safety check: PassNone
Fastcrudbenavlabs/fastcrud1.6k—~5kAutomated safety check: PassMIT
Cloudflare Email Servicehodgef/apiker1273 repos~2kAutomated safety check: PassMIT
FastAPI Project Templateswshobson/agents40k11 repos~901Automated safety check: PassMIT
Starlettesimonw/research781—~8.6kAutomated safety check: NotesNone

Similar skills

  • Zhihu Search

    itwanger/toBeBetterJavaer

    Search Zhihu for content using the searchv3 API. An agent skill from itwanger/toBeBetterJavaer.

    18k GitHub stars~1.5k tokensUpdated today
    Backend & APIsAuto-check passed
  • Fastcrud

    benavlabs/fastcrud

    A skill your agent uses when building or modifying CRUD endpoints with FastCRUD (the fastcrud PyPI package) in a FastAPI project — covers FastCRUD, crudrouter, EndpointCreator, FilterConfig…

    1.6k GitHub stars~5k tokensUpdated 13 days ago
    Backend & APIsAuto-check passed
  • Send and receive transactional emails with Cloudflare Email Service (Email Sending + Email Routing).

    127 GitHub starsUsed in 3 repos~2k tokens
    Backend & APIsAuto-check passed
  • Scaffolds FastAPI projects with a layered app layout, dependency injection through Depends, async handlers and database access, middleware and pytest setup.

    40k GitHub starsUsed in 11 repos~901 tokens
    Backend & APIsAuto-check passed
  • Starlette

    simonw/research

    Build async web applications and APIs with Starlette 1.0, the lightweight ASGI framework for Python.

    781 GitHub stars~8.6k tokensUpdated 3 days ago
    Backend & APIsAuto-check: notes
  • Build X402 Client

    coinbase/cdp-sdk

    Write code that pays for an HTTP API returning 402 Payment Required, using the x402 protocol and a CDP-managed wallet.

    204 GitHub stars~3k tokensUpdated yesterday
    Backend & APIsAuto-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 20 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

Categories

Questions about Frappe Syntax Serverscripts

What does Frappe Syntax Serverscripts do?

A skill your agent uses when writing Python code for ERPNext/Frappe Server Scripts including Document Events, API endpoints, Scheduler Events, and Permission Queries. Frappe Syntax Serverscripts is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when writing Python code for ERPNext/Frappe Server Scripts including Document Events, API endpoints, Scheduler Events, and Permission Queries.

When should I use Frappe Syntax Serverscripts?

Frappe Syntax Serverscripts fits situations like: writing Python code for ERPNext/Frappe Server Scripts including Document Events; scheduler Events; permission Queries.

How do I install Frappe Syntax Serverscripts in Claude Code?

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

How do I install Frappe Syntax Serverscripts in Codex?

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

Can I use Frappe Syntax Serverscripts 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-syntax-serverscripts -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-syntax-serverscripts, .gemini/skills/frappe-syntax-serverscripts, .github/skills/frappe-syntax-serverscripts and .opencode/skills/frappe-syntax-serverscripts in your project.

What does Frappe Syntax Serverscripts need to run?

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

Frappe Syntax Serverscripts 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 Syntax Serverscripts use?

About 3.1k tokens (SKILL.md is roughly 12k 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 14k tokens, read only when the agent opens those files.

What are the alternatives to Frappe Syntax Serverscripts?

Skills that share tags, products or a category with Frappe Syntax Serverscripts: Zhihu Search (itwanger/toBeBetterJavaer, 18k stars), Fastcrud (benavlabs/fastcrud, 1.6k stars), Cloudflare Email Service (hodgef/apiker, 127 stars) and FastAPI Project Templates (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Frappe Syntax Serverscripts?

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.