A skill your agent uses when working with utility functions in Frappe v14-v16.

MITAuto-check passedBackend & APIs

Install Frappe Core Utils

skills CLI
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-utils -a claude-code

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

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

At a glance

A skill your agent uses when working with utility functions in Frappe v14-v16.

  • Working with utility functions in Frappe v14-v16
  • SKILL.md covers Quick Reference: Python, Decision Tree: "Which function…, Critical Anti-Patterns and JavaScript Quick Reference, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Tasks that involve Multi-tenancy

What it does

Frappe Core Utils is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when working with utility functions in Frappe v14-v16. Covers frappe.utils. for date/time, number/money, string, validation, and file path operations. Prevents reinventing stdlib alternatives that break timezone awareness, locale formatting, or multi-tenancy. Keywords: frappe.utils, nowdate, flt, cint, fmtmoney, getdate,, date calculation, format number, money format, validate email, how to calculate days between. adddays, datediff, validateemail, prettydate, getfilespath.

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

It sits in Backend & APIs, covering Multi-tenancy. 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

  • Working with utility functions in Frappe v14-v16
  • Tasks that involve Multi-tenancy

Example prompts

  • “/frappe-core-utils”

Requirements

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

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 Core Utils loads about 1.8k tokens when it runs, and up to ~7.4k if it reads all its reference files. Until then it costs about 127 tokens; SKILL.md has 365 words of instructions outside code blocks.

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

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). 365 words, ~1,751 tokens.

Download SKILL.mdSave it as .claude/skills/frappe-core-utils/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
frappe-core-utils
description
Use when working with utility functions in Frappe v14-v16. Covers frappe.utils.* for date/time, number/money, string, validation, and file path operations. Prevents reinventing stdlib alternatives that break timezone awareness, locale formatting, or multi-tenancy. Keywords: frappe.utils, nowdate, flt, cint, fmt_money, getdate,, date calculation, format number, money format, validate email, how to calculate days between. add_days, date_diff, validate_email, pretty_date, get_files_path.
compatibility
Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
license
MIT
metadata.author
OpenAEC-Foundation
metadata.version
3.0

Frappe Utility Functions

Quick Reference: Python

NeedFunctionReturns
Current datenowdate() / today()datetime.date
Current datetimenow_datetime()datetime.datetime
Parse date stringgetdate(str)datetime.date
Parse datetime stringget_datetime(str)datetime.datetime
Add daysadd_days(date, n)datetime.date
Add monthsadd_months(date, n)datetime.date
Date differencedate_diff(end, start)int (days)
Format for userformat_date(dt)str (user locale)
Relative timepretty_date(dt)str ("2 hours ago")
Safe floatflt(val, precision)float
Safe intcint(val)int
Safe stringcstr(val)str
Safe boolsbool(val)bool
Safe divisionsafe_div(a, b)float [v15+]
Money formatfmt_money(amt, currency)str
Money in wordsmoney_in_words(amt, cur)str
Strip HTMLstrip_html(text)str
List to prosecomma_and(items)str ("a, b, and c")
Validate emailvalidate_email_address(e)str or ""
Validate URLvalidate_url(url)bool
Parse JSONparse_json(s)Any
Files pathget_files_path(is_private)str
Site pathget_site_path(*parts)str
Unique listunique(seq)list
Hashgenerate_hash(s, length)str

ALL imports: from frappe.utils import nowdate, flt, ... in controllers/whitelisted methods. In Server Scripts: Use frappe.utils.nowdate() directly — NO import statements allowed.


Decision Tree: "Which function do I use?"

Need a date/time value?
├─ Current date → nowdate() or today()
├─ Current datetime → now_datetime()
├─ Parse a string → getdate() or get_datetime()
├─ Add/subtract time → add_days(), add_months(), add_to_date()
├─ Difference → date_diff() (days), month_diff(), time_diff_in_seconds()
├─ Period boundary → get_first_day(), get_last_day(), get_quarter_start()
└─ Display to user → format_date(), format_datetime(), pretty_date()

Need a number?
├─ Convert safely → flt(), cint(), cstr(), sbool()
├─ Round → rounded() (banker's rounding)
├─ Safe divide → safe_div(a, b, default=0) [v15+]
├─ Format money → fmt_money(amount, currency)
└─ Money to words → money_in_words(amount, currency)

Need string processing?
├─ HTML → strip_html(), escape_html(), is_html()
├─ Join list → comma_and(), comma_or(), comma_sep()
├─ Markdown ↔ HTML → to_markdown(), md_to_html()
└─ Mask sensitive → mask_string(input, show_first=4) [v16+]

Need validation?
├─ Email → validate_email_address(email, throw=False)
├─ URL → validate_url(url, valid_schemes=["https"])
├─ Phone → validate_phone_number(phone, throw=False)
├─ JSON → validate_json_string(s)
└─ IBAN → validate_iban(iban) [v16+]

Need file/path?
├─ Public files → get_files_path()
├─ Private files → get_files_path(is_private=True)
├─ Site directory → get_site_path("private", "backups")
├─ Bench root → get_bench_path()
└─ File size → get_file_size(path, format=True)

Critical Anti-Patterns

NEVER use Python stdlib when frappe.utils exists
NEVER (stdlib)ALWAYS (frappe.utils)Why
datetime.datetime.now()now_datetime()Ignores system timezone
datetime.date.today()nowdate()Ignores system timezone
float(val)flt(val, precision)Crashes on None/empty
int(val)cint(val)Crashes on None/empty
round(val, 2)rounded(val, 2)Inconsistent rounding
val1 / val2safe_div(val1, val2)ZeroDivisionError [v15+]
json.loads(s)parse_json(s)Crashes on None/empty
json.dumps(obj)frappe.as_json(obj)Inconsistent serialization
"{:,.2f}".format(a)fmt_money(a, currency)Ignores locale/currency
os.path.join(...)get_site_path(...)Breaks multi-tenancy
", ".join(items)comma_and(items)No localized "and"
dt.strftime(fmt)format_date(dt)Ignores user preference
re.sub(r'<.*?>', '', h)strip_html(h)Misses edge cases
Show full SKILL.md (123 more words)Show less
Server Script Sandbox
python
# ❌ NEVER in Server Scripts
from frappe.utils import nowdate, flt
import json

# ✅ ALWAYS in Server Scripts (no imports allowed)
today = frappe.utils.nowdate()
amount = frappe.utils.flt(doc.amount, 2)
data = frappe.parse_json(doc.json_field)

JavaScript Quick Reference

NeedFunction
Escape HTMLfrappe.utils.escape_html(txt)
HTML to textfrappe.utils.html2text(html)
Check if HTMLfrappe.utils.is_html(txt)
Parse JSONfrappe.utils.parse_json(str)
Validate URLfrappe.utils.is_url(txt)
Title casefrappe.utils.to_title_case(str)
Join with "and"frappe.utils.comma_and(list)
Unique arrayfrappe.utils.unique(list)
Copy clipboardfrappe.utils.copy_to_clipboard(txt)
Scroll to elementfrappe.utils.scroll_to(el)
Is mobilefrappe.utils.is_mobile()
Throttlefrappe.utils.throttle(fn, delay)
Debouncefrappe.utils.debounce(fn, delay)
Format valuefrappe.format(value, df, options, doc)
Duration displayfrappe.utils.get_formatted_duration(secs)

Version Differences

Functionv14v15v16
safe_div()--AddedYes
duration_to_seconds()--AddedYes
guess_date_format()--AddedYes
validate_duration_format()--AddedYes
mask_string()----Added
validate_iban()----Added
validate_name()----Added
safe_json_loads()----Added
groupby_metric()----Added
Core functionsYesYesYes

Reference Files

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

  • SKILL.md
  • references/anti-patterns.md
  • references/date-time-functions.md
  • references/javascript-utilities.md
  • references/number-money-functions.md
  • references/string-validation-functions.md

Open the folder on GitHubat commit 36cfa80

Compare with similar skills

Frappe Core Utils 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 Core Utils compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Frappe Core Utils this skillImpertio-Studio/Frappe_Claude_Skill_Package188—~1.8kAutomated safety check: PassMIT
PR Review Provideryansongda/pay5.4k—~2.4kAutomated safety check: PassMIT
Abp Authorizationabpframework/abp14k—~1.3kAutomated safety check: PassLGPL-3.0
Django Access Reviewgetsentry/skills1k3 repos~2.6kAutomated safety check: NotesApache-2.0
Backend Dev Guidelineslitefuse/litefuse1001 repos~5.8kAutomated safety check: PassCustom licence
Ecto Persistence Patternsgeorgeguimaraes/elixir-agent-tools184—~1.2kAutomated safety check: PassApache-2.0

Similar skills

  • PR Review Provider

    yansongda/pay

    A skill your agent uses when reviewing PRs that add or modify a payment Provider in yansongda/pay - covers plugin pipeline, multi-tenant safety, signature verification, docs, and naming conventions.

    5.4k GitHub stars~2.4k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Abp Authorization

    abpframework/abp

    ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side.

    14k GitHub stars~1.3k tokensUpdated today
    Backend & APIsAuto-check passed
  • Django Access Review

    getsentry/skills

    Official

    Django access control and IDOR security review. An agent skill from getsentry/skills.

    1k GitHub starsUsed in 3 repos~2.6k tokens
    Backend & APIsAuto-check: notes
  • Backend Dev Guidelines

    litefuse/litefuse

    Comprehensive backend development guide for Litefuse's Next.js 14/tRPC/Express/TypeScript monorepo.

    100 GitHub starsUsed in 1 repo~5.8k tokens
    Backend & APIsAuto-check passed
  • Ecto Persistence Patterns

    georgeguimaraes/elixir-agent-tools

    Designs and debugs Elixir persistence with Ecto: schemas, changesets, queries, preloads, migrations and multi-tenancy, kept within application contexts.

    184 GitHub stars~1.2k tokensUpdated 19 days ago
    Backend & APIsAuto-check passed
  • Rails Security Multitenancy

    marckohlbrugge/37signals-skills

    Apply Rails security and multi-tenant safety practices including scoped queries, SSRF defenses, rate limiting, and tenant-scoped realtime updates.

    724 GitHub stars~1.7k tokensUpdated 4 mo ago
    Backend & APIsAuto-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.

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

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

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

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

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

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

Categories

Questions about Frappe Core Utils

What does Frappe Core Utils do?

A skill your agent uses when working with utility functions in Frappe v14-v16. Frappe Core Utils is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when working with utility functions in Frappe v14-v16.

When should I use Frappe Core Utils?

Frappe Core Utils fits situations like: working with utility functions in Frappe v14-v16; tasks that involve Multi-tenancy.

How do I install Frappe Core Utils in Claude Code?

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

How do I install Frappe Core Utils in Codex?

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

Can I use Frappe Core Utils 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-core-utils -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-core-utils, .gemini/skills/frappe-core-utils, .github/skills/frappe-core-utils and .opencode/skills/frappe-core-utils in your project.

What does Frappe Core Utils need to run?

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

Frappe Core Utils 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 Core Utils use?

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

What are the alternatives to Frappe Core Utils?

Skills that share tags, products or a category with Frappe Core Utils: PR Review Provider (yansongda/pay, 5.4k stars), Abp Authorization (abpframework/abp, 14k stars), Django Access Review (getsentry/skills, 1k stars) and Backend Dev Guidelines (litefuse/litefuse, 100 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Frappe Core Utils?

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