Espocrm Development
bobmatnyc/claude-mpm
Comprehensive guide for developing on EspoCRM - metadata-driven CRM with service layer architecture
A skill your agent uses when developing Dolibarr ERP/CRM code, working with database queries, or asking about Dolibarr best practices.
$ npx skills add Dolibarr/dolibarr --skill skill-doli-dev -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Dolibarr/dolibarr skill-doli-dev --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/Dolibarr/dolibarr.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/skill-doli-dev .claude/skills/skill-doli-dev && 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 "skill-doli-dev" agent skill from https://github.com/Dolibarr/dolibarr/tree/develop/.agents/skills/skill-doli-dev into .claude/skills/skill-doli-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-doli-dev", 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/Dolibarr/dolibarr/tree/develop/.agents/skills/skill-doli-devType 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 Dolibarr/dolibarr --skill skill-doli-dev -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Dolibarr/dolibarr skill-doli-dev --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dolibarr/dolibarr.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/skill-doli-dev .agents/skills/skill-doli-dev && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "skill-doli-dev" agent skill from https://github.com/Dolibarr/dolibarr/tree/develop/.agents/skills/skill-doli-dev into .agents/skills/skill-doli-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-doli-dev", 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 Dolibarr/dolibarr --skill skill-doli-dev -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Dolibarr/dolibarr skill-doli-dev --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dolibarr/dolibarr.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/skill-doli-dev .cursor/skills/skill-doli-dev && 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 "skill-doli-dev" agent skill from https://github.com/Dolibarr/dolibarr/tree/develop/.agents/skills/skill-doli-dev into .cursor/skills/skill-doli-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-doli-dev", 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/Dolibarr/dolibarr.git --path .agents/skills/skill-doli-dev--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 Dolibarr/dolibarr --skill skill-doli-dev -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Dolibarr/dolibarr skill-doli-dev --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dolibarr/dolibarr.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/skill-doli-dev .gemini/skills/skill-doli-dev && 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 "skill-doli-dev" agent skill from https://github.com/Dolibarr/dolibarr/tree/develop/.agents/skills/skill-doli-dev into .gemini/skills/skill-doli-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-doli-dev", 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 Dolibarr/dolibarr skill-doli-devInstalls 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 Dolibarr/dolibarr --skill skill-doli-dev -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Dolibarr/dolibarr.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/skill-doli-dev .github/skills/skill-doli-dev && 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 "skill-doli-dev" agent skill from https://github.com/Dolibarr/dolibarr/tree/develop/.agents/skills/skill-doli-dev into .github/skills/skill-doli-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-doli-dev", 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 Dolibarr/dolibarr --skill skill-doli-dev -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Dolibarr/dolibarr skill-doli-dev --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dolibarr/dolibarr.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/skill-doli-dev .opencode/skills/skill-doli-dev && 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 "skill-doli-dev" agent skill from https://github.com/Dolibarr/dolibarr/tree/develop/.agents/skills/skill-doli-dev into .opencode/skills/skill-doli-dev/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "skill-doli-dev", 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.
skill-doli-devA skill your agent uses when developing Dolibarr ERP/CRM code, working with database queries, or asking about Dolibarr best practices.
Skill Doli Dev is an agent skill from Dolibarr/dolibarr. Use when developing Dolibarr ERP/CRM code, working with database queries, or asking about Dolibarr best practices.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Sales & Support. It works with PHP. The repository describes itself as: Dolibarr ERP CRM is a modern software package to manage your company or foundation's activity (contacts, suppliers, invoices, orders, stocks, agenda, accounting, ...). it's an… The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 2472641. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
read_filewrite_filegrepbashFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
wiki.dolibarr.orgdolibarr.orgFrom 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.
Skill Doli Dev loads about 2.9k tokens when it runs. Until then it costs about 32 tokens; SKILL.md has 1,071 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 Dolibarr/dolibarr at commit 2472641, republished under its MIT licence (© Dolibarr). 1,071 words, ~2,902 tokens.
.claude/skills/skill-doli-dev/SKILL.md (or your agent's skills folder).This skill guides agents on developing, modifying, and debugging code within the Dolibarr ERP/CRM codebase while strictly adhering to professional standards, security guidelines, and the project's established architecture.
The instructions in this file are complementary to the instructions defined in AGENTS.md.
AGENTS.md contains the general instructions and rules for the project.SKILLS.md contains additional instructions specific to skills.SKILLS.md does not replace or override AGENTS.md.SKILLS.md conflicts with AGENTS.md, follow the rules defined by AGENTS.md.These principles must be followed even before reviewing specific task details. Violation of these principles results in failed suggestions.
$db or $this->db). Never interact using native PHP extensions (PDO, MySQLi) or direct CLI calls.GET/POST inputs immediately upon entering the action handler scope.$db->escape(). For integers, use explicit casting: ((int) $var); for floats, use (float) $var.$sqlWhereClause, $queryParams). This pattern helps static analysis tools detect unsafe assignments.phpcbf and phpcs).All properties and all function arguments and return value need detailed PHPDoc (e.g., array<string,array{key1?:?type,...}>).Variables expected to exist in view files require both a PHPDoc declaration and the use of '@phan-var-force'; declarations near the HEAD of the file for strict static analysis tracking.$sql_select, $actionSuffix). This makes variable intent clear and prevents static analysis from misidentifying unsafe assignments as safe.This section guides the agent through common development tasks.
pre-commit to run tools (php-cbf, php-cs, shellcheck, php-lint - example:pre-commit run php-cbf --files RELATIVEFILEPATH) when the git hook is installed as local direct installations differ across systems.git grep instead of find for searching the codebase. find searches all directories including .git which is very slow. Use:git grep -n "pattern" -- "*.php"
git grep -n "function_name" htdocs/core/lib/ -- "*.php"git grep -n across targeted directories for efficient, rapid code searches. Using $db->prefix() consistently is the first step in tracing data flows.htdocs/core/lib/ and htdocs/core/class/ to ensure similar methods or utilities are not already in use. Always check if the concern object extends CommonObject, favouring its built-in methods (fetch(), create(), update(), etc.).php <<'EOPHP'
<?php
error_reporting(E_ALL); ini_set('display_errors', 1);
require_once 'htdocs/master.inc.php'; // *NOT* main.inc.php
global $db;
$result = $db->query('SELECT * FROM ' . $db->prefix() . 'actioncomm');
print_r($result);
EOPHPhtdocs/modulebuilder/template/ as a definitive guide when initiating a new module or new pages.This details the preferred mechanical steps:
$db->query('SELECT ...') followed by fetching results using methods like $db->fetch_object().IMPORTANT: When working with extrafields (custom fields), follow these patterns from the Dolibarr Extrafields Wiki:
$object->fetch(); // CommonObject fetch loads its extrafields
// Access extrafield values via:
$field_copy = $object->array_options['options_FIELDNAME']Before calling $object->create() or $object->update(), ensure extrafields are set:
// For form submissions:
$ret = $extrafields->setOptionalsFromPost($extralabels, $object);
// For direct assignment:
$object->array_options['options_FIELDNAME'] = $value;
// Then call update() - it will automatically save extrafields via insertExtraFields()
$result = $object->update($user);In view pages:
print $object->array_options['options_FIELDNAME'];In edit pages:
$reshook = $hookmanager->executeHooks('formObjectOptions', $parameters, $object, $action);
if (empty($reshook) && !empty($extrafields->attribute_label)) {
print $object->showOptionals($extrafields, 'edit');
}Each CommonObject objecttype has its own extrafields table:
llx_{objecttype}_extrafields
- rowid (AUTO_INCREMENT PRIMARY KEY)
- tms (timestamp)
- fk_object (integer NOT NULL)
- import_key (varchar)Before proposing code:
This section contains detailed standards and constants for reference only. Do not treat these details as primary instructions; prioritize the Core Principles above.
dol_syslog() for logging (specifying log level), avoiding debugging functions like var_dump(), print_r(), or die().| Item | Action/Pattern | Example Usage Notes | Priority |
|---|---|---|---|
| Table Prefix | Always use dynamic prefix getter. | $db->prefix() . 'tablename' | Overrides reliance on legacy constants like MAIN_DB_PREFIX. |
$hookmanager->executeHooks('actionName', $parameters, $object, $action);MyModuleLabel) for consistency across all locales.$db, $conf, $lang, $user. Do not remove these without understanding the architectureDolibarr provides type-safe input handling functions. Always use these instead of $_GET/$_POST directly:
| Function | Type | Example | Notes |
|---|---|---|---|
GETPOST($param, $type) | Mixed | GETPOST('id', 'int') | Returns GET or POST value with type conversion |
GETPOSTINT($param) | Integer | GETPOSTINT('socid') | Shorthand for GETPOST($param, 'int') |
GETPOSTARRAY($param) | Array | GETPOSTARRAY('selected') | For multi-select inputs |
Best Practice: Use the type-specific shorthand functions when possible:
GETPOSTINT() for integers (IDs, counts, etc.)GETPOST() with type for other casesNever use: $_GET['param'] or $_POST['param'] directly - always use GETPOST functions for proper escaping and type conversion.
The ExtraFields class lacks a method to check if a field exists. Use this pattern:
global $db;
$extrafields = new ExtraFields($db);
$extralabels = $extrafields->fetch_name_optionals_label($elementtype);
// Tracking extrafields configuration
$my_fields = array(
'custom_name_1' => array(
'label' => 'CustomLabel1',
'type' => 'varchar',
'size' => '64',
'enabled' => '1'
),
'custom_name_2' => array(
'label' => 'CustomLabel2',
'type' => 'url',
'size' => '255',
'enabled' => '1'
),
);
foreach ($tracking_fields as $name => $config) {
// Check if extrafield exists, create if not
if (!isset($extralabels[$name])) {
// Naming the arguments to get help from static analysis
$pos = 0; // 0 = auto
$unique = 0;
$required = 0;
$default_value = '0';
$param = '';
$alwayseditable = 0;
$perms = '0';
$list = '0'; // '0' = never visible
$help = '';
$computed = '';
$entity = '';
$langfile = '';
$enabled = $config['enabled'];
$result = $extrafields->addExtraField(
$name,
$config['label'],
$config['type'],
$pos, // pos (0 = auto)
$config['size'],
$elementtype,
$unique, // unique
$required, // required
$default_value, // default_value
$param, // param
$alwayseditable,
$perms, // perms
$list, // list ('0' = never visible)
$help,
$computed,
$entity,
$langfile,
$enabled
);
}
}© Dolibarr, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/skill-doli-dev of Dolibarr/dolibarr.
Open the folder on GitHubat commit 2472641
Skill Doli Dev 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 |
|---|---|---|---|---|---|---|
| Skill Doli Dev this skillDolibarr/dolibarr | 7.7k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Espocrm Developmentbobmatnyc/claude-mpm | 155 | — | ~1.7k | Automated safety check: Pass | MIT | |
| Skeeks Cmsskeeks-cms/cms | 138 | — | ~4.4k | Automated safety check: Pass | BSD-3-Clause | |
| CCXT Crypto Exchange Library2025Emma/vibe-coding-cn | 23k | 2 repos | ~4.4k | Automated safety check: Pass | MIT | |
| Wp Performance Reviewelvismdev/claude-wordpress-skills | 235 | 1 repos | ~4.5k | Automated safety check: Pass | MIT | |
| Setting PricingGTM-Strategist/gtm-strategist-skills | 261 | — | ~5.4k | Automated safety check: Pass | MIT |
bobmatnyc/claude-mpm
Comprehensive guide for developing on EspoCRM - metadata-driven CRM with service layer architecture
skeeks-cms/cms
Develop SkeekS CMS/Yii PHP code and handle advanced or unfamiliar site content, AI-managed themes and HTML pages, shop, MCP, REST and OAuth2 workflows.
2025Emma/vibe-coding-cn
Reference help for the CCXT library covering crypto exchange APIs, market data, trading and order management across 150+ exchanges in JavaScript, Python and PHP.
elvismdev/claude-wordpress-skills
WordPress performance code review and optimization analysis.
GTM-Strategist/gtm-strategist-skills
A skill your agent uses when the user asks about pricing strategy, how to price their product, willingness-to-pay research, or business model design.
helsome/folio
Account assets, equity and fund positions, P&L, cash flow records, account statements, margin ratios, buy-power estimates, order management, and DCA recurring investments via Longbridge (most…
Dolibarr/dolibarr
Reviews Dolibarr PHP code for compliance with coding standards and security best practices, and fixes identified issues.
Dolibarr/dolibarr
A skill your agent uses when developing a Dolibarr ERP/CRM external module, working with database queries, or asking about Dolibarr best practices.
Dolibarr/dolibarr
Creates or modify PHP unit tests for Dolibarr ERP/CRM functions and methods.
Dolibarr/dolibarr
Create interactive PHP test case scripts for Dolibarr ERP/CRM that allow users to setup test data, view results via direct links, and tear down (clean up) the data.
Dolibarr/dolibarr
Create and maintain Hurl tests for Dolibarr ERP/CRM. An agent skill from Dolibarr/dolibarr.
Works with
Categories
A skill your agent uses when developing Dolibarr ERP/CRM code, working with database queries, or asking about Dolibarr best practices. Skill Doli Dev is an agent skill from Dolibarr/dolibarr. Use when developing Dolibarr ERP/CRM code, working with database queries, or asking about Dolibarr best practices.
Skill Doli Dev fits situations like: developing Dolibarr ERP/CRM code; working with database queries; asking about Dolibarr best practices.
Run `npx skills add Dolibarr/dolibarr --skill skill-doli-dev -a claude-code`. Or copy the skill folder (.agents/skills/skill-doli-dev in Dolibarr/dolibarr) into .claude/skills/skill-doli-dev in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Dolibarr/dolibarr --skill skill-doli-dev -a codex`. Or copy the skill folder (.agents/skills/skill-doli-dev in Dolibarr/dolibarr) into .agents/skills/skill-doli-dev 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 Dolibarr/dolibarr --skill skill-doli-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/skill-doli-dev, .gemini/skills/skill-doli-dev, .github/skills/skill-doli-dev and .opencode/skills/skill-doli-dev in your project.
Going by SKILL.md and its folder, Skill Doli Dev needs the command-line tools its instructions call (git). Its frontmatter pre-approves these tools: read_file, write_file, grep, bash.
SKILL.md names 2 domains. As links in the text: wiki.dolibarr.org and dolibarr.org. 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.
Skill Doli Dev is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k 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.
Skills that share tags, products or a category with Skill Doli Dev: Espocrm Development (bobmatnyc/claude-mpm, 155 stars), Skeeks Cms (skeeks-cms/cms, 138 stars), CCXT Crypto Exchange Library (2025Emma/vibe-coding-cn, 23k stars) and Wp Performance Review (elvismdev/claude-wordpress-skills, 235 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Dolibarr (a GitHub organization) maintains it in Dolibarr/dolibarr, which has 7,701 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 8, 2026.
Source: Dolibarr/dolibarr on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.