Doc
nexu-io/open-design
Read, create, and edit .docx documents with formatting and layout fidelity via OpenAI's document skill.
Agent skill
by Impertio-Studio in Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when implementing document lifecycle hooks via docevents in hooks.py, understanding event execution order, or extending/overriding document behavior from another app.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-syntax-hooks-events --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-hooks-events .claude/skills/frappe-syntax-hooks-events && rm -rf skills-srcUse ~/.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/
Install the "frappe-syntax-hooks-events" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/syntax/frappe-syntax-hooks-events into .claude/skills/frappe-syntax-hooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-syntax-hooks-events", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/syntax/frappe-syntax-hooks-eventsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-syntax-hooks-events --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/source/syntax/frappe-syntax-hooks-events .agents/skills/frappe-syntax-hooks-events && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "frappe-syntax-hooks-events" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/syntax/frappe-syntax-hooks-events into .agents/skills/frappe-syntax-hooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-syntax-hooks-events", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-syntax-hooks-events --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/source/syntax/frappe-syntax-hooks-events .cursor/skills/frappe-syntax-hooks-events && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "frappe-syntax-hooks-events" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/syntax/frappe-syntax-hooks-events into .cursor/skills/frappe-syntax-hooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-syntax-hooks-events", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git --path skills/source/syntax/frappe-syntax-hooks-events--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-syntax-hooks-events --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/source/syntax/frappe-syntax-hooks-events .gemini/skills/frappe-syntax-hooks-events && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "frappe-syntax-hooks-events" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/syntax/frappe-syntax-hooks-events into .gemini/skills/frappe-syntax-hooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-syntax-hooks-events", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-syntax-hooks-eventsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/source/syntax/frappe-syntax-hooks-events .github/skills/frappe-syntax-hooks-events && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "frappe-syntax-hooks-events" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/syntax/frappe-syntax-hooks-events into .github/skills/frappe-syntax-hooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-syntax-hooks-events", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-syntax-hooks-events --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/source/syntax/frappe-syntax-hooks-events .opencode/skills/frappe-syntax-hooks-events && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "frappe-syntax-hooks-events" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/syntax/frappe-syntax-hooks-events into .opencode/skills/frappe-syntax-hooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-syntax-hooks-events", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
frappe-syntax-hooks-eventsA skill your agent uses when implementing document lifecycle hooks via docevents in hooks.py, understanding event execution order, or extending/overriding document behavior from another app.
Frappe Syntax Hooks Events is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when implementing document lifecycle hooks via docevents in hooks.py, understanding event execution order, or extending/overriding document behavior from another app. Prevents silent hook failures from wrong event names, incorrect execution order assumptions, and broken override chains. Covers docevents hook syntax, all document events (beforeinsert, validate, onsubmit, etc.), event execution order, extend vs override behavior, cross-app docevents. Keywords: docevents, hooks.py, beforeinsert, validate…
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/anti-patterns.md`, `references/event-order.md` and `references/examples.md`). Compatibility notes: Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
The repository describes itself as: 60 deterministic Claude AI skills for Frappe Framework & ERPNext v14-v16 development and operations. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 36cfa80. It shows what the files ask for, not the result of running them.
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.
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.
Links to these hosts (documentation or services it may open):
docs.frappe.ioFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
From compatibility in the SKILL.md frontmatter.
Frappe Syntax Hooks Events loads about 3.1k tokens when it runs, and up to ~8.5k if it reads all its reference files. Until then it costs about 174 tokens; SKILL.md has 1,013 words of instructions outside code blocks.
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.
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.
The full file from Impertio-Studio/Frappe_Claude_Skill_Package at commit 36cfa80, republished under its MIT licence (© Impertio-Studio). 1,013 words, ~3,117 tokens.
.claude/skills/frappe-syntax-hooks-events/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.| Order | Event | Purpose | Can Raise? |
|---|---|---|---|
| 1 | before_insert | Set defaults before naming | YES |
| 2 | before_naming | Modify naming logic | YES |
| 3 | autoname | Set the name property | YES |
| 4 | before_validate | Auto-set missing values | YES |
| 5 | validate | Validation logic — throw to abort | YES |
| 6 | before_save | Final mutations before DB write | YES |
| 7 | db_insert | Internal — writes row to DB | — |
| 8 | after_insert | Post-insert logic (runs once ever) | YES |
| 9 | on_update | Post-save logic (runs on every save) | YES |
| 10 | on_change | Fires if any field value changed | YES |
| Order | Event | Purpose |
|---|---|---|
| 1 | before_validate | Auto-set missing values |
| 2 | validate | Validation logic — throw to abort |
| 3 | before_save | Final mutations before DB write |
| 4 | db_update | Internal — updates row in DB |
| 5 | on_update | Post-save logic |
| 6 | on_change | Fires if any field value changed |
| Order | Event | Purpose |
|---|---|---|
| 1 | before_validate | Auto-set missing values |
| 2 | validate | Validation logic |
| 3 | before_save | Final mutations before DB write |
| 4 | before_submit | Pre-submit logic — throw to abort |
| 5 | db_update | Internal — updates row in DB |
| 6 | on_submit | Post-submit logic (GL entries etc) |
| 7 | on_update | Post-save logic |
| 8 | on_change | Fires if any field value changed |
| Order | Event | Purpose |
|---|---|---|
| 1 | before_cancel | Pre-cancel validation |
| 2 | db_update | Internal — updates row in DB |
| 3 | on_cancel | Post-cancel logic (reverse GL etc) |
| 4 | on_change | Fires if any field value changed |
| Order | Event | Purpose |
|---|---|---|
| 1 | on_trash | Pre-delete cleanup |
| 2 | after_delete | Post-delete logic |
| Operation | Events (in order) |
|---|---|
| Rename | before_rename → after_rename |
| Amend | before_insert chain runs on the new amended doc |
| Update After Submit | before_update_after_submit → db_update → on_update_after_submit → on_change |
# hooks.py
doc_events = {
"Sales Invoice": {
"on_submit": "myapp.events.sales_invoice.on_submit",
"on_cancel": "myapp.events.sales_invoice.on_cancel",
},
"Purchase Order": {
"validate": "myapp.events.purchase_order.validate",
}
}doc_events = {
"*": {
"after_insert": "myapp.events.global_handler.after_insert_all",
"on_update": "myapp.events.global_handler.track_changes",
}
}ALWAYS use "*" (string with asterisk) as the key. This fires the handler for every DocType.
doc_events = {
"Sales Invoice": {
"on_submit": [
"myapp.events.accounting.create_gl_entries",
"myapp.events.notifications.send_invoice_email",
]
}
}# myapp/events/sales_invoice.py
def on_submit(doc, method=None):
"""
doc — the Document instance (e.g., Sales Invoice)
method — string name of the event (e.g., "on_submit"), or None
"""
if doc.grand_total > 10000:
frappe.sendmail(...)ALWAYS accept method as the second parameter (with default None). Frappe passes it automatically.
→ Use validate. ALWAYS raise frappe.throw() here to block invalid saves.
→ Use before_validate. This runs before validate, so your defaults are set before validation checks.
→ Use after_insert. This fires ONLY on insert, NEVER on subsequent saves.
→ Use on_update. This fires on both insert and save operations.
→ Use on_submit. NEVER create linked docs in validate — the document is not yet committed.
→ Use on_cancel. ALWAYS clean up GL entries, stock ledger entries, and linked docs here.
→ Use autoname in the controller, or before_naming for conditional logic.
→ Use on_trash. Raise frappe.throw() to block deletion.
→ Use before_update_after_submit for validation and on_update_after_submit for side effects.
→ Use on_change. This fires only when at least one field value differs from the DB state.
Both mechanisms trigger the SAME events. The difference is WHERE you register them.
| Aspect | Controller (class method) | doc_events (hooks.py) |
|---|---|---|
| Location | {doctype}.py controller file | hooks.py in your app |
| Use when | You OWN the DocType | You are EXTENDING another app's DocType |
| Execution | Runs first (controller) | Runs after controller method |
| Multiple apps | Only one controller per DocType | Multiple apps can register handlers |
ALWAYS use doc_events when hooking into a DocType you do NOT own. NEVER modify another app's controller file directly.
For a given event (e.g., validate):
def validate(self))doc_events handlers run in app installation order"*" handlers run after specific DocType handlersIn Frappe v16+, extend_doctype_class provides a cleaner alternative to doc_events for adding methods to existing DocTypes.
extend_doctype_class = {
"Sales Invoice": [
"myapp.overrides.sales_invoice.SalesInvoiceExtension"
]
}# myapp/overrides/sales_invoice.py
import frappe
class SalesInvoiceExtension:
def validate(self):
"""This is called as part of the controller chain."""
if self.grand_total < 0:
frappe.throw("Grand total cannot be negative")
def custom_method(self):
"""Custom methods are also available on the doc instance."""
return self.itemsextend_doctype_class over override_doctype_class in v16+ when multiple apps may extend the same DocType.class Final(App2Mixin, App1Mixin, Original).validate) run as part of the controller, NOT as separate doc_events handlers.Completely replaces the controller class. Use with extreme caution.
# hooks.py
override_doctype_class = {
"ToDo": "myapp.overrides.todo.CustomToDo"
}# myapp/overrides/todo.py
from frappe.desk.doctype.todo.todo import ToDo
class CustomToDo(ToDo):
def validate(self):
super().validate() # ALWAYS call super() to preserve original logic
# Your additions hereNEVER use override_doctype_class if extend_doctype_class is available (v16+). Only ONE app can override a DocType — last-installed app wins, silently breaking other apps.
When multiple apps register doc_events for the same DocType and event:
sites/{site}/site_config.json → installed_apps).override_doctype_class, the last-installed app wins (only one override applies).extend_doctype_class (v16+), all extensions stack cumulatively.All document events from before_validate through on_change run inside a single database transaction.
db_insert/db_update).after_insert, on_update, on_submit, on_cancel — all run BEFORE the transaction commits.after_delete runs after the DELETE statement but still within the request transaction.NEVER assume data is committed to DB inside any event handler. Other concurrent requests will NOT see your changes until the full request completes.
frappe.throw() to abort operations — NEVER use raise Exception.doc.name outside of autoname or before_naming.super().{event}() when overriding controller methods in subclasses.doc.save() inside validate or before_save — this causes infinite recursion.doc.flags.ignore_permissions = True explicitly if your hook needs to bypass permissions — NEVER assume hooks run as Administrator.validate — use after_insert or on_update with frappe.enqueue() instead.doc.flags to communicate between events in the same request (e.g., doc.flags.skip_notification = True).on_change for critical logic — it only fires when values actually differ from the database state.frappe-syntax-hooks-config — App-level hooks (scheduler, fixtures, permissions)© 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
SKILL.md and 4 other files (references) in skills/source/syntax/frappe-syntax-hooks-events of Impertio-Studio/Frappe_Claude_Skill_Package.
Open the folder on GitHubat commit 36cfa80
Frappe Syntax Hooks Events 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Frappe Syntax Hooks Events this skillImpertio-Studio/Frappe_Claude_Skill_Package | 189 | — | ~3.1k | Automated safety check: Pass | MIT | |
| Docnexu-io/open-design | 100k | — | ~266 | Automated safety check: Pass | Apache-2.0 | |
| Docsremotion-dev/remotion | 63k | — | ~248 | Automated safety check: Pass | Custom licence | |
| Eventscoreyhaines31/marketingskills | 54k | — | ~3k | Automated safety check: Pass | MIT | |
| Update Docsvercel/next.js | 143k | — | ~1.9k | Automated safety check: Pass | MIT | |
| DocsPrefectHQ/fastmcp | 28k | — | ~1k | Automated safety check: Pass | Apache-2.0 |
nexu-io/open-design
Read, create, and edit .docx documents with formatting and layout fidelity via OpenAI's document skill.
remotion-dev/remotion
Start the Remotion docs site and open it in the Codex browser.
coreyhaines31/marketingskills
When the user wants to plan, run, sponsor, speak at, or get pipeline from events — webinars, conferences, trade shows, meetups, dinners, workshops, virtual summits, or user conferences.
vercel/next.js
This skill should be used when the user asks to "update documentation for my changes", "check docs for this PR", "what docs need updating", "sync docs with code", "scaffold docs for this feature"…
PrefectHQ/fastmcp
Write or revise a page under docs/ for gofastmcp.com. An agent skill from PrefectHQ/fastmcp.
vercel/next.js
Draw diagrams for the Next.js docs in the style of the ones already published there: the light/dark PNGs an mdx references with <Image srcLight="/docs/light/<name.png" srcDark="/docs/dark/<name.png".
Impertio-Studio/Frappe_Claude_Skill_Package
Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API.
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.
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.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when receiving vague or unclear ERPNext/Frappe development requests that need interpretation.
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.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when reviewing or validating Frappe/ERPNext code against best practices and common pitfalls.
A skill your agent uses when implementing document lifecycle hooks via docevents in hooks.py, understanding event execution order, or extending/overriding document behavior from another app. Frappe Syntax Hooks Events is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package.py, understanding event execution order, or extending/overriding document behavior from another app.
Frappe Syntax Hooks Events fits situations like: implementing document lifecycle hooks via docevents in hooks.py; understanding event execution order; extending/overriding document behavior from another app.
Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a claude-code`. Or copy the skill folder (skills/source/syntax/frappe-syntax-hooks-events in Impertio-Studio/Frappe_Claude_Skill_Package) into .claude/skills/frappe-syntax-hooks-events in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-syntax-hooks-events -a codex`. Or copy the skill folder (skills/source/syntax/frappe-syntax-hooks-events in Impertio-Studio/Frappe_Claude_Skill_Package) into .agents/skills/frappe-syntax-hooks-events in your project. Codex loads it when a task matches its description.
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-hooks-events -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-hooks-events, .gemini/skills/frappe-syntax-hooks-events, .github/skills/frappe-syntax-hooks-events and .opencode/skills/frappe-syntax-hooks-events in your project.
SKILL.md names no scripts, command-line tools or credentials: Frappe Syntax Hooks Events 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..
SKILL.md names 1 domain. As links in the text: docs.frappe.io. This is read from the text; nothing was executed.
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.
Frappe Syntax Hooks Events is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
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 5.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Frappe Syntax Hooks Events: Doc (nexu-io/open-design, 100k stars), Docs (remotion-dev/remotion, 63k stars), Events (coreyhaines31/marketingskills, 54k stars) and Update Docs (vercel/next.js, 143k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.